@@ -8,6 +8,13 @@ import { FieldStatePropsRecord, FieldStateProps } from "../../src/contracts/fiel
8
8
import { MyFieldProps } from "../test-components/test-field" ;
9
9
10
10
describe ( "Form store" , ( ) => {
11
+ const formId = "form-id" ;
12
+ let formStore : FormStore ;
13
+
14
+ beforeEach ( ( ) => {
15
+ formStore = new FormStore ( formId ) ;
16
+ } ) ;
17
+
11
18
it ( "returns state" , ( ) => {
12
19
const formId = "FORM-ID" ;
13
20
const formStore = new FormStore ( formId ) ;
@@ -16,10 +23,8 @@ describe("Form store", () => {
16
23
} ) ;
17
24
18
25
it ( "returns fieldId from fieldName and fieldGroupId" , ( ) => {
19
- const formId = "FORM-ID" ;
20
26
const fieldName = "FIELD-NAME" ;
21
27
const fieldGroupId = "FIELD-GROUP-ID" ;
22
- const formStore = new FormStore ( formId ) ;
23
28
24
29
const fieldId = formStore . GetFieldId ( fieldName , fieldGroupId ) ;
25
30
@@ -29,78 +34,65 @@ describe("Form store", () => {
29
34
} ) ;
30
35
31
36
it ( "registers a field" , ( ) => {
32
- const formId = "FORM-ID" ;
33
37
const fieldId = "FIELD-ID" ;
34
- const initialValue = "INITIAL-VALUE " ;
38
+ const value = "value " ;
35
39
const defaultValue = "DEFAULT-VALUE" ;
36
- const formStore = new FormStore ( formId ) ;
37
40
38
- formStore . RegisterField ( fieldId , initialValue , defaultValue ) ;
41
+ formStore . RegisterField ( fieldId , defaultValue , undefined , value ) ;
42
+
39
43
expect ( formStore . HasField ( fieldId ) ) . toBe ( true ) ;
40
- expect ( formStore . GetField ( fieldId ) ) . not . toBeUndefined ( ) ;
41
- expect ( formStore . GetField ( fieldId ) . Value ) . toBe ( initialValue ) ;
42
- expect ( formStore . GetField ( fieldId ) . DefaultValue ) . toBe ( defaultValue ) ;
44
+
45
+ const fieldState = formStore . GetField ( fieldId ) ;
46
+
47
+ expect ( fieldState ) . not . toBeUndefined ( ) ;
48
+ expect ( fieldState . Value ) . toBe ( value ) ;
49
+ expect ( fieldState . InitialValue ) . toBe ( value ) ;
50
+ expect ( fieldState . DefaultValue ) . toBe ( defaultValue ) ;
43
51
} ) ;
44
52
53
+ // TODO: Write test with initial value
54
+
45
55
it ( "unregisters a field" , ( ) => {
46
- const formId = "FORM-ID" ;
47
- const fieldId = "FIELD-ID" ;
48
- const initialValue = "INITIAL-VALUE" ;
49
- const defaultValue = "DEFAULT-VALUE" ;
50
- const formStore = new FormStore ( formId ) ;
56
+ const fieldId = "field-id" ;
51
57
52
- formStore . RegisterField ( fieldId , initialValue , defaultValue ) ;
58
+ formStore . RegisterField ( fieldId , "" , undefined , "value" ) ;
53
59
formStore . UnregisterField ( fieldId ) ;
60
+
54
61
expect ( formStore . GetField ( fieldId ) ) . toBeUndefined ( ) ;
55
62
expect ( formStore . HasField ( fieldId ) ) . toBe ( false ) ;
56
63
} ) ;
57
64
58
65
it ( "has a field" , ( ) => {
59
- const formId = "FORM-ID" ;
60
- const fieldId = "FIELD-ID" ;
61
- const initialValue = "INITIAL-VALUE" ;
62
- const defaultValue = "DEFAULT-VALUE" ;
63
- const formStore = new FormStore ( formId ) ;
64
-
66
+ const fieldId = "field-id" ;
65
67
expect ( formStore . HasField ( fieldId ) ) . toBe ( false ) ;
66
- formStore . RegisterField ( fieldId , initialValue , defaultValue ) ;
68
+ formStore . RegisterField ( fieldId , "" , undefined , "" ) ;
67
69
expect ( formStore . HasField ( fieldId ) ) . toBe ( true ) ;
68
70
} ) ;
69
71
70
72
it ( "get a field" , ( ) => {
71
- const formId = "FORM-ID" ;
72
- const fieldId = "FIELD-ID" ;
73
- const initialValue = "INITIAL-VALUE" ;
74
- const defaultValue = "DEFAULT-VALUE" ;
75
- const formStore = new FormStore ( formId ) ;
73
+ const fieldId = "field-id" ;
76
74
77
75
expect ( formStore . GetField ( fieldId ) ) . toBeUndefined ( ) ;
78
- formStore . RegisterField ( fieldId , initialValue , defaultValue ) ;
76
+ formStore . RegisterField ( fieldId , "" , undefined , "" ) ;
79
77
expect ( formStore . GetField ( fieldId ) ) . not . toBeUndefined ( ) ;
80
78
} ) ;
81
79
82
80
it ( "value changed" , ( ) => {
83
- const formId = "FORM-ID" ;
84
- const fieldId = "FIELD-ID" ;
85
- const initialValue = "INITIAL-VALUE" ;
86
- const defaultValue = "DEFAULT-VALUE" ;
81
+ const fieldId = "field-id" ;
82
+ const value = "value" ;
87
83
const nextValue = "NEXT-VALUE" ;
88
- const formStore = new FormStore ( formId ) ;
89
84
90
- formStore . RegisterField ( fieldId , initialValue , defaultValue ) ;
91
- expect ( formStore . GetField ( fieldId ) . Value ) . toBe ( initialValue ) ;
85
+ formStore . RegisterField ( fieldId , undefined , undefined , value ) ;
86
+ expect ( formStore . GetField ( fieldId ) . Value ) . toBe ( value ) ;
87
+
92
88
formStore . ValueChanged ( fieldId , nextValue ) ;
93
89
expect ( formStore . GetField ( fieldId ) . Value ) . toBe ( nextValue ) ;
94
90
} ) ;
95
91
96
92
it ( "validate field without error" , async ( done ) => {
97
- const formId = "FORM-ID" ;
98
- const fieldId = "FIELD-ID" ;
99
- const initialValue = "INITIAL-VALUE" ;
100
- const defaultValue = "DEFAULT-VALUE" ;
101
- const formStore = new FormStore ( formId ) ;
93
+ const fieldId = "field-id" ;
102
94
103
- formStore . RegisterField ( fieldId , initialValue , defaultValue ) ;
95
+ formStore . RegisterField ( fieldId , undefined , undefined , "value" ) ;
104
96
const validationPromise = new Promise < never > ( ( resolve , reject ) => {
105
97
setTimeout ( ( ) => {
106
98
resolve ( ) ;
@@ -124,14 +116,10 @@ describe("Form store", () => {
124
116
} ) ;
125
117
126
118
it ( "validate field with error" , async ( done ) => {
127
- const formId = "FORM-ID" ;
128
119
const fieldId = "FIELD-ID" ;
129
- const initialValue = "INITIAL-VALUE" ;
130
- const defaultValue = "DEFAULT-VALUE" ;
131
- const formStore = new FormStore ( formId ) ;
132
120
const formError : FormError = { Message : "Error Message" } ;
133
121
134
- formStore . RegisterField ( fieldId , initialValue , defaultValue ) ;
122
+ formStore . RegisterField ( fieldId , undefined , undefined , "value" ) ;
135
123
const validationPromise = new Promise < never > ( ( resolve , reject ) => {
136
124
setTimeout ( ( ) => {
137
125
reject ( formError ) ;
@@ -154,6 +142,7 @@ describe("Form store", () => {
154
142
155
143
try {
156
144
const error = formStore . GetField ( fieldId ) . Error ;
145
+
157
146
expect ( formStore . GetField ( fieldId ) . Validating ) . toBe ( false ) ;
158
147
expect ( error ) . not . toBeUndefined ( ) ;
159
148
expect ( error ) . not . toBeNull ( ) ;
@@ -166,14 +155,11 @@ describe("Form store", () => {
166
155
} ) ;
167
156
168
157
it ( "skip validation when newValue has expired" , async ( done ) => {
169
- const formId = "FORM-ID" ;
170
158
const fieldId = "FIELD-ID" ;
171
- const initialValue = "INITIAL-VALUE" ;
172
- const defaultValue = "DEFAULT-VALUE" ;
173
- const formStore = new FormStore ( formId ) ;
174
159
const formError = "field error" ;
160
+ const value = "text" ;
175
161
176
- formStore . RegisterField ( fieldId , initialValue , defaultValue ) ;
162
+ formStore . RegisterField ( fieldId , undefined , undefined , value ) ;
177
163
const validationPromise = new Promise < never > ( ( resolve , reject ) => {
178
164
setTimeout ( ( ) => {
179
165
reject ( formError ) ;
@@ -183,7 +169,7 @@ describe("Form store", () => {
183
169
formStore . Validate ( fieldId , validationPromise ) ;
184
170
185
171
// Imitate removal of last letter
186
- formStore . ValueChanged ( fieldId , initialValue . slice ( 0 , initialValue . length - 1 ) ) ;
172
+ formStore . ValueChanged ( fieldId , value . slice ( 0 , value . length - 1 ) ) ;
187
173
188
174
try {
189
175
expect ( formStore . GetField ( fieldId ) . Validating ) . toBe ( true ) ;
@@ -210,18 +196,13 @@ describe("Form store", () => {
210
196
} ) ;
211
197
212
198
it ( "registers field with props" , ( ) => {
213
- const formId = "FORM-ID" ;
214
- const fieldId = "FIELD-ID" ;
215
- const defaultValue = "DEFAULT-VALUE" ;
199
+ const fieldId = "field-id" ;
216
200
const fieldProps : MyFieldProps = {
217
201
name : "fieldName" ,
218
- value : "initial-value" ,
219
- defaultValue : defaultValue ,
220
202
randomKey : "random value"
221
203
} ;
222
- const formStore = new FormStore ( formId ) ;
223
204
224
- formStore . RegisterField ( fieldId , fieldProps . value , fieldProps . defaultValue , fieldProps ) ;
205
+ formStore . RegisterField ( fieldId , undefined , undefined , undefined , fieldProps ) ;
225
206
226
207
const fieldPropsRecord = recordify < FieldStateProps , FieldStatePropsRecord > ( fieldProps ) ;
227
208
@@ -230,28 +211,130 @@ describe("Form store", () => {
230
211
} ) ;
231
212
232
213
it ( "updates field props" , ( ) => {
233
- const formId = "FORM-ID" ;
234
214
const fieldId = "FIELD-ID" ;
235
- const defaultValue = "DEFAULT-VALUE" ;
236
215
const fieldProps : MyFieldProps = {
237
216
name : "field-name" ,
238
- value : "initialValue" ,
239
- defaultValue : defaultValue ,
240
217
randomKey : "random value"
241
218
} ;
242
219
243
- // Changed value and removed randomKey prop
220
+ // Removed randomKey prop
244
221
const fieldPropsNext : MyFieldProps = {
245
222
name : fieldProps . name ,
246
- value : "Updated value"
247
223
} ;
248
224
const fieldPropsNextRecord = recordify < FieldStateProps , FieldStatePropsRecord > ( fieldPropsNext ) ;
249
- const formStore = new FormStore ( formId ) ;
250
225
251
- formStore . RegisterField ( fieldId , fieldProps . value , fieldProps . defaultValue , fieldProps ) ;
226
+ formStore . RegisterField ( fieldId , undefined , undefined , undefined , fieldProps ) ;
252
227
formStore . UpdateProps ( fieldId , fieldPropsNext ) ;
253
228
254
229
// Deep-check the updated props
255
230
expect ( Immutable . is ( formStore . GetField ( fieldId ) . Props , fieldPropsNextRecord ) ) . toBe ( true ) ;
256
231
} ) ;
232
+
233
+ it ( "clears all fields values to default values" , ( ) => {
234
+ let fieldsIds : string [ ] = [ ] ;
235
+ for ( let i = 0 ; i < 5 ; i ++ ) {
236
+ fieldsIds . push ( `field-id-${ i } ` ) ;
237
+ }
238
+
239
+ const defaultValue = "default value" ;
240
+ const fieldProps : MyFieldProps = {
241
+ name : "field-name" ,
242
+ defaultValue : defaultValue ,
243
+ value : "value"
244
+ } ;
245
+
246
+ for ( const fieldId of fieldsIds ) {
247
+ formStore . RegisterField ( fieldId , fieldProps . defaultValue , undefined , fieldProps . value , fieldProps ) ;
248
+ }
249
+ formStore . ClearFields ( ) ;
250
+
251
+ for ( const fieldId of fieldsIds ) {
252
+ const fieldState = formStore . GetField ( fieldId ) ;
253
+ expect ( fieldState . Value ) . toBe ( defaultValue ) ;
254
+ }
255
+ } ) ;
256
+
257
+ it ( "clears fields values by fieldsIds to default values" , ( ) => {
258
+ let fieldsIds : string [ ] = [ ] ;
259
+ for ( let i = 0 ; i < 5 ; i ++ ) {
260
+ fieldsIds . push ( `field-id-${ i } ` ) ;
261
+ }
262
+ const fieldToClearId = fieldsIds [ 0 ] ;
263
+ const defaultValue = "default value" ;
264
+ const fieldProps : MyFieldProps = {
265
+ name : "field-name" ,
266
+ defaultValue : defaultValue ,
267
+ value : "value" ,
268
+ } ;
269
+
270
+ for ( const fieldId of fieldsIds ) {
271
+ formStore . RegisterField ( fieldId , fieldProps . defaultValue , undefined , fieldProps . value , fieldProps ) ;
272
+ }
273
+ formStore . ClearFields ( [ fieldToClearId ] ) ;
274
+
275
+ for ( const fieldId of fieldsIds ) {
276
+ const fieldState = formStore . GetField ( fieldId ) ;
277
+ if ( fieldId === fieldToClearId ) {
278
+ expect ( fieldState . Value ) . toBe ( defaultValue ) ;
279
+ } else {
280
+ expect ( fieldState . Value ) . not . toBe ( defaultValue ) ;
281
+ }
282
+ }
283
+ } ) ;
284
+
285
+ it ( "resets all fields values to initial values" , ( ) => {
286
+ let fieldsIds : string [ ] = [ ] ;
287
+ for ( let i = 0 ; i < 5 ; i ++ ) {
288
+ fieldsIds . push ( `field-id-${ i } ` ) ;
289
+ }
290
+ const initialValue = "initial value" ;
291
+ const nextValue = "next value" ;
292
+ const fieldProps : MyFieldProps = {
293
+ name : "field-name" ,
294
+ initialValue : initialValue ,
295
+ value : "value" ,
296
+ randomKey : "random value"
297
+ } ;
298
+
299
+ for ( const fieldId of fieldsIds ) {
300
+ formStore . RegisterField ( fieldId , undefined , fieldProps . initialValue , fieldProps . value , fieldProps ) ;
301
+ formStore . ValueChanged ( fieldId , nextValue ) ;
302
+ }
303
+ formStore . ResetFields ( ) ;
304
+
305
+ for ( const fieldId of fieldsIds ) {
306
+ const fieldState = formStore . GetField ( fieldId ) ;
307
+ expect ( fieldState . Value ) . toBe ( initialValue ) ;
308
+ }
309
+ } ) ;
310
+
311
+ it ( "resets fields values by fieldsIds to initial values" , ( ) => {
312
+ let fieldsIds : string [ ] = [ ] ;
313
+ for ( let i = 0 ; i < 5 ; i ++ ) {
314
+ fieldsIds . push ( `field-id-${ i } ` ) ;
315
+ }
316
+ const fieldToResetId = fieldsIds [ 0 ] ;
317
+ const value = "value" ;
318
+ const nextValue = "next value" ;
319
+ const fieldProps : MyFieldProps = {
320
+ name : "field-name" ,
321
+ value : value ,
322
+ randomKey : "random value"
323
+ } ;
324
+
325
+ for ( const fieldId of fieldsIds ) {
326
+ formStore . RegisterField ( fieldId , undefined , undefined , fieldProps . value , fieldProps ) ;
327
+ formStore . ValueChanged ( fieldId , nextValue ) ;
328
+ }
329
+ formStore . ResetFields ( [ fieldToResetId ] ) ;
330
+
331
+ for ( const fieldId of fieldsIds ) {
332
+ const fieldState = formStore . GetField ( fieldId ) ;
333
+ if ( fieldId === fieldToResetId ) {
334
+ expect ( fieldState . Value ) . toBe ( value ) ;
335
+ } else {
336
+ expect ( fieldState . Value ) . toBe ( nextValue ) ;
337
+ }
338
+ }
339
+ } ) ;
257
340
} ) ;
0 commit comments