forked from goncalossilva/acts_as_paranoid
-
Notifications
You must be signed in to change notification settings - Fork 3
/
more_paranoid_test.rb
167 lines (122 loc) · 5.42 KB
/
more_paranoid_test.rb
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
require 'test_helper'
class MoreParanoidTest < ParanoidBaseTest
test "cannot find a paranoid deleted many:many association" do
left = ParanoidManyManyParentLeft.create
right = ParanoidManyManyParentRight.create
left.paranoid_many_many_parent_rights << right
child = left.paranoid_many_many_children.first
left.paranoid_many_many_parent_rights.delete(right)
left.reload
assert_equal [], left.paranoid_many_many_children
assert_equal [], left.paranoid_many_many_parent_rights, "Associated objects not deleted"
assert_equal right, ParanoidManyManyParentRight.find(right.id)
end
test "cannot find a paranoid destroyed many:many association" do
left = ParanoidManyManyParentLeft.create
right = ParanoidManyManyParentRight.create
left.paranoid_many_many_parent_rights << right
child = left.paranoid_many_many_children.first
left.paranoid_many_many_parent_rights.destroy(right)
left.reload
assert_equal [], left.paranoid_many_many_children, "Child records still exist"
assert_equal [], left.paranoid_many_many_parent_rights, "Associated objects not deleted"
# Destroying the associated really destroys it; it's not just removed from the collection
assert_raises ActiveRecord::RecordNotFound do
ParanoidManyManyParentRight.find(right.id)
end
end
test "cannot find a has_many :through object when its linking object is paranoid destroyed" do
left = ParanoidManyManyParentLeft.create
right = ParanoidManyManyParentRight.create
left.paranoid_many_many_parent_rights << right
child = left.paranoid_many_many_children.first
child.destroy
left.reload
assert_equal [], left.paranoid_many_many_parent_rights, "Associated objects not deleted"
end
test "cannot find a paranoid deleted model" do
model = ParanoidBelongsDependant.create
model.destroy
assert_raises ActiveRecord::RecordNotFound do
ParanoidBelongsDependant.find(model.id)
end
end
test "bidirectional has_many :through association clear is paranoid" do
left = ParanoidManyManyParentLeft.create
right = ParanoidManyManyParentRight.create
left.paranoid_many_many_parent_rights << right
child = left.paranoid_many_many_children.first
assert_equal left, child.paranoid_many_many_parent_left, "Child's left parent is incorrect"
assert_equal right, child.paranoid_many_many_parent_right, "Child's right parent is incorrect"
left.paranoid_many_many_parent_rights.clear
assert_paranoid_deletion(child)
end
test "bidirectional has_many :through association destroy is paranoid" do
left = ParanoidManyManyParentLeft.create
right = ParanoidManyManyParentRight.create
left.paranoid_many_many_parent_rights << right
child = left.paranoid_many_many_children.first
assert_equal left, child.paranoid_many_many_parent_left, "Child's left parent is incorrect"
assert_equal right, child.paranoid_many_many_parent_right, "Child's right parent is incorrect"
left.paranoid_many_many_parent_rights.destroy(right)
assert_paranoid_deletion(child)
end
test "bidirectional has_many :through association delete is paranoid" do
left = ParanoidManyManyParentLeft.create
right = ParanoidManyManyParentRight.create
left.paranoid_many_many_parent_rights << right
child = left.paranoid_many_many_children.first
assert_equal left, child.paranoid_many_many_parent_left, "Child's left parent is incorrect"
assert_equal right, child.paranoid_many_many_parent_right, "Child's right parent is incorrect"
left.paranoid_many_many_parent_rights.delete(right)
assert_paranoid_deletion(child)
end
test "delete by multiple id is paranoid" do
model_a = ParanoidBelongsDependant.create
model_b = ParanoidBelongsDependant.create
ParanoidBelongsDependant.delete([model_a.id, model_b.id])
assert_paranoid_deletion(model_a)
assert_paranoid_deletion(model_b)
end
test "destroy by multiple id is paranoid" do
model_a = ParanoidBelongsDependant.create
model_b = ParanoidBelongsDependant.create
ParanoidBelongsDependant.destroy([model_a.id, model_b.id])
assert_paranoid_deletion(model_a)
assert_paranoid_deletion(model_b)
end
test "delete by single id is paranoid" do
model = ParanoidBelongsDependant.create
ParanoidBelongsDependant.delete(model.id)
assert_paranoid_deletion(model)
end
test "destroy by single id is paranoid" do
model = ParanoidBelongsDependant.create
ParanoidBelongsDependant.destroy(model.id)
assert_paranoid_deletion(model)
end
test "instance delete is paranoid" do
model = ParanoidBelongsDependant.create
model.delete
assert_paranoid_deletion(model)
end
test "instance destroy is paranoid" do
model = ParanoidBelongsDependant.create
model.destroy
assert_paranoid_deletion(model)
end
def find_row(model)
sql = "select deleted_at from #{model.class.table_name} where id = #{model.id}"
# puts sql here if you want to debug
model.class.connection.select_one(sql)
end
def assert_paranoid_deletion(model)
row = find_row(model)
assert_not_nil row, "#{model.class} entirely deleted"
assert_not_nil row["deleted_at"], "Deleted at not set"
end
def assert_non_paranoid_deletion(model)
row = find_row(model)
assert_nil row, "#{model.class} still exists"
end
end