public void GetAllCustomersShouldReturnAllDataWhenDefaultValuesUsed() { // Arrange var interceptors = new DefaultRepositoryInterceptors(new NorthwindQueryRepositoryInterceptor()); var repository = new InMemoryRepository(interceptors); for (int i = 0; i < 15; i++) { repository.Add(EntityGenerator.Create<Customer>( p => p.CompanyName = p.CompanyName + i, p => p.CustomerID = i.ToString(), p => p.Orders.First().OrderDetails.First().Quantity = (short)i, p => p.Orders.First().OrderDetails.First().UnitPrice = 100.0M)); } // Act var ordersController = new OrdersController(repository); var results = ordersController.GetAllCustomers().Result; // Assert results.Count().ShouldEqual(15); for (int i = 0; i < 15; i++) { results.ElementAt(i).CustomerId.ShouldEqual(i.ToString()); results.ElementAt(i).CompanyName.ShouldEqual("CompanyName" + i); results.ElementAt(i).CombinedOrderValue.ShouldEqual(100 * i); } }
public void InsertCategoryShouldSaveToRepository() { // Arrange var events = new RecordedRepositoryEvents(); var repository = new InMemoryRepository(events); // Act var salesController = new SalesController(repository); salesController.PostCategory(new SalesCategory { CategoryName = "NewCat", CategoryDescription = "NewDescription" }); // Check category values var savedCategory = repository.GetEntity<Category>(p => p.Id == 0); savedCategory.Id.ShouldEqual(0); savedCategory.CategoryName.ShouldEqual("NewCat"); savedCategory.Description.ShouldEqual("NewDescription"); // As we are using an in memory implementation we need to check that the modify and save // methods are called events.AddedEvents.Count().ShouldEqual(1); events.ModifiedEvents.Count().ShouldEqual(0); events.DeletedEvents.Count().ShouldEqual(0); events.SavedEvents.Count().ShouldEqual(1); }
public void GetSalesCategoriesShouldReturnDataRetrievedFromInterceptorThroughProjection() { // Arrange var events = new RecordedRepositoryEvents(); var repository = new InMemoryRepository( events, new DefaultRepositoryInterceptors(new NorthwindQueryRepositoryInterceptor())); // Act var salesController = new SalesController(repository); var items = salesController.GetSalesCategories().Result; // Check we are getting the necessary data from the stored proc call. items.Count().ShouldEqual(2); items.Count().ShouldEqual(TestsEntityFrameworkRepositoryExtensions.SalesCategories.Count()); items.First().ShouldEqual(TestsEntityFrameworkRepositoryExtensions.SalesCategories.First()); items.Second().ShouldEqual(TestsEntityFrameworkRepositoryExtensions.SalesCategories.Second()); }
public void GetAllCustomersQueryShouldUseCorrectStrategies(int take, int skip, string orderBy, bool ascending, decimal? minOrderValue) { // Arrange var events = new RecordedRepositoryEvents(); var repository = new InMemoryRepository(events); // Act var notUsed = new OrdersController(repository).GetAllCustomers(take, skip, orderBy, ascending, minOrderValue).Result; // Assert var allStrategies = events.QueryEvents.Single().GetQueryStrategies(); allStrategies.Count().ShouldEqual(4); allStrategies.First().GetType().ShouldEqual(typeof(DefaultSpecificationQueryStrategy<AggregateCustomerSales>)); allStrategies.Second().GetType().ShouldEqual(typeof(ConditionalQueryStrategy)); allStrategies.Third().GetType().ShouldEqual(typeof(ConditionalQueryStrategy)); allStrategies.Fourth().GetType().ShouldEqual(typeof(ConditionalQueryStrategy)); }
public void GetAllCustomersShouldReturnCorrectDataWhenMinOrderSupplied() { // Arrange var interceptors = new DefaultRepositoryInterceptors(new NorthwindQueryRepositoryInterceptor()); var repository = new InMemoryRepository(interceptors); for (int i = 0; i < 15; i++) { repository.Add(EntityGenerator.Create<Customer>( p => p.CompanyName = p.CompanyName + i, p => p.CustomerID = i.ToString(), p => p.Orders.First().OrderDetails.First().Quantity = (short)i, p => p.Orders.First().OrderDetails.First().UnitPrice = 100.0M)); } // Act var ordersController = new OrdersController(repository); // Assert var results = ordersController.GetAllCustomers(minOrderValue: 100 * 10).Result; results.Count().ShouldEqual(5); }
public void UpdateCategoryShouldSaveToRepository() { // Arrange var events = new RecordedRepositoryEvents(); var repository = new InMemoryRepository(events); var newCategory = EntityGenerator.Create<Category>(p => p.Id = 999); repository.Add(newCategory); events.Reset(); // Act var salesController = new SalesController(repository); salesController.PutCategory(new SalesCategory { Id = newCategory.Id, CategoryName = "NewCat", CategoryDescription = "NewDescription" }); // Check category values var savedCategory = repository.GetEntity<Category>(p => p.Id == newCategory.Id); savedCategory.Id.ShouldEqual(savedCategory.Id); savedCategory.CategoryName.ShouldEqual("NewCat"); savedCategory.Description.ShouldEqual("NewDescription"); // As we are using an in memory implementation we need to check that the modify and save // methods are called events.AddedEvents.Count().ShouldEqual(0); events.ModifiedEvents.Count().ShouldEqual(1); events.DeletedEvents.Count().ShouldEqual(0); events.SavedEvents.Count().ShouldEqual(1); // If required we can drill down into each event and look at all aspects // of the event. Here we are check that the same reference is updated. var entityModified = (Category)events.ModifiedEvents.First().Entity; entityModified.ShouldEqual(savedCategory); entityModified.ShouldEqual(newCategory); }
public void GetAllCustomersShouldReturnCorrectDataWhenOrderedByDesc() { // Arrange var interceptors = new DefaultRepositoryInterceptors(new NorthwindQueryRepositoryInterceptor()); var repository = new InMemoryRepository(interceptors); for (int i = 0; i < 15; i++) { repository.Add(EntityGenerator.Create<Customer>( p => p.CompanyName = p.CompanyName + i, p => p.CustomerID = i.ToString(), p => p.Orders.First().OrderDetails.First().Quantity = (short)i, p => p.Orders.First().OrderDetails.First().UnitPrice = 100.0M)); } // Act var ordersController = new OrdersController(repository); var results = ordersController.GetAllCustomers(take: 1, skip: 0, ascending: false).Result; // Assert results.Single().CustomerId.ShouldEqual("14"); }
public void GetVeryImportantCustomersShouldReturnCorrectData() { // Arrange var events = new RecordedRepositoryEvents(); var repository = new InMemoryRepository(events); var customerSales = Enumerable.Repeat(EntityGenerator.Create<AggregateCustomerSales>(), 20).ToList(); customerSales.ForEach(repository.Add); // Act var ordersController = new OrdersController(repository); var results = ordersController.GetVeryImportantCustomers().Result; // Assert results.Count().ShouldEqual(10); var allStrategies = events.QueryEvents.Single().GetQueryStrategies(); // check the strategies used in this call allStrategies.Count().ShouldEqual(2); allStrategies.First().GetType().ShouldEqual(typeof(DefaultSpecificationQueryStrategy<AggregateCustomerSales>)); allStrategies.Second().GetType().ShouldEqual(typeof(FindVeryImportantCustomersQueryStrategy)); }
public void GetCustomerOrderHistoryShouldReturnCorrectDataWhenFilteredByProductName() { // Arrange var repository = new InMemoryRepository(); // Act var ordersController = new OrdersController(repository); var result = ordersController.GetCustomerOrderHistory("NotUsed", "2").Result; // Assert result.Count().ShouldEqual(1); result.First().ProductName.ShouldEqual("ProductName2"); }
public void GetCustomerOrderHistoryShouldReturnCorrectData() { // Arrange var events = new RecordedRepositoryEvents(); var repository = new InMemoryRepository(events); // Act var ordersController = new OrdersController(repository); var result = ordersController.GetCustomerOrderHistory("NotUsed").Result; result.Count().ShouldEqual(TestsEntityFrameworkRepositoryExtensions.CustomerOrderHistories.Count()); var allStrategies = events.QueryEvents.Single().GetQueryStrategies(); allStrategies.Count().ShouldEqual(3); allStrategies.First().GetType().ShouldEqual(typeof(DefaultSpecificationQueryStrategy<CustomerOrderHistory>)); allStrategies.Second().GetType().ShouldEqual(typeof(CustomerOrderHistoryStoredProcQueryStrategy)); allStrategies.Third().GetType().ShouldEqual(typeof(ConditionalQueryStrategy)); }