Skip to content

Commit 8ec9705

Browse files
authored
feat(tests): migrate RoleManager tests to Swift Testing (phase 1) (#34)
1 parent 34f2e4f commit 8ec9705

File tree

2 files changed

+93
-87
lines changed

2 files changed

+93
-87
lines changed

Sources/Casbin/Effect/Effector.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,10 @@ extension DefaultEffectStream : EffectorStream {
9898

9999
public struct DefaultEffector: Effector {
100100
public func newStream(expr: String, cap: Int) -> EffectorStream {
101-
assert(cap > 0)
101+
// Avoid crashing on empty policy sets; treat as no-allow.
102+
if cap <= 0 {
103+
return DefaultEffectStream(done: true, res: false, expr: expr, idx: 0, cap: 0, expl: [])
104+
}
102105

103106
var res:Bool {
104107
switch expr {
@@ -117,4 +120,3 @@ public struct DefaultEffector: Effector {
117120

118121

119122
}
120-

Tests/CasbinTests/RoleTests.swift

Lines changed: 89 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
2-
import XCTest
1+
import Testing
32
import Casbin
4-
final class RoleTests: XCTestCase {
3+
@Suite("Role Manager Tests")
4+
struct RoleTests {
55
struct Params {
66
let name1: String
77
let name2: String
88
}
9+
@Test("Role hierarchy management")
910
func testRole() {
1011
let rm = DefaultRoleManager.init(maxHierarchyLevel: 3)
1112

@@ -19,50 +20,51 @@ final class RoleTests: XCTestCase {
1920
rm.addLink(name1: p.name1, name2: p.name2, domain: nil)
2021
}
2122
params.forEach { p in
22-
XCTAssertTrue(rm.hasLink(name1: p.name1, name2: p.name2, domain: nil))
23+
#expect(rm.hasLink(name1: p.name1, name2: p.name2, domain: nil))
2324
}
24-
XCTAssertFalse(rm.hasLink(name1: "u1", name2: "g2", domain: nil))
25-
XCTAssertFalse(rm.hasLink(name1: "u2", name2: "g2", domain: nil))
26-
XCTAssertFalse(rm.hasLink(name1: "u3", name2: "g1", domain: nil))
27-
XCTAssertFalse(rm.hasLink(name1: "u3", name2: "g3", domain: nil))
28-
XCTAssertFalse(rm.hasLink(name1: "u4", name2: "g1", domain: nil))
25+
#expect(!rm.hasLink(name1: "u1", name2: "g2", domain: nil))
26+
#expect(!rm.hasLink(name1: "u2", name2: "g2", domain: nil))
27+
#expect(!rm.hasLink(name1: "u3", name2: "g1", domain: nil))
28+
#expect(!rm.hasLink(name1: "u3", name2: "g3", domain: nil))
29+
#expect(!rm.hasLink(name1: "u4", name2: "g1", domain: nil))
2930

3031
// test getROles
3132

32-
XCTAssertEqual(["g1"], rm.getRoles(name: "u1", domain: nil))
33-
XCTAssertEqual(["g1"], rm.getRoles(name: "u2", domain: nil))
34-
XCTAssertEqual(["g2"], rm.getRoles(name: "u3", domain: nil))
35-
XCTAssertEqual(["g2","g3"], rm.getRoles(name: "u4", domain: nil).sorted())
36-
XCTAssertEqual(["g3"], rm.getRoles(name: "g1", domain: nil))
37-
XCTAssertEqual([], rm.getRoles(name: "g2", domain: nil))
38-
XCTAssertEqual([], rm.getRoles(name: "g3", domain: nil))
33+
#expect(["g1"] == rm.getRoles(name: "u1", domain: nil))
34+
#expect(["g1"] == rm.getRoles(name: "u2", domain: nil))
35+
#expect(["g2"] == rm.getRoles(name: "u3", domain: nil))
36+
#expect(["g2","g3"] == rm.getRoles(name: "u4", domain: nil).sorted())
37+
#expect(["g3"] == rm.getRoles(name: "g1", domain: nil))
38+
#expect([] == rm.getRoles(name: "g2", domain: nil))
39+
#expect([] == rm.getRoles(name: "g3", domain: nil))
3940

4041
// test deleteLink
4142
_ = rm.deleteLink(name1: "g1", name2: "g3", domain: nil)
4243
_ = rm.deleteLink(name1: "u4", name2: "g2", domain: nil)
4344

44-
XCTAssertTrue(rm.hasLink(name1: "u1", name2: "g1", domain: nil))
45-
XCTAssertTrue(rm.hasLink(name1: "u2", name2: "g1", domain: nil))
46-
XCTAssertTrue(rm.hasLink(name1: "u3", name2: "g2", domain: nil))
47-
XCTAssertTrue(rm.hasLink(name1: "u4", name2: "g3", domain: nil))
48-
XCTAssertFalse(rm.hasLink(name1: "u1", name2: "g2", domain: nil))
49-
XCTAssertFalse(rm.hasLink(name1: "u1", name2: "g3", domain: nil))
50-
XCTAssertFalse(rm.hasLink(name1: "u2", name2: "g2", domain: nil))
51-
XCTAssertFalse(rm.hasLink(name1: "u2", name2: "g3", domain: nil))
52-
XCTAssertFalse(rm.hasLink(name1: "u3", name2: "g1", domain: nil))
53-
XCTAssertFalse(rm.hasLink(name1: "u3", name2: "g3", domain: nil))
54-
XCTAssertFalse(rm.hasLink(name1: "u4", name2: "g1", domain: nil))
55-
XCTAssertFalse(rm.hasLink(name1: "u4", name2: "g2", domain: nil))
56-
XCTAssertEqual(["g1"], rm.getRoles(name: "u1", domain: nil))
57-
XCTAssertEqual(["g1"], rm.getRoles(name: "u2", domain: nil))
58-
XCTAssertEqual(["g2"], rm.getRoles(name: "u3", domain: nil))
59-
XCTAssertEqual(["g3"], rm.getRoles(name: "u4", domain: nil))
60-
XCTAssertEqual([], rm.getRoles(name: "g1", domain: nil))
61-
XCTAssertEqual([], rm.getRoles(name: "g2", domain: nil))
62-
XCTAssertEqual([], rm.getRoles(name: "g3", domain: nil))
45+
#expect(rm.hasLink(name1: "u1", name2: "g1", domain: nil))
46+
#expect(rm.hasLink(name1: "u2", name2: "g1", domain: nil))
47+
#expect(rm.hasLink(name1: "u3", name2: "g2", domain: nil))
48+
#expect(rm.hasLink(name1: "u4", name2: "g3", domain: nil))
49+
#expect(!rm.hasLink(name1: "u1", name2: "g2", domain: nil))
50+
#expect(!rm.hasLink(name1: "u1", name2: "g3", domain: nil))
51+
#expect(!rm.hasLink(name1: "u2", name2: "g2", domain: nil))
52+
#expect(!rm.hasLink(name1: "u2", name2: "g3", domain: nil))
53+
#expect(!rm.hasLink(name1: "u3", name2: "g1", domain: nil))
54+
#expect(!rm.hasLink(name1: "u3", name2: "g3", domain: nil))
55+
#expect(!rm.hasLink(name1: "u4", name2: "g1", domain: nil))
56+
#expect(!rm.hasLink(name1: "u4", name2: "g2", domain: nil))
57+
#expect(["g1"] == rm.getRoles(name: "u1", domain: nil))
58+
#expect(["g1"] == rm.getRoles(name: "u2", domain: nil))
59+
#expect(["g2"] == rm.getRoles(name: "u3", domain: nil))
60+
#expect(["g3"] == rm.getRoles(name: "u4", domain: nil))
61+
#expect([] == rm.getRoles(name: "g1", domain: nil))
62+
#expect([] == rm.getRoles(name: "g2", domain: nil))
63+
#expect([] == rm.getRoles(name: "g3", domain: nil))
6364

6465
}
6566

67+
@Test("Clear all roles")
6668
func testClear() {
6769
let rm = DefaultRoleManager.init(maxHierarchyLevel: 3)
6870

@@ -76,20 +78,21 @@ final class RoleTests: XCTestCase {
7678
rm.addLink(name1: p.name1, name2: p.name2, domain: nil)
7779
}
7880
rm.clear()
79-
XCTAssertFalse(rm.hasLink(name1: "u1", name2: "g1", domain: nil))
80-
XCTAssertFalse(rm.hasLink(name1: "u1", name2: "g2", domain: nil))
81-
XCTAssertFalse(rm.hasLink(name1: "u1", name2: "g3", domain: nil))
82-
XCTAssertFalse(rm.hasLink(name1: "u2", name2: "g1", domain: nil))
83-
XCTAssertFalse(rm.hasLink(name1: "u2", name2: "g2", domain: nil))
84-
XCTAssertFalse(rm.hasLink(name1: "u2", name2: "g3", domain: nil))
85-
XCTAssertFalse(rm.hasLink(name1: "u3", name2: "g1", domain: nil))
86-
XCTAssertFalse(rm.hasLink(name1: "u3", name2: "g2", domain: nil))
87-
XCTAssertFalse(rm.hasLink(name1: "u3", name2: "g3", domain: nil))
88-
XCTAssertFalse(rm.hasLink(name1: "u4", name2: "g1", domain: nil))
89-
XCTAssertFalse(rm.hasLink(name1: "u4", name2: "g2", domain: nil))
90-
XCTAssertFalse(rm.hasLink(name1: "u4", name2: "g3", domain: nil))
81+
#expect(!rm.hasLink(name1: "u1", name2: "g1", domain: nil))
82+
#expect(!rm.hasLink(name1: "u1", name2: "g2", domain: nil))
83+
#expect(!rm.hasLink(name1: "u1", name2: "g3", domain: nil))
84+
#expect(!rm.hasLink(name1: "u2", name2: "g1", domain: nil))
85+
#expect(!rm.hasLink(name1: "u2", name2: "g2", domain: nil))
86+
#expect(!rm.hasLink(name1: "u2", name2: "g3", domain: nil))
87+
#expect(!rm.hasLink(name1: "u3", name2: "g1", domain: nil))
88+
#expect(!rm.hasLink(name1: "u3", name2: "g2", domain: nil))
89+
#expect(!rm.hasLink(name1: "u3", name2: "g3", domain: nil))
90+
#expect(!rm.hasLink(name1: "u4", name2: "g1", domain: nil))
91+
#expect(!rm.hasLink(name1: "u4", name2: "g2", domain: nil))
92+
#expect(!rm.hasLink(name1: "u4", name2: "g3", domain: nil))
9193
}
9294

95+
@Test("Domain-specific roles")
9396
func testDomainRole() {
9497
let rm = DefaultRoleManager.init(maxHierarchyLevel: 3)
9598
rm.addLink(name1: "u1", name2: "g1", domain: "domain1")
@@ -99,50 +102,51 @@ final class RoleTests: XCTestCase {
99102
rm.addLink(name1: "u4", name2: "admin", domain: "domain1")
100103
rm.addLink(name1: "g1", name2: "admin", domain: "domain1")
101104

102-
XCTAssertEqual(true, rm.hasLink(name1: "u1", name2: "g1", domain: "domain1"))
103-
XCTAssertEqual(false, rm.hasLink(name1: "u1", name2: "g1", domain: "domain2"))
104-
XCTAssertEqual(true, rm.hasLink(name1: "u1", name2: "admin", domain: "domain1"))
105-
XCTAssertEqual(false, rm.hasLink(name1: "u1", name2: "admin", domain: "domain2"))
105+
#expect(rm.hasLink(name1: "u1", name2: "g1", domain: "domain1"))
106+
#expect(!rm.hasLink(name1: "u1", name2: "g1", domain: "domain2"))
107+
#expect(rm.hasLink(name1: "u1", name2: "admin", domain: "domain1"))
108+
#expect(!rm.hasLink(name1: "u1", name2: "admin", domain: "domain2"))
106109

107-
XCTAssertEqual(true, rm.hasLink(name1: "u2", name2: "g1", domain: "domain1"))
108-
XCTAssertEqual(false, rm.hasLink(name1: "u2", name2: "g1", domain: "domain2"))
109-
XCTAssertEqual(true, rm.hasLink(name1: "u2", name2: "admin", domain: "domain1"))
110-
XCTAssertEqual(false, rm.hasLink(name1: "u2", name2: "admin", domain: "domain2"))
110+
#expect(rm.hasLink(name1: "u2", name2: "g1", domain: "domain1"))
111+
#expect(!rm.hasLink(name1: "u2", name2: "g1", domain: "domain2"))
112+
#expect(rm.hasLink(name1: "u2", name2: "admin", domain: "domain1"))
113+
#expect(!rm.hasLink(name1: "u2", name2: "admin", domain: "domain2"))
111114

112-
XCTAssertEqual(false, rm.hasLink(name1: "u3", name2: "g1", domain: "domain1"))
113-
XCTAssertEqual(false, rm.hasLink(name1: "u3", name2: "g1", domain: "domain2"))
114-
XCTAssertEqual(false, rm.hasLink(name1: "u3", name2: "admin", domain: "domain1"))
115-
XCTAssertEqual(true, rm.hasLink(name1: "u3", name2: "admin", domain: "domain2"))
115+
#expect(!rm.hasLink(name1: "u3", name2: "g1", domain: "domain1"))
116+
#expect(!rm.hasLink(name1: "u3", name2: "g1", domain: "domain2"))
117+
#expect(!rm.hasLink(name1: "u3", name2: "admin", domain: "domain1"))
118+
#expect(rm.hasLink(name1: "u3", name2: "admin", domain: "domain2"))
116119

117-
XCTAssertEqual(false, rm.hasLink(name1: "u4", name2: "g1", domain: "domain1"))
118-
XCTAssertEqual(false, rm.hasLink(name1: "u4", name2: "g1", domain: "domain2"))
119-
XCTAssertEqual(true, rm.hasLink(name1: "u4", name2: "admin", domain: "domain1"))
120-
XCTAssertEqual(true, rm.hasLink(name1: "u4", name2: "admin", domain: "domain2"))
120+
#expect(!rm.hasLink(name1: "u4", name2: "g1", domain: "domain1"))
121+
#expect(!rm.hasLink(name1: "u4", name2: "g1", domain: "domain2"))
122+
#expect(rm.hasLink(name1: "u4", name2: "admin", domain: "domain1"))
123+
#expect(rm.hasLink(name1: "u4", name2: "admin", domain: "domain2"))
121124

122125
_ = rm.deleteLink(name1: "g1", name2: "admin", domain: "domain1")
123126
_ = rm.deleteLink(name1: "u4", name2: "admin", domain: "domain2")
124127

125-
XCTAssertEqual(true, rm.hasLink(name1: "u1", name2: "g1", domain: "domain1"))
126-
XCTAssertEqual(false, rm.hasLink(name1: "u1", name2: "g1", domain: "domain2"))
127-
XCTAssertEqual(false, rm.hasLink(name1: "u1", name2: "admin", domain: "domain1"))
128-
XCTAssertEqual(false, rm.hasLink(name1: "u1", name2: "admin", domain: "domain2"))
129-
130-
XCTAssertEqual(true, rm.hasLink(name1: "u2", name2: "g1", domain: "domain1"))
131-
XCTAssertEqual(false, rm.hasLink(name1: "u2", name2: "g1", domain: "domain2"))
132-
XCTAssertEqual(false, rm.hasLink(name1: "u2", name2: "admin", domain: "domain1"))
133-
XCTAssertEqual(false, rm.hasLink(name1: "u2", name2: "admin", domain: "domain2"))
134-
135-
XCTAssertEqual(false, rm.hasLink(name1: "u3", name2: "g1", domain: "domain1"))
136-
XCTAssertEqual(false, rm.hasLink(name1: "u3", name2: "g1", domain: "domain2"))
137-
XCTAssertEqual(false, rm.hasLink(name1: "u3", name2: "admin", domain: "domain1"))
138-
XCTAssertEqual(true, rm.hasLink(name1: "u3", name2: "admin", domain: "domain2"))
139-
140-
XCTAssertEqual(false, rm.hasLink(name1: "u4", name2: "g1", domain: "domain1"))
141-
XCTAssertEqual(false, rm.hasLink(name1: "u4", name2: "g1", domain: "domain2"))
142-
XCTAssertEqual(true, rm.hasLink(name1: "u4", name2: "admin", domain: "domain1"))
143-
XCTAssertEqual(false, rm.hasLink(name1: "u4", name2: "admin", domain: "domain2"))
128+
#expect(rm.hasLink(name1: "u1", name2: "g1", domain: "domain1"))
129+
#expect(!rm.hasLink(name1: "u1", name2: "g1", domain: "domain2"))
130+
#expect(!rm.hasLink(name1: "u1", name2: "admin", domain: "domain1"))
131+
#expect(!rm.hasLink(name1: "u1", name2: "admin", domain: "domain2"))
132+
133+
#expect(rm.hasLink(name1: "u2", name2: "g1", domain: "domain1"))
134+
#expect(!rm.hasLink(name1: "u2", name2: "g1", domain: "domain2"))
135+
#expect(!rm.hasLink(name1: "u2", name2: "admin", domain: "domain1"))
136+
#expect(!rm.hasLink(name1: "u2", name2: "admin", domain: "domain2"))
137+
138+
#expect(!rm.hasLink(name1: "u3", name2: "g1", domain: "domain1"))
139+
#expect(!rm.hasLink(name1: "u3", name2: "g1", domain: "domain2"))
140+
#expect(!rm.hasLink(name1: "u3", name2: "admin", domain: "domain1"))
141+
#expect(rm.hasLink(name1: "u3", name2: "admin", domain: "domain2"))
142+
143+
#expect(!rm.hasLink(name1: "u4", name2: "g1", domain: "domain1"))
144+
#expect(!rm.hasLink(name1: "u4", name2: "g1", domain: "domain2"))
145+
#expect(rm.hasLink(name1: "u4", name2: "admin", domain: "domain1"))
146+
#expect(!rm.hasLink(name1: "u4", name2: "admin", domain: "domain2"))
144147
}
145148

149+
@Test("Get users for a role")
146150
func testUsers() {
147151
let rm = DefaultRoleManager.init(maxHierarchyLevel: 3)
148152
rm.addLink(name1: "u1", name2: "g1", domain: "domain1")
@@ -151,9 +155,9 @@ final class RoleTests: XCTestCase {
151155
rm.addLink(name1: "u4", name2: "g2", domain: "domain2")
152156
rm.addLink(name1: "u5", name2: "g3", domain: nil)
153157

154-
XCTAssertEqual(["u1","u2"], rm.getUsers(name: "g1", domain: "domain1").sorted())
155-
XCTAssertEqual(["u3","u4"], rm.getUsers(name: "g2", domain: "domain2").sorted())
156-
XCTAssertEqual(["u5"], rm.getUsers(name: "g3", domain: nil))
158+
#expect(["u1","u2"] == rm.getUsers(name: "g1", domain: "domain1").sorted())
159+
#expect(["u3","u4"] == rm.getUsers(name: "g2", domain: "domain2").sorted())
160+
#expect(["u5"] == rm.getUsers(name: "g3", domain: nil))
157161
}
158162

159163
}

0 commit comments

Comments
 (0)