Skip to content
Snippets Groups Projects
Unverified Commit 6e591f0e authored by Martin Weise's avatar Martin Weise
Browse files

added more tests

parent 993dc965
No related branches found
No related tags found
3 merge requests!81New stable release,!43Merge dev to master,!27Draft: Resolve "Zenodo Sandbox integration for PID (e.g. DOI)"
...@@ -2,7 +2,9 @@ package at.tuwien.endpoints; ...@@ -2,7 +2,9 @@ package at.tuwien.endpoints;
import at.tuwien.api.zenodo.files.FileResponseDto; import at.tuwien.api.zenodo.files.FileResponseDto;
import at.tuwien.exception.MetadataDatabaseNotFoundException; import at.tuwien.exception.MetadataDatabaseNotFoundException;
import at.tuwien.exception.ZenodoApiException;
import at.tuwien.exception.ZenodoAuthenticationException; import at.tuwien.exception.ZenodoAuthenticationException;
import at.tuwien.exception.ZenodoNotFoundException;
import at.tuwien.service.FileService; import at.tuwien.service.FileService;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -27,7 +29,8 @@ public class FileEndpoint { ...@@ -27,7 +29,8 @@ public class FileEndpoint {
@GetMapping @GetMapping
public List<FileResponseDto> listAll(@Valid @RequestParam("id") Long databaseId, public List<FileResponseDto> listAll(@Valid @RequestParam("id") Long databaseId,
@Valid @RequestParam("tableId") Long tableId) @Valid @RequestParam("tableId") Long tableId)
throws MetadataDatabaseNotFoundException, ZenodoAuthenticationException { throws MetadataDatabaseNotFoundException, ZenodoAuthenticationException, ZenodoApiException,
ZenodoNotFoundException {
return fileService.listAll(databaseId, tableId); return fileService.listAll(databaseId, tableId);
} }
......
...@@ -21,6 +21,7 @@ import java.io.IOException; ...@@ -21,6 +21,7 @@ import java.io.IOException;
import java.util.Optional; import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@SpringBootTest @SpringBootTest
...@@ -91,4 +92,17 @@ public class FileServiceIntegrationTest extends BaseUnitTest { ...@@ -91,4 +92,17 @@ public class FileServiceIntegrationTest extends BaseUnitTest {
assertEquals(FILE_2_SIZE, response.getFilesize()); assertEquals(FILE_2_SIZE, response.getFilesize());
} }
@Test
public void listAll_notFound_fails() {
/* mock */
when(tableRepository.findById(TABLE_1_ID))
.thenReturn(Optional.of(TABLE_1));
/* test */
assertThrows(ZenodoNotFoundException.class, () -> {
fileService.listAll(DATABASE_1_ID, TABLE_1_ID);
});
}
} }
\ No newline at end of file
package at.tuwien.service; package at.tuwien.service;
import at.tuwien.BaseUnitTest; import at.tuwien.BaseUnitTest;
import at.tuwien.api.zenodo.deposit.DepositResponseDto;
import at.tuwien.api.zenodo.files.FileResponseDto; import at.tuwien.api.zenodo.files.FileResponseDto;
import at.tuwien.api.zenodo.files.FileUploadDto; import at.tuwien.api.zenodo.files.FileUploadDto;
import at.tuwien.config.ReadyConfig; import at.tuwien.config.ReadyConfig;
...@@ -23,13 +24,13 @@ import org.springframework.web.client.RestTemplate; ...@@ -23,13 +24,13 @@ import org.springframework.web.client.RestTemplate;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.anyLong;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@SpringBootTest @SpringBootTest
...@@ -96,4 +97,69 @@ public class FileServiceUnitTest extends BaseUnitTest { ...@@ -96,4 +97,69 @@ public class FileServiceUnitTest extends BaseUnitTest {
}); });
} }
@Test
public void createResource_bodyEmpty_fails() throws IOException {
final File file = ResourceUtils.getFile("classpath:csv/testdata.csv");
/* mock */
when(apiTemplate.postForEntity(anyString(), Mockito.<MultiValueMap<String, HttpEntity<?>>>any(),
eq(FileResponseDto.class), eq(DEPOSIT_1_ID), anyString()))
.thenReturn(ResponseEntity.accepted().body(null));
when(tableRepository.findById(TABLE_1_ID))
.thenReturn(Optional.of(TABLE_1));
/* request */
final FileUploadDto request = FileUploadDto.builder()
.name(FILE_1_NAME)
.build();
/* test */
assertThrows(ZenodoApiException.class, () -> {
fileService.createResource(DATABASE_1_ID, TABLE_1_ID, request, file);
});
}
@Test
public void listAll_succeeds() throws MetadataDatabaseNotFoundException, ZenodoApiException,
ZenodoNotFoundException, ZenodoAuthenticationException {
/* mock */
when(apiTemplate.exchange(anyString(), eq(HttpMethod.GET), Mockito.any(), eq(FileResponseDto[].class), eq(DEPOSIT_1_ID), anyString()))
.thenReturn(ResponseEntity.ok().body(new FileResponseDto[]{FILE_1}));
when(tableRepository.findById(TABLE_1_ID))
.thenReturn(Optional.of(TABLE_1));
/* test */
final List<FileResponseDto> response = fileService.listAll(DATABASE_1_ID, TABLE_1_ID);
assertEquals(1, response.size());
}
@Test
public void listAll_noContent_fails() {
/* mock */
when(apiTemplate.exchange(anyString(), eq(HttpMethod.GET), Mockito.any(), eq(FileResponseDto[].class), eq(DEPOSIT_1_ID), anyString()))
.thenReturn(ResponseEntity.ok().body(null));
when(tableRepository.findById(TABLE_1_ID))
.thenReturn(Optional.of(TABLE_1));
/* test */
assertThrows(ZenodoApiException.class, () -> {
fileService.listAll(DATABASE_1_ID, TABLE_1_ID);
});
}
@Test
public void listAll_notFound_fails() {
/* mock */
when(tableRepository.findById(TABLE_1_ID))
.thenReturn(Optional.of(TABLE_1));
/* test */
assertThrows(MetadataDatabaseNotFoundException.class, () -> {
fileService.listAll(DATABASE_1_ID, 9999L);
});
}
} }
\ No newline at end of file
...@@ -15,5 +15,5 @@ public interface FileService { ...@@ -15,5 +15,5 @@ public interface FileService {
throws ZenodoAuthenticationException, ZenodoApiException, ZenodoNotFoundException, throws ZenodoAuthenticationException, ZenodoApiException, ZenodoNotFoundException,
ZenodoFileTooLargeException, MetadataDatabaseNotFoundException; ZenodoFileTooLargeException, MetadataDatabaseNotFoundException;
List<FileResponseDto> listAll(Long databaseId, Long tableId) throws MetadataDatabaseNotFoundException, ZenodoAuthenticationException; List<FileResponseDto> listAll(Long databaseId, Long tableId) throws MetadataDatabaseNotFoundException, ZenodoAuthenticationException, ZenodoNotFoundException, ZenodoApiException;
} }
...@@ -10,10 +10,12 @@ import at.tuwien.repository.jpa.TableRepository; ...@@ -10,10 +10,12 @@ import at.tuwien.repository.jpa.TableRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*; import org.springframework.http.*;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
...@@ -63,13 +65,34 @@ public class ZenodoFileService implements FileService { ...@@ -63,13 +65,34 @@ public class ZenodoFileService implements FileService {
@Override @Override
public List<FileResponseDto> listAll(Long databaseId, Long tableId) throws MetadataDatabaseNotFoundException, public List<FileResponseDto> listAll(Long databaseId, Long tableId) throws MetadataDatabaseNotFoundException,
ZenodoAuthenticationException { ZenodoAuthenticationException, ZenodoNotFoundException, ZenodoApiException {
// final Table table = getTable(tableId); final Table table = getTable(tableId);
// final ResponseEntity<FileResponseDto> response = apiTemplate.postForEntity("/api/deposit/depositions/{deposit_id}/files?access_token={token}", final ResponseEntity<FileResponseDto[]> response;
// addHeaders(null), FileResponseDto.class, table.getDepositId(), zenodoConfig.getApiKey()); try {
return List.of(); response = apiTemplate.exchange("/api/deposit/depositions/{deposit_id}/files?access_token={token}",
HttpMethod.GET, addHeaders(null), FileResponseDto[].class, table.getDepositId(), zenodoConfig.getApiKey());
} catch (HttpClientErrorException.NotFound e) {
throw new ZenodoNotFoundException("Did not find the deposit with this id");
}
if (response.getStatusCode().equals(HttpStatus.UNAUTHORIZED)) {
throw new ZenodoAuthenticationException("Token is missing or invalid.");
}
if (response.getStatusCode().equals(HttpStatus.NOT_FOUND)) {
throw new ZenodoNotFoundException("Did not find the deposit with this id");
}
if (response.getBody() == null) {
throw new ZenodoApiException("Endpoint returned null body");
}
return Arrays.asList(response.getBody());
} }
/**
* Wrapper function to throw error when table with id was not found
*
* @param tableId The table id
* @return The table
* @throws MetadataDatabaseNotFoundException The error
*/
private Table getTable(Long tableId) throws MetadataDatabaseNotFoundException { private Table getTable(Long tableId) throws MetadataDatabaseNotFoundException {
final Optional<Table> table = tableRepository.findById(tableId); final Optional<Table> table = tableRepository.findById(tableId);
if (table.isEmpty()) { if (table.isEmpty()) {
...@@ -78,6 +101,12 @@ public class ZenodoFileService implements FileService { ...@@ -78,6 +101,12 @@ public class ZenodoFileService implements FileService {
return table.get(); return table.get();
} }
/**
* Wrapper to add headers to all non-file upload requests
*
* @param body The request data
* @return The request with headers
*/
private HttpEntity<Object> addHeaders(Object body) { private HttpEntity<Object> addHeaders(Object body) {
final HttpHeaders headers = new HttpHeaders(); final HttpHeaders headers = new HttpHeaders();
headers.setAccept(List.of(MediaType.APPLICATION_JSON)); headers.setAccept(List.of(MediaType.APPLICATION_JSON));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment