示例#1
0
        public void AddIngredient_NewRecordAddedWithProperValues()
        {
            //Arrange
            var dbOptions = new DbContextOptionsBuilder <CarbonKitchenDbContext>()
                            .UseInMemoryDatabase(databaseName: $"IngredientDb{Guid.NewGuid()}")
                            .Options;
            var sieveOptions = Options.Create(new SieveOptions());

            var fakeIngredient = new FakeIngredient {
            }.Generate();

            //Act
            using (var context = new CarbonKitchenDbContext(dbOptions))
            {
                var service = new IngredientRepository(context, new SieveProcessor(sieveOptions));

                service.AddIngredient(fakeIngredient);

                context.SaveChanges();
            }

            //Assert
            using (var context = new CarbonKitchenDbContext(dbOptions))
            {
                context.Ingredients.Count().Should().Be(1);

                var ingredientById = context.Ingredients.FirstOrDefault(i => i.IngredientId == fakeIngredient.IngredientId);

                ingredientById.Should().BeEquivalentTo(fakeIngredient);
                ingredientById.IngredientId.Should().Be(fakeIngredient.IngredientId);
                ingredientById.Name.Should().Be(fakeIngredient.Name);
                ingredientById.Unit.Should().Be(fakeIngredient.Unit);
                ingredientById.Amount.Should().Be(fakeIngredient.Amount);
            }
        }
示例#2
0
        public void GetIngredients_FilterListWithExact(string filters)
        {
            //Arrange
            var dbOptions = new DbContextOptionsBuilder <CarbonKitchenDbContext>()
                            .UseInMemoryDatabase(databaseName: $"IngredientDb{Guid.NewGuid()}")
                            .Options;
            var sieveOptions = Options.Create(new SieveOptions());

            var fakeIngredientOne = new FakeIngredient {
            }.Generate();

            fakeIngredientOne.Name     = "Alpha";
            fakeIngredientOne.Unit     = "Bravo";
            fakeIngredientOne.RecipeId = 5;

            var fakeIngredientTwo = new FakeIngredient {
            }.Generate();

            fakeIngredientTwo.Name     = "Charlie";
            fakeIngredientTwo.Unit     = "Delta";
            fakeIngredientTwo.RecipeId = 6;

            var fakeIngredientThree = new FakeIngredient {
            }.Generate();

            fakeIngredientThree.Name     = "Echo";
            fakeIngredientThree.Unit     = "Foxtrot";
            fakeIngredientThree.RecipeId = 7;

            //Act
            using (var context = new CarbonKitchenDbContext(dbOptions))
            {
                context.Ingredients.AddRange(fakeIngredientOne, fakeIngredientTwo, fakeIngredientThree);
                context.SaveChanges();

                var service = new IngredientRepository(context, new SieveProcessor(sieveOptions));

                var ingredientRepo = service.GetIngredients(new IngredientParametersDto {
                    Filters = filters
                });

                //Assert
                ingredientRepo.Should()
                .HaveCount(1);

                context.Database.EnsureDeleted();
            }
        }
示例#3
0
        public void GetIngredients_SearchQueryReturnsExpectedRecordCount(string queryString, int expectedCount)
        {
            //Arrange
            var dbOptions = new DbContextOptionsBuilder <CarbonKitchenDbContext>()
                            .UseInMemoryDatabase(databaseName: $"IngredientDb{Guid.NewGuid()}")
                            .Options;
            var sieveOptions = Options.Create(new SieveOptions());

            var fakeIngredientOne = new FakeIngredient {
            }.Generate();

            fakeIngredientOne.Name = "Alpha";
            fakeIngredientOne.Unit = "Bravo";

            var fakeIngredientTwo = new FakeIngredient {
            }.Generate();

            fakeIngredientTwo.Name = "Hartsfield";
            fakeIngredientTwo.Unit = "White";

            var fakeIngredientThree = new FakeIngredient {
            }.Generate();

            fakeIngredientThree.Name = "Bravehart";
            fakeIngredientThree.Unit = "Jonfav";

            //Act
            using (var context = new CarbonKitchenDbContext(dbOptions))
            {
                context.Ingredients.AddRange(fakeIngredientOne, fakeIngredientTwo, fakeIngredientThree);
                context.SaveChanges();

                var service = new IngredientRepository(context, new SieveProcessor(sieveOptions));

                var ingredientRepo = service.GetIngredients(new IngredientParametersDto {
                    QueryString = queryString
                });

                //Assert
                ingredientRepo.Should()
                .HaveCount(expectedCount);

                context.Database.EnsureDeleted();
            }
        }
示例#4
0
        public void GetIngredients_ListSortedInDescOrder()
        {
            //Arrange
            var dbOptions = new DbContextOptionsBuilder <CarbonKitchenDbContext>()
                            .UseInMemoryDatabase(databaseName: $"IngredientDb{Guid.NewGuid()}")
                            .Options;
            var sieveOptions = Options.Create(new SieveOptions());

            var fakeIngredientOne = new FakeIngredient {
            }.Generate();

            fakeIngredientOne.Name = "Bravo";

            var fakeIngredientTwo = new FakeIngredient {
            }.Generate();

            fakeIngredientTwo.Name = "Alpha";

            var fakeIngredientThree = new FakeIngredient {
            }.Generate();

            fakeIngredientThree.Name = "Charlie";

            //Act
            using (var context = new CarbonKitchenDbContext(dbOptions))
            {
                context.Ingredients.AddRange(fakeIngredientOne, fakeIngredientTwo, fakeIngredientThree);
                context.SaveChanges();

                var service = new IngredientRepository(context, new SieveProcessor(sieveOptions));

                var ingredientRepo = service.GetIngredients(new IngredientParametersDto {
                    SortOrder = "-Name"
                });

                //Assert
                ingredientRepo.Should()
                .ContainInOrder(fakeIngredientThree, fakeIngredientOne, fakeIngredientTwo);

                context.Database.EnsureDeleted();
            }
        }
        public void DeleteIngredient_ReturnsProperCount()
        {
            //Arrange
            var dbOptions = new DbContextOptionsBuilder <CarbonKitchenDbContext>()
                            .UseInMemoryDatabase(databaseName: $"IngredientDb{Guid.NewGuid()}")
                            .Options;
            var sieveOptions = Options.Create(new SieveOptions());

            var fakeIngredientOne = new FakeIngredient {
            }.Generate();
            var fakeIngredientTwo = new FakeIngredient {
            }.Generate();
            var fakeIngredientThree = new FakeIngredient {
            }.Generate();

            //Act
            using (var context = new CarbonKitchenDbContext(dbOptions))
            {
                context.Ingredients.AddRange(fakeIngredientOne, fakeIngredientTwo, fakeIngredientThree);

                var service = new IngredientRepository(context, new SieveProcessor(sieveOptions));
                service.DeleteIngredient(fakeIngredientTwo);

                context.SaveChanges();

                //Assert
                var ingredientList = context.Ingredients.ToList();

                ingredientList.Should()
                .NotBeEmpty()
                .And.HaveCount(2);

                ingredientList.Should().ContainEquivalentOf(fakeIngredientOne);
                ingredientList.Should().ContainEquivalentOf(fakeIngredientThree);
                Assert.DoesNotContain(ingredientList, i => i == fakeIngredientTwo);

                context.Database.EnsureDeleted();
            }
        }
示例#6
0
        public void GetIngredients_ReturnExpectedPageSize()
        {
            //Arrange
            var dbOptions = new DbContextOptionsBuilder <CarbonKitchenDbContext>()
                            .UseInMemoryDatabase(databaseName: $"IngredientDb{Guid.NewGuid()}")
                            .Options;
            var sieveOptions = Options.Create(new SieveOptions());

            var fakeIngredientOne = new FakeIngredient {
            }.Generate();
            var fakeIngredientTwo = new FakeIngredient {
            }.Generate();
            var fakeIngredientThree = new FakeIngredient {
            }.Generate();

            //Act
            using (var context = new CarbonKitchenDbContext(dbOptions))
            {
                context.Ingredients.AddRange(fakeIngredientOne, fakeIngredientTwo, fakeIngredientThree);
                context.SaveChanges();

                var service = new IngredientRepository(context, new SieveProcessor(sieveOptions));

                var ingredientRepo = service.GetIngredients(new IngredientParametersDto {
                    PageSize = 2
                });

                //Assert
                ingredientRepo.Should()
                .NotBeEmpty()
                .And.HaveCount(2);

                ingredientRepo.Should().ContainEquivalentOf(fakeIngredientOne);
                ingredientRepo.Should().ContainEquivalentOf(fakeIngredientTwo);

                context.Database.EnsureDeleted();
            }
        }
示例#7
0
        public async Task GetIngredients_ReturnsSuccessCodeAndResourceWithAccurateFields()
        {
            var fakeIngredientOne = new FakeIngredient {
            }.Generate();
            var fakeIngredientTwo = new FakeIngredient {
            }.Generate();

            var appFactory = _factory;

            using (var scope = appFactory.Services.CreateScope())
            {
                var context = scope.ServiceProvider.GetRequiredService <CarbonKitchenDbContext>();
                context.Database.EnsureCreated();

                context.Ingredients.RemoveRange(context.Ingredients);
                context.Ingredients.AddRange(fakeIngredientOne, fakeIngredientTwo);
                context.SaveChanges();
            }

            var client = appFactory.CreateClient(new WebApplicationFactoryClientOptions
            {
                AllowAutoRedirect = false
            });

            var result = await client.GetAsync($"api/v1/ingredients")
                         .ConfigureAwait(false);

            var responseContent = await result.Content.ReadAsStringAsync()
                                  .ConfigureAwait(false);

            var response = JsonConvert.DeserializeObject <IEnumerable <IngredientDto> >(responseContent);

            // Assert
            result.StatusCode.Should().Be(200);
            response.Should().ContainEquivalentOf(fakeIngredientOne);
            response.Should().ContainEquivalentOf(fakeIngredientTwo);
        }