public static async Task GenerateSeedDealAsync(DealController sut, List <Dealer> dealers, List <Material> materials, int count = 50) { var dealersGenerator = Gen.Elements <Dealer>(dealers).Where(x => x.Id != 1); var materialGenerator = Gen.Elements <Material>(materials).NonEmptyListOf(); var barcodeGenerator = Arb.Generate <string>(); var sells = Gen.Choose(0, count).Select(i => { var date = DateTime.Now; date = date.AddDays(Gen.Choose(-90, 0).Sample(0, 1).Head); var ds = dealersGenerator.Sample(0, 1).Single(); return(new Deal { BuyerId = ds.Id, Items = materialGenerator.Sample(0, 1).Head.Select(m => new DealItem { MaterialId = m.Id, PricePerOne = Gen.Choose(1, 10000).Sample(0, 1).Head, Quantity = Gen.Choose(1, 100).Sample(0, 1).Head }).ToList(), DealTime = date, DealPrice = new Payment { Method = Hesabdar.Models.Enums.PaymentMethod.DealPrice, PayDate = date, Paid = true, Amount = Gen.Choose(1, 10000).Sample(0, 1).Head }, DealPayment = new Payment { Method = Gen.OneOf(Gen.Constant(Hesabdar.Models.Enums.PaymentMethod.Cash), Gen.Constant(Hesabdar.Models.Enums.PaymentMethod.Cheque)).Sample(0, 1).Head, PayDate = date, Paid = Gen.OneOf(Gen.Constant(true), Gen.Constant(true)).Sample(0, 1).Head, Amount = Gen.Choose(1, 10000).Sample(0, 1).Head } }); }); foreach (var item in sells.Sample(0, count)) { await sut.PostSale(item); } var purchases = Gen.Choose(0, count).Select(i => { var ds = dealersGenerator.Sample(0, 1).Single(); var date = DateTime.Now; date = date.AddDays(Gen.Choose(-90, 0).Sample(0, 1).Head); return(new Deal { SellerId = ds.Id, Items = materialGenerator.Sample(0, 1).Head.Select(m => new DealItem { MaterialId = m.Id, PricePerOne = Gen.Choose(1, 10000).Sample(0, 1).Head, Quantity = Gen.Choose(1, 100).Sample(0, 1).Head }).ToList(), DealTime = date, DealPrice = new Payment { Method = Hesabdar.Models.Enums.PaymentMethod.DealPrice, PayDate = date, Paid = true, Amount = Gen.Choose(1, 10000).Sample(0, 1).Head }, DealPayment = new Payment { Method = Gen.OneOf(Gen.Constant(Hesabdar.Models.Enums.PaymentMethod.Cash), Gen.Constant(Hesabdar.Models.Enums.PaymentMethod.Cheque)).Sample(0, 1).Head, PayDate = date, Paid = Gen.OneOf(Gen.Constant(true), Gen.Constant(true)).Sample(0, 1).Head, Amount = Gen.Choose(1, 10000).Sample(0, 1).Head } }); }); foreach (var item in purchases.Sample(0, count)) { await sut.PostPurchase(item); } }