Skip to content

Commit 9c06420

Browse files
committed
test: add GroupTests
1 parent c434012 commit 9c06420

13 files changed

+665
-32
lines changed

Microsoft.SCIM.PlaywrightTests/GroupTests.cs

Lines changed: 475 additions & 0 deletions
Large diffs are not rendered by default.

Microsoft.SCIM.PlaywrightTests/UserTests.cs

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,6 @@
55

66
namespace PlaywrightTests;
77

8-
public static class TestContext
9-
{
10-
public static string? User1 { get; set; }
11-
public static string? User2 { get; set; }
12-
}
13-
148
[TestFixture]
159
public class UserTests : PlaywrightTest
1610
{
@@ -38,9 +32,9 @@ public async Task PostUser()
3832
Assert.True(userJson.HasValue);
3933
Assert.True(userJson!.Value.TryGetProperty("id", out var id));
4034
Assert.That(id.ValueKind, Is.EqualTo(JsonValueKind.String));
41-
TestContext.User1 = id.GetString();
42-
Assert.False(string.IsNullOrWhiteSpace(TestContext.User1));
43-
Assert.Pass($"User with ID '{TestContext.User1}' added!");
35+
SharedTestContext.User1 = id.GetString();
36+
Assert.False(string.IsNullOrWhiteSpace(SharedTestContext.User1));
37+
Assert.Pass($"User with ID '{SharedTestContext.User1}' added!");
4438
}
4539

4640
[Test, Order(1)]
@@ -60,37 +54,37 @@ public async Task PostEnterpriseUser()
6054
Assert.True(userJson.HasValue);
6155
Assert.True(userJson!.Value.TryGetProperty("id", out var id));
6256
Assert.That(id.ValueKind, Is.EqualTo(JsonValueKind.String));
63-
TestContext.User2 = id.GetString();
64-
Assert.False(string.IsNullOrWhiteSpace(TestContext.User2));
65-
Assert.Pass($"User with ID '{TestContext.User2}' added!");
57+
SharedTestContext.User2 = id.GetString();
58+
Assert.False(string.IsNullOrWhiteSpace(SharedTestContext.User2));
59+
Assert.Pass($"User with ID '{SharedTestContext.User2}' added!");
6660
}
6761

6862
[Test, Order(2)]
6963
public async Task GetUser1()
7064
{
71-
var userResponse = await Request.GetAsync($"Users/{TestContext.User1}");
65+
var userResponse = await Request.GetAsync($"Users/{SharedTestContext.User1}");
7266
Assert.True(userResponse.Ok);
7367
Assert.That(userResponse.Status, Is.EqualTo(200));
7468

7569
var userJson = await userResponse.JsonAsync();
7670
Assert.True(userJson.HasValue);
7771
Assert.True(userJson!.Value.TryGetProperty("id", out var id));
7872
Assert.That(id.ValueKind, Is.EqualTo(JsonValueKind.String));
79-
Assert.That(id.ToString(), Is.EqualTo(TestContext.User1));
73+
Assert.That(id.ToString(), Is.EqualTo(SharedTestContext.User1));
8074
}
8175

8276
[Test, Order(2)]
8377
public async Task GetUser2()
8478
{
85-
var userResponse = await Request.GetAsync($"Users/{TestContext.User2}");
79+
var userResponse = await Request.GetAsync($"Users/{SharedTestContext.User2}");
8680
Assert.True(userResponse.Ok);
8781
Assert.That(userResponse.Status, Is.EqualTo(200));
8882

8983
var userJson = await userResponse.JsonAsync();
9084
Assert.True(userJson.HasValue);
9185
Assert.True(userJson!.Value.TryGetProperty("id", out var id));
9286
Assert.That(id.ValueKind, Is.EqualTo(JsonValueKind.String));
93-
Assert.That(id.ToString(), Is.EqualTo(TestContext.User2));
87+
Assert.That(id.ToString(), Is.EqualTo(SharedTestContext.User2));
9488
}
9589

9690
[Test, Order(2)]
@@ -112,7 +106,7 @@ public async Task GetUserAttributes()
112106
Assert.True(resource.TryGetProperty("id", out var id));
113107
Assert.That(id.ValueKind, Is.EqualTo(JsonValueKind.String));
114108
var idValue = id.GetString();
115-
Assert.That(idValue, Is.AnyOf([TestContext.User1, TestContext.User2]));
109+
Assert.That(idValue, Is.AnyOf([SharedTestContext.User1, SharedTestContext.User2]));
116110
}
117111
}
118112

@@ -135,15 +129,15 @@ public async Task GetUserFilters()
135129
Assert.True(resource.TryGetProperty("id", out var id));
136130
Assert.That(id.ValueKind, Is.EqualTo(JsonValueKind.String));
137131
var idValue = id.GetString();
138-
Assert.That(idValue, Is.EqualTo(TestContext.User1));
132+
Assert.That(idValue, Is.EqualTo(SharedTestContext.User1));
139133
}
140134
}
141135

142136
[Test, Order(3)]
143137
public async Task PatchUser1()
144138
{
145139
var data = await JsonLoader.LoadJsonDataAsync("./json/patch_user1.json");
146-
var patchResponse = await Request.PatchAsync($"Users/{TestContext.User1}", new()
140+
var patchResponse = await Request.PatchAsync($"Users/{SharedTestContext.User1}", new()
147141
{
148142
DataString = data,
149143
Headers = new KeyValuePair<string, string>[] { new("Content-Type", "application/json") }
@@ -154,32 +148,32 @@ public async Task PatchUser1()
154148
var userJson = await patchResponse.JsonAsync();
155149
Assert.True(userJson.HasValue);
156150
Assert.True(userJson!.Value.TryGetProperty("id", out var id));
157-
Assert.That(id.ToString(), Is.EqualTo(TestContext.User1));
151+
Assert.That(id.ToString(), Is.EqualTo(SharedTestContext.User1));
158152
Assert.True(userJson.Value.TryGetProperty("userName", out var userName));
159153
Assert.That(userName.GetString(), Is.EqualTo("ryan3"));
160154
}
161155

162156
[Test, Order(4)]
163157
public async Task CheckUser1Patch()
164158
{
165-
var patchResponse = await Request.GetAsync($"Users/{TestContext.User1}");
159+
var patchResponse = await Request.GetAsync($"Users/{SharedTestContext.User1}");
166160
Assert.True(patchResponse.Ok);
167161
Assert.That(patchResponse.Status, Is.EqualTo(200));
168162

169163
var userJson = await patchResponse.JsonAsync();
170164
Assert.True(userJson.HasValue);
171165
Assert.True(userJson!.Value.TryGetProperty("id", out var id));
172-
Assert.That(id.ToString(), Is.EqualTo(TestContext.User1));
166+
Assert.That(id.ToString(), Is.EqualTo(SharedTestContext.User1));
173167
Assert.True(userJson.Value.TryGetProperty("userName", out var userName));
174168
Assert.That(userName.GetString(), Is.EqualTo("ryan3"));
175169
}
176170

177171
[Test, Order(4)]
178172
public async Task PutUser2()
179173
{
180-
Assert.False(string.IsNullOrWhiteSpace(TestContext.User2));
181-
var data = await JsonLoader.LoadJsonDataAsync("./json/put_user2.json", "id2", TestContext.User2!);
182-
var putResponse = await Request.PutAsync($"Users/{TestContext.User2}",
174+
Assert.False(string.IsNullOrWhiteSpace(SharedTestContext.User2));
175+
var data = await JsonLoader.LoadJsonDataAsync("./json/put_user2.json", "id2", SharedTestContext.User2!);
176+
var putResponse = await Request.PutAsync($"Users/{SharedTestContext.User2}",
183177
new()
184178
{
185179
DataString = data,
@@ -191,23 +185,23 @@ public async Task PutUser2()
191185
var userJson = await putResponse.JsonAsync();
192186
Assert.True(userJson.HasValue);
193187
Assert.True(userJson!.Value.TryGetProperty("id", out var id));
194-
Assert.That(id.ToString(), Is.EqualTo(TestContext.User2));
188+
Assert.That(id.ToString(), Is.EqualTo(SharedTestContext.User2));
195189
Assert.True(userJson.Value.TryGetProperty("userName", out var userName));
196190
Assert.That(userName.GetString(), Is.EqualTo("UserNameReplace2"));
197191
}
198192

199193
[Test, Order(5)]
200194
public async Task CheckUser2Put()
201195
{
202-
Assert.False(string.IsNullOrWhiteSpace(TestContext.User2));
203-
var userResponse = await Request.GetAsync($"Users/{TestContext.User2}");
196+
Assert.False(string.IsNullOrWhiteSpace(SharedTestContext.User2));
197+
var userResponse = await Request.GetAsync($"Users/{SharedTestContext.User2}");
204198
Assert.True(userResponse.Ok);
205199
Assert.That(userResponse.Status, Is.EqualTo(200));
206200

207201
var userJson = await userResponse.JsonAsync();
208202
Assert.True(userJson.HasValue);
209203
Assert.True(userJson!.Value.TryGetProperty("id", out var id));
210-
Assert.That(id.ToString(), Is.EqualTo(TestContext.User2));
204+
Assert.That(id.ToString(), Is.EqualTo(SharedTestContext.User2));
211205
Assert.True(userJson.Value.TryGetProperty("userName", out var userName));
212206
Assert.That(userName.GetString(), Is.EqualTo("UserNameReplace2"));
213207
}
@@ -263,15 +257,15 @@ private async Task GetAccessToken()
263257
[Test]
264258
public async Task DeleteUser1()
265259
{
266-
var userResponse = await Request.DeleteAsync($"Users/{TestContext.User1}");
260+
var userResponse = await Request.DeleteAsync($"Users/{SharedTestContext.User1}");
267261
Assert.True(userResponse.Ok);
268262
Assert.That(userResponse.Status, Is.EqualTo(204));
269263
}
270-
264+
271265
[Test]
272266
public async Task DeleteUser2()
273267
{
274-
var userResponse = await Request.DeleteAsync($"Users/{TestContext.User2}");
268+
var userResponse = await Request.DeleteAsync($"Users/{SharedTestContext.User2}");
275269
Assert.True(userResponse.Ok);
276270
Assert.That(userResponse.Status, Is.EqualTo(204));
277271
}

Microsoft.SCIM.PlaywrightTests/Utils/JsonLoader.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,25 @@ public static async Task<string> LoadJsonDataAsync(string filePath, string varia
1414
return jsonContent;
1515
}
1616

17+
public static async Task<string> LoadJsonDataAsync(string filePath, string[] variables, string[] values)
18+
{
19+
if (variables.Length != values.Length)
20+
{
21+
throw new ArgumentException("The number of variables and values must be the same.");
22+
}
23+
24+
// Read the content of the JSON file
25+
string jsonContent = await File.ReadAllTextAsync(filePath);
26+
// Replace the placeholder with the actual value
27+
for (int i = 0; i < variables.Length; i++)
28+
{
29+
jsonContent = jsonContent.Replace("{{" + variables[i] + "}}", values[i]);
30+
}
31+
32+
// Parse the JSON content into a dynamic object
33+
return jsonContent;
34+
}
35+
1736
public static async Task<string> LoadJsonDataAsync(string filePath)
1837
{
1938
// Read the content of the JSON file
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace PlaywrightTests.Utils;
2+
public static class SharedTestContext
3+
{
4+
public static string? User1 { get; set; }
5+
public static string? User2 { get; set; }
6+
public static string? User3 { get; set; }
7+
public static string? User4 { get; set; }
8+
public static string? Group1 { get; set; }
9+
public static string? Group2 { get; set; }
10+
public static string? Group3 { get; set; }
11+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"externalId":"${__UUID}",
3+
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
4+
"displayName": "Group1DisplayName",
5+
"members":[]
6+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
3+
"externalId":"${__UUID}",
4+
"displayName": "GroupDisplayName2",
5+
"members":
6+
[
7+
{
8+
"value":"{{id3}}",
9+
"display":"VP"
10+
}
11+
]
12+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
3+
"externalId":"${__UUID}",
4+
"displayName": "GroupDisplayName3",
5+
"members":[]
6+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"schemas": [
3+
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
4+
],
5+
"Operations": [
6+
{
7+
"name": "addMember",
8+
"op": "add",
9+
"path": "members",
10+
"value": [
11+
{
12+
"displayName":"{{displayName}}",
13+
"value":"{{id}}"
14+
}
15+
]
16+
17+
}
18+
]
19+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"schemas": [
3+
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
4+
],
5+
"Operations": [
6+
{
7+
"op": "remove",
8+
"path": "members"
9+
}
10+
]
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"schemas": [
3+
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
4+
],
5+
"Operations": [
6+
{
7+
"op": "remove",
8+
"path": "members[value eq \"{{id}}\"]"
9+
}
10+
]
11+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
3+
"id":"{{groupid3}}",
4+
"displayName": "putName",
5+
"members":[
6+
{
7+
"value": "{{id3}}",
8+
"display":"VP"
9+
},
10+
{
11+
"value":"{{id4}}",
12+
"display":"SenorVP"
13+
}
14+
]
15+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"userName": "UserName333",
3+
"active": true,
4+
"displayName": "lennay",
5+
"schemas": [
6+
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",
7+
"urn:ietf:params:scim:schemas:core:2.0:User"
8+
],
9+
"externalId": "${__UUID}",
10+
"name": {
11+
"formatted": "Adrew Ryan",
12+
"familyName": "Ryan",
13+
"givenName": "Andrew"
14+
},
15+
"emails": [
16+
{
17+
"Primary": true,
18+
"type": "work",
19+
"value": "[email protected]"
20+
},
21+
{
22+
"Primary": false,
23+
"type": "home",
24+
"value": "[email protected]"
25+
}
26+
]
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"userName": "UserName444",
3+
"active": true,
4+
"displayName": "lennay",
5+
"schemas": [
6+
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",
7+
"urn:ietf:params:scim:schemas:core:2.0:User"
8+
],
9+
"externalId": "${__UUID}",
10+
"name": {
11+
"formatted": "Adrew Ryan",
12+
"familyName": "Ryan",
13+
"givenName": "Andrew"
14+
},
15+
"emails": [
16+
{
17+
"Primary": true,
18+
"type": "work",
19+
"value": "[email protected]"
20+
},
21+
{
22+
"Primary": false,
23+
"type": "home",
24+
"value": "[email protected]"
25+
}
26+
]
27+
}

0 commit comments

Comments
 (0)