public void Save(Models.EggProduction production)
 {
     if (production.IsNew)
     {
         CreatePostRequest(production);
     }
     else
     {
         CreatePutRequest(production.Id, production);
     }
 }
        public void Cant_SaveNewEggProduction_WithDuplicateDate()
        {
            var data1 = new Models.Data.EggProduction
            {
                Id   = Guid.NewGuid(),
                Date = DateTime.Today
            };

            var house = new Models.HenHouse
            {
                Id           = Guid.NewGuid(),
                Name         = "House 1",
                PurchaseCost = 1,
                Depreciation = 1,
                YearUsage    = 1,
                Active       = true
            };

            using (var conn = factory.OpenDbConnection())
            {
                conn.InsertParam(house);
                conn.InsertParam(data1);
            }

            var production = new Models.EggProduction
            {
                Date    = DateTime.Today,
                Details = new List <EggProductionDetail>()
                {
                    new Models.EggProductionDetail
                    {
                        CrackedEggCount = 1,
                        Fcr             = 1,
                        GoodEggCount    = 1,
                        HouseId         = house.Id,
                        RetailQuantity  = 1.2m
                    }
                }
            };

            Assert.Throws <ServiceException>(() => service.Save(production));
        }
        public void Can_SaveNewEggProduction()
        {
            var house = new Models.HenHouse
            {
                Id           = Guid.NewGuid(),
                Name         = "House 1",
                PurchaseCost = 1,
                Depreciation = 1,
                YearUsage    = 1,
                Active       = true
            };

            using (var conn = factory.OpenDbConnection())
            {
                conn.InsertParam(house);
            }

            var production = new Models.EggProduction
            {
                Date    = DateTime.Today,
                Details = new List <EggProductionDetail>()
                {
                    new Models.EggProductionDetail
                    {
                        CrackedEggCount = 1,
                        Fcr             = 1,
                        GoodEggCount    = 1,
                        HouseId         = house.Id,
                        RetailQuantity  = 1.2m
                    }
                }
            };

            service.Save(production);
            using (var conn = factory.OpenDbConnection())
            {
                var data    = conn.FirstOrDefault <Models.Data.EggProduction>(e => e.Date == production.Date);
                var details = conn.Where <Models.Data.EggProductionDetail>(new { ProductionId = data.Id });
                Compare(data, details, production);
            }
        }
        public void Cant_SaveExistingEggProduction_WithDuplicateDate()
        {
            var id = Guid.NewGuid();

            var house = new Models.HenHouse
            {
                Id = Guid.NewGuid(),
                Name = "House 1",
                PurchaseCost = 1,
                Depreciation = 1,
                YearUsage = 1,
                Active = true
            };

            var data = new Models.Data.EggProduction
            {
                Id = id,
                Date = DateTime.Today
            };

            var data2 = new Models.Data.EggProduction
                {
                    Id = Guid.NewGuid(),
                    Date = DateTime.Today.AddDays(-1)
                };

            var detail = new Models.Data.EggProductionDetail
            {
                CrackedEggCount = 1,
                Fcr = 1,
                GoodEggCount = 1,
                HouseId = house.Id,
                ProductionId = id,
                RetailQuantity = 1.2m
            };

            using (var conn = factory.OpenDbConnection())
            {
                conn.InsertParam(house);
                conn.InsertParam(data);
                conn.InsertParam(detail);
                conn.InsertParam(data2);
            }

            var production = new Models.EggProduction
            {
                Id = id,
                Date = DateTime.Today.AddDays(-1),
                Details = new List<EggProductionDetail>()
                        {
                            new Models.EggProductionDetail
                                {
                                    CrackedEggCount = 2,
                                    Fcr = 2,
                                    GoodEggCount = 2,
                                    HouseId = house.Id,
                                    RetailQuantity = 1.7m
                                }
                        }
            };

            Assert.Throws<ServiceException>(() => service.Save(production));
        }
        public void Can_SaveNewEggProduction()
        {
            var house = new Models.HenHouse
            {
                Id = Guid.NewGuid(),
                Name = "House 1",
                PurchaseCost = 1,
                Depreciation = 1,
                YearUsage = 1,
                Active = true
            };

            using (var conn = factory.OpenDbConnection())
            {
                conn.InsertParam(house);
            }

            var production = new Models.EggProduction
                {
                    Date = DateTime.Today,
                    Details = new List<EggProductionDetail>()
                        {
                            new Models.EggProductionDetail
                                {
                                    CrackedEggCount = 1,
                                    Fcr = 1,
                                    GoodEggCount = 1,
                                    HouseId = house.Id,
                                    RetailQuantity = 1.2m
                                }
                        }
                };
            service.Save(production);
            using (var conn = factory.OpenDbConnection())
            {
                var data = conn.FirstOrDefault<Models.Data.EggProduction>(e => e.Date == production.Date);
                var details = conn.Where<Models.Data.EggProductionDetail>(new { ProductionId = data.Id });
                Compare(data, details, production);
            }
        }
        void Compare(Models.Data.EggProduction productionData, List <Models.Data.EggProductionDetail> details, Models.EggProduction production)
        {
            Assert.Equal(productionData.Id, production.Id);
            Assert.Equal(productionData.Date, production.Date);

            if (details != null)
            {
                Assert.Equal(details.Count, production.Details.Count);

                foreach (var detailData in details)
                {
                    var detail = production.Details.FirstOrDefault(d => d.HouseId == detailData.HouseId);

                    Assert.Equal(detailData.CrackedEggCount, detail.CrackedEggCount);
                    Assert.Equal(detailData.Fcr, detail.Fcr);
                    Assert.Equal(detailData.GoodEggCount, detail.GoodEggCount);
                    Assert.Equal(detailData.HouseId, detail.HouseId);
                    Assert.Equal(detailData.RetailQuantity, detail.RetailQuantity);
                }
            }
        }