mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import {jest, expect, test, afterEach} from '@jest/globals'
2import AsyncStorage from '@react-native-async-storage/async-storage'
3
4import {defaults} from '#/state/persisted/schema'
5import {migrate} from '#/state/persisted/legacy'
6import * as store from '#/state/persisted/store'
7import * as persisted from '#/state/persisted'
8
9const write = jest.mocked(store.write)
10const read = jest.mocked(store.read)
11
12jest.mock('#/logger')
13jest.mock('#/state/persisted/legacy', () => ({
14 migrate: jest.fn(),
15}))
16jest.mock('#/state/persisted/store', () => ({
17 write: jest.fn(),
18 read: jest.fn(),
19}))
20
21afterEach(() => {
22 jest.useFakeTimers()
23 jest.clearAllMocks()
24 AsyncStorage.clear()
25})
26
27test('init: fresh install, no migration', async () => {
28 await persisted.init()
29
30 expect(migrate).toHaveBeenCalledTimes(1)
31 expect(read).toHaveBeenCalledTimes(1)
32 expect(write).toHaveBeenCalledWith(defaults)
33
34 // default value
35 expect(persisted.get('colorMode')).toBe('system')
36})
37
38test('init: fresh install, migration ran', async () => {
39 read.mockResolvedValueOnce(defaults)
40
41 await persisted.init()
42
43 expect(migrate).toHaveBeenCalledTimes(1)
44 expect(read).toHaveBeenCalledTimes(1)
45 expect(write).not.toHaveBeenCalled()
46
47 // default value
48 expect(persisted.get('colorMode')).toBe('system')
49})