Как протестировать метод поиска?
Я написал тест в котором пытаюсь сравнить результат поиска (result) и созданный объект для сравнения (expResult). Assert.assertEquals(expResult, result) не даст true так как в объекте result четыре объекта-результат поиска, а в expResult один...
С чем сравнивать result чтобы тест корректно сработал?
Вот мой тест метод:
@Test
@Transactional
public void testFilter2() {
System.out.println("filter");
FileFilterDto fileFilterDto = new FileFilterDto();
LocalDate beginDate = LocalDate.parse("2020-02-20");
LocalDate endDateCreate = LocalDate.parse("2021-12-31");
String uuidFile = "00000000-0000-0000-0000-000000000000";
String uuidFile1 = "00000000-0000-0000-0000-000000000000";
Paginating paginating = new Paginating();
fileFilterDto.setIdOwner(UUID.fromString(uuidFile1));
fileFilterDto.setExt("pdf");
fileFilterDto.setDeleted(false);
paginating.setNumber(0);
paginating.setSize(10);
fileFilterDto.setPaginating(paginating);
fileFilterDto.setBeginDateCreate(beginDate);
fileFilterDto.setEndDateCreate(endDateCreate);
FileServiceImpl instance = new FileServiceImpl(dbFileService,
minioService, objectMapper);
instance.setBucketName(bucketName);
FileResponse expResult = new FileResponse();
LocalDateTime dateFile = LocalDateTime.now();
OwnerDto ownerDto = new OwnerDto();
FileObjDTO fileObjDTO = new FileObjDTO();
ownerDto.setUuid(UUID.fromString(uuidFile));
ownerDto.setName("TestK");
fileObjDTO.setUuidFile(UUID.fromString(uuidFile));
fileObjDTO.setUpdateDateTime(dateFile);
fileObjDTO.setCreateDateTime(dateFile);
fileObjDTO.setFileName("testFileName");
fileObjDTO.setExt("pdf");
fileObjDTO.setOwnerDto(ownerDto);
fileObjDTO.setDeleted(false);
fileObjDTO.setFileData("{\"j\":\"10\"}");
fileObjDTO.setFolder(folderData);
expResult.setMessage("");
expResult.setSuccess(true);
PagerDTO pagerDTO = new PagerDTO();
expResult.setPagerDTO(pagerDTO);
expResult.getPagerDTO().setPrev(false);
expResult.getPagerDTO().setNext(false);
expResult.getPagerDTO().setTotal(6);
expResult.getPagerDTO().setSize(10);
expResult.getFileObjPages().add(fileObjDTO);
instance.getInputStreamForFileObjDto(fileObjDTO);
instance.create(fileObjDTO);
FileResponse result = instance.filter(fileFilterDto);
LocalDate localDate1 = dateFile.toLocalDate();
if (localDate1.isBefore(beginDate) == false && localDate1.isAfter(endDateCreate) == false)
System.out.println("yes");
Assert.assertEquals(fileFilterDto.getIdOwner(), fileObjDTO.getUuidFile());
Assert.assertEquals(fileFilterDto.getExt(), fileObjDTO.getExt());
Assert.assertEquals(expResult, result);
Assert.assertNotNull(result);
}
FileServiceImpl:
@Service
@RequiredArgsConstructor
public class FileServiceImpl implements FileService {
@Value("${minio.bucket.name}")
@Getter
@Setter
private String bucketName;
private final DbFileService dbFileService;
private final MinioService minioService;
private final ObjectMapper objectMapper;
@Transactional
@Override
public FileResponse create(FileObjDTO fileObjDTO) {
FileObj fileObj = dbFileService.create(fileObjDTO);
minioService.putObjectIntoTheBucket(bucketName,
getInputStreamForFileObjDto(fileObjDTO),
fileObj.getId().toString());
fileObjDTO = objectMapper.fileToFileObjDTO(fileObj);
FileResponse fileResponse = new FileResponse();
fileResponse.setMessage("");
fileResponse.setSuccess(true);
fileResponse.getFileObjPages().add(fileObjDTO);
return fileResponse;
}
//получение ИнпутСтрима для минио.
public InputStream getInputStreamForFileObjDto(FileObjDTO fileObjDTO) {
return new ByteArrayInputStream(Optional.of(fileObjDTO
.getFileData()
.getBytes())
.orElseThrow());
}
@Transactional(readOnly = true)
@Override
public FileResponse filter(FileFilterDto fileFilterDto) {
return dbFileService.filter(fileFilterDto);
}
@Transactional
@Override
public FileResponse update(UUID uuid, FileObjDTO fileObjDTO) {
FileObj fileObj = dbFileService.update(uuid, fileObjDTO);
if (fileObjDTO.getFileData() != null) {
minioService.putObjectIntoTheBucket(bucketName,
getInputStreamForFileObjDto(fileObjDTO),
uuid.toString());
}
fileObjDTO = objectMapper.fileToFileObjDTO(fileObj);
fileObjDTO.setFileData(null);
FileResponse fileResponse = new FileResponse();
fileResponse.setMessage("");
fileResponse.setSuccess(true);
fileResponse.getFileObjPages().add(fileObjDTO);
return fileResponse;
}
@Transactional
@Override
public FileResponse setDeletedStatusForFileByUuid(UUID uuid) {
return dbFileService.deleted(uuid);
}
@Transactional(readOnly = true)
@Override
public FileResponse getFileByUuid(UUID uuid) {
FileObjDTO fileObjDTO = dbFileService.getFileById(uuid);
byte[] file = minioService.getObjectFromBucket(bucketName,
uuid.toString());
fileObjDTO.setFileData(convertArrayByteToString(file));
FileResponse fileResponse = new FileResponse();
fileResponse.setMessage("");
fileResponse.setSuccess(true);
fileResponse.getFileObjPages().add(fileObjDTO);
return fileResponse;
}
/**перевод массива байта в стрингу для минио.
*/
protected String convertArrayByteToString(byte[] arr) {
StringBuffer str = new StringBuffer();
for (int i = 0; i < arr.length; i++) {
str.append((char) arr[i]);
}
return new String(str);
}
}
DbFileServiceImpl:
@Service
@RequiredArgsConstructor
public class DbFileServiceImpl implements DbFileService {
private final EntityManager em;
private final FileRepository fileRepository;
private final FileFilterRepository fileFilterRepository;
private final OwnerRepository ownerRepository;
private final FolderDataRepository folderDataRepository;
@Autowired
private final ObjectMapper objectMapper;
private static final String UNDEFINED_OWNER_NAME = "notNameOwner";
private static final UUID UNDEFINED_OWNER_UUID =
UUID.fromString("00000000-0000-0000-0000-000000000000");
private static final LocalDateTime DEFAULT_DATE = LocalDateTime.of(2000,
1, 1, 0, 0, 0);
private static final LocalDateTime DEFAULT_END_DATE =
LocalDateTime.now().plusDays(1L);
@Override
public FileObj create(FileObjDTO fileObjDTO) {
//fileObjDTO.setFolder("12-02-2021");
FileObj fileObj = objectMapper.fileToFileObj(fileObjDTO);
fileObj.setCreateDateTime(Optional.ofNullable(fileObjDTO.getCreateDateTime()).orElse(LocalDateTime.now()));
if (fileObj.getCreateDateTime().isAfter(LocalDateTime.now())) throw new RuntimeException("Invalid date");
if (fileObj.getCreateDateTime().isBefore(DEFAULT_DATE.minusYears(10))) throw new RuntimeException("Incorrect date");
fileObj.setUpdateDateTime(Optional.ofNullable(fileObjDTO.getUpdateDateTime()).orElse(LocalDateTime.now()));
if (fileObjDTO.getOwnerDto() == null) {
fileObjDTO.setOwnerDto(new OwnerDto());
}
UUID uuidOwner =
Optional.ofNullable(fileObjDTO.getOwnerDto().getUuid())
.orElse(UNDEFINED_OWNER_UUID);
String ownerName = Optional.ofNullable(fileObjDTO.getOwnerDto().getName()).orElse(UNDEFINED_OWNER_NAME);
Owner owner = ownerRepository.findById(uuidOwner).orElseGet(() -> ownerRepository.save(new Owner(uuidOwner, ownerName)));
fileObj.setOwner(owner);
MinioServiceImpl ms = new MinioServiceImpl();
FolderData folderData = new FolderData();
ms.getFolderData());
folderData.setFolderData(ms.getFolderData());
FolderData f =
folderDataRepository.findByName(folderData.getFolderData());
if (f == null) {
FolderData folderData1 =
folderDataRepository.save(folderData);
fileObj.setFolderData(folderData1);
fileRepository.save(fileObj);
}else {
fileObj.setFolderData(f);
fileRepository.save(fileObj);
}
fileObj.setFileData(null);
return fileObj;
}
@Override
public FileResponse filter(FileFilterDto fileFilterDto) {
FileResponse fileResponse = new FileResponse();
PagerDTO pagerDTO = new PagerDTO();
Paginating paginating = fileFilterDto.getPaginating();
Pageable pageable = PageRequest.of(paginating.getNumber(),
paginating.getSize());
if (fileFilterDto.getBeginDateCreate() == null) {
fileFilterDto.setBeginDateCreate(DEFAULT_DATE.toLocalDate());
}
if (fileFilterDto.getEndDateCreate() == null) {
fileFilterDto.setEndDateCreate(DEFAULT_END_DATE.toLocalDate());
}
//flag for native filter
boolean checkDeleted = false;
boolean checkExt = false;
boolean checkOwnerId = false;
//fields for native filter
boolean deleted = false;
LocalDateTimebeginDateTime =
LocalDateTime.of(fileFilterDto.getBeginDateCreate(), LocalTime.MIN);
LocalDateTime endDateTime =
LocalDateTime.of(fileFilterDto.getEndDateCreate(),
LocalTime.MAX.truncatedTo(ChronoUnit.SECONDS));
String ext = "";
UUID ownerUuid = UUID.randomUUID();
if (fileFilterDto.getDeleted() != null) {
deleted = fileFilterDto.getDeleted();
}
if (fileFilterDto.getIdOwner() != null) {
ownerUuid = fileFilterDto.getIdOwner();
}
if (fileFilterDto.getExt() != null) {
ext = fileFilterDto.getExt();
}
if (fileFilterDto.getDeleted() != null) checkDeleted = true;
if (fileFilterDto.getExt() != null) checkExt = true;
if (fileFilterDto.getIdOwner() != null) checkOwnerId = true;
Page<FileObj> pageFilesObj =
fileFilterRepository.findByFilter(checkDeleted, deleted, checkExt, ext,
checkOwnerId, ownerUuid, beginDateTime, endDateTime, pageable);
List<FileObjDTO> fileObjDTOList =
pageFilesObj.getContent().stream().map(objectMapper::fileToFileObjDTO)
.collect(Collectors.toList());
fileResponse.setPagerDTO(pagerDTO);
fileResponse.getPagerDTO().setNext(pageFilesObj.hasNext());
fileResponse.getPagerDTO().setPrev(pageFilesObj.hasPrevious());
fileResponse.getPagerDTO().setSize(pageFilesObj.getSize());
fileResponse.getPagerDTO().setTotal(pageFilesObj.getTotalElements());
fileResponse.setFileObjPages(fileObjDTOList);
fileResponse.setMessage("");
fileResponse.setSuccess(true);
return fileResponse;
}
@Override
public FileObj update(UUID uuid, FileObjDTO fileObjDTO) {
//проверить при несущ
FileObj fileObjToUpdate = fileRepository.getOne(uuid);
if (fileObjDTO.getFileData() != null) {
fileObjToUpdate.setFileData(fileObjDTO.getFileData());
}
if (fileObjDTO.getFileName() != null) {
fileObjToUpdate.setFileName(fileObjDTO.getFileName());
}
if (fileObjDTO.getExt() != null) {
fileObjToUpdate.setExt(fileObjDTO.getExt());
}
if (fileObjDTO.getDeleted() != null) {
fileObjToUpdate.setDeleted(fileObjDTO.getDeleted());
}
if (fileObjDTO.getOwnerDto() != null) {
Owner owner = objectMapper.ownerToOwner(fileObjDTO.getOwnerDto());
fileObjToUpdate.setOwner(owner);
}
fileObjToUpdate.setUpdateDateTime(LocalDateTime.now());
fileRepository.save(fileObjToUpdate);
return fileObjToUpdate;
}
@Override
public FileResponse deleted(UUID uuid) {
FileResponse fileResponse = new FileResponse();
FileObj fileObj = em.getReference(FileObj.class, uuid);
if (!fileObj.isDeleted()) {
fileObj.setUpdateDateTime(LocalDateTime.now());
fileObj.setDeleted(true);
fileRepository.save(fileObj);
fileResponse.setMessage("");
} else {
fileResponse.setMessage("Файл уже помечен на удаление");
}
fileResponse.setSuccess(true);
fileResponse.setFileObjPages(null);
return fileResponse;
}
@Override
public FileObjDTO getFileById(UUID uuid) {
Optional<FileObj> fileObj = fileRepository.findById(uuid);
FileObjDTO fileObjDTO =
objectMapper.fileToFileObjDTO(fileObj.orElseThrow(() -> new
NoSuchElementInMinioException("No such element")));
OwnerDto ownerDto =
objectMapper.ownerToOwnerDto(fileObj.get().getOwner());
fileObjDTO.setOwnerDto(ownerDto);
return fileObjDTO;
}
public static Specification<FileObj> ownerFetch() {
return ((root, criteriaQuery, criteriaBuilder) -> {
root.fetch("owner", JoinType.LEFT);
root.get("owner").get("id");
return null;
});
}
}