コード例 #1
0
        public async Task CreateUserInviteListDuplicateInvite()
        {
            _userInviteRepositoryMock.SetupCreateItemQuery(o => new List <UserInvite> {
                new UserInvite {
                    Id = Guid.NewGuid(), FirstName = "abc", LastName = "xyz", Email = "*****@*****.**"
                }
            });

            _userRepositoryMock.SetupCreateItemQuery();

            var createUserInviteRequest = new List <UserInvite> {
                new UserInvite {
                    FirstName = "abc", LastName = "xyz", Email = "*****@*****.**"
                }
            };
            var tenantId = Guid.NewGuid();

            _tenantApiMock.Setup(m => m.GetTenantDomainsAsync(It.IsAny <Guid>()))
            .ReturnsAsync(MicroserviceResponse.Create <IEnumerable <TenantDomain> >(HttpStatusCode.OK, new List <TenantDomain> {
                new TenantDomain {
                    Domain = "yopmail.com"
                }
            }));

            var userInvite = await _controller.CreateUserInviteListAsync(createUserInviteRequest, tenantId);

            Assert.NotNull(userInvite);
            Assert.Equal(InviteUserStatus.DuplicateUserEmail, userInvite.ElementAt(0).Status);
        }
コード例 #2
0
        public async Task ChangeMachineTenantAsync_WhenInvalidSettingProfileId_ThrowsValidationFailedException()
        {
            var machineId = Guid.NewGuid();

            _machineRepositoryMock.SetupCreateItemQuery(o => new List <Machine> {
                new Machine {
                    Id = machineId
                }
            });

            _tenantApiMock.Setup(m => m.GetTenantByIdAsync(It.IsAny <Guid>()))
            .ReturnsAsync((Guid tenantId) => MicroserviceResponse.Create(HttpStatusCode.OK, new Tenant {
                Id = tenantId
            }));

            _cloudShimMock.Setup(m => m.ValidateSettingProfileId(It.IsAny <Guid>(), It.IsAny <Guid>()))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, false));

            var request = new ChangeMachineTenantRequest
            {
                Id               = machineId,
                TenantId         = Guid.NewGuid(),
                SettingProfileId = Guid.NewGuid()
            };

            var ex = await Assert.ThrowsAsync <ValidationFailedException>(() => _controller.ChangeMachineTenantAsync(request, null));

            Assert.Collection(ex.Errors, failure => Assert.Equal(nameof(ChangeMachineTenantRequest.SettingProfileId), failure.PropertyName));
        }
コード例 #3
0
        public async Task ChangeMachineTenantAsync_WhenSuccessfulChange_ReturnsUpdatedMachine()
        {
            var machineId = Guid.NewGuid();

            _machineRepositoryMock.SetupCreateItemQuery(o => new List <Machine> {
                new Machine {
                    Id = machineId
                }
            });

            _tenantApiMock.Setup(m => m.GetTenantByIdAsync(It.IsAny <Guid>()))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, new Tenant()));

            _cloudShimMock.Setup(m => m.ValidateSettingProfileId(It.IsAny <Guid>(), It.IsAny <Guid>()))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, true));

            _machineRepositoryMock.Setup(m => m.UpdateItemAsync(It.IsAny <Guid>(), It.IsAny <Machine>(), It.IsAny <UpdateOptions>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((Guid i, Machine m, UpdateOptions o, CancellationToken t) => m);

            var request = new ChangeMachineTenantRequest
            {
                Id               = machineId,
                TenantId         = Guid.NewGuid(),
                SettingProfileId = Guid.NewGuid()
            };
            var result = await _controller.ChangeMachineTenantAsync(request, null, CancellationToken.None);

            Assert.NotNull(result);
        }
        public async Task GetValidGuestInvitesByProjectIdThrowsNotFoundExceptionIfProjectIsNotFound()
        {
            _projectApiMock.Setup(x => x.GetProjectByIdAsync(It.IsAny <Guid>(), null))
            .ReturnsAsync(MicroserviceResponse.Create <Project>(HttpStatusCode.NotFound, new ErrorResponse()));

            await Assert.ThrowsAsync <NotFoundException>(() => _target.GetValidGuestInvitesByProjectIdAsync(Guid.NewGuid()));
        }
        public async Task CreateNewGuestInviteThrowsGetUserExceptionWhenGetUserFails()
        {
            _userApiMock.Setup(x => x.GetUserAsync(It.IsAny <Guid>()))
            .ReturnsAsync(MicroserviceResponse.Create <User>(HttpStatusCode.NotFound, new ErrorResponse()));

            await Assert.ThrowsAsync <GetUserException>(async() => await _target.CreateGuestInviteAsync(_defaultGuestInvite));
        }
        public async Task SetProjectGuestContext_WhenEvaluatingNonMemberUserCanEnterLobbyAndVerifyGuestReturnsSuccess_ReturnsCurrentProjectState()
        {
            _projectGuestContextServiceMock
            .SetupSequence(x => x.GetProjectGuestContextAsync(It.IsAny <string>()))
            .ReturnsAsync(default(ProjectGuestContext))
            .ReturnsAsync(_defaultProjectGuestContext);

            _projectAccessApiMock
            .Setup(x => x.GetProjectMemberUserIdsAsync(_defaultProjectId, MemberRoleFilter.FullUser, _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, (new List <Guid>()).AsEnumerable()));

            _guestSessionRepositoryMock
            .Setup(x => x.GetItemAsync(It.Is <Guid>(g => g == _defaultGuestSession.Id), It.IsAny <QueryOptions>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_defaultGuestSession);

            var result = await _target.SetProjectGuestContextAsync(_defaultProjectId, null, _currentUserId, _projectTenantId, _defaultPrincipalId);

            Assert.IsAssignableFrom <CurrentProjectState>(result);
            Assert.IsAssignableFrom <GuestSession>(result.GuestSession);
            Assert.False(result.UserHasAccess);
            Assert.Equal(_defaultGuestSession.Id, result.GuestSession.Id);
            Assert.Equal(_defaultAccessCode, result.GuestSession.ProjectAccessCode);
            Assert.Equal(_defaultProjectId, result.GuestSession.ProjectId);
            Assert.Equal(_currentUserId, result.GuestSession.UserId);
            Assert.Equal(GuestState.InLobby, result.GuestSession.GuestSessionState);
            Assert.Equal(_defaultProject, result.Project);
            Assert.Equal(LobbyState.Normal, result.LobbyState);
        }
        public async Task SetProjectGuestContext_IfProjectCannotBeFetchedByServiceToServiceClientForGuest_ThrowsInvalidOperationException(HttpStatusCode statusCode)
        {
            _serviceToServiceProjectApiMock
            .Setup(x => x.GetProjectByIdAsync(_defaultProjectId, null))
            .ReturnsAsync(MicroserviceResponse.Create(statusCode, default(Project)));

            await Assert.ThrowsAsync <InvalidOperationException>(() =>
                                                                 _target.SetProjectGuestContextAsync(_defaultProjectId, null, _currentUserId, _noTenantId, _defaultPrincipalId));
        }
        public async Task SetProjectGuestContext_IfProjectMembershipCannotBeFetched_ThrowsInvalidOperationException(HttpStatusCode statusCode)
        {
            _projectAccessApiMock
            .Setup(x => x.GetProjectMemberUserIdsAsync(_defaultProjectId, MemberRoleFilter.FullUser, _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(statusCode, default(IEnumerable <Guid>)));

            await Assert.ThrowsAsync <InvalidOperationException>(() =>
                                                                 _target.SetProjectGuestContextAsync(_defaultProjectId, null, _currentUserId, _noTenantId, _defaultPrincipalId));
        }
        public async Task CreateGuestInvite_SetsProjectTenantIdToTenantIdOfTheProject()
        {
            _projectApiMock.Setup(x => x.GetProjectByIdAsync(It.IsAny <Guid>(), null))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, _defaultProject));

            var tenantId = _defaultProject.TenantId;

            var result = await _target.CreateGuestInviteAsync(_defaultGuestInvite);

            Assert.Equal(result.ProjectTenantId, tenantId);
        }
コード例 #10
0
        public async Task GetProjectLobbyStateAsync_IfProjectDoesNotExist_ThrowsNotFound()
        {
            _cacheMock
            .Setup(m => m.TryItemGetAsync(It.IsAny <string>(), typeof(ProjectLobbyState), It.IsAny <Reference <ProjectLobbyState> >()))
            .ReturnsAsync(false);

            _projectApi
            .Setup(m => m.GetProjectByIdAsync(It.IsAny <Guid>(), null))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.NotFound, default(Project)));

            await Assert.ThrowsAsync <NotFoundException>(() => _target.GetProjectLobbyStateAsync(Guid.NewGuid()));
        }
        public async Task CreateNewGuestInviteResetsAccessCodeIfCodeIsMissing()
        {
            var project = Project.Example();

            project.GuestAccessCode = null;
            _projectApiMock.Setup(x => x.GetProjectByIdAsync(It.IsAny <Guid>(), null))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, project));

            await _target.CreateGuestInviteAsync(_defaultGuestInvite);

            _projectApiMock.Verify(x => x.ResetGuestAccessCodeAsync(It.IsAny <Guid>(), null));
        }
        public async Task CreateNewGuestInviteThrowsResetAccessCodeExceptionWhenResetAccessCodeFails()
        {
            var project = Project.Example();

            project.GuestAccessCode = null;
            _projectApiMock.Setup(x => x.GetProjectByIdAsync(It.IsAny <Guid>(), null))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, project));

            _projectApiMock.Setup(x => x.ResetGuestAccessCodeAsync(It.IsAny <Guid>(), null))
            .ReturnsAsync(MicroserviceResponse.Create <Project>(HttpStatusCode.NotFound, new ErrorResponse()));

            await Assert.ThrowsAsync <ResetAccessCodeException>(async() => await _target.CreateGuestInviteAsync(_defaultGuestInvite));
        }
        public async Task SetProjectGuestContext_WhenUserIsNotFullProjectMemberAndRequestingLobbyEntry_UserHasAccessIsFalse()
        {
            _projectGuestContextServiceMock
            .Setup(x => x.GetProjectGuestContextAsync(It.IsAny <string>()))
            .ReturnsAsync(default(ProjectGuestContext));

            _projectAccessApiMock
            .Setup(x => x.GetProjectMemberUserIdsAsync(_defaultProjectId, MemberRoleFilter.FullUser, _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, (new List <Guid>()).AsEnumerable()));

            var response = await _target.SetProjectGuestContextAsync(_defaultProjectId, "code", _currentUserId, Guid.NewGuid(), _defaultPrincipalId);

            Assert.False(response.UserHasAccess);
        }
        public async Task SetProjectGuestContext_WhenEvaluatingNonMemberUserCanEnterLobby_CallsGetUser()
        {
            _projectGuestContextServiceMock
            .Setup(x => x.GetProjectGuestContextAsync(It.IsAny <string>()))
            .ReturnsAsync(default(ProjectGuestContext));

            _projectAccessApiMock
            .Setup(x => x.GetProjectMemberUserIdsAsync(_defaultProjectId, MemberRoleFilter.FullUser, _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, (new List <Guid>()).AsEnumerable()));

            await _target.SetProjectGuestContextAsync(_defaultProjectId, null, _currentUserId, _projectTenantId, _defaultPrincipalId);

            _userApiMock.Verify(x => x.GetUserAsync(It.Is <Guid>(id => id == _currentUserId)));
        }
        public async Task SetProjectGuestContext_WhenEvaluatingNonMemberUserCanEnterLobbyAndGetUserCallReturnsNotOK_ThrowsInvalidOperationException()
        {
            _projectGuestContextServiceMock
            .Setup(x => x.GetProjectGuestContextAsync(It.IsAny <string>()))
            .ReturnsAsync(default(ProjectGuestContext));

            _projectAccessApiMock
            .Setup(x => x.GetProjectMemberUserIdsAsync(_defaultProjectId, MemberRoleFilter.FullUser, _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, (new List <Guid>()).AsEnumerable()));

            _userApiMock
            .Setup(x => x.GetUserAsync(It.IsAny <Guid>()))
            .Throws <InvalidOperationException>();

            await Assert.ThrowsAsync <InvalidOperationException>(async() => await _target.SetProjectGuestContextAsync(_defaultProjectId, null, _currentUserId, _projectTenantId, _defaultPrincipalId));
        }
        public async Task SetProjectGuestContext_WhenEvaluatingNonMemberUserCanEnterLobbyAndVerifyGuestReturnsSuccess_CachesProjectGuestContextRecord()
        {
            _projectGuestContextServiceMock
            .Setup(x => x.GetProjectGuestContextAsync(It.IsAny <string>()))
            .ReturnsAsync(default(ProjectGuestContext));

            _projectAccessApiMock
            .Setup(x => x.GetProjectMemberUserIdsAsync(_defaultProjectId, MemberRoleFilter.FullUser, _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, (new List <Guid>()).AsEnumerable()));

            await _target.SetProjectGuestContextAsync(_defaultProjectId, null, _currentUserId, _projectTenantId, _defaultPrincipalId);

            _projectGuestContextServiceMock
            .Verify(x => x.SetProjectGuestContextAsync(It.Is <ProjectGuestContext>(props => props.GuestSessionId == _defaultGuestSession.Id &&
                                                                                   props.ProjectId == _defaultProjectId &&
                                                                                   props.TenantId == _defaultProject.TenantId &&
                                                                                   props.GuestState == Guest.ProjectContext.Enums.GuestState.InLobby), It.IsAny <string>()));
        }
        public async Task SetProjectGuestContext_WhenEvaluatingNonMemberUserCanEnterLobbyAndVerifyGuestResultIsNotSuccess_ThrowsInvalidOperationException(VerifyGuestResponseCode code)
        {
            _projectGuestContextServiceMock
            .Setup(x => x.GetProjectGuestContextAsync(It.IsAny <string>()))
            .ReturnsAsync(default(ProjectGuestContext));

            _projectAccessApiMock
            .Setup(x => x.GetProjectMemberUserIdsAsync(_defaultProjectId, MemberRoleFilter.FullUser, _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, (new List <Guid>()).AsEnumerable()));

            _guestSessionControllerMock
            .Setup(x => x.VerifyGuestAsync(It.IsAny <GuestVerificationRequest>(), It.IsAny <Project>(), _projectTenantId))
            .ReturnsAsync(new GuestVerificationResponse()
            {
                ResultCode = code, Username = _defaultUser.Username
            });

            await Assert.ThrowsAsync <InvalidOperationException>(async() => await _target.SetProjectGuestContextAsync(_defaultProjectId, null, _currentUserId, _projectTenantId, _defaultPrincipalId));
        }
        public async Task SetProjectGuestContext_WhenEvaluatingNonMemberUserCanEnterLobby_CallsVerifyGuest()
        {
            _projectGuestContextServiceMock
            .Setup(x => x.GetProjectGuestContextAsync(It.IsAny <string>()))
            .ReturnsAsync(default(ProjectGuestContext));

            _projectAccessApiMock
            .Setup(x => x.GetProjectMemberUserIdsAsync(_defaultProjectId, MemberRoleFilter.FullUser, _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, (new List <Guid>()).AsEnumerable()));

            await _target.SetProjectGuestContextAsync(_defaultProjectId, null, _currentUserId, _projectTenantId, _defaultPrincipalId);

            _guestSessionControllerMock.Verify(x => x.VerifyGuestAsync(It.Is <GuestVerificationRequest>(props =>
                                                                                                        props.ProjectAccessCode == null &&
                                                                                                        props.ProjectId == _defaultProjectId &&
                                                                                                        props.Username == _defaultUser.Username)
                                                                       , It.Is <Project>(p => p == _defaultProject)
                                                                       , It.Is <Guid>(t => t == _projectTenantId)));
        }
        public async Task GetGuestInvitesByProjectIdGetsInvitesForProject()
        {
            var inviteForProjectCount = 3;
            var invites = MakeTestInviteList(_defaultProject.Id, "*****@*****.**", 0, inviteForProjectCount, 2, 2);

            _projectApiMock.Setup(x => x.GetProjectByIdAsync(It.IsAny <Guid>(), null))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, _defaultProject));

            _guestInviteRepositoryMock.Setup(m => m.GetItemsAsync(It.IsAny <Expression <Func <GuestInvite, bool> > >(), It.IsAny <BatchOptions>(), It.IsAny <CancellationToken>()))
            .Returns <Expression <Func <GuestInvite, bool> >, BatchOptions, CancellationToken>((predicate, o, c) =>
            {
                var expression = predicate.Compile();
                IEnumerable <GuestInvite> sublist = invites.Where(expression).ToList();
                return(Task.FromResult(sublist));
            });

            var response = await _target.GetValidGuestInvitesByProjectIdAsync(_defaultProject.Id);

            Assert.Equal(inviteForProjectCount, response.Count());
        }
        public async Task SetProjectGuestContext_WhenNonMemberIsPermittedIntoLobby_IsGrantedGuestMembershipToProject()
        {
            _projectGuestContextServiceMock
            .SetupSequence(x => x.GetProjectGuestContextAsync(It.IsAny <string>()))
            .Returns(Task.FromResult(default(ProjectGuestContext)))
            .Returns(Task.FromResult(_defaultProjectGuestContext));

            _guestSessionRepositoryMock
            .Setup(x => x.GetItemAsync(It.IsAny <Guid>(), It.IsAny <QueryOptions>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_defaultGuestSession);

            _projectAccessApiMock
            .Setup(x => x.GetProjectMemberUserIdsAsync(_defaultProjectId, MemberRoleFilter.FullUser, _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, (new List <Guid>()).AsEnumerable()));

            await _target.SetProjectGuestContextAsync(_defaultProjectId, _defaultAccessCode, _currentUserId, null, _defaultPrincipalId);

            _projectAccessApiMock
            .Verify(x => x.GrantProjectMembershipAsync(It.IsAny <GrantProjectMembershipRequest>(), _defaultProjectTenantHeaders));   //_currentUserId, _defaultProjectId, _defaultProjectTenantHeaders));
        }
コード例 #21
0
        private void SetupApisForRecalculate(HttpStatusCode projectStatusCode = HttpStatusCode.OK, bool participantRequestThrows = false, Project project = null)
        {
            if (participantRequestThrows)
            {
                var taskSource = new TaskCompletionSource <IEnumerable <Participant> >();
                taskSource.SetException(new Exception("participants failed"));
                _sessionServiceMock.Setup(m => m.GetParticipantsByGroupNameAsync(It.IsAny <string>(), It.IsAny <bool>(), false))
                .Returns(taskSource.Task);
            }
            else
            {
                _sessionServiceMock.Setup(m => m.GetParticipantsByGroupNameAsync(It.IsAny <string>(), It.IsAny <bool>(), false))
                .ReturnsAsync(default(IEnumerable <Participant>));
            }

            var projectPayload = projectStatusCode == HttpStatusCode.OK ? project ?? Project.Example() : default(Project);

            _projectApi
            .Setup(m => m.GetProjectByIdAsync(It.IsAny <Guid>(), null))
            .ReturnsAsync(MicroserviceResponse.Create(projectStatusCode, projectPayload));
        }
        public async Task SetProjectGuestContext_WhenNonMemberIsPermittedIntoLobbyAndGrantMembershipCallFails_ThrowsInvalidOperationException()
        {
            _projectGuestContextServiceMock
            .SetupSequence(x => x.GetProjectGuestContextAsync(It.IsAny <string>()))
            .Returns(Task.FromResult(default(ProjectGuestContext)))
            .Returns(Task.FromResult(_defaultProjectGuestContext));

            _guestSessionRepositoryMock
            .Setup(x => x.GetItemAsync(_defaultGuestSession.Id, It.IsAny <QueryOptions>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_defaultGuestSession);

            _projectAccessApiMock
            .Setup(x => x.GetProjectMemberUserIdsAsync(_defaultProjectId, MemberRoleFilter.FullUser, _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, (new List <Guid>()).AsEnumerable()));

            _projectAccessApiMock
            .Setup(x => x.GrantProjectMembershipAsync(It.IsAny <GrantProjectMembershipRequest>(), _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.InternalServerError));

            await Assert.ThrowsAsync <InvalidOperationException>(() => _target.SetProjectGuestContextAsync(_defaultProjectId, _defaultAccessCode, _currentUserId, null, _defaultPrincipalId));
        }
        public async Task GetValidGuestInvitesByProjectIdFiltersToReturnOneInvitePerEmail()
        {
            var firstEmailInvites  = MakeTestInviteList(_defaultProject.Id, "*****@*****.**", 2, 0, 0, 0);
            var secondEmailInvites = MakeTestInviteList(_defaultProject.Id, "*****@*****.**", 2, 0, 0, 0);
            var thirdEmailInvites  = MakeTestInviteList(_defaultProject.Id, "*****@*****.**", 2, 0, 0, 0);

            _projectApiMock.Setup(x => x.GetProjectByIdAsync(It.IsAny <Guid>(), null))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, _defaultProject));

            _guestInviteRepositoryMock.Setup(m => m
                                             .GetItemsAsync(It.IsAny <Expression <Func <GuestInvite, bool> > >(), It.IsAny <BatchOptions>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(firstEmailInvites.Concat(secondEmailInvites.Concat(thirdEmailInvites)));

            var result = await _target.GetValidGuestInvitesByProjectIdAsync(_defaultProject.Id);

            var resultList = result.ToList();

            Assert.Equal(3, resultList.Count);
            Assert.Contains(resultList, invite => invite.GuestEmail == firstEmailInvites.First().GuestEmail);
            Assert.Contains(resultList, invite => invite.GuestEmail == secondEmailInvites.First().GuestEmail);
            Assert.Contains(resultList, invite => invite.GuestEmail == thirdEmailInvites.First().GuestEmail);
        }
コード例 #24
0
        public async Task CreateUserInviteListInvalidEmailFormate()
        {
            _validatorLocatorMock.Setup(m => m.GetValidator(typeof(EmailValidator)))
            .Returns(_validatorFailsMock.Object);

            var createUserInviteRequest = new List <UserInvite> {
                new UserInvite {
                    FirstName = "abc", LastName = "xyz", Email = "abc.com"
                }
            };
            var tenantId = Guid.NewGuid();

            _tenantApiMock.Setup(m => m.GetTenantDomainsAsync(It.IsAny <Guid>()))
            .ReturnsAsync(MicroserviceResponse.Create <IEnumerable <TenantDomain> >(HttpStatusCode.OK, new List <TenantDomain> {
                new TenantDomain {
                    Domain = "gmail.com"
                }
            }));

            var userInvite = await _controller.CreateUserInviteListAsync(createUserInviteRequest, tenantId);

            Assert.NotNull(userInvite);
            Assert.Equal(InviteUserStatus.UserEmailFormatInvalid, userInvite.ElementAt(0).Status);
        }
        public async Task SetProjectGuestContext_IfUserHasDifferentTenantHasBeenAdmittedToProject_UserHasAccessIsTrue()
        {
            var guestSessionId = Guid.NewGuid();

            _projectGuestContextServiceMock
            .Setup(x => x.GetProjectGuestContextAsync(It.IsAny <string>()))
            .ReturnsAsync(new ProjectGuestContext()
            {
                GuestSessionId = guestSessionId,
                GuestState     = Guest.ProjectContext.Enums.GuestState.InProject,
                ProjectId      = _defaultProjectId,
                TenantId       = _projectTenantId
            });

            _projectAccessApiMock
            .Setup(x => x.GetProjectMemberUserIdsAsync(_defaultProjectId, MemberRoleFilter.FullUser, _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, (new List <Guid>()).AsEnumerable()));

            var guestSession = new GuestSession {
                Id = guestSessionId, ProjectId = _defaultProjectId, UserId = _currentUserId, ProjectAccessCode = _defaultAccessCode, GuestSessionState = GuestState.InProject
            };

            _guestSessionRepositoryMock
            .Setup(x => x.GetItemAsync(It.Is <Guid>(g => g == guestSessionId), It.IsAny <QueryOptions>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(guestSession);

            _guestSessionRepositoryMock
            .Setup(x => x.GetItemsAsync(It.IsAny <Expression <Func <GuestSession, bool> > >(), It.IsAny <BatchOptions>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new List <GuestSession> {
                guestSession
            });

            var response = await _target.SetProjectGuestContextAsync(_defaultProjectId, "code", _currentUserId, Guid.NewGuid(), _defaultPrincipalId);

            Assert.True(response.UserHasAccess);
        }
コード例 #26
0
        public async Task RecalculateProjectLobbyStateAsync_ReturnsExpectedLobbyState(int fullMemberParticipantCount, int guestSessionCount, LobbyState lobbyState)
        {
            var project   = Project.Example();
            var projectId = project.Id;

            var participants = new List <Participant>();

            for (int i = 1; i <= fullMemberParticipantCount; i++)
            {
                var participant = Participant.Example();
                ParticipantExtensions.SetProjectId(participant, project.Id);
                participant.GuestSessionId = null;
                participant.IsGuest        = false;
                participants.Add(participant);
            }

            _sessionServiceMock.Setup(m => m.GetParticipantsByGroupNameAsync(It.IsAny <string>(), It.IsAny <bool>(), false))
            .ReturnsAsync(participants);

            var guestSessions = new List <GuestSession>();

            project.GuestAccessCode = Guid.NewGuid().ToString();
            for (int i = 1; i <= guestSessionCount; i++)
            {
                var guestSession = GuestSession.Example();
                guestSession.ProjectId         = projectId;
                guestSession.ProjectAccessCode = project.GuestAccessCode;
                guestSession.GuestSessionState = GuestState.InProject;
                guestSession.CreatedDateTime   = DateTime.UtcNow;
                guestSession.UserId            = Guid.NewGuid();
                guestSessions.Add(guestSession);

                // Should never have more than one InProject sessions for same user and project,
                // but need to test LINQ query with group by, where, and order by clauses,
                // for correct calculation of current guest quantity.
                var guestSession2 = CloneGuestSession(guestSession);
                guestSession2.CreatedDateTime = DateTime.UtcNow.AddHours(-1.0);
                guestSessions.Add(guestSession2);

                var guestSession3 = CloneGuestSession(guestSession);
                guestSession3.CreatedDateTime = DateTime.UtcNow.AddHours(-2.0);
                guestSessions.Add(guestSession3);
            }

            _guestSessionRepositoryMock
            .Setup(m => m.GetItemsAsync(It.IsAny <Expression <Func <GuestSession, bool> > >(), It.IsAny <BatchOptions>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(guestSessions);

            _projectApi
            .Setup(m => m.GetProjectByIdAsync(It.IsAny <Guid>(), null))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, project));

            _cacheMock
            .SetupSequence(m => m.ItemGetAsync(It.IsAny <List <string> >(), typeof(ProjectLobbyState)))
            .ReturnsAsync(new List <ProjectLobbyState>()
            {
                default(ProjectLobbyState)
            });

            _cacheMock
            .Setup(m => m.ItemSetAsync(It.IsAny <string>(), It.IsAny <ProjectLobbyState>(), It.IsAny <TimeSpan>(), It.IsAny <CacheCommandOptions>()))
            .Returns(Task.FromResult(ProjectLobbyState.Example()));

            var result = await _target.RecalculateProjectLobbyStateAsync(project.Id);

            Assert.IsAssignableFrom <ProjectLobbyState>(result);
            Assert.Equal(lobbyState, result.LobbyState);
        }
        public GuestInviteControllerTests()
        {
            var repositoryFactoryMock = new Mock <IRepositoryFactory>();

            _guestInviteRepositoryMock = new Mock <IRepository <GuestInvite> >();
            _defaultGuestInvite        = new GuestInvite
            {
                Id              = Guid.NewGuid(),
                InvitedBy       = Guid.NewGuid(),
                ProjectId       = Guid.NewGuid(),
                CreatedDateTime = DateTime.UtcNow
            };

            _defaultProject = new Project
            {
                Id = Guid.NewGuid(),
                GuestAccessCode    = Guid.NewGuid().ToString(),
                IsGuestModeEnabled = true
            };

            _userApiMock.Setup(x => x.GetUserAsync(It.IsAny <Guid>()))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, User.GuestUserExample()));

            _projectApiMock.Setup(x => x.GetProjectByIdAsync(It.IsAny <Guid>(), null))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, Project.Example()));

            _projectApiMock.Setup(x => x.ResetGuestAccessCodeAsync(It.IsAny <Guid>(), null))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, Project.Example()));

            _emailServiceMock.Setup(x => x.SendGuestInviteEmailAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK));

            _guestInviteRepositoryMock
            .Setup(x => x.GetItemAsync(It.IsAny <Guid>(), It.IsAny <BatchOptions>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(_defaultGuestInvite);

            _guestInviteRepositoryMock
            .Setup(x => x.CreateItemAsync(It.IsAny <GuestInvite>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((GuestInvite guestInvite, CancellationToken c) => guestInvite);

            _guestInviteRepositoryMock
            .Setup(x => x.UpdateItemAsync(_defaultGuestInvite.Id, It.IsAny <GuestInvite>(), It.IsAny <UpdateOptions>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((Guid id, GuestInvite guestInvite, UpdateOptions o, CancellationToken c) => guestInvite);

            repositoryFactoryMock
            .Setup(x => x.CreateRepository <GuestInvite>())
            .Returns(_guestInviteRepositoryMock.Object);

            _validatorMock
            .Setup(v => v.ValidateAsync(It.IsAny <object>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new ValidationResult());

            _validatorMock
            .Setup(v => v.Validate(It.IsAny <object>()))
            .Returns(new ValidationResult());

            _validatorLocator
            .Setup(g => g.GetValidator(It.IsAny <Type>()))
            .Returns(_validatorMock.Object);

            var loggerFactoryMock = new Mock <ILoggerFactory>();

            loggerFactoryMock
            .Setup(x => x.Get(It.IsAny <LogTopic>()))
            .Returns(new Mock <ILogger>().Object);

            _target = new GuestInviteController(_userApiMock.Object, _projectApiMock.Object, _emailServiceMock.Object, repositoryFactoryMock.Object, _validatorLocator.Object, _eventServiceMock.Object, loggerFactoryMock.Object, _serializerMock.Object);
        }
        public ProjectGuestContextControllerTests()
        {
            _defaultProject = new Project()
            {
                Id = _defaultProjectId, TenantId = _projectTenantId, GuestAccessCode = _defaultAccessCode
            };
            _defaultPrincipalId          = Guid.NewGuid();
            _defaultProjectTenantHeaders = new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>(HeaderKeys.Tenant, _defaultProject.TenantId.ToString())
            };
            _defaultUser = new User {
                Id = _currentUserId, Username = "******"
            };
            var defaultProjectLobbyState = new ProjectLobbyState {
                LobbyState = LobbyState.Normal, ProjectId = _defaultProjectId
            };

            _defaultGuestSession = new GuestSession {
                Id = Guid.NewGuid(), ProjectId = _defaultProjectId, UserId = _currentUserId, ProjectAccessCode = _defaultAccessCode, GuestSessionState = GuestState.InLobby, SessionId = _defaultUserSessionId
            };
            _defaultProjectGuestContext = new ProjectGuestContext
            {
                GuestSessionId = _defaultGuestSession.Id,
                GuestState     = Guest.ProjectContext.Enums.GuestState.InLobby,
                ProjectId      = _defaultProjectId,
                TenantId       = _projectTenantId
            };

            var repositoryFactoryMock = new Mock <IRepositoryFactory>();

            repositoryFactoryMock
            .Setup(x => x.CreateRepository <GuestSession>())
            .Returns(_guestSessionRepositoryMock.Object);

            _projectGuestContextServiceMock
            .Setup(x => x.GetProjectGuestContextAsync(It.IsAny <string>()))
            .ReturnsAsync(_defaultProjectGuestContext);

            _projectAccessApiMock
            .Setup(x => x.GrantProjectMembershipAsync(It.IsAny <GrantProjectMembershipRequest>(), _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK));

            _guestSessionControllerMock
            .Setup(x => x.UpdateGuestSessionStateAsync(It.IsAny <UpdateGuestSessionStateRequest>(), It.IsAny <Guid>()))
            .ReturnsAsync(new UpdateGuestSessionStateResponse());

            _guestSessionControllerMock
            .Setup(x => x.VerifyGuestAsync(It.IsAny <GuestVerificationRequest>(), It.IsAny <Project>(), It.IsAny <Guid?>()))
            .ReturnsAsync(new GuestVerificationResponse()
            {
                ResultCode = VerifyGuestResponseCode.Success
            });

            _guestSessionControllerMock
            .Setup(x => x.CreateGuestSessionAsync(It.IsAny <GuestSession>(), _defaultPrincipalId, It.IsAny <Guid>()))
            .ReturnsAsync(_defaultGuestSession);

            _userApiMock
            .Setup(x => x.GetUserAsync(_currentUserId))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, _defaultUser));

            _serviceToServiceProjectApiMock
            .Setup(x => x.GetProjectByIdAsync(_defaultProjectId, null))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, _defaultProject));

            _projectAccessApiMock
            .Setup(x => x.GetProjectMemberUserIdsAsync(_defaultProjectId, MemberRoleFilter.FullUser, _defaultProjectTenantHeaders))
            .ReturnsAsync(MicroserviceResponse.Create(HttpStatusCode.OK, (new List <Guid>()
            {
                _currentUserId
            }).AsEnumerable()));

            _projectLobbyStateControllerMock
            .Setup(x => x.GetProjectLobbyStateAsync(_defaultProjectId))
            .ReturnsAsync(defaultProjectLobbyState);

            _target = new ProjectGuestContextController(repositoryFactoryMock.Object,
                                                        _guestSessionControllerMock.Object,
                                                        _projectLobbyStateControllerMock.Object,
                                                        _projectGuestContextServiceMock.Object,
                                                        _projectAccessApiMock.Object,
                                                        _serviceToServiceProjectApiMock.Object,
                                                        _userApiMock.Object);
        }