-
Notifications
You must be signed in to change notification settings - Fork 68
/
UsageSpec.scala
120 lines (105 loc) · 4.04 KB
/
UsageSpec.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import org.scalatest._
import org.scalatest.matchers.ShouldMatchers
import skinny.validator._
class UsageSpec extends FunSpec with ShouldMatchers {
describe("Validator") {
def simpleValidator1(userId: Int, name: String): Validator = Validator(
param("user_id" -> userId) is notNull & numeric & intValue,
param("name" -> name) is required & minLength(3)
)
it("should provide #validate for if/else statements") {
val validator = simpleValidator1(123, null)
if (validator.validate()) {
// -----------------------
// success
fail("validation should be failed")
} else {
// -----------------------
// validation errors
// can access parameters via #params
val params: Parameters = validator.params
params.toMap should equal(Map("user_id" -> 123, "name" -> null))
params.keys() should equal(Seq("user_id", "name"))
params.values() should equal(Seq(123, null))
// can access errors
val errors: Errors = validator.errors
// user_id is valid
errors.get("user_id") should equal(Nil)
// name is invalid and one error is found
val errorsForName: Seq[Error] = errors.get("name")
errorsForName.head should equal(Error("required", Nil))
}
}
def simpleValidator2(userId: Int, name: String): Validator = Validator(
param("user_id" -> userId) is notNull & numeric & intValue,
param("name" -> name) is required & maxLength(3)
)
it("should provide #fold") {
val validator = simpleValidator2(123, "seratch")
validator.fold[Any](
(params: Parameters, errors: Errors) => {
// -----------------------
// validation errors
errors.get("user_id") should equal(Nil)
errors.get("name") should equal(Seq(Error("maxLength", Seq("3"))))
},
(params: Parameters) => {
// -----------------------
// success
fail("validation should be failed")
}
)
}
}
describe("MapValidator") {
def mapValidator1(params: Map[String, Any]): MapValidator = MapValidator(params)(
paramKey("user_id") is notNull,
paramKey("name") is required & maxLength(3)
)
it("should provide #validate for if/else statements") {
val params = Map("user_id" -> 123, "name" -> "seratch")
val validator = mapValidator1(params)
if (validator.validate()) {
// -----------------------
// success
fail("validation should be failed")
} else {
// -----------------------
// validation errors
validator.params.toMap should equal(Map("user_id" -> 123, "name" -> "seratch"))
validator.errors.get("user_id") should equal(Nil)
validator.errors.get("name") should equal(Seq(Error("maxLength", Seq("3"))))
}
}
def mapValidator2(params: Map[String, Any]): MapValidator = MapValidator(params)(
paramKey("user_id") is notNull,
paramKey("name") is required & minLength(3)
)
it("should provide #fold") {
val params = Map("user_id" -> 123, "name" -> "x")
val validator = mapValidator2(params)
validator.fold[Any](
(params, errors) => {
// -----------------------
// validation errors
params.toMap should equal(Map("user_id" -> 123, "name" -> "x"))
errors.get("user_id") should equal(Nil)
errors.get("name") should equal(Seq(Error("minLength", Seq("3"))))
},
(params) => {
// -----------------------
// success
fail("validation should be failed")
}
)
}
}
describe("Messages") {
it("should be available") {
val messages: Messages = Messages.loadFromConfig()
messages.get("required", Seq("name")) should equal(Some("name is required"))
messages.get("required", "name") should equal(Some("name is required")) // String is also a Seq
messages.get("minLength", Seq("password", 6)) should equal(Some("password length must be greater than or equal to 6"))
}
}
}