about summary refs log tree commit diff
path: root/jest
diff options
context:
space:
mode:
authorJoão Ferreiro <ferreiro@pinkroom.dev>2022-12-22 15:32:39 +0000
committerGitHub <noreply@github.com>2022-12-22 09:32:39 -0600
commit7517b65dcd676f36d38f31c991929c32168b3e12 (patch)
tree65793d2575b205365c2997b4bbddc1ba6424d2ba /jest
parent4913a07e3365d2004e67e9131dd4b4c15094dd33 (diff)
downloadvoidsky-7517b65dcd676f36d38f31c991929c32168b3e12.tar.zst
Unit testing (#32)
* add testing lib

* remove coverage folder from git

* finished basic test setup

* fix tests typescript and import paths

* add first snapshot

* testing utils

* rename test files; update script flags; ++tests

* testing utils functions

* testing downloadAndResize wip

* remove download test

* specify unwanted coverage paths;
remove update snapshots flag

* fix strings tests

* testing downloadAndResize method

* increasing testing

* fixing snapshots wip

* fixed shell mobile snapshot

* adding snapshots for the screens

* fix onboard snapshot

* fix typescript issues

* fix TabsSelector snapshot

* Account for testing device's locale in ago() tests

* Remove platform detection on regex

Co-authored-by: Paul Frazee <pfrazee@gmail.com>
Diffstat (limited to 'jest')
-rw-r--r--jest/jestSetup.js39
-rw-r--r--jest/test-utils.tsx32
2 files changed, 71 insertions, 0 deletions
diff --git a/jest/jestSetup.js b/jest/jestSetup.js
new file mode 100644
index 000000000..7a2f10d2d
--- /dev/null
+++ b/jest/jestSetup.js
@@ -0,0 +1,39 @@
+jest.mock('@react-native-async-storage/async-storage', () =>
+  require('@react-native-async-storage/async-storage/jest/async-storage-mock'),
+)
+jest.mock('react-native/Libraries/EventEmitter/NativeEventEmitter')
+
+jest.mock('@fortawesome/react-native-fontawesome', () => ({
+  FontAwesomeIcon: '',
+}))
+
+require('react-native-reanimated/lib/reanimated2/jestUtils').setUpTests()
+
+// Silence the warning: Animated: `useNativeDriver` is not supported
+jest.mock('react-native/Libraries/Animated/NativeAnimatedHelper')
+
+jest.mock('react-native-safe-area-context', () => {
+  const inset = {top: 0, right: 0, bottom: 0, left: 0}
+  return {
+    SafeAreaProvider: jest.fn().mockImplementation(({children}) => children),
+    SafeAreaConsumer: jest
+      .fn()
+      .mockImplementation(({children}) => children(inset)),
+    useSafeAreaInsets: jest.fn().mockImplementation(() => inset),
+  }
+})
+
+jest.mock('@gorhom/bottom-sheet', () => {
+  const react = require('react-native')
+  return {
+    __esModule: true,
+    default: react.View,
+    namedExport: {
+      ...require('react-native-reanimated/mock'),
+      ...jest.requireActual('@gorhom/bottom-sheet'),
+      BottomSheetFlatList: react.FlatList,
+    },
+  }
+})
+
+jest.useFakeTimers()
diff --git a/jest/test-utils.tsx b/jest/test-utils.tsx
new file mode 100644
index 000000000..a5946ed06
--- /dev/null
+++ b/jest/test-utils.tsx
@@ -0,0 +1,32 @@
+import React from 'react'
+import RN from 'react-native'
+import {render} from '@testing-library/react-native'
+import {GestureHandlerRootView} from 'react-native-gesture-handler'
+import {RootSiblingParent} from 'react-native-root-siblings'
+import {SafeAreaProvider} from 'react-native-safe-area-context'
+import {DEFAULT_SERVICE, RootStoreModel, RootStoreProvider} from '../src/state'
+import {SessionServiceClient} from '../src/third-party/api/src'
+import {sessionClient as AtpApi} from '../src/third-party/api'
+
+const WrappedComponent = ({children}: any) => {
+  const api = AtpApi.service(DEFAULT_SERVICE) as SessionServiceClient
+  const rootStore = new RootStoreModel(api)
+  return (
+    <GestureHandlerRootView style={{flex: 1}}>
+      <RootSiblingParent>
+        <RootStoreProvider value={rootStore}>
+          <SafeAreaProvider>{children}</SafeAreaProvider>
+        </RootStoreProvider>
+      </RootSiblingParent>
+    </GestureHandlerRootView>
+  )
+}
+
+const customRender = (ui: any, options?: any) =>
+  render(ui, {wrapper: WrappedComponent, ...options})
+
+// re-export everything
+export * from '@testing-library/react-native'
+
+// override render method
+export {customRender as render}