예제 #1
0
        public void PutDealItem_ValidData_ShoulBeUpdated()
        {
            //init
            var materialsResult = materialController.GetMaterials(1, int.MaxValue).GetObject <PagedResult <Material> >().Queryable.ToArray();
            var deals           = dealController.Deals(1, int.MaxValue).GetObject <PagedResult <Deal> >().Queryable.ToArray();
            var materialsGen    = ControllerHelper.ChooseFrom(materialsResult);
            var dealsGen        = ControllerHelper.ChooseFrom(deals);

            Prop.ForAll <int[]>((i) =>
            {
                //execution
                var deal      = dealsGen.Sample(0, 1).Head;
                var dealItems = sut.GetDealItemsOfDeal(deal.Id).GetObject <IEnumerable <DealItem> >().ToArray();
                var dealItem  = ControllerHelper.ChooseFrom(dealItems).Sample(0, 1).Head;

                var material         = materialsGen.Sample(0, 1).Head;
                dealItem.MaterialId  = material.Id;
                dealItem.DealId      = deal.Id;
                var price            = Gen.Choose(1, 1000000).Sample(0, 1).Head;
                dealItem.PricePerOne = price;
                var quantity         = Gen.Choose(1, 1000).Sample(0, 1).Head;
                dealItem.Quantity    = quantity;
                var result           = sut.PutDealItem(dealItem.Id, dealItem).Result;

                //assertion
                Assert.IsInstanceOf <NoContentResult>(result);
                var result1 = sut.GetDealItem(dealItem.Id).Result.GetObject <DealItem>();
                Assert.AreEqual(result1.MaterialId, material.Id);
                Assert.AreEqual(result1.PricePerOne, price);
                Assert.AreEqual(result1.Quantity, quantity);
            }).QuickCheckThrowOnFailure();
        }
예제 #2
0
        public void PostDealItem_InvalidQuantity_ShoulBeBadRequest()
        {
            //init
            var materialsResult = materialController.GetMaterials(1, int.MaxValue).GetObject <PagedResult <Material> >().Queryable.ToArray();
            var deals           = dealController.Deals(1, int.MaxValue).GetObject <PagedResult <Deal> >().Queryable.ToArray();

            var materialsGen = ControllerHelper.ChooseFrom(materialsResult);
            var dealsGen     = ControllerHelper.ChooseFrom(deals);


            Prop.ForAll <int[]>((i) =>
            {
                var material = materialsGen.Sample(0, 1).Head;
                var deal     = dealsGen.Sample(0, 1).Head;


                var dealItem = new DealItem
                {
                    DealId      = deal.Id,
                    MaterialId  = material.Id,
                    PricePerOne = Gen.Choose(1, 1000000).Sample(0, 1).Head,
                    Quantity    = Gen.Choose(-1000000, -1).Sample(0, 1).Head
                };

                //execution
                var result = sut.PostDealItem(dealItem).Result;
                //assertion
                Assert.IsInstanceOf <BadRequestResult>(result);
            }).QuickCheckThrowOnFailure();
        }
예제 #3
0
        public void DeleteDealItem_DuplicateRandomSelectedInput_ShouldBeBadRequest()
        {
            //init
            var deals    = dealController.Deals(1, int.MaxValue).GetObject <PagedResult <Deal> >().Queryable.ToArray();
            var dealsGen = ControllerHelper.ChooseFrom(deals);

            Prop.ForAll <int[]>((i) =>
            {
                //execution
                var deal      = dealsGen.Sample(0, 1).Head;
                var dealItems = sut.GetDealItemsOfDeal(deal.Id).GetObject <IEnumerable <DealItem> >().ToArray();
                if (dealItems.Any())
                {
                    var dealItem = ControllerHelper.ChooseFrom(dealItems).Sample(0, 1).Head.Id;
                    var result   = sut.DeleteDealItem(dealItem).Result;

                    //assertion
                    Assert.IsInstanceOf <OkObjectResult>(result);
                    var result1 = sut.DeleteDealItem(dealItem).Result;

                    //assertion
                    Assert.IsInstanceOf <BadRequestObjectResult>(result1);
                }
            }).QuickCheckThrowOnFailure();
        }
예제 #4
0
        public void GetDealsOfDealer_RandomRange_ShouldBeIntegrated()
        {
            //init
            var dealersResult = dealerController.Dealers();
            var givenDealers  = dealersResult.GetObject <PagedResult <Dealer> >().Queryable.ToArray();
            var dealersArb    = ControllerHelper.ChooseFrom(givenDealers).ToArbitrary();

            Prop.ForAll(dealersArb, (dealer) =>
            {
                var deals     = sut.GetDealsOfDealer(dealer.Id, 1, int.MaxValue).Result.GetObject <PagedResult <Deal> >().Queryable.ToList();
                var sales     = sut.GetSalesOfDealer(dealer.Id, 1, int.MaxValue).GetObject <PagedResult <Deal> >().Queryable.ToList();
                var purchases = sut.GetPurchasesOfDealer(dealer.Id, 1, int.MaxValue).GetObject <PagedResult <Deal> >().Queryable.ToList();
                var union     = sales.Union(purchases).ToList();

                foreach (var item in deals)
                {
                    var u = union.Single(i => i.Id == item.Id);


                    Assert.AreEqual(u.SellerId, item.SellerId);
                    Assert.AreEqual(u.BuyerId, item.BuyerId);
                    Assert.AreEqual(u.DealPriceId, item.DealPriceId);
                    Assert.AreEqual(u.DealPaymentId, item.DealPaymentId);
                    Assert.AreEqual(u.DealTime, item.DealTime);
                    union.Remove(u);
                }

                Assert.IsEmpty(union);
            }).QuickCheckThrowOnFailure();
        }
예제 #5
0
        public void GetMaterialAmountOverTime_ShouldBeIntegrated()
        {
            var dealersResult = dealerController.Dealers().GetObject <PagedResult <Dealer> >().Queryable.ToArray();
            var dealersGen    = ControllerHelper.ChooseFrom(dealersResult);

            var materialsResult = materialController.GetMaterials(1, int.MaxValue).GetObject <PagedResult <Material> >().Queryable.ToArray();
            var materialsGen    = ControllerHelper.ChooseFrom(materialsResult);

            Prop.ForAll <int[]>((i) =>
            {
                var material = materialsGen.Sample(0, 1).Head;
                var dealer   = dealersGen.Sample(0, 1).Head;
                //100 to 50 days later
                var dateEnd   = DateTime.Now.AddDays(Gen.Choose(-50, 0).Sample(0, 1).Head);
                var dateStart = dateEnd.AddDays(Gen.Choose(-50, 0).Sample(0, 1).Head);
                //130 to 20 days later
                var dateEndMargin   = dateEnd.AddDays(Gen.Choose(0, 30).Sample(0, 1).Head);
                var dateStartMargin = dateStart.AddDays(Gen.Choose(-30, 0).Sample(0, 1).Head);


                var materialOverTime         = sut.GetMaterialAmountOverTime(material.Id, dealer.Id, dateStart, dateEnd).Result.GetObject <IEnumerable <AmountOverDateModel> >();
                var materialOverTimeMargined = sut.GetMaterialAmountOverTime(material.Id, dealer.Id, dateStartMargin, dateEndMargin).Result.GetObject <IEnumerable <AmountOverDateModel> >();

                foreach (var item in materialOverTime)
                {
                    var marginedItem = materialOverTimeMargined.Where(m => ((DateTime)m.Date).Date == ((DateTime)item.Date).Date).Single();

                    Assert.AreEqual(item.Amount, marginedItem.Amount);
                }
            }).QuickCheckThrowOnFailure();
        }
예제 #6
0
        public void PutDealItem_NegativeQuantity_ShouldBeBadRequest()
        {
            //init
            var materialsResult = materialController.GetMaterials(1, int.MaxValue).GetObject <PagedResult <Material> >().Queryable.ToArray();
            var deals           = dealController.Deals(1, int.MaxValue).GetObject <PagedResult <Deal> >().Queryable.ToArray();
            var materialsGen    = ControllerHelper.ChooseFrom(materialsResult);
            var dealsGen        = ControllerHelper.ChooseFrom(deals);

            Prop.ForAll <int[]>((i) =>
            {
                //execution
                var deal             = dealsGen.Sample(0, 1).Head;
                var dealItems        = sut.GetDealItemsOfDeal(deal.Id).GetObject <IEnumerable <DealItem> >().ToArray();
                var dealItem         = ControllerHelper.ChooseFrom(dealItems).Sample(0, 1).Head;
                var material         = materialsGen.Sample(0, 1).Head;
                dealItem.MaterialId  = material.Id;
                dealItem.DealId      = deal.Id;
                var price            = Gen.Choose(1, 100000000).Sample(0, 1).Head;
                dealItem.PricePerOne = price;
                var quantity         = Gen.Choose(-10000000, -1).Sample(0, 1).Head;
                dealItem.Quantity    = quantity;
                var result           = sut.PutDealItem(dealItem.Id, dealItem).Result;
                Assert.IsInstanceOf <BadRequestResult>(result);
            }).QuickCheckThrowOnFailure();
        }
예제 #7
0
        public void GetTwoWeeklyMonthlyPurchaseAndSalePrice_ShouldBeIntegrated()
        {
            var dealersResult = dealerController.Dealers();
            var givenDealers  = dealersResult.GetObject <PagedResult <Dealer> >().Queryable.Select(i => i.Id).ToArray();
            var dealersArb    = ControllerHelper.ChooseFrom(givenDealers).ToArbitrary();

            Prop.ForAll(dealersArb, (dealerId) =>
            {
                var monthly = sut.GetMonthlyPurchaseAndSalePrice(dealerId).Result.GetObject <IEnumerable <DatePurchaseAndSalePriceModel> >();
                var twoWeekPurchasePrice = sut.GetTwoWeeksPurchasesPrice(dealerId).Result.GetObject <IEnumerable <AmountOverDateModel> >();
                var twoWeekSalesPrice    = sut.GetTwoWeeksSalesPrice(dealerId).Result.GetObject <IEnumerable <AmountOverDateModel> >();

                foreach (var daily in monthly)
                {
                    var dayPurchase = twoWeekPurchasePrice.Where(p => ((DateTime)p.Date).Date == ((DateTime)daily.Date).Date).SingleOrDefault();
                    var daySale     = twoWeekSalesPrice.Where(s => ((DateTime)s.Date).Date == ((DateTime)daily.Date).Date).SingleOrDefault();

                    if (dayPurchase != null && daySale != null)
                    {
                        Assert.AreEqual(daily.PurchasesAmount, dayPurchase.Amount);
                        Assert.AreEqual(daily.SalesAmount, daySale.Amount);
                    }
                }
            }).QuickCheckThrowOnFailure();
        }
예제 #8
0
        public void GetDealItem_RandomSelectInputId_ShouldBeValid()
        {
            //init
            var dealItems   = new List <DealItem>();
            var dealsResult = dealController.Deals(1, int.MaxValue).GetObject <PagedResult <Deal> >().Queryable.ToArray();

            foreach (var item in dealsResult)
            {
                var dealitemofdeal = sut.GetDealItemsOfDeal(item.Id).GetObject <IEnumerable <DealItem> >().ToList();
                dealItems.AddRange(dealitemofdeal);
            }
            var dealItemArb = ControllerHelper.ChooseFrom(dealItems.ToArray()).ToArbitrary();

            Prop.ForAll(dealItemArb, (dealItem) =>
            {
                //execution
                var result = sut.GetDealItem(id: dealItem.Id).Result;
                Assert.IsInstanceOf <OkObjectResult>(result);

                var resultItem = result.GetObject <DealItem>();

                //assertion
                Assert.AreEqual(resultItem.Id, dealItem.Id);
                Assert.AreEqual(resultItem.PricePerOne, dealItem.PricePerOne);
                Assert.AreEqual(resultItem.Quantity, dealItem.Quantity);
            }).QuickCheckThrowOnFailure();
        }
예제 #9
0
        public void PutDealItem_InvalidMaterialId_ShouldbeBadRequest()
        {
            //init
            var materialsResult = materialController.GetMaterials(1, int.MaxValue).GetObject <PagedResult <Material> >().Queryable.Select(x => x.Id).ToList();
            var deals           = dealController.Deals(1, int.MaxValue).GetObject <PagedResult <Deal> >().Queryable.ToArray();
            var materialIdArb   = Arb.Generate <int>().Where(i => !materialsResult.Contains(i)).ToArbitrary();


            Prop.ForAll(materialIdArb, (materialId) =>
            {
                var deal             = ControllerHelper.ChooseFrom(deals).Sample(0, 1).Head;
                var dealItems        = sut.GetDealItemsOfDeal(deal.Id).GetObject <IEnumerable <DealItem> >().ToArray();
                var dealItem         = ControllerHelper.ChooseFrom(dealItems).Sample(0, 1).Head;
                dealItem.MaterialId  = materialId;
                dealItem.DealId      = deal.Id;
                var price            = Gen.Choose(1, 1000000).Sample(0, 1).Head;
                dealItem.PricePerOne = price;
                var quantity         = Gen.Choose(1, 1000).Sample(0, 1).Head;
                dealItem.Quantity    = quantity;
                //execution
                var result = sut.PutDealItem(dealItem.Id, dealItem).Result;
                //assertion
                Assert.IsInstanceOf <BadRequestResult>(result);
            }).QuickCheckThrowOnFailure();
        }
예제 #10
0
        public void GetDealItemsOfDeal_SelectedRandomDeal_ShouldContainsItem()
        {
            //init
            var dealsResult = dealController.Deals(1, int.MaxValue).GetObject <PagedResult <Deal> >().Queryable.ToArray();
            var dealsArb    = ControllerHelper.ChooseFrom(dealsResult).ToArbitrary();

            Prop.ForAll(dealsArb, (deal) =>
            {
                //execution
                var result = sut.GetDealItemsOfDeal(deal.Id).GetObject <IEnumerable <DealItem> >();

                //assertion
                Assert.IsNotEmpty(result);
            }).QuickCheckThrowOnFailure();
        }
예제 #11
0
        public void GetDealItemsOfDeal_SelectedRandomDeal_ShouldBelongToDeal()
        {
            //init
            var dealsResult = dealController.Deals(1, int.MaxValue).GetObject <PagedResult <Deal> >().Queryable.ToArray();
            var dealsArb    = ControllerHelper.ChooseFrom(dealsResult).ToArbitrary();

            Prop.ForAll(dealsArb, (deal) =>
            {
                //execution
                var result = sut.GetDealItemsOfDeal(deal.Id).GetObject <IEnumerable <DealItem> >();

                //assertion
                foreach (var r in result)
                {
                    Assert.AreEqual(r.DealId, deal.Id);
                }
            }).QuickCheckThrowOnFailure();
        }
예제 #12
0
        public void GetDealItemsOfMaterial_SelectedRandomMaterial_ShouldBelongToDealItem()
        {
            //init
            var materialsResult = materialController.GetMaterials(1, int.MaxValue).GetObject <PagedResult <Material> >().Queryable.ToArray();
            var materialsArb    = ControllerHelper.ChooseFrom(materialsResult).ToArbitrary();

            Prop.ForAll(materialsArb, (material) =>
            {
                //execution
                var result = sut.DealItemsOfMaterial(material.Id).GetObject <PagedResult <DealItemOfMaterialModel> >().Queryable.ToList();

                //assertion
                foreach (var r in result)
                {
                    Assert.AreEqual(r.MaterialId, material.Id);
                }
            }).QuickCheckThrowOnFailure();
        }
예제 #13
0
        public void GetSuggestedDealers_RandomNonNullInput_ShouldNotBeEmpty()
        {
            //init
            var dealersResult = sut.Dealers();
            var givenDealers  = dealersResult.GetObject <PagedResult <Dealer> >().Queryable.ToArray();
            var dealersArb    = ControllerHelper.ChooseFrom(givenDealers).Where(i => i.Name != null).ToArbitrary();


            Prop.ForAll(dealersArb, (dealer) =>
            {
                //execution
                var subname = dealer.Name.Substring(0, Gen.Choose(0, dealer.Name.Length).Sample(0, 1).Single());
                var result  = sut.GetSuggestedDealers(subname);
                var dealers = result.GetObject <IEnumerable <Dealer> >().ToList();

                //assertion
                Assert.AreNotEqual(dealers.Count, 0);
            }).QuickCheckThrowOnFailure();
        }
예제 #14
0
        public void GetMaterialAmountOverTime_NullItems_ShouldBeEqualToIdOne()
        {
            var materialsResult = materialController.GetMaterials(1, int.MaxValue).GetObject <PagedResult <Material> >().Queryable.ToArray();
            var materialsGen    = ControllerHelper.ChooseFrom(materialsResult);

            Prop.ForAll <int[]>((i) =>
            {
                var material = materialsGen.Sample(0, 1).Head;

                var materialOverTime         = sut.GetMaterialAmountOverTime(material.Id, 1, DateTime.Now.Date, DateTime.Now.Date).Result.GetObject <IEnumerable <AmountOverDateModel> >();
                var materialOverTimeNullable = sut.GetMaterialAmountOverTime(material.Id, null, null, null).Result.GetObject <IEnumerable <AmountOverDateModel> >();

                foreach (var item in materialOverTime)
                {
                    var nulledItem = materialOverTimeNullable.Where(m => ((DateTime)m.Date).Date == ((DateTime)item.Date).Date).Single();

                    Assert.AreEqual(item.Amount, nulledItem.Amount);
                }
            }).QuickCheckThrowOnFailure();
        }
예제 #15
0
        public void DeleteDealer_DuplicateRandomDelete_ShouldBeNotFoundResult()
        {
            Prop.ForAll <int[]>((i) =>
            {
                //init
                var dealersResult = sut.Dealers();
                var givenDealers  = dealersResult.GetObject <PagedResult <Dealer> >().Queryable.ToArray();

                if (givenDealers.Length != 0)
                {
                    var dealer = ControllerHelper.ChooseFrom(givenDealers).Sample(0, 1).Single();

                    //execution
                    var result1 = sut.DeleteDealer(dealer.Id).Result;
                    Assert.IsInstanceOf <OkObjectResult>(result1);
                    var result2 = sut.DeleteDealer(dealer.Id).Result;
                    //assertion
                    Assert.IsInstanceOf <NotFoundResult>(result2);
                }
            }).QuickCheckThrowOnFailure();
        }
예제 #16
0
        public void GetGeneralWeekPurchaseAndSalePrice_ShouldBeIntegrated()
        {
            var dealersResult = dealerController.Dealers();
            var givenDealers  = dealersResult.GetObject <PagedResult <Dealer> >().Queryable.Select(i => i.Id).ToArray();
            var dealersArb    = ControllerHelper.ChooseFrom(givenDealers).ToArbitrary();

            Prop.ForAll(dealersArb, (dealerId) =>
            {
                var generals          = sut.GetGeneral(dealerId).Result.GetObject <GeneraStatisticsModel>();
                decimal salesPrice    = generals.todaySalesPrice;
                decimal purchasePrice = generals.todayPurchasePrice;
                var weekly            = sut.GetWeeklyPurchaseAndSalePrice(dealerId).Result.GetObject <IEnumerable <DatePurchaseAndSalePriceModel> >();

                var todayStats          = weekly.Where(x => ((DateTime)x.Date).Date == DateTime.Now.Date).First();
                decimal salesAmount     = todayStats.SalesAmount;
                decimal purchasesAmount = todayStats.PurchasesAmount;

                Assert.AreEqual(salesPrice, salesAmount);
                Assert.AreEqual(purchasePrice, purchasesAmount);
            }).QuickCheckThrowOnFailure();
        }
예제 #17
0
        public void PutDealItem_NullDealItem_ShouldBeBadRequest()
        {
            //init
            var materialsResult = materialController.GetMaterials(1, int.MaxValue).GetObject <PagedResult <Material> >().Queryable.ToArray();
            var deals           = dealController.Deals(1, int.MaxValue).GetObject <PagedResult <Deal> >().Queryable.ToArray();
            var materialsGen    = ControllerHelper.ChooseFrom(materialsResult);
            var dealsGen        = ControllerHelper.ChooseFrom(deals);

            Prop.ForAll <int[]>((i) =>
            {
                //execution
                var deal      = dealsGen.Sample(0, 1).Head;
                var dealItems = sut.GetDealItemsOfDeal(deal.Id).GetObject <IEnumerable <DealItem> >().ToArray();
                if (dealItems.Any())
                {
                    var dealItem = ControllerHelper.ChooseFrom(dealItems).Sample(0, 1).Head;
                    var result   = sut.PutDealItem(dealItem.Id, null).Result;
                    Assert.IsInstanceOf <BadRequestResult>(result);
                }
            }).QuickCheckThrowOnFailure();
        }
예제 #18
0
        public void GetSuggestedDealers_RandomNonNullInput_ShouldContainsSubName()
        {
            //init
            var dealersResult = sut.Dealers();
            var givenDealers  = dealersResult.GetObject <PagedResult <Dealer> >().Queryable.ToArray();
            var dealersArb    = ControllerHelper.ChooseFrom(givenDealers).Where(i => i.Name != null).ToArbitrary();

            Prop.ForAll(dealersArb, (dealer) =>
            {
                //execution
                var subName = dealer.Name.Substring(0, Gen.Choose(0, dealer.Name.Length).Sample(0, 1).Single());
                var result  = sut.GetSuggestedDealers(subName);

                //assertion
                var dealers = result.GetObject <IEnumerable <Dealer> >().ToList();

                foreach (var d in dealers)
                {
                    Assert.IsTrue(d.Name.ToLower().Contains(subName.ToLower()), $" Expected: {d.Name} contains: {subName}");
                }
            }).QuickCheckThrowOnFailure();
        }
예제 #19
0
        public void DeleteDealItem_InvalidInput_ShouldNotFound()
        {
            //init
            var deals    = dealController.Deals(1, int.MaxValue).GetObject <PagedResult <Deal> >().Queryable.ToArray();
            var dealsGen = ControllerHelper.ChooseFrom(deals);

            var dealItems = new List <int>();

            foreach (var item in deals)
            {
                var dealitemofdeal = sut.GetDealItemsOfDeal(item.Id).GetObject <IEnumerable <DealItem> >().ToList().Select(x => x.Id);
                dealItems.AddRange(dealitemofdeal);
            }

            var invalidDealItemArb = Arb.Generate <int>().Where(i => !dealItems.Contains(i)).ToArbitrary();

            Prop.ForAll(invalidDealItemArb, (i) =>
            {
                var result = sut.DeleteDealItem(i).Result;
                Assert.IsInstanceOf <NotFoundResult>(result);
            }).QuickCheckThrowOnFailure();
        }
예제 #20
0
        public void PutDealItem_InvalidId_ShouldBeBadRequest()
        {
            //init
            var materialsResult = materialController.GetMaterials(1, int.MaxValue).GetObject <PagedResult <Material> >().Queryable.ToArray();
            var deals           = dealController.Deals(1, int.MaxValue).GetObject <PagedResult <Deal> >().Queryable.ToArray();
            var materialsGen    = ControllerHelper.ChooseFrom(materialsResult);
            var dealsGen        = ControllerHelper.ChooseFrom(deals);

            var dealItems = new List <DealItem>();

            foreach (var item in deals)
            {
                var dealitemofdeal = sut.GetDealItemsOfDeal(item.Id).GetObject <IEnumerable <DealItem> >().ToList();
                dealItems.AddRange(dealitemofdeal);
            }
            var dealItemGen = ControllerHelper.ChooseFrom(dealItems.ToArray());

            Prop.ForAll(dealItemGen.ToArbitrary(), (dealItem) =>
            {
                var deal     = dealsGen.Sample(0, 1).Head;
                var material = materialsGen.Sample(0, 1).Head;

                dealItem.MaterialId  = material.Id;
                dealItem.DealId      = deal.Id;
                var price            = Gen.Choose(1, 1000000).Sample(0, 1).Head;
                dealItem.PricePerOne = price;
                var quantity         = Gen.Choose(1, 1000).Sample(0, 1).Head;
                dealItem.Quantity    = quantity;

                var newId = Arb.Generate <int>().Where(it => it != dealItem.Id).Sample(0, 1).Head;

                //execution
                var result = sut.PutDealItem(newId, dealItem).Result;
                //assertion
                Assert.IsInstanceOf <BadRequestResult>(result);
            }).QuickCheckThrowOnFailure();
        }