@@ -100,6 +100,64 @@ func TestTypechecking(t *testing.T) {
100
100
"resource#viewer" : {"user" , "organization" },
101
101
},
102
102
},
103
+ {
104
+ name : "subrel" ,
105
+ schemaText : `
106
+ definition user {}
107
+
108
+ definition organization {
109
+ relation member: user
110
+ }
111
+
112
+ definition resource {
113
+ relation viewer: organization#member
114
+ }
115
+ ` ,
116
+ expected : map [string ][]string {
117
+ "organization#member" : {"user" },
118
+ "resource#viewer" : {"user" },
119
+ },
120
+ },
121
+ {
122
+ name : "wildcard" ,
123
+ schemaText : `
124
+ definition user {}
125
+
126
+ definition organization {
127
+ relation member: user:*
128
+ }
129
+
130
+ definition resource {
131
+ relation viewer: organization#member
132
+ }
133
+ ` ,
134
+ expected : map [string ][]string {
135
+ "organization#member" : {"user" },
136
+ "resource#viewer" : {"user" },
137
+ },
138
+ },
139
+ {
140
+ name : "banned" ,
141
+ schemaText : `
142
+ definition user {}
143
+
144
+ definition organization {
145
+ relation member: user
146
+ }
147
+
148
+ definition resource {
149
+ relation viewer: organization#member
150
+ relation banned: user
151
+ permission view = viewer - banned
152
+ }
153
+ ` ,
154
+ expected : map [string ][]string {
155
+ "organization#member" : {"user" },
156
+ "resource#viewer" : {"user" },
157
+ "resource#banned" : {"user" },
158
+ "resource#view" : {"user" },
159
+ },
160
+ },
103
161
}
104
162
for _ , tc := range tcs {
105
163
t .Run (tc .name , func (t * testing.T ) {
0 commit comments