public async Task ApplyChanges_Should_Set_Graph_States()
        {
            // Arrange
            ITrackableRepository <Order> ordersRepo = new TrackableRepository <Order>(_fixture.Context);
            var order = await ordersRepo.FindAsync(1);

            ordersRepo.DetachEntities(order);

            order.OrderDetails[0].TrackingState = TrackingState.Unchanged;
            order.OrderDetails[1].TrackingState = TrackingState.Modified;
            order.OrderDetails[2].TrackingState = TrackingState.Deleted;
            var addedDetail = new OrderDetail
            {
                OrderDetailId = 4,
                OrderId       = 1,
                ProductId     = 3,
                Product       = order.OrderDetails[2].Product,
                UnitPrice     = 40,
                Quantity      = 400,
                TrackingState = TrackingState.Added
            };

            order.OrderDetails.Add(addedDetail);

            // Act
            ordersRepo.ApplyChanges(order);

            // Assert
            Assert.Equal(EntityState.Unchanged, _fixture.Context.Entry(order).State);
            Assert.Equal(EntityState.Unchanged, _fixture.Context.Entry(order.OrderDetails[0]).State);
            Assert.Equal(EntityState.Modified, _fixture.Context.Entry(order.OrderDetails[1]).State);
            Assert.Equal(EntityState.Deleted, _fixture.Context.Entry(order.OrderDetails[2]).State);
            Assert.Equal(EntityState.Added, _fixture.Context.Entry(order.OrderDetails[3]).State);
        }
        public async Task Insert_Should_Create_Customer()
        {
            // Arrange
            IUnitOfWork  unitOfWork            = new UnitOfWork(_fixture.Context);
            var          customerRepository    = new TrackableRepository <Customer>(_fixture.Context);
            var          customerDomainService = new CustomerDomainService(customerRepository, _mapper);
            const string customerId            = "COMP1";
            const string companyName           = "Company 1";

            var customer = new CustomerDomainModel
            {
                CustomerId  = customerId,
                CompanyName = companyName
            };

            // Act
            customerDomainService.Insert(customer);
            var savedChanges = await unitOfWork.SaveChangesAsync();

            // Assert
            Assert.Equal(1, savedChanges);
            var newCustomer = await customerRepository.FindAsync(customerId);

            Assert.Equal(newCustomer.CustomerId, customerId);
            Assert.Equal(newCustomer.CompanyName, companyName);
        }
        public async Task CustomerSelectQueryObject()
        {
            var customerSelect = new CustomerQuery().WithfilterName("Alfreds");
            ITrackableRepository <Customer> customerRepository = new TrackableRepository <Customer>(_fixture.Context);
            var count = await customerRepository.Query(customerSelect).CountAsync();

            var page = await customerRepository.Query(customerSelect).Skip(0).Take(10).SelectAsync();

            Assert.Equal(1, count);
        }
        public async Task DeleteAsync_Should_Set_Entity_State_to_Deleted()
        {
            // Arrange
            ITrackableRepository <Product> productsRepo = new TrackableRepository <Product>(_fixture.Context);
            var product = await productsRepo.FindAsync(1);

            // Act
            await productsRepo.DeleteAsync(1);

            // Assert
            Assert.Equal(TrackingState.Deleted, product.TrackingState);
        }
Esempio n. 5
0
        public async Task CustomerOrderTotalByYear_Should_Return_Order_Total()
        {
            // Arrange
            ITrackableRepository <Customer> customerRepository = new TrackableRepository <Customer>(_fixture.Context);
            ITrackableRepository <Order>    orderRepository    = new TrackableRepository <Order>(_fixture.Context);
            var customerService = new CustomerService(customerRepository, orderRepository);

            // Act
            var customerOrderTotalByYear = await customerService.CustomerOrderTotalByYear("ALFKI", 1998);

            // Assert
            Assert.Equal(2302.2000m, customerOrderTotalByYear);
        }
        public void Update_Should_Set_Entity_State_to_Modified()
        {
            // Arrange
            ITrackableRepository <Product> productsRepo = new TrackableRepository <Product>(_fixture.Context);
            var product = new Product {
                ProductId = 4, ProductName = "Product 4", UnitPrice = 40, CategoryId = 1
            };

            // Act
            productsRepo.Update(product);

            // Assert
            Assert.Equal(TrackingState.Modified, product.TrackingState);
        }
Esempio n. 7
0
        public void Insert_Should_Set_Entity_State_to_Added()
        {
            // Arrange
            ITrackableRepository <Product> productsRepo = new TrackableRepository <Product>(_fixture.Context);
            var product = new Product {
                ProductId = 80, ProductName = "Product 80", UnitPrice = 40, CategoryId = 1
            };

            // Act
            productsRepo.Insert(product);

            // Assert
            Assert.Equal(TrackingState.Added, product.TrackingState);
        }
        public async Task CustomersByCompany_Should_Return_Customer()
        {
            // Arrange
            var          customerRepository    = new TrackableRepository <Customer>(_fixture.Context);
            var          customerDomainService = new CustomerDomainService(customerRepository, _mapper);
            const string company = "Alfreds Futterkiste";

            // Act
            var customers = await customerDomainService.CustomersByCompany(company);

            // Assert
            Assert.Collection(customers, customer
                              => Assert.Equal("ALFKI", customer.CustomerId));
        }
        public async Task SelectAsync_Should_Return_DomainModels()
        {
            // Arrange
            var repository      = new TrackableRepository <Customer>(_fixture.Context);
            var customerService = new CustomerDomainService(repository, _mapper);

            // Act
            var customers = await customerService.SelectAsyncCustomers();

            var enumerable = customers as CustomerDomainModel[] ?? customers.ToArray();

            // Assert
            Assert.Equal(90, enumerable.Length);
        }
Esempio n. 10
0
        public async Task ApplyChanges_Should_Set_Graph_States()
        {
            // Arrange
            ITrackableRepository <Order> ordersRepo = new TrackableRepository <Order>(_fixture.Context);
            var order = await ordersRepo.FindAsync(10248);

            ordersRepo.DetachEntities(order);

            // updating object in complex object graph
            order.OrderDetails[0].UnitPrice     = 17;
            order.OrderDetails[0].TrackingState = TrackingState.Modified;

            // updating object in complex object graph
            order.OrderDetails[1].Quantity      = 2;
            order.OrderDetails[1].TrackingState = TrackingState.Modified;

            // deleting object in complex object graph
            order.OrderDetails[2].TrackingState = TrackingState.Deleted;

            // adding object in complex object graph
            var addedDetail = new OrderDetail
            {
                //OrderDetailId = 4,
                OrderId       = 1,
                ProductId     = 3,
                Product       = order.OrderDetails[2].Product,
                UnitPrice     = 40,
                Quantity      = 400,
                TrackingState = TrackingState.Added
            };

            // Act
            order.OrderDetails.Add(addedDetail);

            // Act
            ordersRepo.ApplyChanges(order);

            // Assert
            Assert.Equal(EntityState.Unchanged, _fixture.Context.Entry(order).State);
            Assert.Equal(EntityState.Modified, _fixture.Context.Entry(order.OrderDetails[0]).State);
            Assert.Equal(EntityState.Modified, _fixture.Context.Entry(order.OrderDetails[1]).State);
            Assert.Equal(EntityState.Deleted, _fixture.Context.Entry(order.OrderDetails[2]).State);
            Assert.Equal(EntityState.Added, _fixture.Context.Entry(order.OrderDetails[3]).State);

            // Save changes to object graph with different TrackingStates throughout the object graph
            await _unitOfWork.SaveChangesAsync();
        }
        public async Task QueryableSql_Should_Return_Customer_Query()
        {
            // Arrange
            var          customerRepository    = new TrackableRepository <Customer>(_fixture.Context);
            var          customerDomainService = new CustomerDomainService(customerRepository, _mapper);
            const string companyName           = "Alfreds Futterkiste";

            // Act
            var query     = customerDomainService.QueryableSql("SELECT * FROM Customers");
            var customers = await query
                            .Where(x => x.CompanyName.Contains(companyName))
                            .ToListAsync();

            // Assert
            Assert.Collection(customers, customer
                              => Assert.Equal("ALFKI", customer.CustomerId));
        }
        public async Task ExistsAsync_Should_Return_False(bool useKey)
        {
            // Arrange
            var customerRepository = new TrackableRepository <Customer>(_fixture.Context);
            var customerService    = new CustomerDomainService(customerRepository, _mapper);

            // Act
            bool result;

            if (useKey)
            {
                result = await customerService.ExistsAsync("TEST");
            }
            else
            {
                result = await customerService.ExistsAsync(new object[] { "TEST" });
            }

            // Assert
            Assert.False(result);
        }
        public async Task FindAsync_Should_Return_DomainModel(bool useKey)
        {
            // Arrange
            var customerRepository = new TrackableRepository <Customer>(_fixture.Context);
            var customerService    = new CustomerDomainService(customerRepository, _mapper);

            var customerDomainModel = new CustomerDomainModel();

            // Act
            if (useKey)
            {
                customerDomainModel = await customerService.FindAsync("ALFKI");
            }
            else
            {
                customerDomainModel = await customerService.FindAsync(new object[] { "ALFKI" });
            }
            // Assert
            Assert.Equal("ALFKI", customerDomainModel.CustomerId);
            Assert.NotNull(customerDomainModel);
        }
        public async Task Update_Should_Update_Customer()
        {
            // Arrange
            IUnitOfWork  unitOfWork            = new UnitOfWork(_fixture.Context);
            var          customerRepository    = new TrackableRepository <Customer>(_fixture.Context);
            var          customerDomainService = new CustomerDomainService(customerRepository, _mapper);
            const string customerId            = "BERGS";
            const string companyName           = "Eastern Connection 1";

            var data = await customerRepository.FindAsync(customerId);

            customerRepository.Detach(data);

            var customerDomainModel = new CustomerDomainModel
            {
                CustomerId   = data.CustomerId,
                CompanyName  = companyName,
                ContactName  = data.ContactName,
                ContactTitle = data.ContactTitle,
                Address      = data.Address,
                City         = data.City,
                Region       = data.Region,
                PostalCode   = data.PostalCode,
                Country      = data.Country,
                Phone        = data.Phone,
                Fax          = data.Fax
            };

            // Act
            customerDomainService.Update(customerDomainModel);
            var savedChanges = await unitOfWork.SaveChangesAsync();

            // Assert
            Assert.Equal(1, savedChanges);
            var updatedCustomer = await customerRepository.FindAsync(customerId);

            Assert.Equal(data.Address, updatedCustomer.Address);
            Assert.Equal(customerDomainModel.CompanyName, companyName);
        }
Esempio n. 15
0
        public async Task Service_Insert_Should_Insert_Into_Database()
        {
            // Arrange
            IUnitOfWork unitOfWork = new UnitOfWork(_fixture.Context);
            ITrackableRepository <Customer> customerRepository = new TrackableRepository <Customer>(_fixture.Context);
            ITrackableRepository <Order>    orderRepository    = new TrackableRepository <Order>(_fixture.Context);
            var customerService = new CustomerService(customerRepository, orderRepository);

            const string customerId  = "COMP1";
            const string companyName = "Company 1";

            var customer = new Customer
            {
                CustomerId  = customerId,
                CompanyName = companyName
            };

            // Act
            customerService.Insert(customer);

            // Assert
            Assert.Equal(TrackableEntities.Common.Core.TrackingState.Added, customer.TrackingState);

            // Act
            var savedChanges = await unitOfWork.SaveChangesAsync();

            // Assert
            Assert.Equal(1, savedChanges);

            // Act
            var newCustomer = await customerRepository.FindAsync(customerId);

            // Assert
            Assert.Equal(newCustomer.CustomerId, customerId);
            Assert.Equal(newCustomer.CompanyName, companyName);
        }
        public async Task Queryable_Should_Allow_Composition()
        {
            // Arrange
            var comparer  = new MyProductComparer();
            var expected1 = new MyProduct {
                Id = 1, Name = "Chai", Price = 18.00m, Category = "Beverages"
            };
            var expected2 = new MyProduct {
                Id = 2, Name = "Chang", Price = 19.00m, Category = "Beverages"
            };

            var repository = new TrackableRepository <Product>(_fixture.Context);

            var productDomainService = new ProductDomainService(repository, _mapper);
            // Act

            var query = productDomainService.Queryable();

            var products = await query
                           .Include(p => p.Category)
                           .Take(2)
                           .Where(p => p.UnitPrice > 15)
                           .Select(p => new MyProduct
            {
                Id       = p.ProductId,
                Name     = p.ProductName,
                Price    = p.UnitPrice,
                Category = p.Category.CategoryName
            })
                           .ToListAsync();

            // Assert
            Assert.Collection(products,
                              p => Assert.Equal(expected1, p, comparer),
                              p => Assert.Equal(expected2, p, comparer));
        }