Skip to content
Snippets Groups Projects
Commit c69c377e authored by Robert Goldmann's avatar Robert Goldmann
Browse files

#419 - added unit tests for ImageService

parent b3cd70e2
Branches
Tags
No related merge requests found
......@@ -3,8 +3,7 @@ package de.deadlocker8.budgetmaster.images;
import de.deadlocker8.budgetmaster.accounts.Account;
import de.deadlocker8.budgetmaster.services.Resetable;
import de.thecodelabs.utils.util.Localization;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -17,7 +16,6 @@ import java.util.Optional;
@Service
public class ImageService implements Resetable
{
private static final Logger LOGGER = LoggerFactory.getLogger(ImageService.class);
private static final List<String> ALLOWED_IMAGE_EXTENSIONS = List.of("png", "jpeg", "jpg");
private final ImageRepository imageRepository;
......@@ -66,14 +64,6 @@ public class ImageService implements Resetable
@Transactional
public void saveImageFile(MultipartFile file) throws IOException, InvalidFileExtensionException
{
Byte[] byteObjects = new Byte[file.getBytes().length];
int i = 0;
for(byte b : file.getBytes())
{
byteObjects[i++] = b;
}
final String originalFilename = file.getOriginalFilename();
final Optional<String> fileExtensionOptional = getFileExtension(originalFilename);
if(fileExtensionOptional.isEmpty())
......@@ -87,14 +77,15 @@ public class ImageService implements Resetable
throw new InvalidFileExtensionException(Localization.getString("upload.image.error.invalid.extension", fileExtension));
}
final Byte[] byteObjects = ArrayUtils.toObject(file.getBytes());
final Image image = new Image(byteObjects, originalFilename, fileExtension);
imageRepository.save(image);
}
private Optional<String> getFileExtension(String filename)
public static Optional<String> getFileExtension(String filename)
{
return Optional.ofNullable(filename)
.filter(f -> f.contains("."))
.map(f -> f.substring(filename.lastIndexOf(".") + 1));
.map(f -> f.substring(filename.lastIndexOf(".") + 1).toLowerCase());
}
}
package de.deadlocker8.budgetmaster.unit;
import de.deadlocker8.budgetmaster.images.Image;
import de.deadlocker8.budgetmaster.images.ImageRepository;
import de.deadlocker8.budgetmaster.images.ImageService;
import de.deadlocker8.budgetmaster.images.InvalidFileExtensionException;
import de.deadlocker8.budgetmaster.transactions.TransactionRepository;
import de.deadlocker8.budgetmaster.transactions.TransactionService;
import de.deadlocker8.budgetmaster.unit.helpers.LocalizedTest;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.verification.VerificationMode;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
@RunWith(SpringJUnit4ClassRunner.class)
@LocalizedTest
public class ImageServiceTest
{
@Mock
private ImageRepository imageRepository;
@InjectMocks
private ImageService imageService;
@Test
public void test_getFileExtension_valid()
{
assertThat(ImageService.getFileExtension("abc.png")).isNotEmpty()
.get().isEqualTo("png");
}
@Test
public void test_getFileExtension_validUppercase()
{
assertThat(ImageService.getFileExtension("abc.PNG")).isNotEmpty()
.get().isEqualTo("png");
}
@Test
public void test_getFileExtension_validMultipleDots()
{
assertThat(ImageService.getFileExtension("abc.jpeg.png")).isNotEmpty()
.get().isEqualTo("png");
}
@Test
public void test_getFileExtension_noDot()
{
assertThat(ImageService.getFileExtension("abc")).isEmpty();
}
@Test
public void test_saveImageFile_noFileExtension()
{
final MultipartFile multipartFile = new MockMultipartFile("abc", "abc", "text/plain", new byte[0]);
assertThatThrownBy(() -> imageService.saveImageFile(multipartFile))
.isInstanceOf(IllegalArgumentException.class);
}
@Test
public void test_saveImageFile_invalidFileExtension()
{
final MultipartFile multipartFile = new MockMultipartFile("abc.pdf", "abc.pdf", "text/plain", new byte[0]);
assertThatThrownBy(() -> imageService.saveImageFile(multipartFile))
.isInstanceOf(InvalidFileExtensionException.class);
}
@Test
public void test_saveImageFile_valid() throws IOException, InvalidFileExtensionException
{
final MultipartFile multipartFile = new MockMultipartFile("abc.png", "abc.png", "text/plain", new byte[0]);
imageService.saveImageFile(multipartFile);
final Image expectedImage = new Image(new Byte[0], "abc.png", "png");
Mockito.verify(imageRepository, Mockito.atLeast(1)).save(expectedImage);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment