1
1
open ! Jest
2
2
3
3
module Lenses = {
4
- type state = {name : string }
4
+ type state = {name : string , email : string }
5
5
6
- type rec field <_ > = Name : field <string >
6
+ type rec field <_ > = Name : field <string > | Email : field < string >
7
7
8
8
let get :
9
9
type value . (state , field <value >) => value =
10
10
(state , field ) =>
11
11
switch field {
12
12
| Name => state .name
13
+ | Email => state .email
13
14
}
14
15
15
16
let set :
16
17
type value . (state , field <value >, value ) => state =
17
- (_ , field , value ) =>
18
+ (state , field , value ) =>
18
19
switch field {
19
- | Name => {name : value }
20
+ | Name => {... state , name : value }
21
+ | Email => {... state , email : value }
20
22
}
21
23
}
22
24
@@ -27,19 +29,40 @@ describe("Schema", (. ()) => {
27
29
let schema = {
28
30
open CustomSchema .Validation
29
31
30
- schema ([string (~min = 12 , ~minError = "Invalid name." , Name )])
32
+ schema ([
33
+ string (~min = 12 , ~minError = "Invalid name." , Name ),
34
+ email (~error = "Invalid email" , Email ),
35
+ ])
31
36
}
32
37
33
- let result = CustomSchema .validateOne (~field = Field (Name ), ~values = {name : "Alonzo" }, schema )
38
+ let nameResult = CustomSchema .validateOne (
39
+ ~field = Field (Name ),
40
+ ~
values = {
name :
"Alonzo" ,
email :
"[email protected] " },
41
+ schema ,
42
+ )
34
43
35
- expect (result )-> not -> toBe (None )
44
+ expect (nameResult )-> not -> toBe (None )
36
45
37
- switch result {
46
+ switch nameResult {
38
47
| None => ()
39
48
| Some ((field , error )) => {
40
49
expect (field )-> toStrictEqual (Field (Name ))-> ignore
41
50
expect (error )-> toStrictEqual (Error ("Invalid name." ))-> ignore
42
51
}
43
52
}
53
+
54
+ let emailResult = CustomSchema .validateOne (
55
+ ~field = Field (Email ),
56
+ ~values = {name : "Alonzo" , email : "test.." },
57
+ schema ,
58
+ )
59
+
60
+ switch emailResult {
61
+ | None => ()
62
+ | Some ((field , error )) => {
63
+ expect (field )-> toStrictEqual (Field (Email ))-> ignore
64
+ expect (error )-> toStrictEqual (Error ("Invalid email." ))-> ignore
65
+ }
66
+ }
44
67
})
45
68
})
0 commit comments