about summary refs log tree commit diff
path: root/src/state/persisted/__tests__/index.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/persisted/__tests__/index.test.ts')
-rw-r--r--src/state/persisted/__tests__/index.test.ts49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/state/persisted/__tests__/index.test.ts b/src/state/persisted/__tests__/index.test.ts
new file mode 100644
index 000000000..90c5e0e4e
--- /dev/null
+++ b/src/state/persisted/__tests__/index.test.ts
@@ -0,0 +1,49 @@
+import {jest, expect, test, afterEach} from '@jest/globals'
+import AsyncStorage from '@react-native-async-storage/async-storage'
+
+import {defaults} from '#/state/persisted/schema'
+import {migrate} from '#/state/persisted/legacy'
+import * as store from '#/state/persisted/store'
+import * as persisted from '#/state/persisted'
+
+const write = jest.mocked(store.write)
+const read = jest.mocked(store.read)
+
+jest.mock('#/logger')
+jest.mock('#/state/persisted/legacy', () => ({
+  migrate: jest.fn(),
+}))
+jest.mock('#/state/persisted/store', () => ({
+  write: jest.fn(),
+  read: jest.fn(),
+}))
+
+afterEach(() => {
+  jest.useFakeTimers()
+  jest.clearAllMocks()
+  AsyncStorage.clear()
+})
+
+test('init: fresh install, no migration', async () => {
+  await persisted.init()
+
+  expect(migrate).toHaveBeenCalledTimes(1)
+  expect(read).toHaveBeenCalledTimes(1)
+  expect(write).toHaveBeenCalledWith(defaults)
+
+  // default value
+  expect(persisted.get('colorMode')).toBe('system')
+})
+
+test('init: fresh install, migration ran', async () => {
+  read.mockResolvedValueOnce(defaults)
+
+  await persisted.init()
+
+  expect(migrate).toHaveBeenCalledTimes(1)
+  expect(read).toHaveBeenCalledTimes(1)
+  expect(write).not.toHaveBeenCalled()
+
+  // default value
+  expect(persisted.get('colorMode')).toBe('system')
+})