public void Should_Check_Customer_Mappings_Successfully()
        {
            using (IUnitOfWork unitOfWork = new UnitOfWork(Singleton.SessionFactoryProvider))
            {
                unitOfWork.BeginTransaction();

                new PersistenceSpecification<Customer>(unitOfWork.Session)
                    .CheckProperty(f => f.Name, Singleton.TestDataProvider.ProvideRandomString(50))
                    .CheckProperty(f => f.Code, Singleton.TestDataProvider.ProvideRandomString(10))
                    .CheckProperty(f => f.Type, CustomerType.NeedBasedCustomers)
                    .CheckProperty(f => f.DeletedOn, null)
                    .CheckProperty(f => f.CreatedOn, Singleton.TestDataProvider.ProvideRandomDateTime())
                    .VerifyTheMappings();
            }
        }
        public void Should_Check_Agreement_Mappings_Successfully()
        {
            using (IUnitOfWork unitOfWork = new UnitOfWork(Singleton.SessionFactoryProvider))
            {
                unitOfWork.BeginTransaction();

                Customer customer = Singleton.TestDataProvider.CreateNewRandomCustomer();
                unitOfWork.Session.SaveOrUpdate(customer);

                new PersistenceSpecification<Agreement>(unitOfWork.Session)
                    .CheckProperty(f => f.Number, Singleton.TestDataProvider.ProvideRandomString(20))
                    .CheckProperty(f => f.DeletedOn, null)
                    .CheckProperty(f => f.CreatedOn, Singleton.TestDataProvider.ProvideRandomDateTime())
                    .CheckReference(f => f.Customer, customer)
                    .VerifyTheMappings();
            }
        }
        public void Should_Use_Two_Transactions_In_One_TransactionScope()
        {
            string test_name = Guid.NewGuid().ToString();

            using (IUnitOfWork unitOfWork = new UnitOfWork(Singleton.SessionFactoryProvider))
            {
                ICustomerRepository customerRepository = new CustomerRepository(unitOfWork);
                var customer = customerRepository.AsQueryable(f => f.Name == test_name).FirstOrDefault();
                Assert.IsNull(customer);
            }

            using (new TransactionScope(TransactionScopeOption.Required))
            {
                using (IUnitOfWork unitOfWork = new UnitOfWork(Singleton.SessionFactoryProvider))
                {
                    unitOfWork.BeginTransaction();

                    ICustomerRepository customerRepository = new CustomerRepository(unitOfWork);
                    customerRepository.Save(
                        new Customer
                        {
                            Code = "test_code",
                            Name = test_name,
                            Type = CustomerType.LoyalCustomers,
                            CreatedOn = DateTime.Now,
                            DeletedOn = null
                        });

                    unitOfWork.Commit();
                }

                using (IUnitOfWork unitOfWork = new UnitOfWork(Singleton.SessionFactoryProvider))
                {
                    unitOfWork.BeginTransaction();

                    ICustomerRepository customerRepository = new CustomerRepository(unitOfWork);
                    var customer = customerRepository.AsQueryable(f => f.Name == test_name).FirstOrDefault();
                    Assert.IsNotNull(customer);

                    unitOfWork.Commit();
                }
            }
        }
        private void CreateCustomer(string name)
        {
            using (IUnitOfWork unitOfWork = new UnitOfWork(Singleton.SessionFactoryProvider))
            {
                unitOfWork.BeginTransaction();

                ICustomerRepository customerRepository = new CustomerRepository(unitOfWork);

                customerRepository.Save(
                    new Customer
                    {
                        Code = "test_code",
                        Name = name,
                        Type = CustomerType.LoyalCustomers,
                        CreatedOn = DateTime.Now,
                        DeletedOn = null
                    });

                unitOfWork.Commit();
            }
        }
        public void Should_Get_Agreement_By_Customer_Type_Successfully()
        {
            using (IUnitOfWork unitOfWork = new UnitOfWork(Singleton.SessionFactoryProvider))
            {
                unitOfWork.BeginTransaction();

                var customer = Singleton.TestDataProvider.CreateNewRandomCustomer();
                customer.Type = CustomerType.ImpulseCustomers;
                unitOfWork.Session.SaveOrUpdate(customer);

                var agreement = Singleton.TestDataProvider.CreateNewRandomAgreementForCustomer(customer);
                unitOfWork.Session.SaveOrUpdate(agreement);
                unitOfWork.Session.Flush();

                IAgreementRepository agreementRepository = new AgreementRepository(unitOfWork);
                var list = agreementRepository.GetAgreementsByCustomerType(CustomerType.ImpulseCustomers);

                Assert.IsNotNull(list);
                Assert.IsTrue(list.Contains(agreement));
            }
        }