Skip to content

Commit d7cbd95

Browse files
committed
Added user tests
1 parent ce2be58 commit d7cbd95

1 file changed

Lines changed: 372 additions & 0 deletions

File tree

tests/UserTests.cs

Lines changed: 372 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,372 @@
1+
using CommunityToolkit.Diagnostics;
2+
using OwlCore.Nomad.Kubo;
3+
using OwlCore.Nomad.Kubo.Events;
4+
using OwlCore.Storage.Memory;
5+
using OwlCore.Storage.System.IO;
6+
using WindowsAppCommunity.Sdk.Models;
7+
using WindowsAppCommunity.Sdk.Nomad;
8+
9+
namespace WindowsAppCommunity.Sdk.Tests;
10+
11+
[TestClass]
12+
public partial class UserTests
13+
{
14+
// Tests to write:
15+
// - Updating and reading name and description
16+
// - Updating and reading links
17+
// - Updating and reading images
18+
// - Updating and reading accent color
19+
// - Updating and reading category
20+
// - Updating and reading user role list
21+
22+
[TestMethod]
23+
public async Task BasicPropertyTestAsync()
24+
{
25+
var cancellationToken = CancellationToken.None;
26+
27+
var temp = new SystemFolder(Path.GetTempPath());
28+
var testTempFolder = await TestSetupHelpers.SafeCreateFolderAsync(temp, $"{nameof(UserTests)}.{nameof(BasicPropertyTestAsync)}.0", cancellationToken);
29+
var testTempFolder2 = await TestSetupHelpers.SafeCreateFolderAsync(temp, $"{nameof(UserTests)}.{nameof(BasicPropertyTestAsync)}.1", cancellationToken);
30+
31+
var kubo = await TestSetupHelpers.BootstrapKuboAsync(testTempFolder, 5013, 8013, cancellationToken);
32+
var kubo2 = await TestSetupHelpers.BootstrapKuboAsync(testTempFolder2, 5014, 8014, cancellationToken);
33+
34+
await TestSetupHelpers.ConnectSwarmsAsync([kubo, kubo2], cancellationToken);
35+
36+
var kuboOptions = new KuboOptions
37+
{
38+
IpnsLifetime = TimeSpan.FromDays(1),
39+
ShouldPin = false,
40+
UseCache = false,
41+
};
42+
43+
var userRoamingKeyName = "TestUser.Roaming";
44+
var userLocalKeyName = "TestUser.Local";
45+
var publisherRoamingKeyName = "TestPublisher.Roaming";
46+
var publisherLocalKeyName = "TestPublisher.Local";
47+
var projectRoamingKeyName = "TestProject.Roaming";
48+
var projectLocalKeyName = "TestUser.Local";
49+
50+
RepositoryContainer repositoryContainer = TestSetupHelpers.CreateTestRepositories(kuboOptions, kubo.Client, projectRoamingKeyName, projectLocalKeyName, publisherRoamingKeyName, publisherLocalKeyName, userRoamingKeyName, userLocalKeyName);
51+
52+
Guard.IsNotNull(repositoryContainer.UserRepository);
53+
var user = await repositoryContainer.UserRepository.CreateAsync(cancellationToken);
54+
Guard.IsNotNull(user);
55+
Guard.IsNotNull(user.Id);
56+
Guard.IsNotNull(user.Name);
57+
Guard.IsNotNull(user.Description);
58+
59+
Guard.IsNotNull(repositoryContainer.PublisherRepository);
60+
var publisher = await repositoryContainer.PublisherRepository.CreateAsync(cancellationToken);
61+
Guard.IsNotNull(publisher);
62+
Guard.IsNotNull(publisher.Id);
63+
Guard.IsNotNull(publisher.Name);
64+
Guard.IsNotNull(publisher.Description);
65+
66+
// Test updating the name and description
67+
var newName = "New User Name";
68+
var newDescription = "New User Description";
69+
var newAccentColor = "#000000";
70+
var newCategory = "New Category";
71+
var newFeature = "New feature";
72+
73+
await user.UpdateNameAsync(newName, cancellationToken);
74+
await user.UpdateDescriptionAsync(newDescription, cancellationToken);
75+
76+
await user.PublishRoamingAsync<ModifiableUser, ValueUpdateEvent, User>(cancellationToken);
77+
await user.PublishLocalAsync<ModifiableUser, ValueUpdateEvent>(cancellationToken);
78+
79+
await publisher.PublishRoamingAsync<ModifiablePublisher, ValueUpdateEvent, Publisher>(cancellationToken);
80+
await publisher.PublishLocalAsync<ModifiablePublisher, ValueUpdateEvent>(cancellationToken);
81+
82+
// Data should match the updated values
83+
Guard.IsEqualTo(user.Name, newName);
84+
Guard.IsEqualTo(user.Description, newDescription);
85+
86+
// Read user from secondary kubo client
87+
RepositoryContainer repositoryContainer2 = TestSetupHelpers.CreateTestRepositories(kuboOptions, kubo2.Client, projectLocalKeyName, projectLocalKeyName, publisherRoamingKeyName, publisherLocalKeyName, userRoamingKeyName, userLocalKeyName);
88+
Guard.IsNotNull(repositoryContainer2.UserRepository);
89+
90+
var user1 = await repositoryContainer2.UserRepository.GetAsync(user.Id, cancellationToken);
91+
Guard.IsNotNull(user1);
92+
93+
// Data should match the updated values
94+
Guard.IsEqualTo(user1.Name, newName);
95+
Guard.IsEqualTo(user1.Description, newDescription);
96+
Guard.IsEqualTo(user1.Id, user.Id);
97+
98+
await kubo.Client.ShutdownAsync();
99+
kubo.Dispose();
100+
101+
await kubo2.Client.ShutdownAsync();
102+
kubo2.Dispose();
103+
104+
await TestSetupHelpers.SetAllFileAttributesRecursive(testTempFolder, attributes => attributes & ~FileAttributes.ReadOnly);
105+
await temp.DeleteAsync(testTempFolder, cancellationToken);
106+
107+
await TestSetupHelpers.SetAllFileAttributesRecursive(testTempFolder2, attributes => attributes & ~FileAttributes.ReadOnly);
108+
await temp.DeleteAsync(testTempFolder2, cancellationToken);
109+
}
110+
111+
[TestMethod]
112+
public async Task LinksTestAsync()
113+
{
114+
var cancellationToken = CancellationToken.None;
115+
116+
var temp = new SystemFolder(Path.GetTempPath());
117+
var testTempFolder = await TestSetupHelpers.SafeCreateFolderAsync(temp, $"{nameof(UserTests)}.{nameof(BasicPropertyTestAsync)}.0", cancellationToken);
118+
var testTempFolder2 = await TestSetupHelpers.SafeCreateFolderAsync(temp, $"{nameof(UserTests)}.{nameof(BasicPropertyTestAsync)}.1", cancellationToken);
119+
120+
var kubo = await TestSetupHelpers.BootstrapKuboAsync(testTempFolder, 5013, 8013, cancellationToken);
121+
var kubo2 = await TestSetupHelpers.BootstrapKuboAsync(testTempFolder2, 5014, 8014, cancellationToken);
122+
123+
await TestSetupHelpers.ConnectSwarmsAsync([kubo, kubo2], cancellationToken);
124+
125+
var kuboOptions = new KuboOptions
126+
{
127+
IpnsLifetime = TimeSpan.FromDays(1),
128+
ShouldPin = false,
129+
UseCache = false,
130+
};
131+
132+
var userRoamingKeyName = "TestUser.Roaming";
133+
var userLocalKeyName = "TestUser.Local";
134+
var publisherRoamingKeyName = "TestPublisher.Roaming";
135+
var publisherLocalKeyName = "TestPublisher.Local";
136+
var projectRoamingKeyName = "TestProject.Roaming";
137+
var projectLocalKeyName = "TestProject.Local";
138+
139+
RepositoryContainer repositoryContainer = TestSetupHelpers.CreateTestRepositories(kuboOptions, kubo.Client, projectRoamingKeyName, projectLocalKeyName, publisherRoamingKeyName, publisherLocalKeyName, userRoamingKeyName, userLocalKeyName);
140+
141+
Guard.IsNotNull(repositoryContainer.UserRepository);
142+
143+
var user = await repositoryContainer.UserRepository.CreateAsync(cancellationToken);
144+
Guard.IsNotNull(user);
145+
Guard.IsNotNull(user.Id);
146+
Guard.IsNotNull(user.Name);
147+
Guard.IsNotNull(user.Description);
148+
149+
// Test adding a link
150+
var newLink = new Link
151+
{
152+
Uri = "http://example.com/",
153+
Name = "Test Link",
154+
Description = "Just a test"
155+
};
156+
await user.AddLinkAsync(newLink, cancellationToken);
157+
158+
await user.PublishRoamingAsync<ModifiableUser, ValueUpdateEvent, User>(cancellationToken);
159+
await user.PublishLocalAsync<ModifiableUser, ValueUpdateEvent>(cancellationToken);
160+
161+
// Data should match the updated values
162+
Guard.IsEqualTo(user.Links.First().Name, newLink.Name);
163+
Guard.IsEqualTo(user.Links.First().Description, newLink.Description);
164+
Guard.IsEqualTo(user.Links.First().Uri, newLink.Uri);
165+
166+
// Read user from secondary kubo client
167+
RepositoryContainer repositoryContainer2 = TestSetupHelpers.CreateTestRepositories(kuboOptions, kubo2.Client, projectRoamingKeyName, projectLocalKeyName, publisherRoamingKeyName, publisherLocalKeyName, userRoamingKeyName, userLocalKeyName);
168+
Guard.IsNotNull(repositoryContainer2.UserRepository);
169+
170+
var user1 = await repositoryContainer2.UserRepository.GetAsync(user.Id, cancellationToken);
171+
Guard.IsNotNull(user1);
172+
173+
// Data should match the updated values
174+
Guard.IsEqualTo(user1.Links.First().Name, newLink.Name);
175+
Guard.IsEqualTo(user1.Links.First().Description, newLink.Description);
176+
Guard.IsEqualTo(user1.Links.First().Uri, newLink.Uri);
177+
178+
await kubo.Client.ShutdownAsync();
179+
kubo.Dispose();
180+
181+
await kubo2.Client.ShutdownAsync();
182+
kubo2.Dispose();
183+
184+
await TestSetupHelpers.SetAllFileAttributesRecursive(testTempFolder, attributes => attributes & ~FileAttributes.ReadOnly);
185+
await temp.DeleteAsync(testTempFolder, cancellationToken);
186+
187+
await TestSetupHelpers.SetAllFileAttributesRecursive(testTempFolder2, attributes => attributes & ~FileAttributes.ReadOnly);
188+
await temp.DeleteAsync(testTempFolder2, cancellationToken);
189+
}
190+
191+
[TestMethod]
192+
public async Task ImagesTestAsync()
193+
{
194+
var cancellationToken = CancellationToken.None;
195+
196+
var temp = new SystemFolder(Path.GetTempPath());
197+
var testTempFolder = await TestSetupHelpers.SafeCreateFolderAsync(temp, $"{nameof(UserTests)}.{nameof(ImagesTestAsync)}.0", cancellationToken);
198+
var testTempFolder2 = await TestSetupHelpers.SafeCreateFolderAsync(temp, $"{nameof(UserTests)}.{nameof(ImagesTestAsync)}.1", cancellationToken);
199+
200+
var kubo = await TestSetupHelpers.BootstrapKuboAsync(testTempFolder, 5015, 8015, cancellationToken);
201+
var kubo2 = await TestSetupHelpers.BootstrapKuboAsync(testTempFolder2, 5016, 8016, cancellationToken);
202+
203+
await TestSetupHelpers.ConnectSwarmsAsync([kubo, kubo2], cancellationToken);
204+
205+
var kuboOptions = new KuboOptions
206+
{
207+
IpnsLifetime = TimeSpan.FromDays(1),
208+
ShouldPin = false,
209+
UseCache = false,
210+
};
211+
212+
var userRoamingKeyName = "TestUser.Roaming";
213+
var userLocalKeyName = "TestUser.Local";
214+
var publisherRoamingKeyName = "TestPublisher.Roaming";
215+
var publisherLocalKeyName = "TestPublisher.Local";
216+
var projectRoamingKeyName = "TestProject.Roaming";
217+
var projectLocalKeyName = "TestProject.Local";
218+
219+
RepositoryContainer repositoryContainer = TestSetupHelpers.CreateTestRepositories(kuboOptions, kubo.Client, projectRoamingKeyName, projectLocalKeyName, publisherRoamingKeyName, publisherLocalKeyName, userRoamingKeyName, userLocalKeyName);
220+
221+
Guard.IsNotNull(repositoryContainer.UserRepository);
222+
223+
var user = await repositoryContainer.UserRepository.CreateAsync(cancellationToken);
224+
Guard.IsNotNull(user);
225+
Guard.IsNotNull(user.Id);
226+
Guard.IsNotNull(user.Name);
227+
Guard.IsNotNull(user.Description);
228+
229+
// Test adding an image file
230+
var mockImageFile = new MemoryFile(id: "test id", name: "test name", new MemoryStream());
231+
await user.AddImageAsync(mockImageFile, cancellationToken);
232+
233+
await user.PublishRoamingAsync<ModifiableUser, ValueUpdateEvent, User>(cancellationToken);
234+
await user.PublishLocalAsync<ModifiableUser, ValueUpdateEvent>(cancellationToken);
235+
236+
// Iterating should yield the added image
237+
await foreach (var image in user.GetImageFilesAsync(cancellationToken))
238+
{
239+
Guard.IsNotNull(image);
240+
Guard.IsEqualTo(image.Id, mockImageFile.Id);
241+
Guard.IsEqualTo(image.Name, mockImageFile.Name);
242+
}
243+
244+
// Read user from secondary kubo client
245+
RepositoryContainer repositoryContainer2 = TestSetupHelpers.CreateTestRepositories(kuboOptions, kubo2.Client, projectRoamingKeyName, projectLocalKeyName, publisherRoamingKeyName, publisherLocalKeyName, userRoamingKeyName, userLocalKeyName);
246+
Guard.IsNotNull(repositoryContainer2.UserRepository);
247+
248+
var user1 = await repositoryContainer2.UserRepository.GetAsync(user.Id, cancellationToken);
249+
Guard.IsNotNull(user1);
250+
251+
// Iterating should yield the added image
252+
await foreach (var image in user1.GetImageFilesAsync(cancellationToken))
253+
{
254+
Guard.IsNotNull(image);
255+
Guard.IsEqualTo(image.Id, mockImageFile.Id);
256+
Guard.IsEqualTo(image.Name, mockImageFile.Name);
257+
}
258+
259+
await kubo.Client.ShutdownAsync();
260+
kubo.Dispose();
261+
262+
await kubo2.Client.ShutdownAsync();
263+
kubo2.Dispose();
264+
265+
await TestSetupHelpers.SetAllFileAttributesRecursive(testTempFolder, attributes => attributes & ~FileAttributes.ReadOnly);
266+
await temp.DeleteAsync(testTempFolder, cancellationToken);
267+
268+
await TestSetupHelpers.SetAllFileAttributesRecursive(testTempFolder2, attributes => attributes & ~FileAttributes.ReadOnly);
269+
await temp.DeleteAsync(testTempFolder2, cancellationToken);
270+
}
271+
272+
[TestMethod]
273+
public async Task ProjectRoleTestAsync()
274+
{
275+
var cancellationToken = CancellationToken.None;
276+
277+
var temp = new SystemFolder(Path.GetTempPath());
278+
var testTempFolder = await TestSetupHelpers.SafeCreateFolderAsync(temp, $"{nameof(UserTests)}.{nameof(ProjectRoleTestAsync)}.0", cancellationToken);
279+
var testTempFolder2 = await TestSetupHelpers.SafeCreateFolderAsync(temp, $"{nameof(UserTests)}.{nameof(ProjectRoleTestAsync)}.1", cancellationToken);
280+
281+
var kubo = await TestSetupHelpers.BootstrapKuboAsync(testTempFolder, 5017, 8017, cancellationToken);
282+
var kubo2 = await TestSetupHelpers.BootstrapKuboAsync(testTempFolder2, 5018, 8018, cancellationToken);
283+
284+
await TestSetupHelpers.ConnectSwarmsAsync([kubo, kubo2], cancellationToken);
285+
var kuboOptions = new KuboOptions
286+
{
287+
IpnsLifetime = TimeSpan.FromDays(1),
288+
ShouldPin = false,
289+
UseCache = false,
290+
};
291+
292+
var userRoamingKeyName = "TestUser.Roaming";
293+
var userLocalKeyName = "TestUser.Local";
294+
var publisherRoamingKeyName = "TestPublisher.Roaming";
295+
var publisherLocalKeyName = "TestPublisher.Local";
296+
var projectRoamingKeyName = "TestProject.Roaming";
297+
var projectLocalKeyName = "TestProject.Local";
298+
299+
RepositoryContainer repositoryContainer = TestSetupHelpers.CreateTestRepositories(kuboOptions, kubo.Client, projectRoamingKeyName, projectLocalKeyName, publisherRoamingKeyName, publisherLocalKeyName, userRoamingKeyName, userLocalKeyName);
300+
301+
Guard.IsNotNull(repositoryContainer.UserRepository);
302+
var user = await repositoryContainer.UserRepository.CreateAsync(cancellationToken);
303+
Guard.IsNotNull(user);
304+
Guard.IsNotNull(user.Id);
305+
Guard.IsNotNull(user.Name);
306+
Guard.IsNotNull(user.Description);
307+
308+
Guard.IsNotNull(repositoryContainer.ProjectRepository);
309+
var project = await repositoryContainer.ProjectRepository.CreateAsync(cancellationToken);
310+
Guard.IsNotNull(project);
311+
Guard.IsNotNull(project.Id);
312+
Guard.IsNotNull(project.Name);
313+
314+
// Create role
315+
var role = new Role
316+
{
317+
Id = "test role id",
318+
Name = "test role name",
319+
Description = "test role desc"
320+
};
321+
322+
var newProjectRole = new ModifiableProjectRole
323+
{
324+
InnerProject = project,
325+
Role = role,
326+
};
327+
328+
// Test adding user/role to user
329+
await user.AddProjectAsync(newProjectRole, cancellationToken);
330+
331+
await user.PublishRoamingAsync<ModifiableUser, ValueUpdateEvent, User>(cancellationToken);
332+
await user.PublishLocalAsync<ModifiableUser, ValueUpdateEvent>(cancellationToken);
333+
334+
await project.PublishRoamingAsync<ModifiableProject, ValueUpdateEvent, Project>(cancellationToken);
335+
await project.PublishLocalAsync<ModifiableProject, ValueUpdateEvent>(cancellationToken);
336+
337+
// Iterating should yield the added user and role
338+
await foreach (var projectRole in user.GetProjectsAsync(cancellationToken))
339+
{
340+
Guard.IsEqualTo(projectRole.Role.Id, role.Id);
341+
Guard.IsEqualTo(projectRole.Role.Name, role.Name);
342+
Guard.IsEqualTo(projectRole.Role.Description, role.Description);
343+
}
344+
345+
// Read user from secondary kubo client
346+
RepositoryContainer repositoryContainer2 = TestSetupHelpers.CreateTestRepositories(kuboOptions, kubo2.Client, projectRoamingKeyName, projectLocalKeyName, publisherRoamingKeyName, publisherLocalKeyName, userRoamingKeyName, userLocalKeyName);
347+
Guard.IsNotNull(repositoryContainer2.UserRepository);
348+
349+
var user1 = await repositoryContainer2.UserRepository.GetAsync(user.Id, cancellationToken);
350+
Guard.IsNotNull(user1);
351+
352+
// Iterating should yield the added user and role
353+
await foreach (var projectRole in user1.GetProjectsAsync(cancellationToken))
354+
{
355+
Guard.IsEqualTo(projectRole.Role.Id, role.Id);
356+
Guard.IsEqualTo(projectRole.Role.Name, role.Name);
357+
Guard.IsEqualTo(projectRole.Role.Description, role.Description);
358+
}
359+
360+
await kubo.Client.ShutdownAsync();
361+
kubo.Dispose();
362+
363+
await kubo2.Client.ShutdownAsync();
364+
kubo2.Dispose();
365+
366+
await TestSetupHelpers.SetAllFileAttributesRecursive(testTempFolder, attributes => attributes & ~FileAttributes.ReadOnly);
367+
await temp.DeleteAsync(testTempFolder, cancellationToken);
368+
369+
await TestSetupHelpers.SetAllFileAttributesRecursive(testTempFolder2, attributes => attributes & ~FileAttributes.ReadOnly);
370+
await temp.DeleteAsync(testTempFolder2, cancellationToken);
371+
}
372+
}

0 commit comments

Comments
 (0)