public void CreateMeasures_WhenThereIsNoSequenceForTheMeasureCreatedDate_ApplicationExceptionThrown()
        {
            var standardId = Guid.NewGuid();

            var batchId = Guid.NewGuid();

            var geneticLineId = Guid.NewGuid();

            var batchCreatedDate = new DateTime(2015, 09, 09);

            var batch = new Batch() { CreatedDate = batchCreatedDate, Id = batchId, GeneticLineId = geneticLineId };

            var standardItem = new StandardItem()
            {
                Sequence = 1,
                StandardGeneticLine =
                    new StandardGeneticLine()
                    {
                        GeneticLineId = geneticLineId,
                        StandardId = standardId
                    }
            };

            var standardItems = new List<StandardItem>() { standardItem }.AsQueryable();

            var standardWithDataTypeWeek = new Standard()
            {
                Id = standardId,
                DataLoadTypeId = new Guid(GlobalConstants.WeeklyDataLoadType)
            };

            Mock.Get(_standardRepository)
                .Setup(x => x.Get(standardId))
                .Returns(standardWithDataTypeWeek);

            Mock.Get(_batchRepository)
                .Setup(x => x.Get(batchId))
                .Returns(batch);

            Mock.Get(_standardItemRepository)
                .Setup(repository => repository.GetAll(It.IsAny<Expression<Func<StandardItem, bool>>>()))
                .Returns(standardItems);

            var outOfScopeMeasureDate = new DateTime(2015, 09, 30);

            _measureService = new MeasureService(_uow, _clock);

            var measures = new List<LoadMeasureModel>() { new LoadMeasureModel()
                                                          {
                                                              BatchId = batchId,
                                                              StandardId = standardId,
                                                              CreatedDate = outOfScopeMeasureDate
                                                          }};

            _measureService.CreateMeasures(measures, batchId);
        }
        public void Edit(GeneticLine geneticLine)
        {
            var currentGeneticLine = this.GetById(geneticLine.Id);
            var previousWeeks = currentGeneticLine.ProductionWeeks;

            currentGeneticLine.Name = geneticLine.Name;
            currentGeneticLine.ProductionWeeks = geneticLine.ProductionWeeks;

            var standards = currentGeneticLine.StandardGeneticLines.Where(x => !x.IsDeleted).ToList();
            if (standards.Any())
            {
                foreach (var standard in standards)
                {
                    if (previousWeeks < geneticLine.ProductionWeeks)
                    {
                        for (int i = previousWeeks; i < geneticLine.ProductionWeeks; i++)
                        {
                            var item = new StandardItem()
                            {
                                Sequence = i + 1,
                                Value1 = 0,
                                Value2 = 0,
                                StandardGeneticLineId = standard.Id
                            };
                            Uow.StandardItems.Add(item);
                        }
                    }
                    else if (previousWeeks > geneticLine.ProductionWeeks)
                    {
                        var orderedList = standard.StandardItems.Where(x => !x.IsDeleted).OrderBy(x => x.Sequence).ToList();
                        for (int i = geneticLine.ProductionWeeks; i < previousWeeks; i++)
                        {
                            var item = orderedList.ElementAt(i);
                            Uow.StandardItems.Delete(item);
                        }
                    }
                }
            }

            Uow.GeneticLines.Edit(currentGeneticLine);
            Uow.Commit();
        }
        public void CreateMeasures_WhenThereIsSequenceForTheMeasureCreatedDate_NoException()
        {
            var standardId = Guid.NewGuid();

            var batchId = Guid.NewGuid();

            var geneticLineId = Guid.NewGuid();

            var batchCreatedDate = new DateTime(2015, 09, 09);

            var batch = new Batch() { CreatedDate = batchCreatedDate, Id = batchId, GeneticLineId = geneticLineId };

            var standardItem = new StandardItem()
            {
                Sequence = 1,
                StandardGeneticLine =
                    new StandardGeneticLine()
                    {
                        GeneticLineId = geneticLineId,
                        StandardId = standardId
                    }
            };

            var standardItems = new List<StandardItem>() { standardItem }.AsQueryable();

            var standardWithDataTypeWeek = new Standard()
            {
                Id = standardId,
                DataLoadTypeId = new Guid(GlobalConstants.WeeklyDataLoadType)
            };

            Mock.Get(_standardRepository)
                .Setup(x => x.Get(standardId))
                .Returns(standardWithDataTypeWeek);

            Mock.Get(_batchRepository)
                .Setup(x => x.Get(batchId))
                .Returns(batch);

            Mock.Get(_standardItemRepository)
                .Setup(repository => repository.Get(It.IsAny<Expression<Func<StandardItem, bool>>>()))
                .Returns<Expression<Func<StandardItem, bool>>,
                         Expression<Func<StandardItem, object>>[]>((expression, includes) =>
                                                                   {
                                                                       return standardItems.FirstOrDefault(expression);
                                                                   });

            Mock.Get(_standardItemRepository)
                .Setup(repository => repository.GetAll(It.IsAny<Expression<Func<StandardItem, bool>>>()))
                .Returns(standardItems);

            var validMeasureDate = new DateTime(2015, 09, 16);

            _measureService = new MeasureService(_uow, _clock);

            var measures = new List<LoadMeasureModel>()
                           {
                               new LoadMeasureModel()
                               {
                                   BatchId = batchId,
                                   StandardId = standardId,
                                   CreatedDate = validMeasureDate
                               }
                           };

            _measureService.CreateMeasures(measures, batchId);

            Assert.IsTrue(true);
        }
        public void MaxDateAllowed_WhenStandardContains1WeekItem_Returns1WeekFromTheBatchCreatedDate()
        {
            var standardId = Guid.NewGuid();

            var geneticLineId = Guid.NewGuid();

            var batchCreatedDate = new DateTime(2015, 09, 09);

            var batch = new Batch() { CreatedDate = batchCreatedDate, GeneticLineId = geneticLineId };

            var standardItem = new StandardItem()
                               {
                                   Sequence = 1,
                                   StandardGeneticLine =
                                       new StandardGeneticLine()
                                       {
                                           GeneticLineId = geneticLineId,
                                           StandardId = standardId
                                       }
                               };

            var standardItems = new List<StandardItem>() { standardItem }.AsQueryable();

            var standardWithDataTypeWeek = new Standard()
                                           {
                                               Id = standardId,
                                               DataLoadTypeId = new Guid(GlobalConstants.WeeklyDataLoadType)
                                           };

            Mock.Get(_standardRepository)
                .Setup(x => x.Get(standardId))
                .Returns(standardWithDataTypeWeek);

            Mock.Get(_standardItemRepository)
                .Setup(repository => repository.GetAll(It.IsAny<Expression<Func<StandardItem, bool>>>()))
                .Returns(standardItems);

            _measureService = new MeasureService(_uow, _clock);

            var actualValue = _measureService.MaxDateAllowed(standardId, geneticLineId, batch.CreatedDate);

            DateTime expectedValue = new DateTime(2015, 09, 16);

            Assert.AreEqual(actualValue, expectedValue);
        }