public void ArticleAvailabilityIndicatorServiceTest_New_Indicator_Must_Devide_First_Indicator_And_Decrease_SecondPart_On_5()
        {
            var batchId = Guid.NewGuid();

            // заполняем коллекцию, якобы возвращаемую из БД
            var id1 = new Guid("11111111-1111-1111-1111-111111111111");
            var id2 = new Guid("22222222-2222-2222-2222-222222222222");
            var id3 = new Guid("33333333-3333-3333-3333-333333333333");

            var accessor1 = new ExactArticleAvailabilityIndicator_Accessor(new DateTime(2011, 1, 1), storageId, accountOrganizationId, articleId, batchId, 100M, 10)
            {
                Id = id1, EndDate = new DateTime(2011, 1, 5)
            };
            var accessor2 = new ExactArticleAvailabilityIndicator_Accessor(new DateTime(2011, 1, 5), storageId, accountOrganizationId, articleId, batchId, 100M, 20)
            {
                Id = id2, PreviousId = id1, EndDate = new DateTime(2011, 1, 10)
            };
            var accessor3 = new ExactArticleAvailabilityIndicator_Accessor(new DateTime(2011, 1, 10), storageId, accountOrganizationId, articleId, batchId, 100M, 30)
            {
                Id = id3, PreviousId = id2
            };

            selectedFromDBIndicators.Add((ExactArticleAvailabilityIndicator)accessor1.Target);
            selectedFromDBIndicators.Add((ExactArticleAvailabilityIndicator)accessor2.Target);
            selectedFromDBIndicators.Add((ExactArticleAvailabilityIndicator)accessor3.Target);

            // создаем новый показатель
            var indicators = new List <ExactArticleAvailabilityIndicator>();

            indicators.Add(new ExactArticleAvailabilityIndicator(new DateTime(2011, 1, 3), storageId, accountOrganizationId, articleId, batchId, 100M, -5));

            service.Update(storageId, accountOrganizationId, null, indicators);

            var first  = selectedFromDBIndicators.Where(x => x.Id == id1).FirstOrDefault();
            var second = selectedFromDBIndicators.Where(x => x.Id == id2).FirstOrDefault();
            var third  = selectedFromDBIndicators.Where(x => x.Id == id3).FirstOrDefault();
            var _new   = selectedFromDBIndicators.Where(x => x.PreviousId == id1).FirstOrDefault();

            Assert.AreEqual(4, selectedFromDBIndicators.Count);

            Assert.AreEqual(10, first.Count);
            Assert.IsNull(first.PreviousId);
            Assert.AreEqual(new DateTime(2011, 1, 1), first.StartDate);
            Assert.AreEqual(new DateTime(2011, 1, 3), first.EndDate);

            Assert.AreEqual(5, _new.Count);
            Assert.AreEqual(id1, _new.PreviousId);
            Assert.AreEqual(new DateTime(2011, 1, 3), _new.StartDate);
            Assert.AreEqual(new DateTime(2011, 1, 5), _new.EndDate);

            Assert.AreEqual(15, second.Count);
            Assert.AreEqual(_new.Id, second.PreviousId);
            Assert.AreEqual(new DateTime(2011, 1, 5), second.StartDate);
            Assert.AreEqual(new DateTime(2011, 1, 10), second.EndDate);

            Assert.AreEqual(25, third.Count);
            Assert.AreEqual(id2, third.PreviousId);
            Assert.AreEqual(new DateTime(2011, 1, 10), third.StartDate);
            Assert.IsNull(third.EndDate);
        }
        public void Init()
        {
            exactArticleAvailabilityIndicatorRepository = new Mock <IExactArticleAvailabilityIndicatorRepository>();
            service = new ExactArticleAvailabilityIndicatorService_Accessor(exactArticleAvailabilityIndicatorRepository.Object);

            selectedFromDBIndicators = new List <ExactArticleAvailabilityIndicator>();

            exactArticleAvailabilityIndicatorRepository.Setup(x => x.Query <ExactArticleAvailabilityIndicator>(true, "")
                                                              .PropertyIn(z => z.BatchId, (ISubQuery)null)
                                                              .Where(y => true)
                                                              .ToList <ExactArticleAvailabilityIndicator>()).Returns(selectedFromDBIndicators);

            // мочим сохранение показателя
            exactArticleAvailabilityIndicatorRepository.Setup(x => x.Save(It.IsAny <ExactArticleAvailabilityIndicator>()))
            .Callback <ExactArticleAvailabilityIndicator>(x =>
            {
                // ищем показатель по Id
                var existingIndicator = selectedFromDBIndicators.Where(z => z.Id == x.Id).FirstOrDefault();

                // если показателя нет - добавляем его
                if (existingIndicator == null)
                {
                    // accessor создаем для установки защищенного свойства Id
                    var accessor = new ExactArticleAvailabilityIndicator_Accessor(new PrivateObject(x));
                    accessor.Id  = Guid.NewGuid();

                    x = (ExactArticleAvailabilityIndicator)accessor.Target;

                    selectedFromDBIndicators.Add(x);
                }
            });
        }
        public void ArticleAvailabilityIndicatorServiceTest_Second_Indicator_With_Earlier_StartDate_Must_Increase_First_Indicator()
        {
            var today     = DateTime.Today;
            var yesterday = today.AddDays(-1);
            var batchId   = Guid.NewGuid();
            var id        = new Guid("11111111-1111-1111-1111-111111111111");

            // заполняем коллекцию, якобы возвращаемую из БД
            var accessor = new ExactArticleAvailabilityIndicator_Accessor(today, storageId, accountOrganizationId, articleId, batchId, 100M, 5)
            {
                Id = id
            };

            selectedFromDBIndicators.Add((ExactArticleAvailabilityIndicator)accessor.Target);

            // создаем новый показатель
            var indicators = new List <ExactArticleAvailabilityIndicator>();

            indicators.Add(new ExactArticleAvailabilityIndicator(yesterday, storageId, accountOrganizationId, articleId, batchId, 100M, 10));

            service.Update(storageId, accountOrganizationId, null, indicators);

            var first = selectedFromDBIndicators.Where(x => x.Id == id).FirstOrDefault();
            var _new  = selectedFromDBIndicators.Where(x => x.Id != id).FirstOrDefault();

            Assert.AreEqual(2, selectedFromDBIndicators.Count());

            Assert.AreEqual(10, _new.Count);
            Assert.IsNull(_new.PreviousId);
            Assert.AreEqual(yesterday, _new.StartDate);
            Assert.AreEqual(today, _new.EndDate);

            Assert.AreEqual(15, first.Count);
            Assert.AreEqual(_new.Id, first.PreviousId);
        }
        public void ArticleAvailabilityIndicatorServiceTest_Second_Indicator_With_Same_StartDate_Must_Be_Added_Correctly()
        {
            var today   = DateTime.Today;
            var batchId = new Guid("11111111-1111-1111-1111-111111111111");
            var id      = new Guid("33333333-3333-3333-3333-333333333333");

            // заполняем коллекцию, якобы возвращаемую из БД
            var accessor = new ExactArticleAvailabilityIndicator_Accessor(today, storageId, accountOrganizationId, articleId, batchId, 100M, 5)
            {
                Id = id
            };

            selectedFromDBIndicators.Add((ExactArticleAvailabilityIndicator)accessor.Target);

            // создаем новый показатель
            var indicators = new List <ExactArticleAvailabilityIndicator>();

            indicators.Add(new ExactArticleAvailabilityIndicator(today, storageId, accountOrganizationId, articleId, batchId, 100M, 10));

            service.Update(storageId, accountOrganizationId, null, indicators);

            var first = selectedFromDBIndicators.Where(x => x.Id == id).FirstOrDefault();

            Assert.AreEqual(1, selectedFromDBIndicators.Count());
            Assert.AreEqual(15, first.Count);
        }
        public void ArticleAvailabilityIndicatorServiceTest_Must_Return_One_Single_Row()
        {
            var batchId = new Guid("11111111-1111-1111-1111-111111111111");

            var accessor = new ExactArticleAvailabilityIndicator_Accessor(DateTime.Today.AddDays(-1), storageId, accountOrganizationId, articleId, batchId, 100M, 5)
            {
                Id = Guid.NewGuid()
            };

            selectedFromDBIndicators.Add((ExactArticleAvailabilityIndicator)accessor.Target);

            var result = service.GetFrom(storageId, accountOrganizationId, null, DateTime.Now, new List <ExactArticleAvailabilityIndicator>());

            Assert.AreEqual(1, result.Count());
        }
        public void ArticleAvailabilityIndicatorServiceTest_New_Indicator_Must_Be_Added_Before_Current_First_Indicator_Without_Previous_And_Increase_On_3()
        {
            var batchId = Guid.NewGuid();

            // заполняем коллекцию, якобы возвращаемую из БД
            var id1 = new Guid("11111111-1111-1111-1111-111111111111");
            var id2 = new Guid("22222222-2222-2222-2222-222222222222");

            var accessor1 = new ExactArticleAvailabilityIndicator_Accessor(new DateTime(2011, 1, 10), storageId, accountOrganizationId, articleId, batchId, 100M, 10)
            {
                Id = id1, EndDate = new DateTime(2011, 1, 11)
            };
            var accessor2 = new ExactArticleAvailabilityIndicator_Accessor(new DateTime(2011, 1, 11), storageId, accountOrganizationId, articleId, batchId, 100M, 20)
            {
                Id = id2, PreviousId = id1
            };

            selectedFromDBIndicators.Add((ExactArticleAvailabilityIndicator)accessor1.Target);
            selectedFromDBIndicators.Add((ExactArticleAvailabilityIndicator)accessor2.Target);

            // создаем новый показатель
            var indicators = new List <ExactArticleAvailabilityIndicator>();

            indicators.Add(new ExactArticleAvailabilityIndicator(new DateTime(2011, 1, 5), storageId, accountOrganizationId, articleId, batchId, 100M, 3));

            service.Update(storageId, articleId, null, indicators);

            var first  = selectedFromDBIndicators.Where(x => x.Id == id1).FirstOrDefault();
            var second = selectedFromDBIndicators.Where(x => x.Id == id2).FirstOrDefault();
            var _new   = selectedFromDBIndicators.Where(x => x.Id != id1 && x.Id != id2).FirstOrDefault();

            Assert.AreEqual(3, selectedFromDBIndicators.Count);

            Assert.AreEqual(3, _new.Count);
            Assert.AreEqual(new DateTime(2011, 1, 5), _new.StartDate);
            Assert.AreEqual(new DateTime(2011, 1, 10), _new.EndDate);

            Assert.AreEqual(13, first.Count);
            Assert.AreEqual(_new.Id, first.PreviousId);
            Assert.AreEqual(new DateTime(2011, 1, 10), first.StartDate);
            Assert.AreEqual(new DateTime(2011, 1, 11), first.EndDate);

            Assert.AreEqual(23, second.Count);
        }
        public void ArticleAvailabilityIndicatorServiceTest_Second_Indicator_Must_Decrease_Following_Indicators_On_3()
        {
            var batchId = Guid.NewGuid();

            // заполняем коллекцию, якобы возвращаемую из БД
            var id1 = new Guid("11111111-1111-1111-1111-111111111111");
            var id2 = new Guid("22222222-2222-2222-2222-222222222222");
            var id3 = new Guid("33333333-3333-3333-3333-333333333333");
            var id4 = new Guid("44444444-4444-4444-4444-444444444444");

            var accessor1 = new ExactArticleAvailabilityIndicator_Accessor(new DateTime(2011, 1, 1), storageId, accountOrganizationId, articleId, batchId, 100M, 10)
            {
                Id = id1, EndDate = new DateTime(2011, 1, 2)
            };
            var accessor2 = new ExactArticleAvailabilityIndicator_Accessor(new DateTime(2011, 1, 2), storageId, accountOrganizationId, articleId, batchId, 100M, 15)
            {
                Id = id2, EndDate = new DateTime(2011, 1, 3), PreviousId = id1
            };
            var accessor3 = new ExactArticleAvailabilityIndicator_Accessor(new DateTime(2011, 1, 3), storageId, accountOrganizationId, articleId, batchId, 100M, 20)
            {
                Id = id3, EndDate = new DateTime(2011, 1, 4), PreviousId = id2
            };
            var accessor4 = new ExactArticleAvailabilityIndicator_Accessor(new DateTime(2011, 1, 4), storageId, accountOrganizationId, articleId, batchId, 100M, 30)
            {
                Id = id4, PreviousId = id3
            };

            selectedFromDBIndicators.Add((ExactArticleAvailabilityIndicator)accessor2.Target);
            selectedFromDBIndicators.Add((ExactArticleAvailabilityIndicator)accessor3.Target);
            selectedFromDBIndicators.Add((ExactArticleAvailabilityIndicator)accessor4.Target);

            // создаем новый показатель
            var indicators = new List <ExactArticleAvailabilityIndicator>();

            indicators.Add(new ExactArticleAvailabilityIndicator(new DateTime(2011, 1, 2), storageId, accountOrganizationId, articleId, batchId, 100M, -3));

            service.Update(storageId, accountOrganizationId, null, indicators);

            Assert.AreEqual(3, selectedFromDBIndicators.Count);
            Assert.AreEqual(10, accessor1.Count);
            Assert.AreEqual(12, accessor2.Count);
            Assert.AreEqual(17, accessor3.Count);
            Assert.AreEqual(27, accessor4.Count);
        }
        public void ArticleAvailabilityIndicatorServiceTest_Second_Indicator_Must_Be_Added_Correctly()
        {
            var today     = DateTime.Today;
            var yasterday = today.AddDays(-1);
            var batchId   = new Guid("11111111-1111-1111-1111-111111111111");
            var id        = new Guid("33333333-3333-3333-3333-333333333333");

            // заполняем коллекцию, якобы возвращаемую из БД
            var accessor = new ExactArticleAvailabilityIndicator_Accessor(yasterday, storageId, accountOrganizationId, articleId, batchId, 100M, 5)
            {
                Id = id
            };

            selectedFromDBIndicators.Add((ExactArticleAvailabilityIndicator)accessor.Target);

            // создаем новый показатель
            var indicators = new List <ExactArticleAvailabilityIndicator>();

            indicators.Add(new ExactArticleAvailabilityIndicator(today, storageId, accountOrganizationId, articleId, batchId, 100M, 10));

            service.Update(storageId, accountOrganizationId, null, indicators);

            var first  = selectedFromDBIndicators.Where(x => x.Id == id).FirstOrDefault();
            var second = selectedFromDBIndicators.Where(x => x.Id != id).FirstOrDefault();

            Assert.AreEqual(2, selectedFromDBIndicators.Count());
            Assert.AreEqual(today, first.EndDate);

            Assert.AreEqual(accountOrganizationId, second.AccountOrganizationId);
            Assert.AreEqual(articleId, second.ArticleId);
            Assert.AreEqual(batchId, second.BatchId);
            Assert.AreEqual(15, second.Count);
            Assert.IsNull(second.EndDate);
            Assert.AreNotEqual(Guid.Empty, second.Id);
            Assert.AreEqual(first.Id, second.PreviousId);
            Assert.AreEqual(100M, second.PurchaseCost);
            Assert.AreEqual(today, second.StartDate);
            Assert.AreEqual(storageId, second.StorageId);
        }