public void Setup()
        {
            _command = new ChangeTeamMemberRoleCommand
            {
                HashedAccountId = "1",
                Email           = "*****@*****.**",
                Role            = Role.Owner,
                ExternalUserId  = Guid.NewGuid().ToString(),
            };

            _callerMembership = new MembershipView
            {
                AccountId = ExpectedAccountId,
                UserRef   = Guid.NewGuid().ToString(),
                UserId    = 1,
                Role      = Role.Owner
            };

            _userMembership = new TeamMember
            {
                AccountId = _callerMembership.AccountId,
                UserRef   = Guid.NewGuid().ToString(),
                Id        = _callerMembership.UserId + 1,
                Role      = _command.Role
            };

            _membershipRepository = new Mock <IMembershipRepository>();
            _membershipRepository.Setup(x => x.GetCaller(_command.HashedAccountId, _command.ExternalUserId)).ReturnsAsync(_callerMembership);
            _membershipRepository.Setup(x => x.Get(_callerMembership.AccountId, _command.Email)).ReturnsAsync(_userMembership);

            _mediator       = new Mock <IMediator>();
            _eventPublisher = new Mock <IEventPublisher>();

            _handler = new ChangeTeamMemberRoleCommandHandler(_membershipRepository.Object, _mediator.Object, _eventPublisher.Object);
        }
        public void IfUserIsCallerWillThrowException()
        {
            var command = new ChangeTeamMemberRoleCommand
            {
                HashedAccountId = "1",
                Email           = "*****@*****.**",
                Role            = Role.Owner,
                ExternalUserId  = Guid.NewGuid().ToString()
            };

            var callerMembership = new MembershipView
            {
                AccountId = ExpectedAccountId,
                UserId    = 1,
                Role      = Role.Owner
            };

            var userMembership = new TeamMember
            {
                AccountId = callerMembership.AccountId,
                Id        = callerMembership.UserId,
                Role      = callerMembership.Role
            };

            _membershipRepository.Setup(x => x.GetCaller(callerMembership.AccountId, command.ExternalUserId)).ReturnsAsync(callerMembership);
            _membershipRepository.Setup(x => x.Get(callerMembership.AccountId, command.Email)).ReturnsAsync(userMembership);

            var exception = Assert.ThrowsAsync <InvalidRequestException>(() => _handler.Handle(command));

            Assert.That(exception.ErrorMessages.Count, Is.EqualTo(1));
            Assert.That(exception.ErrorMessages.FirstOrDefault(x => x.Key == "Membership"), Is.Not.Null);
        }
        public void ThenAnInvalidRequestWillThrowException()
        {
            var command = new ChangeTeamMemberRoleCommand();

            var exception = Assert.ThrowsAsync <InvalidRequestException>(() => _handler.Handle(command));

            Assert.That(exception.ErrorMessages.Count, Is.EqualTo(4));

            Assert.That(exception.ErrorMessages.FirstOrDefault(x => x.Key == "AccountId"), Is.Not.Null);
            Assert.That(exception.ErrorMessages.FirstOrDefault(x => x.Key == "Email"), Is.Not.Null);
            Assert.That(exception.ErrorMessages.FirstOrDefault(x => x.Key == "Role"), Is.Not.Null);
            Assert.That(exception.ErrorMessages.FirstOrDefault(x => x.Key == "ExternalUserId"), Is.Not.Null);
        }
        public void IfCallerNotMemberOfAccountWillThrowException()
        {
            var command = new ChangeTeamMemberRoleCommand
            {
                HashedAccountId = "1",
                Email           = "*****@*****.**",
                RoleId          = 1,
                ExternalUserId  = Guid.NewGuid().ToString()
            };

            _membershipRepository.Setup(x => x.GetCaller(command.HashedAccountId, command.ExternalUserId)).ReturnsAsync(null);

            var exception = Assert.ThrowsAsync <InvalidRequestException>(() => _handler.Handle(command));

            Assert.That(exception.ErrorMessages.Count, Is.EqualTo(1));
            Assert.That(exception.ErrorMessages.FirstOrDefault(x => x.Key == "Membership"), Is.Not.Null);
        }