diff --git a/src/test/java/NTNU/IDATT1002/repository/ImageRepositoryTest.java b/src/test/java/NTNU/IDATT1002/repository/ImageRepositoryTest.java new file mode 100644 index 0000000000000000000000000000000000000000..f897ed80cd26203c445eee5abadb89b766341a10 --- /dev/null +++ b/src/test/java/NTNU/IDATT1002/repository/ImageRepositoryTest.java @@ -0,0 +1,135 @@ +package NTNU.IDATT1002.repository; + +import static org.junit.jupiter.api.Assertions.*; + +import NTNU.IDATT1002.models.Image; +import NTNU.IDATT1002.models.User; +import java.util.List; +import java.util.Optional; +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestTemplate; + +/** + * Test for {@link ImageRepository} + */ +class ImageRepositoryTest { + + private ImageRepository imageRepository; + private UserRepository userRepository; + private static final Long IMAGE_INITIAL_ID = 1L; + private User user; + private String username; + + /** + * Sets up necessary test data for testing + * For testing a method in the repository it is necessary to include userRepository + * This test then unfortunately relies on userRepostiory working + */ + @BeforeEach + void setUp() { + username = "test123"; + user = new User(); + user.setUsername(username); + EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("ImageApplicationTest"); + EntityManager entityManager = entityManagerFactory.createEntityManager(); + imageRepository = new ImageRepository(entityManager); + userRepository = new UserRepository(entityManager); + userRepository.save(user); + } + + + /** + * Test that tries to save a image and makes sure the image was saved + */ + @Test + void testSaveReturnsInstance() { + Optional<Image> savedImage = imageRepository.save(new Image()); + + assertTrue(savedImage.isPresent()); + assertEquals(IMAGE_INITIAL_ID, savedImage.get().getId()); + } + + /** + * Test that tries to save a Image with invalid entity and makes sure the Image was not saved + */ + @Test + void testSaveInvalidEntityReturnsEmptyOptional() { + Optional<Image> savedImage = imageRepository.save(null); + + assertTrue(savedImage.isEmpty()); + } + + /** + * Test that tries to save two images and make sure both are returned + */ + @Test + void testFindAllReturnsAllSavedEntities() { + imageRepository.save(new Image()); + imageRepository.save(new Image()); + + List<?> foundImages = imageRepository.findAll(); + assertEquals(2, foundImages.size()); + } + + /** + * Test that tries to save two images to a user and makes sure both are returned + */ + @Test + void testFindAllByUserReturnsCorrectAmount() { ; + Image testImage = new Image(); + testImage.setUser(user); + Image testImage2 = new Image(); + testImage2.setUser(user); + imageRepository.save(testImage); + imageRepository.save(testImage2); + + List<?> foundImages = imageRepository.findAllByUsername(username); + assertEquals(2, foundImages.size()); + } + + /** + * Test that save a image and finds the image by id + */ + @Test + void testFindByIdReturnsOptionalWithCorrectId() { + imageRepository.save(new Image()); + Optional<Image> foundImage = imageRepository.findById(IMAGE_INITIAL_ID); + + assertTrue(foundImage.isPresent()); + assertEquals(IMAGE_INITIAL_ID, foundImage.get().getId()); + } + + /** + * Test that deletes image by id and makes sure image was deleted + */ + @Test + void testDeleteByIdRemovesEntity() { + imageRepository.save(new Image()); + + Optional<Image> foundImage = imageRepository.findById(IMAGE_INITIAL_ID); + + foundImage.ifPresent(image -> imageRepository.deleteById(IMAGE_INITIAL_ID)); + Optional<Image> deletedImage = imageRepository.findById(IMAGE_INITIAL_ID); + + assertTrue(deletedImage.isEmpty()); + } + + /** + * Test that deletes Image object and makes sure the image was deleted + */ + @Test + void testDeleteRemovesEntity() { + imageRepository.save(new Image()); + + Optional<Image> foundImage = imageRepository.findById(IMAGE_INITIAL_ID); + + foundImage.ifPresent(imageRepository::delete); + Optional<Image> deletedImage = imageRepository.findById(IMAGE_INITIAL_ID); + + assertTrue(deletedImage.isEmpty()); + } +} \ No newline at end of file