Пример #1
0
        protected Task <ConferenceCreatedResponseDto> CreateConference(params UserAccount[] moderators)
        {
            var creationDto = new CreateConferenceRequestDto
            {
                Configuration = new ConferenceConfiguration
                {
                    Moderators = new[] { "0" }.Concat(moderators.Select(x => x.Sub)).ToList(),
                },
                Permissions = new Dictionary <PermissionType, Dictionary <string, JValue> >(),
            };

            return(CreateConference(creationDto));
        }
Пример #2
0
        protected async Task <ConferenceCreatedResponseDto> CreateConference(CreateConferenceRequestDto creationDto)
        {
            var response = await Client.PostAsync("/v1/conference", new JsonNetContent(creationDto));

            response.EnsureSuccessStatusCode();

            var createdConference = await response.Content.ReadFromJsonAsync <ConferenceCreatedResponseDto>();

            Assert.NotNull(createdConference);

            Logger.Information("Created conference {conferenceId}", createdConference?.ConferenceId);

            return(createdConference !);
        }
Пример #3
0
        public async Task OpenBreakoutRooms_MoveToBreakoutRoom_UpdatePermissions()
        {
            const int amount = 1;

            var permission = DefinedPermissions.Media.CanChangeOtherParticipantsProducers;

            // arrange
            var conferenceCreationDto = new CreateConferenceRequestDto
            {
                Configuration =
                    new ConferenceConfiguration {
                    Moderators = Moderator.Yield().Select(x => x.Sub).ToList()
                },
                Permissions = new Dictionary <PermissionType, Dictionary <string, JValue> >
                {
                    {
                        PermissionType.Conference,
                        new Dictionary <string, JValue>(permission.Configure(false).Yield())
                    },
                    {
                        PermissionType.BreakoutRoom,
                        new Dictionary <string, JValue>(permission.Configure(true).Yield())
                    },
                },
            };

            var conference = await CreateConference(conferenceCreationDto);

            var connection = await ConnectUserToConference(Moderator, conference);

            AssertSuccess(await OpenConference(connection));

            AssertSuccess(await connection.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.OpenBreakoutRooms),
                                                                                    new OpenBreakoutRoomsDto(amount, null, null, null)));

            var notModeratorUser = CreateUser();
            var notModeratorConn = await ConnectUserToConference(notModeratorUser, conference);

            Task AssertPermission(bool value)
            {
                return(notModeratorConn.SyncObjects.AssertSyncObject <SynchronizedParticipantPermissions>(
                           SynchronizedParticipantPermissions.SyncObjId(notModeratorUser.Sub),
                           syncObj => { Assert.Contains(permission.Configure(value), syncObj.Permissions); }));
            }

            await AssertPermission(false);

            await notModeratorConn.SyncObjects.AssertSyncObject <SynchronizedRooms>(SynchronizedRooms.SyncObjId,
                                                                                    value => Assert.Equal(2, value.Rooms.Count));

            var syncRooms =
                notModeratorConn.SyncObjects.GetSynchronizedObject <SynchronizedRooms>(SynchronizedRooms.SyncObjId);

            var breakoutRoom = syncRooms.Rooms.Single(x => x.RoomId != syncRooms.DefaultRoomId);

            // act
            AssertSuccess(await notModeratorConn.Hub.InvokeAsync <SuccessOrError <Unit> >(nameof(CoreHub.SwitchRoom),
                                                                                          new SwitchRoomDto(breakoutRoom.RoomId)));

            // assert
            await AssertPermission(true);
        }