Exemplo n.º 1
0
        public async Task AddAsync__In_resource_exists_the_same_ticket_but_with_different_ticket_id_and_id__Should_add_this_ticket_successful()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.Tickets.Add(_validTicket);
                    await context.SaveChangesAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var service = new TicketDbService(context, _logger);
                    var ticket  = _validTicket.Clone() as Ticket;
                    ticket.Id      += "_changed_id";
                    ticket.Customer = await context.Customers.SingleAsync(x => x.Id.Equals(_validTicket.Customer.Id));

                    ticket.Discount = await context.Discounts.SingleAsync(x => x.Id.Equals(_validTicket.Discount.Id));

                    ticket.Tariff = await context.TicketTariffs.SingleAsync(x => x.Id.Equals(_validTicket.Tariff.Id));

                    ticket.Group = await context.Groups.SingleAsync(x => x.Id.Equals(_validTicket.Group.Id));

                    var result = await service.AddAsync(ticket);

                    result.Should().BeEquivalentTo(ticket);
                }
            }
        }
Exemplo n.º 2
0
        public async Task AddAsync__In_resource_exists_the_same_ticket_but_with_different_ticket_id__Should_throw_InvalidOperationException()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.Tickets.Add(_validTicket);
                    await context.SaveChangesAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var service = new TicketDbService(context, _logger);
                    var ticket  = _validTicket.Clone() as Ticket;

                    // Assign existing customer, discount, ticket tariff and sightseeing group to the ticket to be added, based on their Ids.
                    // Each ticket is a child of mentioned entities and cannot exist without their.
                    // Moreover, it is impossible to add a new parent by adding a ticket that references a non-existent parent.
                    // In this case, an exception will be thrown.
                    ticket.Customer = await context.Customers.SingleAsync(x => x.Id.Equals(_validTicket.Customer.Id));

                    ticket.Discount = await context.Discounts.SingleAsync(x => x.Id.Equals(_validTicket.Discount.Id));

                    ticket.Tariff = await context.TicketTariffs.SingleAsync(x => x.Id.Equals(_validTicket.Tariff.Id));

                    ticket.Group = await context.Groups.SingleAsync(x => x.Id.Equals(_validTicket.Group.Id));

                    Func <Task> action = async() => await service.AddAsync(ticket);

                    await action.Should().ThrowExactlyAsync <InvalidOperationException>("Because in resource exists the Ticket with the same id as this one to be added.");
                }
            }
        }
Exemplo n.º 3
0
        public async Task GetWithPaginationAsync__Number_of_elements_on_single_page_is_less_than_page_size__Should_return_all_these_elements()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.Tickets.RemoveRange(await context.Tickets.ToArrayAsync());
                    await context.SaveChangesAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    for (int i = 0; i < 10; i++)
                    {
                        await context.Tickets.AddAsync(new Ticket { Id = i.ToString() });
                    }
                    await context.SaveChangesAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var service = new TicketDbService(context, _logger);

                    // Page will be first with 6 elements and second with 4 elements. Second page will be return.
                    var result = await service.GetWithPaginationAsync(2, 6);

                    // More generic solution is: Count() should be count of elements in resource % pageSize.
                    result.Count().Should().Be(4);
                }
            }
        }
        public async Task Validate__Given_role_exist_in_db__Should_be_valid()
        {
            string role = "admin";

            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.Roles.Add(new IdentityRole {
                        Name = role, NormalizedName = role.ToUpper()
                    });
                    await context.SaveChangesAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var validRegisterVM = new RegisterViewModel {
                        Role = role
                    };
                    var validator = new RegisterViewModelValidator(context);

                    validator.ShouldNotHaveValidationErrorFor(x => x.Role, validRegisterVM);
                }
            }
        }
Exemplo n.º 5
0
        public async Task RegisterAsync__Login_or_email_already_taken__Should_return_200OK_with_error()
        {
            string role     = "role";
            string email    = "*****@*****.**";
            string userName = "******";

            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.Users.Add(new IdentityUser
                    {
                        Email    = email,
                        UserName = userName
                    });
                    context.Roles.Add(new IdentityRole(role));
                    await context.SaveChangesAsync();
                }
            }
            var registerData = new RegisterViewModel {
                EmailAddress = email, Password = "******", UserName = userName, Role = role
            };

            SetUpManagerForFailedRegister();
            var controller = new UsersController(_userManagerMock.Object, _jwtTokenHandlerMock.Object, _refreshTokenManager, _logger, _mapperMock.Object);

            var result = await controller.RegisterAsync(registerData);

            result.Should().BeOfType <OkObjectResult>();
            (result as OkObjectResult).StatusCode.Should().Be(200);
            ((result as OkObjectResult).Value as ResponseWrapper).Error.Should().NotBeEquivalentTo(new ApiError());
        }
Exemplo n.º 6
0
        public async Task RegisterAsync__Register_successful__Should_return_201Created_with_user_data()
        {
            string role = "role";

            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.Users.RemoveRange(await context.Users.ToArrayAsync());
                    context.Roles.Add(new IdentityRole(role));
                    await context.SaveChangesAsync();
                }
            }
            var registerData = new RegisterViewModel {
                EmailAddress = "*****@*****.**", Password = "******", UserName = "******", Role = role
            };

            SetUpManagerForSuccessedRegister();
            var controller = new UsersController(_userManagerMock.Object, _jwtTokenHandlerMock.Object, _refreshTokenManager, _logger, _mapperMock.Object);

            var result = await controller.RegisterAsync(registerData);

            (result as CreatedResult).StatusCode.Should().Be(201);
            ((result as CreatedResult).Value as ResponseWrapper).Data.Should().BeOfType <UserDto>();
            ((result as CreatedResult).Value as ResponseWrapper).Data.Should().NotBeEquivalentTo(new UserDto());
        }
Exemplo n.º 7
0
        public async Task DeleteRefreshTokenAsync__Delete_successful__Resources_should_not_contain_deleted_refresh_token()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.RefreshTokens.Add(_validRefreshToken);
                    context.SaveChanges();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var manager = new RefreshTokenManager(context, _logger, _jwtOptions);

                    await manager.DeleteRefreshTokenAsync(_validRefreshToken);

                    context.RefreshTokens.Where(x => x.Token.Equals(_validRefreshToken.Token)).Count().Should().Be(0);
                }
            }
        }
Exemplo n.º 8
0
        public async Task GetAsync__Resource_is_empty__Should_throw_InvalidOperationException()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.Tickets.RemoveRange(await context.Tickets.ToListAsync());
                    await context.SaveChangesAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var service = new TicketDbService(context, _logger);

                    Func <Task> action = async() => await service.GetAsync("a");

                    await action.Should().ThrowExactlyAsync <InvalidOperationException>("Because resource is empty and cannot get single instance of Ticket.");
                }
            }
        }
Exemplo n.º 9
0
        public async Task DeleteRefreshTokenAsync__Resource_is_empty__Should_throw_InvalidOperationException()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.RefreshTokens.RemoveRange(await context.RefreshTokens.ToArrayAsync());
                    await context.SaveChangesAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var manager = new RefreshTokenManager(context, _logger, _jwtOptions);

                    Func <Task> action = async() => await manager.DeleteRefreshTokenAsync(_validRefreshToken);

                    await action.Should().ThrowExactlyAsync <InvalidOperationException>("Because resource is empty and cannot delete any element.");
                }
            }
        }
Exemplo n.º 10
0
        public async Task AddAsync__In_resource_exists_the_same_activity_log_as_this_one_to_be_added__Should_throw_InvalidOperationException()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.ActivityLogs.Add(_validActivityLog);
                    await context.SaveChangesAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var service = new ActivityLogDbService(context, _logger);

                    Func <Task> result = async() => await service.AddAsync(_validActivityLog);

                    await result.Should().ThrowExactlyAsync <InvalidOperationException>("Because in resource exists the same ActivityLog as this one to be added.");
                }
            }
        }
Exemplo n.º 11
0
        public async Task GetWithPaginationAsync__Resource_is_empty__Should_return_empty_IEnumerable()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.Tickets.RemoveRange(await context.Tickets.ToArrayAsync());
                    await context.SaveChangesAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var service = new TicketDbService(context, _logger);

                    var result = await service.GetWithPaginationAsync(4, 5);

                    result.Count().Should().Be(0);
                }
            }
        }
Exemplo n.º 12
0
        public async Task AddRefreshToken__In_resource_exists_the_same_RefreshToken_as_this_one_to_be_added__Should_throw_InvalidOperationException()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.RefreshTokens.Add(_validRefreshToken);
                    await context.SaveChangesAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var manager = new RefreshTokenManager(context, _logger, _jwtOptions);

                    Func <Task> action = async() => await manager.AddRefreshTokenAsync(_validRefreshToken);

                    await action.Should().ThrowExactlyAsync <InvalidOperationException>("Because in resource exists the same RefreshToken as this one to be added.");
                }
            }
        }
Exemplo n.º 13
0
        public async Task GetAsync__Activity_log_found__Should_return_this_ActivityLog()
        {
            ActivityLog expectedActivityLog;

            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    expectedActivityLog = await context.ActivityLogs.FirstOrDefaultAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var service = new ActivityLogDbService(context, _logger);

                    var result = await service.GetAsync(expectedActivityLog.Id);

                    result.Should().BeEquivalentTo(expectedActivityLog);
                }
            }
        }
Exemplo n.º 14
0
        public async Task GetByAsync__Resource_does_not_exist__Should_throw_InternalDbServiceException()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    // Drop Tickets table.
                    context.Database.ExecuteSqlCommand("DROP TABLE [Tickets]");
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var service = new TicketDbService(context, _logger);

                    Func <Task> action = async() => await service.GetByAsync(_predicate);

                    await action.Should().ThrowExactlyAsync <InternalDbServiceException>("Because resource doesnt exist and cannot get single instance of Ticket. " +
                                                                                         "NOTE Excaption actually is type of 'SqLiteError' only if database provider is SQLite.");
                }
            }
        }
Exemplo n.º 15
0
        public async Task GetAsync__Ticket_found__Should_return_this_ticket()
        {
            Ticket expectedTicket;

            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    expectedTicket = await context.Tickets.FirstOrDefaultAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var service = new TicketDbService(context, _logger);

                    var result = await service.GetAsync(expectedTicket.Id);

                    result.Should().BeEquivalentTo(expectedTicket);
                }
            }
        }
Exemplo n.º 16
0
        public async Task AddRefreshToken__Resource_does_not_exist__Should_throw_InternalDbmanagerException()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    // Drop RefreshTokens table.
                    context.Database.ExecuteSqlCommand("DROP TABLE [RefreshTokens]");
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var manager = new RefreshTokenManager(context, _logger, _jwtOptions);

                    Func <Task> action = async() => await manager.AddRefreshTokenAsync(_validRefreshToken);

                    await action.Should().ThrowExactlyAsync <InternalDbServiceException>("Because resource doesnt exist and cannot get single instance of RefreshToken. " +
                                                                                         "NOTE Excaption actually is type of 'SqLiteError' only if database provider is SQLite.");
                }
            }
        }
        public async Task Validate__Given_role_does_not_exist_in_db__should_be_invalid()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.Roles.RemoveRange(await context.Roles.ToArrayAsync());
                    await context.SaveChangesAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var invalidRegisterVM = new RegisterViewModel {
                        Role = "adasd"
                    };
                    var validator = new RegisterViewModelValidator(context);

                    validator.ShouldHaveValidationErrorFor(x => x.Role, invalidRegisterVM);
                }
            }
        }
Exemplo n.º 18
0
        public async Task DeleteRefreshTokenAsync__RefreshToken_to_be_deleted_not_found__Should_throw_InvalidOperationException()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.RefreshTokens.Add(new RefreshToken {
                        Id = Guid.NewGuid().ToString(), Token = "sample_new_token"
                    });
                    context.SaveChanges();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    var manager = new RefreshTokenManager(context, _logger, _jwtOptions);

                    Func <Task> action = async() => await manager.DeleteRefreshTokenAsync(_validRefreshToken);

                    await action.Should().ThrowExactlyAsync <InvalidOperationException>("Because RefreshToken to be deleted not found.");
                }
            }
        }
Exemplo n.º 19
0
        public async Task DeleteRefreshTokenAsync__Delete_successful__Resources_length_should_be_less_by_1()
        {
            int expectedLength;

            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.RefreshTokens.Add(_validRefreshToken);
                    context.SaveChanges();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    expectedLength = context.RefreshTokens.Count() - 1;
                    var manager = new RefreshTokenManager(context, _logger, _jwtOptions);

                    await manager.DeleteRefreshTokenAsync(_validRefreshToken);

                    context.RefreshTokens.Count().Should().Be(expectedLength);
                }
            }
        }
Exemplo n.º 20
0
        public async Task AddAsync__Add_successful__Should_return_added_ticket_tariff()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    var service = new TicketDbService(context, _logger);

                    var result = await service.AddAsync(_validTicket);

                    result.Should().BeEquivalentTo(_validTicket);
                }
            }
        }
Exemplo n.º 21
0
        public async Task DeleteRefreshTokenAsync__Argument_refresh_token_is_null__Should_throw_ArgumentNullException()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    var manager = new RefreshTokenManager(context, _logger, _jwtOptions);

                    Func <Task> action = async() => await manager.DeleteRefreshTokenAsync(null);

                    await action.Should().ThrowExactlyAsync <ArgumentNullException>();
                }
            }
        }
Exemplo n.º 22
0
        public async Task GetSavedRefreshToken__Found_zero_matching_refresh_token__Should_throw_InvalidOperationException()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    var manager = new RefreshTokenManager(context, _logger, _jwtOptions);

                    Func <Task> action = async() => await manager.GetSavedRefreshTokenAsync(_validRefreshToken.Token);

                    await action.Should().ThrowExactlyAsync <InvalidOperationException>("Because RefreshToken not found.");
                }
            }
        }
Exemplo n.º 23
0
        public async Task GetSavedRefreshToken__Arguemnt_refresh_token_is_null_or_empty__Should_throw_ArgumentNullException([Values(null, "")] string refreshToken)
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    var manager = new RefreshTokenManager(context, _logger, _jwtOptions);

                    Func <Task> action = async() => await manager.GetSavedRefreshTokenAsync(refreshToken);

                    await action.Should().ThrowExactlyAsync <ArgumentException>("Because refreshToken cannot be null or empty.");
                }
            }
        }
Exemplo n.º 24
0
        public async Task AddAsync__Add_successful__Resource_contains_added_ticket_tariff()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    var service = new TicketDbService(context, _logger);

                    await service.AddAsync(_validTicket);

                    context.Tickets.Contains(_validTicket).Should().BeTrue();
                }
            }
        }
Exemplo n.º 25
0
        public async Task AddAsync__Add_successful__Resource_contains_added_ActivityLog()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    var service = new ActivityLogDbService(context, _logger);

                    await service.AddAsync(_validActivityLog);

                    context.ActivityLogs.Contains(_validActivityLog).Should().BeTrue();
                }
            }
        }
Exemplo n.º 26
0
        public async Task GetByAsync__Argument_predicate_is_null__Should_throw_ArgumentNullException()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    var service = new TicketDbService(context, _logger);

                    Func <Task> action = async() => await service.GetByAsync(null);

                    await action.Should().ThrowExactlyAsync <ArgumentNullException>();
                }
            }
        }
Exemplo n.º 27
0
        public async Task AddRefreshToken__Add_successful__Resource_contains_added_RefreshToken()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    var manager = new RefreshTokenManager(context, _logger, _jwtOptions);

                    await manager.AddRefreshTokenAsync(_validRefreshToken);

                    context.RefreshTokens.Contains(_validRefreshToken).Should().BeTrue();
                }
            }
        }
Exemplo n.º 28
0
        public async Task GetAsync__Found_zero_matching_ticket__Should_throw_InvalidOperationException()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    var service = new TicketDbService(context, _logger);

                    Func <Task> action = async() => await service.GetAsync("a");

                    await action.Should().ThrowExactlyAsync <InvalidOperationException>("Because Ticket not found.");
                }
            }
        }
Exemplo n.º 29
0
        public async Task GetSavedRefreshToken__RefreshToken_found__Should_return_this_RefreshToken()
        {
            RefreshToken expectedRefreshToken;

            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.RefreshTokens.Add(_validRefreshToken);
                    await context.SaveChangesAsync();
                }

                using (var context = await factory.CreateContextAsync())
                {
                    expectedRefreshToken = await context.RefreshTokens.FirstOrDefaultAsync();

                    var manager = new RefreshTokenManager(context, _logger, _jwtOptions);

                    var result = await manager.GetSavedRefreshTokenAsync(expectedRefreshToken.Token);

                    result.Should().BeEquivalentTo(expectedRefreshToken);
                }
            }
        }
Exemplo n.º 30
0
        public async Task AddRefreshToken__Resource_is_null__Should_throw_InternalDbServiceException()
        {
            using (var factory = new DbContextFactory())
            {
                using (var context = await factory.CreateContextAsync())
                {
                    context.RefreshTokens = null as DbSet <RefreshToken>;
                    var manager = new RefreshTokenManager(context, _logger, _jwtOptions);

                    Func <Task> action = async() => await manager.AddRefreshTokenAsync(_validRefreshToken);

                    await action.Should().ThrowExactlyAsync <InternalDbServiceException>("Because resource reference is set to null");
                }
            }
        }