using System; using System.Linq; using Xunit; using Microsoft.eShopOnContainers.Services.Ordering.SqlData.UnitOfWork; using Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel; using Microsoft.eShopOnContainers.Services.Ordering.Domain.Contracts; using Microsoft.eShopOnContainers.Services.Ordering.SqlData.Repositories; using Microsoft.EntityFrameworkCore; namespace DataIntegrationTests { //Basic documentation for Testing EF Core classes // http://ef.readthedocs.io/en/latest/miscellaneous/testing.html public class Tests { [Fact] public async void Add_order_to_data_model() { // All contexts that share the same service provider will share the same database //Using InMemory DB //var options = DbContextUtil.CreateNewContextOptionsForInMemoryDB(); //Using Sql Server var options = DbContextUtil.CreateNewContextOptionsForSqlDb(); // Run the test against one instance of the context using (var context = new OrderingDbContext(options)) { IOrderRepository orderRepository = new OrderRepository(context); //Create generic Address ValueObject Address sampleAddress = new Address("15703 NE 61st Ct.", "Redmond", "Washington", "WA", "United States", "US", "98052", 47.661492, -122.131309 ); //Create sample Orders Order order1 = new Order(Guid.NewGuid(), sampleAddress, sampleAddress); //Add a few OrderItems order1.AddNewOrderItem(Guid.NewGuid(), 2, 25, 30); order1.AddNewOrderItem(Guid.NewGuid(), 1, 58, 0); order1.AddNewOrderItem(Guid.NewGuid(), 1, 60, 0); order1.AddNewOrderItem(Guid.NewGuid(), 3, 12, 0); order1.AddNewOrderItem(Guid.NewGuid(), 5, 3, 0); orderRepository.Add(order1); int numChanges = await orderRepository.UnitOfWork.CommitAsync(); //With no Async Repository //context.Orders.Add(order1); //context.SaveChanges(); } //// Use a separate instance of the context to verify correct data was saved to database using (var context = new OrderingDbContext(options)) { var orders = context.Orders .Include(o => o.ShippingAddress) .Include(o => o.BillingAddress) .ToList(); //Could be using .Load() if you don't want to create a List //OTHER SAMPLE //var company = context.Companies // .Include(co => co.Employees).ThenInclude(emp => emp.Employee_Car) // .Include(co => co.Employees).ThenInclude(emp => emp.Employee_Country) // .FirstOrDefault(co => co.companyID == companyID); //Assert when running test with a clean In-Memory DB //Assert.Equal(1, context.Orders.Count()); string cityName = orders.First().ShippingAddress.City; Assert.Equal("Redmond", cityName); } } } }