11'use strict'
22import { beforeEach , afterEach , describe , test , expect } from 'vitest'
33import { instance , state } from '@plexusjs/core'
4-
5- type ObjectStateExample = Partial < {
6- a : { a ?: boolean ; b ?: boolean }
7- b : boolean
8- c : { b ?: boolean }
9- } >
10- type UnionString = 'a' | 'b' | 'c'
11-
12- const initialValue = {
13- boolean : true ,
14- string : 'Hello Plexus!' ,
15- object : { a : { a : true , b : true } , b : true } ,
16- array : [
17- { item : 'Hello' , item2 : { subitem : 'World' } } ,
18- { item : 'Goodbye' , item2 : { subitem : 'People' } } ,
19- ] ,
20- null : null ,
21- }
22- const booleanState = state ( true )
23- const stringState = state ( 'Hello Plexus!' )
24- const objectState = state < ObjectStateExample > ( initialValue . object )
25- const arrayState = state < { item ?: string ; item2 ?: { subitem ?: string } } [ ] > (
26- initialValue . array
27- )
28-
29- const stateWithFetchFnTest = state ( ( ) => {
30- return 'some sort of data'
31- } )
4+ import {
5+ arrayState ,
6+ booleanState ,
7+ initialStateValues ,
8+ objectState ,
9+ stateWithFetchFnTest ,
10+ stringState ,
11+ } from './test-utils'
3212
3313// TODO Disallow null as initial value
3414beforeEach ( ( ) => {
@@ -38,63 +18,6 @@ beforeEach(() => {
3818 arrayState . reset ( )
3919} )
4020describe ( 'Testing State Function' , ( ) => {
41- test ( 'Can save a value' , ( ) => {
42- const value = state ( 1 )
43- const value2 = state < UnionString > ( 'a' )
44- expect ( value . value ) . toBe ( 1 )
45- } )
46-
47- test ( 'Change value and remember the old one' , ( ) => {
48- const value = state ( 1 )
49- value . set ( 2 )
50- expect ( value . value ) . toBe ( 2 )
51- expect ( value . lastValue ) . toBe ( 1 )
52- } )
53-
54- test ( 'Checking state().set()' , ( ) => {
55- // check .set(value: object)
56- objectState . set ( { a : { b : false } } )
57- // check if the object is actually merged and children props do get overwritten
58- expect ( objectState . value . a ?. b ) . toBe ( false )
59- } )
60-
61- test ( 'Checking state().patch()' , ( ) => {
62- // can the object deep merge?
63- objectState . patch ( { a : { b : false } } )
64- expect ( objectState . value . a ?. a ) . toBe ( true )
65- // check that other value is still there
66- expect ( objectState . value . b ) . toBe ( true )
67- // changed intended value
68- expect ( objectState . value . a ?. b ) . toBe ( false )
69-
70- // console.log(arrayState.value)
71- // check array deep merge
72- arrayState . patch ( [ { item : 'Hello2' } ] )
73- // console.log(arrayState.value)
74- expect ( arrayState . value [ 0 ] . item ) . toBe ( 'Hello2' )
75- expect ( arrayState . value [ 0 ] . item2 ) . toStrictEqual ( { subitem : 'World' } )
76- expect ( arrayState . value [ 1 ] . item ) . toBe ( 'Goodbye' )
77- } )
78-
79- test ( 'Checking state.watch()' , ( ) => {
80- let callbackCalled = false
81-
82- // can add watcher
83- const watcherDestroyer = stringState . watch ( ( value ) => {
84- console . log ( 'callback called' , value )
85- callbackCalled = true
86- } )
87- console . log ( instance ( ) . runtime . engine . events . entries ( ) )
88- stringState . set ( 'Hello World' )
89- expect ( callbackCalled ) . toBe ( true )
90- // can remove watcher
91- // stringState.removeWatcher(watcherKey);
92- watcherDestroyer ( )
93- // console.log(watcherDestroyer.toString(), instance().runtime.engine.events.entries())
94- stringState . set ( 'new value' )
95- expect ( callbackCalled ) . toBe ( true )
96- } )
97-
9821 test ( 'Checking state.watch()' , ( ) => {
9922 let callbackCalled = false
10023 let callback2Called = false
@@ -103,19 +26,13 @@ describe('Testing State Function', () => {
10326 console . log ( 'callback called' , value )
10427 callbackCalled = true
10528 } )
106- const watcherDestroyer2 = booleanState . watch ( ( value ) => {
107- console . log ( 'callback 2 called' , value )
108- callback2Called = true
109- } )
11029 // console.log(instance().runtime.engine.events.entries())
11130 stringState . set ( 'Hello World' )
11231 expect ( callbackCalled ) . toBe ( true )
11332 expect ( callback2Called ) . toBe ( false )
11433
11534 // can remove watcher
116- // stringState.removeWatcher(watcherKey);
11735 watcherDestroyer ( )
118- // console.log(watcherDestroyer.toString(), instance().runtime.engine.events.entries())
11936 stringState . set ( 'new value' )
12037 expect ( callbackCalled ) . toBe ( true )
12138 } )
@@ -143,7 +60,7 @@ describe('Testing State Function', () => {
14360 test ( 'Checking state.undo() & state.redo()' , ( ) => {
14461 objectState . set ( { a : { b : false } } )
14562 objectState . undo ( )
146- expect ( objectState . value ) . toStrictEqual ( initialValue . object )
63+ expect ( objectState . value ) . toStrictEqual ( initialStateValues . object )
14764 objectState . redo ( )
14865 expect ( objectState . value ) . toStrictEqual ( { a : { b : false } } )
14966 } )
@@ -157,8 +74,13 @@ describe('Testing State Function', () => {
15774 console . log ( '1: checking' , objectState . value , 'vs.' , { a : { b : false } } )
15875 expect ( objectState . value ) . toStrictEqual ( { a : { b : false } } )
15976 objectState . undo ( )
160- console . log ( '2: checking' , objectState . value , 'vs.' , initialValue . object )
161- expect ( objectState . value ) . toStrictEqual ( initialValue . object )
77+ console . log (
78+ '2: checking' ,
79+ objectState . value ,
80+ 'vs.' ,
81+ initialStateValues . object
82+ )
83+ expect ( objectState . value ) . toStrictEqual ( initialStateValues . object )
16284 objectState . redo ( )
16385 console . log ( '3: checking' , objectState . value , 'vs.' , { a : { b : false } } )
16486 expect ( objectState . value ) . toStrictEqual ( { a : { b : false } } )
@@ -245,7 +167,7 @@ describe('Testing State Function', () => {
245167 // we can do some sort of calculation here
246168 return 'a new string!' + stateWithFetchFnTest . value
247169 } )
248- // awesome! But nothing should change beacuse the state isn't undefined nor did we call `fetch()`
170+ // awesome! But nothing should change because the state isn't undefined nor did we call `fetch()`
249171 expect ( stateWithFetchFnTest . value ) . toBe ( 'new value' )
250172 // let's force a fetch...
251173 stateWithFetchFnTest . fetch ( )
0 commit comments