@@ -20,6 +20,7 @@ final class FormHookTests: QuickSpec {
2020 handleSubmitSpecs ( )
2121 triggerSpecs ( )
2222 resolverSpecs ( )
23+ changeFieldValueSpecs ( )
2324 }
2425
2526 func registerSpecs( ) {
@@ -59,6 +60,32 @@ final class FormHookTests: QuickSpec {
5960 await formControl. syncFormState ( )
6061 }
6162
63+ context ( " registers field \" a \" with the same options " ) {
64+ beforeEach {
65+ aBinder = formControl. register ( name: . a, options: . init( rules: aValidator!, defaultValue: testDefaultValue) )
66+ await formControl. syncFormState ( )
67+ }
68+
69+ it ( " field \" a \" changes its default value, and doesn't change its value " ) {
70+ let formState = await formControl. formState
71+ expect ( areEqual ( first: formState. defaultValues [ . a] , second: testDefaultValue) ) == true
72+ expect ( areEqual ( first: formState. formValues [ . a] , second: " a " ) ) == true
73+ }
74+ }
75+
76+ context ( " registers field \" a \" with other options " ) {
77+ beforeEach {
78+ aBinder = formControl. register ( name: . a, options: . init( rules: aValidator!, defaultValue: testDefaultValue2) )
79+ await formControl. syncFormState ( )
80+ }
81+
82+ it ( " field \" a \" changes its default value, and doesn't change its value " ) {
83+ let formState = await formControl. formState
84+ expect ( areEqual ( first: formState. defaultValues [ . a] , second: testDefaultValue2) ) == true
85+ expect ( areEqual ( first: formState. formValues [ . a] , second: " a " ) ) == true
86+ }
87+ }
88+
6289 it ( " key \" a \" and formState are dirty " ) {
6390 let fieldState = await formControl. getFieldState ( name: . a)
6491 expect ( fieldState. isDirty) == true
@@ -1812,6 +1839,78 @@ final class FormHookTests: QuickSpec {
18121839 }
18131840 }
18141841 }
1842+
1843+ func changeFieldValueSpecs( ) {
1844+ describe ( " Form Control with shouldUnregister equals false registers a field \" a \" with a default value " ) {
1845+ var formControl : FormControl < TestFieldName > !
1846+ var aValidator : MockValidator < String , Bool > !
1847+ let testDefaultValue = " %^$# "
1848+ var aBinder : FieldRegistration < String > !
1849+
1850+ beforeEach {
1851+ var formState : FormState < TestFieldName > = . init( )
1852+ let options = FormOption < TestFieldName > (
1853+ mode: . onSubmit,
1854+ reValidateMode: . onChange,
1855+ resolver: nil ,
1856+ context: nil ,
1857+ shouldUnregister: false ,
1858+ delayErrorInNanoseconds: 0
1859+ )
1860+ formControl = . init( options: options, formState: . init(
1861+ get: { formState } ,
1862+ set: { formState = $0 }
1863+ ) )
1864+
1865+ aValidator = MockValidator < String , Bool > ( result: true )
1866+ aBinder = formControl. register ( name: . a, options: . init( rules: aValidator!, defaultValue: testDefaultValue) )
1867+ }
1868+
1869+ context ( " changes value for \" a \" to the original default value " ) {
1870+ beforeEach {
1871+ aBinder. wrappedValue = testDefaultValue
1872+ }
1873+
1874+ it ( " key \" a \" is still not dirty " ) {
1875+ let fieldState = formControl. getFieldState ( name: . a)
1876+ expect ( fieldState. isDirty) == false
1877+ }
1878+
1879+ context ( " changes value for \" a \" to another value " ) {
1880+ beforeEach {
1881+ aBinder. wrappedValue = " a "
1882+ }
1883+
1884+ it ( " key \" a \" is dirty " ) {
1885+ let fieldState = formControl. getFieldState ( name: . a)
1886+ expect ( fieldState. isDirty) == true
1887+ }
1888+ }
1889+ }
1890+
1891+ context ( " changes value for \" a \" to another value " ) {
1892+ beforeEach {
1893+ aBinder. wrappedValue = " a "
1894+ }
1895+
1896+ it ( " key \" a \" is dirty " ) {
1897+ let fieldState = formControl. getFieldState ( name: . a)
1898+ expect ( fieldState. isDirty) == true
1899+ }
1900+
1901+ context ( " changes value for \" a \" to the original default value " ) {
1902+ beforeEach {
1903+ aBinder. wrappedValue = testDefaultValue
1904+ }
1905+
1906+ it ( " key \" a \" is still dirty " ) {
1907+ let fieldState = formControl. getFieldState ( name: . a)
1908+ expect ( fieldState. isDirty) == true
1909+ }
1910+ }
1911+ }
1912+ }
1913+ }
18151914}
18161915
18171916private class ResolverProxy < FieldName> where FieldName: Hashable {
0 commit comments