-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathredis_delete_test.go
103 lines (89 loc) · 2.22 KB
/
redis_delete_test.go
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
package rds_test
import (
"time"
"github.com/rs/rest-layer/schema/query"
"github.com/rs/rest-layer/resource"
)
func (s *RedisMainTestSuite) TestDelete() {
bob := &resource.Item{
ID: "del_id1",
ETag: "asdfq",
Payload: map[string]interface{}{
"age": 35,
"birth": time.Now(),
"height": 185.54576,
"name": "Bob",
"male": true,
},
}
linda := &resource.Item{
ID: "del_id2",
ETag: "asdfq",
Payload: map[string]interface{}{
"age": 7,
"birth": time.Now(),
"height": 55,
"name": "Linda",
},
}
err := s.handler.Insert(s.ctx, []*resource.Item{bob, linda})
s.NoError(err)
// test no errors on deletion
err = s.handler.Delete(s.ctx, bob)
s.NoError(err)
// test Bob is wiped away
q := &query.Query{
Window: &query.Window{Limit: 1},
Predicate: query.Predicate{&query.Equal{Field: "id", Value: "del_id1"}},
}
res, err := s.handler.Find(s.ctx, q)
s.NoError(err)
s.Equal(0, res.Total)
s.Len(res.Items, 0)
s.NotZero(s.client.DbSize().Val())
// test Linda isn't touched
q = &query.Query{
Window: &query.Window{Limit: 100},
Predicate: query.Predicate{&query.Equal{Field: "id", Value: "del_id2"}},
}
res, err = s.handler.Find(s.ctx, q)
s.NoError(err)
s.Equal(1, res.Total)
s.Len(res.Items, 1)
s.Equal("Linda", res.Items[0].Payload["name"])
// test no entries left and DB is totally empty
err = s.handler.Delete(s.ctx, linda)
s.NoError(err)
s.Zero(s.client.DbSize().Val())
}
func (s *RedisMainTestSuite) TestDelete_Conflict() {
bob := &resource.Item{
ID: "del_id3",
ETag: "asdf",
Payload: map[string]interface{}{
"age": 35,
"birth": time.Now(),
"height": 185.54576,
"name": "Bob",
"male": true,
},
}
err := s.handler.Insert(s.ctx, []*resource.Item{bob})
s.NoError(err)
// test conflict error on deletion
bob.ETag = "qwerty"
err = s.handler.Delete(s.ctx, bob)
s.EqualError(err, "Conflict")
// test Bob is not wiped away
q := &query.Query{
Window: &query.Window{Limit: 100},
Predicate: query.Predicate{&query.Equal{Field: "id", Value: "del_id3"}},
}
res, err := s.handler.Find(s.ctx, q)
s.NoError(err)
s.Equal(1, res.Total)
s.Len(res.Items, 1)
s.Equal("del_id3", res.Items[0].ID)
s.Equal("asdf", res.Items[0].ETag)
s.Equal("Bob", res.Items[0].Payload["name"])
}