public async Task Can_Login_as_Customer()
        {
            // arrange
            var user = UserBuilder.Create()
                       .WithRole(UserRole.Customer)
                       .WithEmail(HealthyJuicesConstants.DEFAULT_USER_LOGIN)
                       .Active()
                       .WithPassword(HealthyJuicesConstants.DEFAULT_USER_PASSWORD)
                       .Build(ArrangeRepositoryContext);

            var dto = new Login.Query(HealthyJuicesConstants.DEFAULT_USER_LOGIN, HealthyJuicesConstants.DEFAULT_USER_PASSWORD);

            var controller = new AuthorizationController(Mediator);

            // act
            var result = await controller.LoginAsync(dto);

            // assert
            result.AccessToken.Should().NotBeNullOrEmpty();
            result.User.Should().NotBeNull();
            result.User.Email.Should().Be(dto.Email);

            var subject = AssertRepositoryContext.Users.FirstOrDefault();

            subject.Should().NotBeNull();
            subject.Roles.Should().Be(UserRole.Customer);

            subject.Email.Should().Be(dto.Email);
            subject.Password.Text.Should().NotBeNullOrWhiteSpace();
            subject.Password.Salt.Should().NotBeNullOrWhiteSpace();
            subject.IsActive.Should().BeTrue();
            subject.IsRemoved.Should().BeFalse();
        }
        public async Task ResetPassword_Should_change_password_and_reset_pemisiontoken()
        {
            // arrange
            var user = UserBuilder.Create()
                       .WithEmail(HealthyJuicesConstants.DEFAULT_USER_LOGIN)
                       .WithPassword(RandomString)
                       .WithPermissionsToken(RandomString, DateTime.Today.AddDays(1))
                       .Active()
                       .Build(ArrangeRepositoryContext);

            var controller = new AuthorizationController(Mediator);
            var newPass    = "******";
            var dto        = new ResetPassword.Command(HealthyJuicesConstants.DEFAULT_USER_LOGIN, user.PermissionsToken.Token, newPass);

            // act
            await controller.ResetPasswordAsync(dto);

            // assert
            var subject = AssertRepositoryContext.Users.FirstOrDefault();

            subject.Should().NotBeNull();
            subject.Password.Salt.Should().NotBe(user.Password.Salt);
            subject.Password.Salt.Should().NotBe(user.Password.Text);

            subject.Password.CheckValidity(newPass).Should().BeTrue();

            subject.IsActive.Should().BeTrue();
            subject.PermissionsToken.Should().BeNull();

            MailerMock.VerifyNoOtherCalls();
        }
        public void Create_when_SetPassword_has_not_been_called_throws_InvalidOperationException()
        {
            // arrange
            ICryptoService cryptoService = MockRepository.GenerateStub<ICryptoService>();

            UserBuilder builder = new UserBuilder(cryptoService)
                .SetEmail("Email")
                .SetName("Name")
                .SetSurname("Surname");

            // assert
            Assert.Throws<InvalidOperationException>(() => builder.Create());
        }
예제 #4
0
        public async Task Orders_can_be_created()
        {
            // arrange
            var user    = UserBuilder.Create().WithRole(UserRole.Customer).WithEmail("*****@*****.**").WithRole(UserRole.Customer).Active().Build(ArrangeRepositoryContext);
            var company = CompanyBuilder.Create().WithName("test company").WithUsers(user).Build(ArrangeRepositoryContext);
            var product = ProductBuilder.Create().WithName("test Prod").Active().Build(ArrangeRepositoryContext);

            var amount = 2;

            var request = new CreateOrder.Command
            {
                DeliveryDate  = DateTime.Now.AddDays(1),
                UserId        = user.Id,
                OrderProducts = new List <OrderItemDto> {
                    new OrderItemDto()
                    {
                        ProductId = product.Id,
                        Amount    = amount
                    }
                }
            };
            var controller = new OrdersController(Mediator);

            controller.SetUserId(user.Id);

            // act
            var result = await controller.CreateAsync(request);

            // assert
            result.Should().NotBeNullOrWhiteSpace();

            var subject = AssertRepositoryContext.Orders
                          .Include(x => x.OrderProducts)
                          .ThenInclude(x => x.Product)
                          .FirstOrDefault();

            subject.Should().NotBeNull();
            subject.DeliveryDate.Should().Be(request.DeliveryDate);
            subject.UserId.Should().Be(request.UserId);
            subject.DestinationCompanyId.Should().Be(company.Id);

            subject.OrderProducts.Count.Should().Be(1);
            subject.OrderProducts.First().ProductId.Should().Be(product.Id);
            subject.OrderProducts.First().Amount.Should().Be(amount);
        }
        public async Task ConfirmEmailRegister_Should_activate_user_and_reset_pemisiontoken()
        {
            // arrange
            var user = UserBuilder.Create()
                       .WithEmail(HealthyJuicesConstants.DEFAULT_USER_LOGIN)
                       .WithPermissionsToken(RandomString, DateTime.Today.AddDays(1))
                       .Build(ArrangeRepositoryContext);

            var controller = new AuthorizationController(Mediator);

            // act
            await controller.ConfirmRegisterAsync(HealthyJuicesConstants.DEFAULT_USER_LOGIN, user.PermissionsToken.Token);

            // assert
            var subject = AssertRepositoryContext.Users.FirstOrDefault();

            subject.Should().NotBeNull();
            subject.IsActive.Should().BeTrue();
            subject.PermissionsToken.Should().BeNull();
        }
예제 #6
0
        public async Task Can_not_create_order_in_unavailability_duration()
        {
            // arrange
            var user    = UserBuilder.Create().WithRole(UserRole.Customer).WithEmail("*****@*****.**").WithRole(UserRole.Customer).Active().Build(ArrangeRepositoryContext);
            var company = CompanyBuilder.Create().WithName("test company").WithUsers(user).Removed().Build(ArrangeRepositoryContext);

            var product = ProductBuilder.Create().WithName("test Prod").Active().Build(ArrangeRepositoryContext);

            var unavailability = UnavailabilityBuilder.Create().From(DateTime.Now).To(DateTime.Now.AddDays(3)).WithReason(UnavailabilityReason.Sick).Build(ArrangeRepositoryContext);

            var request = new CreateOrder.Command
            {
                DeliveryDate  = DateTime.Now.AddDays(1),
                UserId        = user.Id,
                OrderProducts = new List <OrderItemDto> {
                    new OrderItemDto()
                    {
                        ProductId = product.Id,
                        Amount    = 1
                    }
                }
            };

            var controller = new OrdersController(Mediator);

            controller.SetUserId(user.Id);

            // act
            Func <Task> act       = () => controller.CreateAsync(request);
            var         exception = await Assert.ThrowsAsync <BadRequestException>(act);

            //assert
            exception.Message.Should().Be("Can not create order in unavailability duration");

            // assert
            var subject = AssertRepositoryContext.Orders.ToList();

            subject.Count.Should().Be(0);
        }
        public async Task ForgotPassword_Should_save_new_token_and_send_email()
        {
            // arrange
            var user = UserBuilder.Create().WithRole(UserRole.Customer).WithEmail(HealthyJuicesConstants.DEFAULT_USER_LOGIN).WithPassword(HealthyJuicesConstants.DEFAULT_USER_PASSWORD).Build(ArrangeRepositoryContext);

            var controller = new AuthorizationController(Mediator);
            var dto        = new ForgotPassword.Command(HealthyJuicesConstants.DEFAULT_USER_LOGIN);

            // act
            await controller.ForgotPasswordAsync(dto);

            // assert
            var subject = AssertRepositoryContext.Users.FirstOrDefault();

            subject.Should().NotBeNull();
            subject.PermissionsToken.Token.Should().NotBeNullOrEmpty();
            subject.PermissionsToken.Expiration.Should().BeAfter(DateTime.Now);
            subject.PermissionsToken.Expiration.Should().BeBefore(DateTime.Now.AddDays(2));

            MailerMock.Verify(mock => mock.SendAsync(It.Is <string>(x => x == HealthyJuicesConstants.DEFAULT_USER_LOGIN), It.IsAny <string>(), It.Is <string>(x => x.Contains(subject.PermissionsToken.Token)), false), Times.Once);
            MailerMock.VerifyNoOtherCalls();
        }