-
Notifications
You must be signed in to change notification settings - Fork 1
/
scratch
156 lines (143 loc) · 4.45 KB
/
scratch
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
decouple policy & constraint eval from the policy and constraint classes
=> in evaluator implementations
context 'with no obligations' do
it 'should handle empty policies' do
p = Policy.new
p.should_not == nil
end
end
context 'with default standard evaluator' do
it 'should handle single obligations' do
ra1 = Restrict.new
ra2 = Restrict.new
p = Policy.new do
obligate ra1
end
ctx = p.context
obligations = ctx[:obligations]
obligations[0].obligatees[0].should == ra1
end
it 'should handle multiple obligations' do
ra1 = Restrict.new
ra2 = Restrict.new
ra3 = Restrict.new
ra4 = Restrict.new
p = Policy.new do
obligate ra1 do
with ra2
end
obligate ra3 do
with ra4
end
end
ctx = p.context
obligations = ctx[:obligations]
obligations.size.should == 2
obligations[0].obligatees[0].should == ra1
obligations[0].obligators[0].should == ra2
obligations[1].obligatees[0].should == ra3
obligations[1].obligators[0].should == ra4
end
it 'should handle one-to-many obligations' do
ra1, ra2, ra3 = Restrict.new, Restrict.new, Restrict.new
p = Policy.new do
obligate ra1 do
with ra2, ra3
end
end
ctx = p.context
obligations = ctx[:obligations]
obligations.size.should == 1
obligations[0].obligatees[0].should == ra1
obligations[0].obligators[0].should == ra2
obligations[0].obligators[1].should == ra3
end
it 'should handle many-to-one obligations' do
ra1, ra2, ra3 = Restrict.new, Restrict.new, Restrict.new
p = Policy.new do
obligate ra1, ra2 do
with ra3
end
end
ctx = p.context
obligations = ctx[:obligations]
obligations.size.should == 1
obligations[0].obligatees[0].should == ra1
obligations[0].obligatees[1].should == ra2
obligations[0].obligators[0].should == ra3
end
it 'should handle many-to-many obligations' do
ra1, ra2, ra3, ra4 = Restrict.new, Restrict.new, Restrict.new, Restrict.new
p = Policy.new do
obligate ra1 do
with ra2
end
obligate ra2, ra3 do
with ra4
end
obligate ra1, do
with ra4, ra3
end
end
ctx = p.context
obligations = ctx[:obligations]
obligations.size.should == 3
obligations[0].obligatees[0].should == ra1
obligations[0].obligators[0].should == ra2
obligations[1].obligatees[0].should == ra2
obligations[1].obligatees[1].should == ra3
obligations[1].obligators[0].should == ra4
obligations[2].obligatees[0].should == ra1
obligations[2].obligators[0].should == ra4
obligations[2].obligators[1].should == ra3
end
it 'should handle no permissions' do
p = Policy.new do
permit
end
ctx = p.context
included_activities = ctx[:included_activities]
included_activities.size.should == 0
end
it 'should handle onen permission' do
ra1 = Restrict.new
p = Policy.new do
permit ra1
end
ctx = p.context
included_activities = ctx[:included_activities]
included_activities.size.should == 1
included_activities[0].should == ra1
end
it 'should handle many permissions' do
ra1, ra2, ra3, ra4 = Restrict.new, Restrict.new, Restrict.new, Restrict.new
ra1 = Restrict.new
p = Policy.new do
permit ra1, ra2, ra3, ra4
end
ctx = p.context
included_activities = ctx[:included_activities]
included_activities.size.should == 4
included_activities[0].should == ra1
included_activities[1].should == ra2
included_activities[2].should == ra3
included_activities[3].should == ra4
end
it 'should handle many permission statments' do
ra1, ra2, ra3, ra4 = Restrict.new, Restrict.new, Restrict.new, Restrict.new
ra1 = Restrict.new
p = Policy.new do
permit ra1
permit ra2
permit ra3
permit ra4
end
ctx = p.context
included_activities = ctx[:included_activities]
included_activities.size.should == 4
included_activities[0].should == ra1
included_activities[1].should == ra2
included_activities[2].should == ra3
included_activities[3].should == ra4
end
end