meals-made-easy-api/src/integrationTest/java/app/mealsmadeeasy/api/recipe/RecipeRepositoryTests.java

112 lines
3.9 KiB
Java

package app.mealsmadeeasy.api.recipe;
import app.mealsmadeeasy.api.user.UserEntity;
import app.mealsmadeeasy.api.user.UserRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest
public class RecipeRepositoryTests {
@Autowired
private RecipeRepository recipeRepository;
@Autowired
private UserRepository userRepository;
private UserEntity getOwnerUser() {
final UserEntity recipeUser = UserEntity.getDefaultDraft();
recipeUser.setUsername("recipeUser");
recipeUser.setEmail("recipe@user.com");
recipeUser.setPassword("test");
return this.userRepository.save(recipeUser);
}
private UserEntity getViewerUser() {
final UserEntity viewerUser = UserEntity.getDefaultDraft();
viewerUser.setUsername("recipeViewerUser");
viewerUser.setEmail("recipe-viewer@user.com");
viewerUser.setPassword("test");
return this.userRepository.save(viewerUser);
}
@Test
@DirtiesContext
public void findsAllPublicRecipes() {
final RecipeEntity publicRecipe = new RecipeEntity();
publicRecipe.setCreated(LocalDateTime.now());
publicRecipe.setSlug("public-recipe");
publicRecipe.setPublic(true);
publicRecipe.setOwner(this.getOwnerUser());
publicRecipe.setTitle("Public Recipe");
publicRecipe.setRawText("Hello, World!");
this.recipeRepository.save(publicRecipe);
final List<RecipeEntity> publicRecipes = this.recipeRepository.findAllByIsPublicIsTrue();
assertThat(publicRecipes.size()).isEqualTo(1);
}
@Test
@DirtiesContext
public void doesNotFindNonPublicRecipe() {
final RecipeEntity nonPublicRecipe = new RecipeEntity();
nonPublicRecipe.setCreated(LocalDateTime.now());
nonPublicRecipe.setSlug("non-public-recipe");
nonPublicRecipe.setOwner(this.getOwnerUser());
nonPublicRecipe.setTitle("Non-Public Recipe");
nonPublicRecipe.setRawText("Hello, World!");
this.recipeRepository.save(nonPublicRecipe);
final List<RecipeEntity> publicRecipes = this.recipeRepository.findAllByIsPublicIsTrue();
assertThat(publicRecipes.size()).isEqualTo(0);
}
@Test
@DirtiesContext
public void findsAllForViewer() {
final RecipeEntity recipe = new RecipeEntity();
recipe.setCreated(LocalDateTime.now());
recipe.setSlug("test-recipe");
recipe.setOwner(this.getOwnerUser());
recipe.setTitle("Test Recipe");
recipe.setRawText("Hello, World!");
final RecipeEntity saved = this.recipeRepository.save(recipe);
final UserEntity viewer = this.getViewerUser();
final Set<UserEntity> viewers = new HashSet<>(recipe.getViewerEntities());
viewers.add(viewer);
saved.setViewers(viewers);
this.recipeRepository.save(saved);
final List<RecipeEntity> viewable = this.recipeRepository.findAllByViewersContaining(viewer);
assertThat(viewable.size()).isEqualTo(1);
}
@Test
@DirtiesContext
public void doesNotIncludeNonViewable() {
final RecipeEntity recipe = new RecipeEntity();
recipe.setCreated(LocalDateTime.now());
recipe.setSlug("test-recipe");
recipe.setOwner(this.getOwnerUser());
recipe.setTitle("Test Recipe");
recipe.setRawText("Hello, World!");
this.recipeRepository.save(recipe);
final UserEntity viewer = this.getViewerUser();
final List<RecipeEntity> viewable = this.recipeRepository.findAllByViewersContaining(viewer);
assertThat(viewable.size()).isEqualTo(0);
}
}