11import { render } from '@testing-library/react' ;
22import React , { act , StrictMode } from 'react' ;
3- import { ManagerProvider , useManager } from 'tinytick/ui-react' ;
3+ import { createManager , type Manager } from 'tinytick' ;
4+ import { Provider , useCreateManager , useManager } from 'tinytick/ui-react' ;
45import { pause } from '../../common.ts' ;
56
7+ let manager : Manager ;
68let didRender : jest . Mock ;
79beforeEach ( ( ) => {
10+ manager = createManager ( ) ;
811 didRender = jest . fn ( ( rendered ) => rendered ) ;
912} ) ;
1013
14+ test ( 'useCreateManager' , ( ) => {
15+ const initManager = jest . fn ( ( tickInterval ) =>
16+ createManager ( ) . setManagerConfig ( { tickInterval} ) ,
17+ ) ;
18+ const Test = ( { tickInterval} : { tickInterval : number } ) => {
19+ const manager = useCreateManager ( ( ) => initManager ( tickInterval ) ) ;
20+ return didRender (
21+ < >
22+ { tickInterval } ,{ manager . getManagerConfig ( true ) . tickInterval }
23+ </ > ,
24+ ) ;
25+ } ;
26+
27+ const { container, rerender, unmount} = render ( < Test tickInterval = { 200 } /> ) ;
28+ expect ( container . textContent ) . toEqual ( '200,200' ) ;
29+
30+ rerender ( < Test tickInterval = { 300 } /> ) ;
31+ expect ( container . textContent ) . toEqual ( '300,200' ) ;
32+
33+ expect ( didRender ) . toHaveBeenCalledTimes ( 2 ) ;
34+ expect ( initManager ) . toHaveBeenCalledTimes ( 1 ) ;
35+
36+ unmount ( ) ;
37+ } ) ;
38+
1139describe ( 'Context Hooks' , ( ) => {
1240 describe ( 'useManager' , ( ) => {
1341 test ( 'basic' , ( ) => {
1442 const Test = ( ) =>
1543 didRender ( useManager ( ) ?. getManagerConfig ( true ) . tickInterval ) ;
1644
1745 const { container, unmount} = render (
18- < ManagerProvider >
46+ < Provider manager = { manager } >
1947 < Test />
20- </ ManagerProvider > ,
48+ </ Provider > ,
2149 ) ;
22- expect ( didRender ) . toHaveBeenCalledTimes ( 2 ) ;
50+ expect ( didRender ) . toHaveBeenCalledTimes ( 1 ) ;
2351 expect ( container . textContent ) . toEqual ( '100' ) ;
2452
2553 unmount ( ) ;
2654 } ) ;
2755
28- test ( 'started' , async ( ) => {
29- let count = 0 ;
30- const Test = ( ) => {
31- const manager = useManager ( ) ;
32- manager ?. setTask ( 'count' , async ( ) => count ++ ) ;
33- manager ?. scheduleTaskRun ( 'count' , '' , 0 ) ;
34- return didRender (
35- < >
36- { manager ?. getStatus ( ) } ,{ manager ?. getScheduledTaskRunIds ( ) . length }
37- </ > ,
38- ) ;
39- } ;
40-
41- const { container, unmount} = render (
42- < ManagerProvider >
43- < Test />
44- </ ManagerProvider > ,
45- ) ;
46- expect ( didRender ) . toHaveBeenCalledTimes ( 2 ) ;
47- expect ( container . textContent ) . toEqual ( '1,1' ) ;
48- expect ( count ) . toEqual ( 0 ) ;
49-
50- await act ( async ( ) => await pause ( 100 ) ) ;
51- expect ( count ) . toEqual ( 1 ) ;
52-
53- unmount ( ) ;
54- } ) ;
55-
56- test ( 'stopped' , async ( ) => {
57- let count = 0 ;
58- const Test = ( ) => {
59- const manager = useManager ( ) ;
60- manager ?. setTask ( 'count' , async ( ) => count ++ ) ;
61- manager ?. scheduleTaskRun ( 'count' , '' , 0 ) ;
62- return didRender (
63- < >
64- { manager ?. getStatus ( ) } ,{ manager ?. getScheduledTaskRunIds ( ) . length }
65- </ > ,
66- ) ;
67- } ;
68-
69- const { container, unmount} = render (
70- < ManagerProvider started = { false } >
71- < Test />
72- </ ManagerProvider > ,
73- ) ;
74- expect ( didRender ) . toHaveBeenCalledTimes ( 2 ) ;
75- expect ( container . textContent ) . toEqual ( '0,1' ) ;
76- expect ( count ) . toEqual ( 0 ) ;
77-
78- await act ( async ( ) => await pause ( 100 ) ) ;
79- expect ( count ) . toEqual ( 0 ) ;
80-
81- unmount ( ) ;
82- } ) ;
83-
8456 test ( 'strict mode' , async ( ) => {
8557 let count = 0 ;
8658 const Test = ( ) => {
87- const manager = useManager ( ) ;
59+ const manager = useManager ( ) ?. start ( ) ;
8860 manager ?. setTask ( 'count' , async ( ) => count ++ ) ;
8961 manager ?. scheduleTaskRun ( 'count' , '' , 0 ) ;
9062 return didRender ( manager ?. getScheduledTaskRunIds ( ) . length ) ;
9163 } ;
9264
9365 const { container, unmount} = render (
9466 < StrictMode >
95- < ManagerProvider >
67+ < Provider manager = { manager } >
9668 < Test />
97- </ ManagerProvider >
69+ </ Provider >
9870 </ StrictMode > ,
9971 ) ;
10072
101- expect ( didRender ) . toHaveBeenCalledTimes ( 4 ) ;
73+ expect ( didRender ) . toHaveBeenCalledTimes ( 2 ) ;
10274 expect ( container . textContent ) . toEqual ( '2' ) ;
10375 expect ( count ) . toEqual ( 0 ) ;
10476
@@ -107,29 +79,5 @@ describe('Context Hooks', () => {
10779
10880 unmount ( ) ;
10981 } ) ;
110-
111- test ( 'unmount' , async ( ) => {
112- let count = 0 ;
113- const Test = ( ) => {
114- const manager = useManager ( ) ;
115- manager ?. setTask ( 'count' , async ( ) => count ++ ) ;
116- manager ?. scheduleTaskRun ( 'count' , '' , 0 ) ;
117- return didRender ( manager ?. getScheduledTaskRunIds ( ) . length ) ;
118- } ;
119-
120- const { container, unmount} = render (
121- < ManagerProvider >
122- < Test />
123- </ ManagerProvider > ,
124- ) ;
125-
126- expect ( didRender ) . toHaveBeenCalledTimes ( 2 ) ;
127- expect ( container . textContent ) . toEqual ( '1' ) ;
128- expect ( count ) . toEqual ( 0 ) ;
129-
130- unmount ( ) ;
131- await act ( async ( ) => await pause ( 100 ) ) ;
132- expect ( count ) . toEqual ( 0 ) ;
133- } ) ;
13482 } ) ;
13583} ) ;
0 commit comments