diff options
Diffstat (limited to 'Tests/LibMatrix.Tests/Abstractions/RoomAbstraction.cs')
-rw-r--r-- | Tests/LibMatrix.Tests/Abstractions/RoomAbstraction.cs | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/Tests/LibMatrix.Tests/Abstractions/RoomAbstraction.cs b/Tests/LibMatrix.Tests/Abstractions/RoomAbstraction.cs new file mode 100644 index 0000000..44c35da --- /dev/null +++ b/Tests/LibMatrix.Tests/Abstractions/RoomAbstraction.cs @@ -0,0 +1,76 @@ +using ArcaneLibs.Extensions; +using LibMatrix.EventTypes.Spec.State; +using LibMatrix.Homeservers; +using LibMatrix.Responses; +using LibMatrix.RoomTypes; + +namespace LibMatrix.Tests.Abstractions; + +public static class RoomAbstraction { + public static async Task<GenericRoom> GetTestRoom(AuthenticatedHomeserverGeneric hs) { + var testRoom = await hs.CreateRoom(new CreateRoomRequest() { + Name = "LibMatrix Test Room", + // Visibility = CreateRoomVisibility.Public, + RoomAliasName = Guid.NewGuid().ToString() + }); + + await testRoom.SendStateEventAsync("gay.rory.libmatrix.unit_test_room", new()); + + return testRoom; + } + + private static SemaphoreSlim _spaceSemaphore = null!; + + public static async Task<SpaceRoom> GetTestSpace(AuthenticatedHomeserverGeneric hs, int roomCount = 100, bool addSpaces = false, int spaceSizeReduction = 10) { + _spaceSemaphore ??= new(roomCount / spaceSizeReduction, roomCount / spaceSizeReduction); + var crq = new CreateRoomRequest() { + Name = $"LibMatrix Test Space ({roomCount} children)", + // Visibility = CreateRoomVisibility.Public, + RoomAliasName = Guid.NewGuid().ToString(), + InitialState = new() + }; + crq._creationContentBaseType.Type = "m.space"; + + + var createRoomTasks = Enumerable.Range(0, roomCount) + .Select(_ => hs.CreateRoom(new CreateRoomRequest() { + Name = $"LibMatrix Test Room {Guid.NewGuid()}", + // Visibility = CreateRoomVisibility.Public, + RoomAliasName = Guid.NewGuid().ToString() + })).ToAsyncEnumerable(); + + await foreach (var room in createRoomTasks) { + crq.InitialState.Add(new() { + Type = "m.space.child", + StateKey = room.RoomId, + TypedContent = new SpaceChildEventContent() { + Via = new() { + room.RoomId.Split(":")[1] + } + } + }); + } + + if (addSpaces) { + for (int i = 0; i < roomCount; i++) { + var space = await GetTestSpace(hs, roomCount - spaceSizeReduction, true, spaceSizeReduction); + crq.InitialState.Add(new() { + Type = "m.space.child", + StateKey = space.RoomId, + TypedContent = new SpaceChildEventContent() { + Via = new() { + space.RoomId.Split(":")[1] + } + } + }); + } + } + + var testSpace = (await hs.CreateRoom(crq)).AsSpace; + + await testSpace.SendStateEventAsync("gay.rory.libmatrix.unit_test_room", new()); + + // _spaceSemaphore.Release(); + return testSpace; + } +} |