@youversion/platform-react-hooks 1.18.1 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/AGENTS.md +3 -7
  3. package/CHANGELOG.md +32 -0
  4. package/dist/__tests__/mocks/bibles.d.ts +6 -1
  5. package/dist/__tests__/mocks/bibles.d.ts.map +1 -1
  6. package/dist/__tests__/mocks/bibles.js +10 -0
  7. package/dist/__tests__/mocks/bibles.js.map +1 -1
  8. package/dist/__tests__/mocks/core-mock-factory.d.ts +83 -0
  9. package/dist/__tests__/mocks/core-mock-factory.d.ts.map +1 -0
  10. package/dist/__tests__/mocks/core-mock-factory.js +138 -0
  11. package/dist/__tests__/mocks/core-mock-factory.js.map +1 -0
  12. package/dist/context/ReaderContext.d.ts +6 -0
  13. package/dist/context/ReaderContext.d.ts.map +1 -1
  14. package/dist/context/ReaderContext.js +6 -0
  15. package/dist/context/ReaderContext.js.map +1 -1
  16. package/dist/context/ReaderProvider.d.ts +3 -0
  17. package/dist/context/ReaderProvider.d.ts.map +1 -1
  18. package/dist/context/ReaderProvider.js +3 -0
  19. package/dist/context/ReaderProvider.js.map +1 -1
  20. package/dist/context/VerseSelectionContext.d.ts +6 -0
  21. package/dist/context/VerseSelectionContext.d.ts.map +1 -1
  22. package/dist/context/VerseSelectionContext.js +3 -0
  23. package/dist/context/VerseSelectionContext.js.map +1 -1
  24. package/dist/context/VerseSelectionProvider.d.ts +3 -0
  25. package/dist/context/VerseSelectionProvider.d.ts.map +1 -1
  26. package/dist/context/VerseSelectionProvider.js +3 -0
  27. package/dist/context/VerseSelectionProvider.js.map +1 -1
  28. package/dist/test/utils.d.ts +7 -0
  29. package/dist/test/utils.d.ts.map +1 -0
  30. package/dist/test/utils.js +7 -0
  31. package/dist/test/utils.js.map +1 -0
  32. package/dist/useChapterNavigation.d.ts +3 -0
  33. package/dist/useChapterNavigation.d.ts.map +1 -1
  34. package/dist/useChapterNavigation.js +3 -0
  35. package/dist/useChapterNavigation.js.map +1 -1
  36. package/dist/useInitData.d.ts +4 -0
  37. package/dist/useInitData.d.ts.map +1 -1
  38. package/dist/useInitData.js +4 -0
  39. package/dist/useInitData.js.map +1 -1
  40. package/dist/useVerseSelection.d.ts +3 -0
  41. package/dist/useVerseSelection.d.ts.map +1 -1
  42. package/dist/useVerseSelection.js +3 -0
  43. package/dist/useVerseSelection.js.map +1 -1
  44. package/package.json +2 -2
  45. package/src/__tests__/mocks/bibles.ts +18 -1
  46. package/src/__tests__/mocks/core-mock-factory.ts +226 -0
  47. package/src/context/ReaderContext.tsx +6 -0
  48. package/src/context/ReaderProvider.tsx +3 -0
  49. package/src/context/VerseSelectionContext.tsx +6 -0
  50. package/src/context/VerseSelectionProvider.tsx +3 -0
  51. package/src/context/YouVersionAuthProvider.test.tsx +14 -131
  52. package/src/test/utils.tsx +12 -0
  53. package/src/useBibleClient.test.tsx +8 -37
  54. package/src/useBook.test.tsx +158 -0
  55. package/src/useBooks.test.tsx +148 -0
  56. package/src/useChapter.test.tsx +70 -128
  57. package/src/useChapterNavigation.ts +3 -0
  58. package/src/useChapters.test.tsx +80 -150
  59. package/src/useHighlights.test.tsx +33 -104
  60. package/src/useInitData.ts +4 -0
  61. package/src/useLanguage.test.tsx +8 -10
  62. package/src/useLanguageClient.test.tsx +9 -25
  63. package/src/useLanguages.test.tsx +27 -64
  64. package/src/usePassage.test.tsx +304 -0
  65. package/src/useTheme.test.tsx +32 -0
  66. package/src/useVOTD.test.tsx +28 -67
  67. package/src/useVerse.test.tsx +73 -149
  68. package/src/useVerseSelection.ts +3 -0
  69. package/src/useVerses.test.tsx +37 -104
  70. package/src/useVersion.test.tsx +29 -66
  71. package/src/useVersions.test.tsx +72 -154
  72. package/src/useYVAuth.test.tsx +26 -134
  73. package/src/utility/getDayOfYear.test.ts +48 -0
  74. package/vitest.config.ts +12 -0
  75. package/src/context/ReaderProvider.test.tsx +0 -264
  76. package/src/context/VerseSelectionProvider.test.tsx +0 -362
  77. package/src/useChapterNavigation.test.tsx +0 -160
  78. package/src/useVerseSelection.test.tsx +0 -33
  79. package/vitest.setup.ts +0 -1
@@ -1,15 +1,13 @@
1
1
  import { renderHook, waitFor, act } from '@testing-library/react';
2
- import { describe, it, expect, vi, beforeEach } from 'vitest';
3
- import type { ReactNode } from 'react';
2
+ import { describe, expect, vi, beforeEach, it } from 'vitest';
4
3
  import { useVersions } from './useVersions';
5
- import { YouVersionContext } from './context';
6
4
  import { type BibleClient, type Collection, type BibleVersion } from '@youversion/platform-core';
7
5
  import { useBibleClient } from './useBibleClient';
6
+ import { createYVWrapper } from './test/utils';
8
7
 
9
8
  vi.mock('./useBibleClient');
10
9
 
11
10
  describe('useVersions', () => {
12
- const mockAppKey = 'test-app-key';
13
11
  const mockGetVersions = vi.fn();
14
12
 
15
13
  const mockVersions: Collection<BibleVersion> = {
@@ -38,15 +36,7 @@ describe('useVersions', () => {
38
36
  next_page_token: null,
39
37
  };
40
38
 
41
- const createWrapper = (contextValue: { appKey: string }) => {
42
- return ({ children }: { children: ReactNode }) => (
43
- <YouVersionContext.Provider value={contextValue}>{children}</YouVersionContext.Provider>
44
- );
45
- };
46
-
47
39
  beforeEach(() => {
48
- vi.resetAllMocks();
49
-
50
40
  mockGetVersions.mockResolvedValue(mockVersions);
51
41
 
52
42
  const mockClient: Partial<BibleClient> = { getVersions: mockGetVersions };
@@ -55,10 +45,7 @@ describe('useVersions', () => {
55
45
 
56
46
  describe('fetching versions', () => {
57
47
  it('should fetch versions with default language range', async () => {
58
- const wrapper = createWrapper({
59
- appKey: mockAppKey,
60
- });
61
-
48
+ const wrapper = createYVWrapper();
62
49
  const { result } = renderHook(() => useVersions(), { wrapper });
63
50
 
64
51
  expect(result.current.loading).toBe(true);
@@ -68,60 +55,48 @@ describe('useVersions', () => {
68
55
  expect(result.current.loading).toBe(false);
69
56
  });
70
57
 
71
- expect(mockGetVersions).toHaveBeenCalledWith('en', undefined, undefined);
72
- expect(result.current.versions).toEqual(mockVersions);
58
+ expect.soft(mockGetVersions).toHaveBeenCalledWith('en', undefined, undefined);
59
+ expect.soft(result.current.versions).toEqual(mockVersions);
73
60
  });
74
61
 
75
62
  it('should fetch versions with custom language range string', async () => {
76
- const wrapper = createWrapper({
77
- appKey: mockAppKey,
78
- });
79
-
63
+ const wrapper = createYVWrapper();
80
64
  const { result } = renderHook(() => useVersions('es'), { wrapper });
81
65
 
82
66
  await waitFor(() => {
83
67
  expect(result.current.loading).toBe(false);
84
68
  });
85
69
 
86
- expect(mockGetVersions).toHaveBeenCalledWith('es', undefined, undefined);
87
- expect(result.current.versions).toEqual(mockVersions);
70
+ expect.soft(mockGetVersions).toHaveBeenCalledWith('es', undefined, undefined);
71
+ expect.soft(result.current.versions).toEqual(mockVersions);
88
72
  });
89
73
 
90
74
  it('should fetch versions with language range array', async () => {
91
- const wrapper = createWrapper({
92
- appKey: mockAppKey,
93
- });
94
-
75
+ const wrapper = createYVWrapper();
95
76
  const { result } = renderHook(() => useVersions(['en', 'es', 'fr']), { wrapper });
96
77
 
97
78
  await waitFor(() => {
98
79
  expect(result.current.loading).toBe(false);
99
80
  });
100
81
 
101
- expect(mockGetVersions).toHaveBeenCalledWith(['en', 'es', 'fr'], undefined, undefined);
102
- expect(result.current.versions).toEqual(mockVersions);
82
+ expect.soft(mockGetVersions).toHaveBeenCalledWith(['en', 'es', 'fr'], undefined, undefined);
83
+ expect.soft(result.current.versions).toEqual(mockVersions);
103
84
  });
104
85
 
105
86
  it('should fetch versions with license ID', async () => {
106
- const wrapper = createWrapper({
107
- appKey: mockAppKey,
108
- });
109
-
87
+ const wrapper = createYVWrapper();
110
88
  const { result } = renderHook(() => useVersions('en', 123), { wrapper });
111
89
 
112
90
  await waitFor(() => {
113
91
  expect(result.current.loading).toBe(false);
114
92
  });
115
93
 
116
- expect(mockGetVersions).toHaveBeenCalledWith('en', 123, undefined);
117
- expect(result.current.versions).toEqual(mockVersions);
94
+ expect.soft(mockGetVersions).toHaveBeenCalledWith('en', 123, undefined);
95
+ expect.soft(result.current.versions).toEqual(mockVersions);
118
96
  });
119
97
 
120
98
  it('should fetch versions with string license ID', async () => {
121
- const wrapper = createWrapper({
122
- appKey: mockAppKey,
123
- });
124
-
99
+ const wrapper = createYVWrapper();
125
100
  const { result } = renderHook(() => useVersions('en', 'license-abc'), { wrapper });
126
101
 
127
102
  await waitFor(() => {
@@ -134,10 +109,7 @@ describe('useVersions', () => {
134
109
 
135
110
  describe('fetching with options', () => {
136
111
  it('should fetch versions with page_size option', async () => {
137
- const wrapper = createWrapper({
138
- appKey: mockAppKey,
139
- });
140
-
112
+ const wrapper = createYVWrapper();
141
113
  const { result } = renderHook(() => useVersions('en', undefined, { page_size: 10 }), {
142
114
  wrapper,
143
115
  });
@@ -155,10 +127,7 @@ describe('useVersions', () => {
155
127
  });
156
128
 
157
129
  it('should fetch versions with page_size "*" and fields', async () => {
158
- const wrapper = createWrapper({
159
- appKey: mockAppKey,
160
- });
161
-
130
+ const wrapper = createYVWrapper();
162
131
  const { result } = renderHook(
163
132
  () => useVersions('en', undefined, { page_size: '*', fields: ['id', 'abbreviation'] }),
164
133
  { wrapper },
@@ -177,10 +146,7 @@ describe('useVersions', () => {
177
146
  });
178
147
 
179
148
  it('should fetch versions with page_token option', async () => {
180
- const wrapper = createWrapper({
181
- appKey: mockAppKey,
182
- });
183
-
149
+ const wrapper = createYVWrapper();
184
150
  const { result } = renderHook(
185
151
  () => useVersions('en', undefined, { page_token: 'next-page-token' }),
186
152
  { wrapper },
@@ -199,10 +165,7 @@ describe('useVersions', () => {
199
165
  });
200
166
 
201
167
  it('should fetch versions with fields option', async () => {
202
- const wrapper = createWrapper({
203
- appKey: mockAppKey,
204
- });
205
-
168
+ const wrapper = createYVWrapper();
206
169
  const { result } = renderHook(
207
170
  () => useVersions('en', undefined, { fields: ['id', 'title', 'abbreviation'] }),
208
171
  { wrapper },
@@ -221,10 +184,7 @@ describe('useVersions', () => {
221
184
  });
222
185
 
223
186
  it('should fetch versions with all_available option', async () => {
224
- const wrapper = createWrapper({
225
- appKey: mockAppKey,
226
- });
227
-
187
+ const wrapper = createYVWrapper();
228
188
  const { result } = renderHook(() => useVersions('en', undefined, { all_available: true }), {
229
189
  wrapper,
230
190
  });
@@ -242,10 +202,7 @@ describe('useVersions', () => {
242
202
  });
243
203
 
244
204
  it('should fetch versions with all options combined', async () => {
245
- const wrapper = createWrapper({
246
- appKey: mockAppKey,
247
- });
248
-
205
+ const wrapper = createYVWrapper();
249
206
  const { result } = renderHook(
250
207
  () =>
251
208
  useVersions('en', 456, {
@@ -272,10 +229,7 @@ describe('useVersions', () => {
272
229
 
273
230
  describe('refetch behavior', () => {
274
231
  it('should refetch when languageRanges changes', async () => {
275
- const wrapper = createWrapper({
276
- appKey: mockAppKey,
277
- });
278
-
232
+ const wrapper = createYVWrapper();
279
233
  const { result, rerender } = renderHook(({ lang }) => useVersions(lang), {
280
234
  wrapper,
281
235
  initialProps: { lang: 'en' as string | string[] },
@@ -285,8 +239,8 @@ describe('useVersions', () => {
285
239
  expect(result.current.loading).toBe(false);
286
240
  });
287
241
 
288
- expect(mockGetVersions).toHaveBeenCalledTimes(1);
289
- expect(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', undefined, undefined);
242
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(1);
243
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', undefined, undefined);
290
244
 
291
245
  rerender({ lang: 'es' });
292
246
 
@@ -294,15 +248,12 @@ describe('useVersions', () => {
294
248
  expect(result.current.loading).toBe(false);
295
249
  });
296
250
 
297
- expect(mockGetVersions).toHaveBeenCalledTimes(2);
298
- expect(mockGetVersions).toHaveBeenNthCalledWith(2, 'es', undefined, undefined);
251
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(2);
252
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(2, 'es', undefined, undefined);
299
253
  });
300
254
 
301
255
  it('should refetch when languageRanges array changes', async () => {
302
- const wrapper = createWrapper({
303
- appKey: mockAppKey,
304
- });
305
-
256
+ const wrapper = createYVWrapper();
306
257
  const { result, rerender } = renderHook(({ lang }) => useVersions(lang), {
307
258
  wrapper,
308
259
  initialProps: { lang: ['en', 'es'] as string | string[] },
@@ -312,8 +263,8 @@ describe('useVersions', () => {
312
263
  expect(result.current.loading).toBe(false);
313
264
  });
314
265
 
315
- expect(mockGetVersions).toHaveBeenCalledTimes(1);
316
- expect(mockGetVersions).toHaveBeenNthCalledWith(1, ['en', 'es'], undefined, undefined);
266
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(1);
267
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(1, ['en', 'es'], undefined, undefined);
317
268
 
318
269
  rerender({ lang: ['en', 'fr'] });
319
270
 
@@ -321,15 +272,12 @@ describe('useVersions', () => {
321
272
  expect(result.current.loading).toBe(false);
322
273
  });
323
274
 
324
- expect(mockGetVersions).toHaveBeenCalledTimes(2);
325
- expect(mockGetVersions).toHaveBeenNthCalledWith(2, ['en', 'fr'], undefined, undefined);
275
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(2);
276
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(2, ['en', 'fr'], undefined, undefined);
326
277
  });
327
278
 
328
279
  it('should refetch when licenseId changes', async () => {
329
- const wrapper = createWrapper({
330
- appKey: mockAppKey,
331
- });
332
-
280
+ const wrapper = createYVWrapper();
333
281
  const { result, rerender } = renderHook(({ license }) => useVersions('en', license), {
334
282
  wrapper,
335
283
  initialProps: { license: 123 as string | number | undefined },
@@ -339,8 +287,8 @@ describe('useVersions', () => {
339
287
  expect(result.current.loading).toBe(false);
340
288
  });
341
289
 
342
- expect(mockGetVersions).toHaveBeenCalledTimes(1);
343
- expect(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', 123, undefined);
290
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(1);
291
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', 123, undefined);
344
292
 
345
293
  rerender({ license: 456 });
346
294
 
@@ -348,15 +296,12 @@ describe('useVersions', () => {
348
296
  expect(result.current.loading).toBe(false);
349
297
  });
350
298
 
351
- expect(mockGetVersions).toHaveBeenCalledTimes(2);
352
- expect(mockGetVersions).toHaveBeenNthCalledWith(2, 'en', 456, undefined);
299
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(2);
300
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(2, 'en', 456, undefined);
353
301
  });
354
302
 
355
303
  it('should refetch when page_size changes', async () => {
356
- const wrapper = createWrapper({
357
- appKey: mockAppKey,
358
- });
359
-
304
+ const wrapper = createYVWrapper();
360
305
  const { result, rerender } = renderHook(
361
306
  ({ options }) => useVersions('en', undefined, options),
362
307
  {
@@ -369,8 +314,8 @@ describe('useVersions', () => {
369
314
  expect(result.current.loading).toBe(false);
370
315
  });
371
316
 
372
- expect(mockGetVersions).toHaveBeenCalledTimes(1);
373
- expect(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', undefined, {
317
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(1);
318
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', undefined, {
374
319
  page_size: 10,
375
320
  page_token: undefined,
376
321
  fields: undefined,
@@ -383,8 +328,8 @@ describe('useVersions', () => {
383
328
  expect(result.current.loading).toBe(false);
384
329
  });
385
330
 
386
- expect(mockGetVersions).toHaveBeenCalledTimes(2);
387
- expect(mockGetVersions).toHaveBeenNthCalledWith(2, 'en', undefined, {
331
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(2);
332
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(2, 'en', undefined, {
388
333
  page_size: 20,
389
334
  page_token: undefined,
390
335
  fields: undefined,
@@ -393,10 +338,7 @@ describe('useVersions', () => {
393
338
  });
394
339
 
395
340
  it('should refetch when page_token changes', async () => {
396
- const wrapper = createWrapper({
397
- appKey: mockAppKey,
398
- });
399
-
341
+ const wrapper = createYVWrapper();
400
342
  const { result, rerender } = renderHook(
401
343
  ({ options }) => useVersions('en', undefined, options),
402
344
  {
@@ -409,8 +351,8 @@ describe('useVersions', () => {
409
351
  expect(result.current.loading).toBe(false);
410
352
  });
411
353
 
412
- expect(mockGetVersions).toHaveBeenCalledTimes(1);
413
- expect(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', undefined, {
354
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(1);
355
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', undefined, {
414
356
  page_size: undefined,
415
357
  page_token: 'token-1',
416
358
  fields: undefined,
@@ -423,8 +365,8 @@ describe('useVersions', () => {
423
365
  expect(result.current.loading).toBe(false);
424
366
  });
425
367
 
426
- expect(mockGetVersions).toHaveBeenCalledTimes(2);
427
- expect(mockGetVersions).toHaveBeenNthCalledWith(2, 'en', undefined, {
368
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(2);
369
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(2, 'en', undefined, {
428
370
  page_size: undefined,
429
371
  page_token: 'token-2',
430
372
  fields: undefined,
@@ -433,10 +375,7 @@ describe('useVersions', () => {
433
375
  });
434
376
 
435
377
  it('should refetch when fields changes', async () => {
436
- const wrapper = createWrapper({
437
- appKey: mockAppKey,
438
- });
439
-
378
+ const wrapper = createYVWrapper();
440
379
  const { result, rerender } = renderHook(
441
380
  ({ options }) => useVersions('en', undefined, options),
442
381
  {
@@ -449,8 +388,8 @@ describe('useVersions', () => {
449
388
  expect(result.current.loading).toBe(false);
450
389
  });
451
390
 
452
- expect(mockGetVersions).toHaveBeenCalledTimes(1);
453
- expect(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', undefined, {
391
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(1);
392
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', undefined, {
454
393
  page_size: undefined,
455
394
  page_token: undefined,
456
395
  fields: ['id'],
@@ -463,8 +402,8 @@ describe('useVersions', () => {
463
402
  expect(result.current.loading).toBe(false);
464
403
  });
465
404
 
466
- expect(mockGetVersions).toHaveBeenCalledTimes(2);
467
- expect(mockGetVersions).toHaveBeenNthCalledWith(2, 'en', undefined, {
405
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(2);
406
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(2, 'en', undefined, {
468
407
  page_size: undefined,
469
408
  page_token: undefined,
470
409
  fields: ['id', 'title'],
@@ -473,10 +412,7 @@ describe('useVersions', () => {
473
412
  });
474
413
 
475
414
  it('should refetch when all_available changes', async () => {
476
- const wrapper = createWrapper({
477
- appKey: mockAppKey,
478
- });
479
-
415
+ const wrapper = createYVWrapper();
480
416
  const { result, rerender } = renderHook(
481
417
  ({ options }) => useVersions('en', undefined, options),
482
418
  {
@@ -489,8 +425,8 @@ describe('useVersions', () => {
489
425
  expect(result.current.loading).toBe(false);
490
426
  });
491
427
 
492
- expect(mockGetVersions).toHaveBeenCalledTimes(1);
493
- expect(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', undefined, {
428
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(1);
429
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', undefined, {
494
430
  page_size: undefined,
495
431
  page_token: undefined,
496
432
  fields: undefined,
@@ -503,8 +439,8 @@ describe('useVersions', () => {
503
439
  expect(result.current.loading).toBe(false);
504
440
  });
505
441
 
506
- expect(mockGetVersions).toHaveBeenCalledTimes(2);
507
- expect(mockGetVersions).toHaveBeenNthCalledWith(2, 'en', undefined, {
442
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(2);
443
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(2, 'en', undefined, {
508
444
  page_size: undefined,
509
445
  page_token: undefined,
510
446
  fields: undefined,
@@ -515,10 +451,7 @@ describe('useVersions', () => {
515
451
 
516
452
  describe('enabled option', () => {
517
453
  it('should not fetch when enabled is false', async () => {
518
- const wrapper = createWrapper({
519
- appKey: mockAppKey,
520
- });
521
-
454
+ const wrapper = createYVWrapper();
522
455
  const { result } = renderHook(() => useVersions('en', undefined, { enabled: false }), {
523
456
  wrapper,
524
457
  });
@@ -527,15 +460,12 @@ describe('useVersions', () => {
527
460
  expect(result.current.loading).toBe(false);
528
461
  });
529
462
 
530
- expect(mockGetVersions).not.toHaveBeenCalled();
531
- expect(result.current.versions).toBe(null);
463
+ expect.soft(mockGetVersions).not.toHaveBeenCalled();
464
+ expect.soft(result.current.versions).toBe(null);
532
465
  });
533
466
 
534
467
  it('should fetch when enabled is true', async () => {
535
- const wrapper = createWrapper({
536
- appKey: mockAppKey,
537
- });
538
-
468
+ const wrapper = createYVWrapper();
539
469
  const { result } = renderHook(() => useVersions('en', undefined, { enabled: true }), {
540
470
  wrapper,
541
471
  });
@@ -544,15 +474,12 @@ describe('useVersions', () => {
544
474
  expect(result.current.loading).toBe(false);
545
475
  });
546
476
 
547
- expect(mockGetVersions).toHaveBeenCalled();
548
- expect(result.current.versions).toEqual(mockVersions);
477
+ expect.soft(mockGetVersions).toHaveBeenCalled();
478
+ expect.soft(result.current.versions).toEqual(mockVersions);
549
479
  });
550
480
 
551
481
  it('should fetch when enabled is not specified', async () => {
552
- const wrapper = createWrapper({
553
- appKey: mockAppKey,
554
- });
555
-
482
+ const wrapper = createYVWrapper();
556
483
  const { result } = renderHook(() => useVersions('en', undefined, { page_size: 10 }), {
557
484
  wrapper,
558
485
  });
@@ -567,31 +494,25 @@ describe('useVersions', () => {
567
494
 
568
495
  describe('error handling', () => {
569
496
  it('should handle fetch errors', async () => {
497
+ const wrapper = createYVWrapper();
570
498
  const error = new Error('Failed to fetch versions');
571
499
  mockGetVersions.mockRejectedValueOnce(error);
572
500
 
573
- const wrapper = createWrapper({
574
- appKey: mockAppKey,
575
- });
576
-
577
501
  const { result } = renderHook(() => useVersions('en'), { wrapper });
578
502
 
579
503
  await waitFor(() => {
580
504
  expect(result.current.loading).toBe(false);
581
505
  });
582
506
 
583
- expect(result.current.error).toEqual(error);
584
- expect(result.current.versions).toBe(null);
507
+ expect.soft(result.current.error).toEqual(error);
508
+ expect.soft(result.current.versions).toBe(null);
585
509
  });
586
510
 
587
511
  it('should clear error on successful refetch', async () => {
512
+ const wrapper = createYVWrapper();
588
513
  const error = new Error('Failed to fetch versions');
589
514
  mockGetVersions.mockRejectedValueOnce(error).mockResolvedValueOnce(mockVersions);
590
515
 
591
- const wrapper = createWrapper({
592
- appKey: mockAppKey,
593
- });
594
-
595
516
  const { result } = renderHook(() => useVersions('en'), { wrapper });
596
517
 
597
518
  await waitFor(() => {
@@ -609,25 +530,22 @@ describe('useVersions', () => {
609
530
  expect(result.current.error).toBe(null);
610
531
  });
611
532
 
612
- expect(result.current.error).toBe(null);
613
- expect(result.current.versions).toEqual(mockVersions);
533
+ expect.soft(result.current.error).toBe(null);
534
+ expect.soft(result.current.versions).toEqual(mockVersions);
614
535
  });
615
536
  });
616
537
 
617
538
  describe('manual refetch', () => {
618
539
  it('should support manual refetch', async () => {
619
- const wrapper = createWrapper({
620
- appKey: mockAppKey,
621
- });
622
-
540
+ const wrapper = createYVWrapper();
623
541
  const { result } = renderHook(() => useVersions('en'), { wrapper });
624
542
 
625
543
  await waitFor(() => {
626
544
  expect(result.current.loading).toBe(false);
627
545
  });
628
546
 
629
- expect(mockGetVersions).toHaveBeenCalledTimes(1);
630
- expect(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', undefined, undefined);
547
+ expect.soft(mockGetVersions).toHaveBeenCalledTimes(1);
548
+ expect.soft(mockGetVersions).toHaveBeenNthCalledWith(1, 'en', undefined, undefined);
631
549
 
632
550
  act(() => {
633
551
  result.current.refetch();