public void RemovesBenefit()
        {
            object id = 0;

            using (var tx = Session.BeginTransaction())
            {
                var employee = new Employee
                {
                    Firstname = "John",
                    Lastname  = "Smith"
                };
                employee.AddBenefit(new SeasonTicketLoan());
                employee.AddBenefit(new Leave());
                employee.AddBenefit(new SkillsEnhancementAllowance());
                id = Session.Save(employee);

                tx.Commit();
            }

            Session.Clear();

            using (var tx = Session.BeginTransaction())
            {
                var emp   = Session.Get <Employee>(id);
                var leave = emp.Benefits.OfType <Leave>().FirstOrDefault();

                emp.RemoveBenefit(leave);

                tx.Commit();
            }

            Session.Clear();

            using (var tx = Session.BeginTransaction())
            {
                var employee = Session.Get <Employee>(id);
                var leave    = employee.Benefits.OfType <Leave>().FirstOrDefault();

                Assert.That(leave, Is.Null);
                tx.Commit();
            }
        }
        public void DeleteEmployee()
        {
            object id = 0;

            using (var tx = Session.BeginTransaction())
            {
                var employee = new Employee
                {
                    Firstname = "John",
                    Lastname  = "Smith"
                };
                employee.AddBenefit(new Leave
                {
                    AvailableEntitlement = 25,
                    RemainingEntitlement = 14
                });
                employee.AddCommunity(new Community
                {
                    Name = "New joiners"
                });

                id = Session.Save(employee);

                tx.Commit();
            }

            Session.Clear();

            using (var tx = Session.BeginTransaction())
            {
                var emp = Session.Get <Employee>(id);
                Session.Delete(emp);
                tx.Commit();
            }

            Session.Clear();

            using (var tx = Session.BeginTransaction())
            {
                var employee = Session.Get <Employee>(id);
                Assert.That(employee, Is.Null);
                tx.Commit();
            }
        }
        public void BenefitsAssociationIsSavedCorrectly()
        {
            using (var tx = Session.BeginTransaction())
            {
                var employee = new Employee
                {
                    Id = new EmployeeId
                    {
                        Firstname = "firstName",
                        Lastname  = "lastName",
                    },
                    DateOfJoining = new DateTime(1999, 2, 26)
                };
                employee.AddBenefit(new Benefit());

                Session.Save(employee);

                tx.Commit();
            }

            Session.Clear();

            using (var tx = Session.BeginTransaction())
            {
                var id = new EmployeeId
                {
                    Firstname = "firstName",
                    Lastname  = "lastName"
                };

                var employee = Session.Get <Employee>(id);
                Assert.That(employee.DateOfJoining.Year, Is.EqualTo(1999));
                Assert.That(employee.Benefits.Count, Is.EqualTo(1));
                tx.Commit();
            }
        }
        public void MapsBenefits()
        {
            object id = 0;

            using (var transaction = Session.BeginTransaction())
            {
                var skillsEnhancementAllowance = new SkillsEnhancementAllowance
                {
                    Entitlement = 1000, RemainingEntitlement = 250
                };
                var seasonTicketLoan = new SeasonTicketLoan
                {
                    Amount = 1416, MonthlyInstalment = 118, StartDate = new DateTime(2014, 4, 25), EndDate = new DateTime(2015, 3, 25)
                };
                var leave = new Leave
                {
                    AvailableEntitlement = 30, RemainingEntitlement = 15, Type = LeaveType.Paid
                };
                var employee = new Employee
                {
                    EmployeeNumber = "123456789"
                };
                employee.AddBenefit(skillsEnhancementAllowance);
                employee.AddBenefit(seasonTicketLoan);
                employee.AddBenefit(leave);

                id = Session.Save(employee);
                transaction.Commit();
            }

            Session.Clear();

            using (var transaction = Session.BeginTransaction())
            {
                var employee = Session.Get <Employee>(id);

                Assert.That(employee.Benefits.Count, Is.EqualTo(3));

                var seasonTicketLoan = employee.Benefits.FirstOrDefault(b => b.GetType().GetBaseTypes().Contains(typeof(SeasonTicketLoan)));
                Assert.That(seasonTicketLoan, Is.Not.Null);
                if (seasonTicketLoan != null)
                {
                    Assert.That(seasonTicketLoan.Employee.EmployeeNumber, Is.EqualTo("123456789"));
                }

                var skillsEnhancementAllowance = employee.Benefits.FirstOrDefault(b => b.GetType().GetBaseTypes().Contains(typeof(SkillsEnhancementAllowance)));
                Assert.That(skillsEnhancementAllowance, Is.Not.Null);
                if (skillsEnhancementAllowance != null)
                {
                    Assert.That(skillsEnhancementAllowance.Employee.EmployeeNumber, Is.EqualTo("123456789"));
                }

                var leave = employee.Benefits.FirstOrDefault(b => b.GetType().GetBaseTypes().Contains(typeof(Leave)));
                Assert.That(leave, Is.Not.Null);
                if (leave != null)
                {
                    Assert.That(leave.Employee.EmployeeNumber, Is.EqualTo("123456789"));
                }

                transaction.Commit();
            }
        }
        public QueryTest()
        {
            Database = new InMemoryDatabase();
            Database.Initialize();

            var johnSmith = new Employee
            {
                Firstname          = "John",
                Lastname           = "Smith",
                DateOfJoining      = new DateTime(2014, 5, 5),
                ResidentialAddress = new Address
                {
                    AddressLine1 = "123 Planet place",
                    AddressLine2 = "12 Gomez street",
                    City         = "London",
                    Postcode     = "SW7 4FG",
                    Country      = "United Kingdom"
                }
            };

            johnSmith.AddCommunity(new Community
            {
                Name = "NHibernate Beginners"
            });
            johnSmith.AddBenefit(new SeasonTicketLoan
            {
                Amount            = 1320,
                MonthlyInstalment = 110
            });
            johnSmith.AddBenefit(new Leave
            {
                AvailableEntitlement = 12,
                RemainingEntitlement = 2
            });

            var hillaryGamble = new Employee
            {
                Firstname          = "hillary",
                Lastname           = "Gamble",
                DateOfJoining      = new DateTime(2013, 5, 5),
                ResidentialAddress = new Address
                {
                    AddressLine1 = "102 Oxygen",
                    AddressLine2 = "34 Western Gateway",
                    City         = "London",
                    Postcode     = "NW5 7AC",
                    Country      = "United Kingdom"
                }
            };

            hillaryGamble.AddCommunity(new Community
            {
                Name = "NHibernate experts"
            });

            hillaryGamble.AddBenefit(new SeasonTicketLoan
            {
                Amount            = 600,
                MonthlyInstalment = 50
            });



            var smithPearson = new Employee
            {
                Firstname          = "Smith",
                Lastname           = "Pearson",
                DateOfJoining      = new DateTime(2013, 5, 5),
                ResidentialAddress = new Address
                {
                    AddressLine1 = "102 Oxygen",
                    AddressLine2 = "34 Western Gateway",
                    City         = "London",
                    Postcode     = "NW5 7AC",
                    Country      = "United Kingdom"
                }
            };

            smithPearson.AddCommunity(new Community
            {
                Name = "NHibernate expers"
            });

            smithPearson.AddBenefit(new SkillsEnhancementAllowance
            {
                Entitlement = 1000
            });

            Database.SeedUsing(new List <Employee>
            {
                johnSmith,
                hillaryGamble,
                smithPearson
            });
        }