Skip to content

Commit 458225f

Browse files
committed
Test register method
1 parent 7020b8e commit 458225f

File tree

1 file changed

+66
-3
lines changed

1 file changed

+66
-3
lines changed

Tests/FormHookTests/FormHookTests.swift

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ enum TestFieldName: String {
1111

1212
final class FormHookTests: QuickSpec {
1313
override func spec() {
14+
registerSpecs()
1415
unregisterSpecs()
1516
resetSingleFieldSpecs()
1617
resetFormSpecs()
@@ -20,6 +21,68 @@ final class FormHookTests: QuickSpec {
2021
triggerSpecs()
2122
}
2223

24+
func registerSpecs() {
25+
describe("Form Control") {
26+
var formControl: FormControl<TestFieldName>!
27+
28+
beforeEach {
29+
var formState: FormState<TestFieldName> = .init()
30+
let options = FormOption<TestFieldName>(
31+
mode: .onSubmit,
32+
reValidateMode: .onChange,
33+
resolver: nil,
34+
context: nil,
35+
shouldUnregister: true,
36+
delayError: true
37+
)
38+
formControl = .init(options: options, formState: .init(
39+
get: { formState },
40+
set: { formState = $0 }
41+
))
42+
}
43+
44+
context("registers a field \"a\" with a default value") {
45+
var aValidator: MockValidator<String, Bool>!
46+
let testDefaultValue = "%^$#"
47+
let testDefaultValue2 = "%^$#@"
48+
var aBinder: FieldRegistration<String>!
49+
50+
beforeEach {
51+
aValidator = MockValidator<String, Bool>(result: true)
52+
aBinder = formControl.register(name: .a, options: .init(rules: aValidator!, defaultValue: testDefaultValue))
53+
}
54+
55+
context("value for key \"a\" changes") {
56+
beforeEach {
57+
aBinder.wrappedValue = "a"
58+
await formControl.syncFormState()
59+
}
60+
61+
it("key \"a\" and formState are dirty") {
62+
let fieldState = await formControl.getFieldState(name: .a)
63+
expect(fieldState.isDirty) == true
64+
65+
let formState = await formControl.formState
66+
expect(formState.isDirty) == true
67+
}
68+
}
69+
70+
context("registers field \"a\" with other options") {
71+
beforeEach {
72+
aBinder = formControl.register(name: .a, options: .init(rules: aValidator!, defaultValue: testDefaultValue2))
73+
await formControl.syncFormState()
74+
}
75+
76+
it("field \"a\" changes its value") {
77+
let formState = await formControl.formState
78+
expect(areEqual(first: formState.defaultValues[.a], second: testDefaultValue2)) == true
79+
expect(areEqual(first: formState.formValues[.a], second: testDefaultValue2)) == true
80+
}
81+
}
82+
}
83+
}
84+
}
85+
2386
func unregisterSpecs() {
2487
describe("Form Control registers a field \"a\" with a default value") {
2588
var formControl: FormControl<TestFieldName>!
@@ -195,7 +258,7 @@ final class FormHookTests: QuickSpec {
195258
var aValidator: MockValidator<String, Bool>!
196259
let testDefaultValue = "%^$#"
197260
let testDefaultValue2 = "%^$#*("
198-
var aBinder: Binding<String>!
261+
var aBinder: FieldRegistration<String>!
199262

200263
beforeEach {
201264
var formState: FormState<TestFieldName> = .init()
@@ -330,8 +393,8 @@ final class FormHookTests: QuickSpec {
330393
let aDefaultValue2 = "%^$#)"
331394
let bDefaultValue2 = "%^$#*()"
332395

333-
var aBinder: Binding<String>!
334-
var bBinder: Binding<String>!
396+
var aBinder: FieldRegistration<String>!
397+
var bBinder: FieldRegistration<String>!
335398

336399
beforeEach {
337400
var formState: FormState<TestFieldName> = .init()

0 commit comments

Comments
 (0)