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); } } }
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."); } } }
public async Task AddAsync__Argument_is_null__Should_throw_ArgumentNullException() { var service = new TicketDbService(_dbContextMock.Object, _logger); Func <Task> result = async() => await service.AddAsync(null as Ticket); await result.Should().ThrowExactlyAsync <ArgumentNullException>("Because argument 'Ticket' is null."); }
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(); } } }
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); } } }
public async Task AddAsync__Add_successful__Resource_length_should_be_greater_by_1() { using (var factory = new DbContextFactory()) { using (var context = await factory.CreateContextAsync()) { int expectedLength = context.Tickets.Count() + 1; var service = new TicketDbService(context, _logger); await service.AddAsync(_validTicket); context.Tickets.Count().Should().Be(expectedLength); } } }
public async Task AddAsync__Resource_is_null__Should_throw_InternalDbServiceException() { using (var factory = new DbContextFactory()) { using (var context = await factory.CreateContextAsync()) { context.Tickets = null as DbSet <Ticket>; var service = new TicketDbService(context, _logger); Func <Task> action = async() => await service.AddAsync(_validTicket); await action.Should().ThrowExactlyAsync <InternalDbServiceException>("Because resource reference is set to null"); } } }
public async Task AddAsync__In_resource_exists_the_same_ticket_as_this_one_to_be_added__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()) { // Testing method var service = new TicketDbService(context, _logger); Func <Task> result = async() => await service.AddAsync(_validTicket); await result.Should().ThrowExactlyAsync <InvalidOperationException>("Because in resource exists the same Ticket as this one to be added."); } } }
public async Task AddAsync__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.AddAsync(_validTicket); 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."); } } }