public void GetReviewFaker_AmountBeyondMaxReview_ShouldBeFallBackToMaxReviewAmount() { var reviews = ReviewFaker.GetReviewList(12); Random rnd = new Random(); int numberOfInstance = rnd.Next(1, 10); var randomReviewList = reviews.OrderBy(r => Guid.NewGuid()).Take(numberOfInstance); _output.WriteLine(JsonConvert.SerializeObject(randomReviewList, Formatting.Indented)); _output.WriteLine(randomReviewList.Count().ToString()); Assert.NotEqual(reviews.First().Id.ToString(), randomReviewList.FirstOrDefault().Id.ToString()); }
public static IList <Product> GetProducts() { int totalSubCategories = Enum.GetNames(typeof(SubCategoryConstants)).Length; var subCategories = SubCategoryFaker.GetSubCategoryList(totalSubCategories); var subImageFaker = SubImageFaker.GetSubImageFaker(); var subCategoryId = 0; var productFaker = new Faker <Product>() .RuleFor(p => p.Id, f => Guid.NewGuid().ToString()) .RuleFor(p => p.Name, f => f.Commerce.ProductName()) .RuleFor(p => p.Description, f => f.Random.Words(f.Random.Number(1, 400))) .RuleFor(p => p.MainImageURL, f => f.Image.PicsumUrl()) .RuleFor(p => p.SubImages, f => subImageFaker.Generate(f.Random.Number(0, 4))) .RuleFor(p => p.Price, f => Decimal.Parse(f.Commerce.Price(100m, 100000m), NumberStyles.Currency)) .RuleFor(p => p.SubCategory, f => { var subCategory = subCategories.Where(c => (int)c.Id == subCategoryId).FirstOrDefault(); subCategoryId = (subCategoryId >= totalSubCategories - 1) ? 0 : subCategoryId + 1; return(subCategory); }) .RuleFor(p => p.SubCategoryId, (f, p) => p.SubCategory.Id) .RuleFor(p => p.Reviews, (f, p) => ReviewFaker.GetReviewList(3)) .RuleFor(p => p.CreationDate, f => f.Date.Past()) .FinishWith((f, p) => { // assign product id to each review and subImage entities foreach (var review in p.Reviews) { review.ProductId = p.Id; } foreach (var subImage in p.SubImages) { subImage.ProductId = p.Id; } }); Product SeededProduct(int seed) { return(productFaker.UseSeed(seed).Generate()); } var products = Enumerable.Range(1, 1) .Select(SeededProduct) .ToList(); return(products); }