forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import {describe, test} from '@jest/globals'
2
3import {
4 computeCompletedState,
5 syncCompletedState,
6} from '#/components/PolicyUpdateOverlay/usePolicyUpdateState'
7
8jest.mock('../../../state/queries/nuxs')
9
10describe('computeCompletedState', () => {
11 test(`initial state`, () => {
12 const completed = computeCompletedState({
13 nuxIsReady: false,
14 nuxIsCompleted: false,
15 nuxIsOptimisticallyCompleted: false,
16 completedForDevice: undefined,
17 })
18
19 expect(completed).toBe(true)
20 })
21
22 test(`nux loaded state`, () => {
23 const completed = computeCompletedState({
24 nuxIsReady: true,
25 nuxIsCompleted: false,
26 nuxIsOptimisticallyCompleted: false,
27 completedForDevice: undefined,
28 })
29
30 expect(completed).toBe(false)
31 })
32
33 test(`nux saving state`, () => {
34 const completed = computeCompletedState({
35 nuxIsReady: true,
36 nuxIsCompleted: false,
37 nuxIsOptimisticallyCompleted: true,
38 completedForDevice: undefined,
39 })
40
41 expect(completed).toBe(true)
42 })
43
44 test(`nux is completed`, () => {
45 const completed = computeCompletedState({
46 nuxIsReady: true,
47 nuxIsCompleted: true,
48 nuxIsOptimisticallyCompleted: false,
49 completedForDevice: undefined,
50 })
51
52 expect(completed).toBe(true)
53 })
54
55 test(`initial state, but already completed for device`, () => {
56 const completed = computeCompletedState({
57 nuxIsReady: false,
58 nuxIsCompleted: false,
59 nuxIsOptimisticallyCompleted: false,
60 completedForDevice: true,
61 })
62
63 expect(completed).toBe(true)
64 })
65})
66
67describe('syncCompletedState', () => {
68 describe('!nuxIsReady', () => {
69 test(`!completedForDevice, no-op`, () => {
70 const save = jest.fn()
71 const setCompletedForDevice = jest.fn()
72 syncCompletedState({
73 nuxIsReady: false,
74 nuxIsCompleted: false,
75 nuxIsOptimisticallyCompleted: false,
76 completedForDevice: false,
77 save,
78 setCompletedForDevice,
79 })
80
81 expect(save).not.toHaveBeenCalled()
82 expect(setCompletedForDevice).not.toHaveBeenCalled()
83 })
84
85 test(`completedForDevice, no-op`, () => {
86 const save = jest.fn()
87 const setCompletedForDevice = jest.fn()
88 syncCompletedState({
89 nuxIsReady: false,
90 nuxIsCompleted: false,
91 nuxIsOptimisticallyCompleted: false,
92 completedForDevice: true,
93 save,
94 setCompletedForDevice,
95 })
96
97 expect(save).not.toHaveBeenCalled()
98 expect(setCompletedForDevice).not.toHaveBeenCalled()
99 })
100 })
101
102 describe('nuxIsReady', () => {
103 describe(`!nuxIsCompleted`, () => {
104 describe(`!nuxIsOptimisticallyCompleted`, () => {
105 test(`!completedForDevice, no-op`, () => {
106 const save = jest.fn()
107 const setCompletedForDevice = jest.fn()
108 syncCompletedState({
109 nuxIsReady: true,
110 nuxIsCompleted: false,
111 nuxIsOptimisticallyCompleted: false,
112 completedForDevice: false,
113 save,
114 setCompletedForDevice,
115 })
116
117 expect(save).not.toHaveBeenCalled()
118 expect(setCompletedForDevice).not.toHaveBeenCalled()
119 })
120
121 test(`completedForDevice, syncs to server`, () => {
122 const save = jest.fn()
123 const setCompletedForDevice = jest.fn()
124 syncCompletedState({
125 nuxIsReady: true,
126 nuxIsCompleted: false,
127 nuxIsOptimisticallyCompleted: false,
128 completedForDevice: true,
129 save,
130 setCompletedForDevice,
131 })
132
133 expect(save).toHaveBeenCalled()
134 expect(setCompletedForDevice).not.toHaveBeenCalled()
135 })
136 })
137
138 /**
139 * Catches the case where we already called `save` to sync device state
140 * to server, thus `nuxIsOptimisticallyCompleted` is true.
141 */
142 describe(`nuxIsOptimisticallyCompleted`, () => {
143 test(`completedForDevice, no-op`, () => {
144 const save = jest.fn()
145 const setCompletedForDevice = jest.fn()
146 syncCompletedState({
147 nuxIsReady: true,
148 nuxIsCompleted: false,
149 nuxIsOptimisticallyCompleted: true,
150 completedForDevice: true,
151 save,
152 setCompletedForDevice,
153 })
154
155 expect(save).not.toHaveBeenCalled()
156 expect(setCompletedForDevice).not.toHaveBeenCalled()
157 })
158 })
159 })
160
161 describe(`nuxIsCompleted`, () => {
162 test(`!completedForDevice, syncs to device`, () => {
163 const save = jest.fn()
164 const setCompletedForDevice = jest.fn()
165 syncCompletedState({
166 nuxIsReady: true,
167 nuxIsCompleted: true,
168 nuxIsOptimisticallyCompleted: false,
169 completedForDevice: false,
170 save,
171 setCompletedForDevice,
172 })
173
174 expect(save).not.toHaveBeenCalled()
175 expect(setCompletedForDevice).toHaveBeenCalled()
176 })
177
178 test(`completedForDevice, no-op`, () => {
179 const save = jest.fn()
180 const setCompletedForDevice = jest.fn()
181 syncCompletedState({
182 nuxIsReady: true,
183 nuxIsCompleted: true,
184 nuxIsOptimisticallyCompleted: false,
185 completedForDevice: true,
186 save,
187 setCompletedForDevice,
188 })
189
190 expect(save).not.toHaveBeenCalled()
191 expect(setCompletedForDevice).not.toHaveBeenCalled()
192 })
193 })
194 })
195})