-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathohm_test.lua
More file actions
142 lines (108 loc) · 3.65 KB
/
ohm_test.lua
File metadata and controls
142 lines (108 loc) · 3.65 KB
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
local resp = require("lib/resp-6e21869")
local user = require("examples/user")
local attributes = {
email = "john@example.org",
fname = "John",
lname = "Doe",
full_name = "John Doe",
}
local db = resp.new("localhost", 6379)
-- setup
assert(db:call("FLUSHDB"))
-- case 1: saving a new entry
local id = assert(user:save(db, attributes))
assert(id == "1")
-- case 1.1: verify the hash
local values = db:call("HMGET", "User:1", "email", "fname", "lname")
assert(3 == db:call("HLEN", "User:1"))
assert(values[1] == "john@example.org")
assert(values[2] == "John")
assert(values[3] == "Doe")
-- case 1.2: verify indices
local indices = db:call("SMEMBERS", "User:indices:full_name:John Doe")
assert(indices[1] == "1")
local _indices = db:call("SMEMBERS", "User:1:_indices")
assert(_indices[1] == "User:indices:full_name:John Doe")
-- case 1.3: verify uniques
local id = db:call("HGET", "User:uniques:email", "john@example.org")
assert(id == "1")
local _uniques = db:call("HGETALL", "User:1:_uniques")
assert(_uniques[1] == "User:uniques:email")
assert(_uniques[2] == "john@example.org")
-- case 1.4: verify User:all set
local all = db:call("SMEMBERS", "User:all")
assert(#all == 1)
assert(all[1] == "1")
-- case 2: unique index violation
local _, err = user:save(db, attributes)
assert(err.code == "UniqueIndexViolation")
assert(err.attr == "email")
-- case 3: updating an existing entry
attributes = {
id = "1",
fname = "Jane",
lname = "Cruz",
full_name = "Jane Cruz",
email = "jane@example.org",
}
assert("1" == user:save(db, attributes))
-- case 3.1: verify the hash
local values = db:call("HMGET", "User:1", "email", "fname", "lname")
assert(3 == db:call("HLEN", "User:1"))
assert(values[1] == "jane@example.org")
assert(values[2] == "Jane")
assert(values[3] == "Cruz")
-- case 3.2: verify indices
local indices = db:call("SMEMBERS", "User:indices:full_name:Jane Cruz")
assert(indices[1] == "1")
local _indices = db:call("SMEMBERS", "User:1:_indices")
assert(_indices[1] == "User:indices:full_name:Jane Cruz")
-- case 3.3: verify uniques
local id = db:call("HGET", "User:uniques:email", "jane@example.org")
assert(id == "1")
local _uniques = db:call("HGETALL", "User:1:_uniques")
assert(_uniques[1] == "User:uniques:email")
assert(_uniques[2] == "jane@example.org")
-- case 3.4: verify User:all set
local all = db:call("SMEMBERS", "User:all")
assert(#all == 1)
assert(all[1] == "1")
-- case 4: delete an entry
-- this key will be purged together with the model since
-- it's tracked
db:call("SET", "User:1:notes", "some notes for user")
local id = user:delete(db, attributes)
assert("1" == id)
keys = db:call("KEYS", "*") -- only User:id remains at this point
assert(#keys == 1)
assert(keys[1] == "User:id")
-- case 5: finding records via index
attributes.full_name = {"Jane Cruz", "JaneC"}
local id = assert(user:save(db, attributes))
local set = user:find(db, {full_name={"Jane Cruz", "JaneC"}})
local u = set[1]
assert(1 == #set)
assert(u.id == "1")
assert(u.email == "jane@example.org")
assert(u.fname == "Jane")
assert(u.lname == "Cruz")
-- case 6: finding records via unique
local u = user:with(db, "email", "jane@example.org")
assert(u)
assert(u.id == "1")
assert(u.email == "jane@example.org")
assert(u.fname == "Jane")
assert(u.lname == "Cruz")
-- case 7: finding records via fetch
local u = user:fetch(db, "1")
assert(u.id == "1")
assert(u.email == "jane@example.org")
assert(u.fname == "Jane")
assert(u.lname == "Cruz")
-- case 8: saving a model with nothing but attributes
local comment = require("examples/comment")
local attributes = {name="John", body="Hola Mundo"}
local id = assert(comment:save(db, attributes))
assert(comment:fetch(db, id))
-- We've won ;-)
print("All tests passed.")