Skip to content
Snippets Groups Projects
Commit 70c6e9e9 authored by Martin Weise's avatar Martin Weise
Browse files

Merge branch '234-fix-all-unit-tests' into 232-accept-xml-and-csv-for-pid

parents 72f16b18 85112bf8
Branches
Tags
2 merge requests!106Dev,!101Resolve "Accept xml and csv for pid"
Showing
with 322 additions and 230 deletions
...@@ -20,6 +20,10 @@ spring: ...@@ -20,6 +20,10 @@ spring:
name: authentication-service name: authentication-service
cloud: cloud:
loadbalancer.ribbon.enabled: false loadbalancer.ribbon.enabled: false
rabbitmq:
host: localhost
username: fda
password: fda
mail: mail:
default-encoding: UTF-8 default-encoding: UTF-8
host: "" host: ""
......
...@@ -21,6 +21,10 @@ public abstract class BaseUnitTest { ...@@ -21,6 +21,10 @@ public abstract class BaseUnitTest {
public final static String USER_1_TITLES_BEFORE = "Dr."; public final static String USER_1_TITLES_BEFORE = "Dr.";
public final static String USER_1_TITLES_AFTER = "MSc BSc"; public final static String USER_1_TITLES_AFTER = "MSc BSc";
public final static Boolean USER_1_VERIFIED = true; public final static Boolean USER_1_VERIFIED = true;
public final static Boolean USER_1_THEME_DARK = false;
public final static Instant USER_1_CREATED = Instant.now()
.minus(1, ChronoUnit.DAYS);
public final static Instant USER_1_LAST_MODIFIED = USER_1_CREATED;
public final static User USER_1 = User.builder() public final static User USER_1 = User.builder()
.id(USER_1_ID) .id(USER_1_ID)
...@@ -32,6 +36,9 @@ public abstract class BaseUnitTest { ...@@ -32,6 +36,9 @@ public abstract class BaseUnitTest {
.titlesBefore(USER_1_TITLES_BEFORE) .titlesBefore(USER_1_TITLES_BEFORE)
.titlesAfter(USER_1_TITLES_AFTER) .titlesAfter(USER_1_TITLES_AFTER)
.emailVerified(USER_1_VERIFIED) .emailVerified(USER_1_VERIFIED)
.themeDark(USER_1_THEME_DARK)
.created(USER_1_CREATED)
.lastModified(USER_1_LAST_MODIFIED)
.build(); .build();
public final static Long USER_2_ID = 2L; public final static Long USER_2_ID = 2L;
...@@ -39,6 +46,10 @@ public abstract class BaseUnitTest { ...@@ -39,6 +46,10 @@ public abstract class BaseUnitTest {
public final static String USER_2_USERNAME = "jdoe2"; public final static String USER_2_USERNAME = "jdoe2";
public final static String USER_2_PASSWORD = "s3cr3t1nf0rm4t10n"; public final static String USER_2_PASSWORD = "s3cr3t1nf0rm4t10n";
public final static Boolean USER_2_VERIFIED = false; public final static Boolean USER_2_VERIFIED = false;
public final static Boolean USER_2_THEME_DARK = false;
public final static Instant USER_2_CREATED = Instant.now()
.minus(1, ChronoUnit.DAYS);
public final static Instant USER_2_LAST_MODIFIED = USER_1_CREATED;
public final static User USER_2 = User.builder() public final static User USER_2 = User.builder()
.id(USER_2_ID) .id(USER_2_ID)
...@@ -46,22 +57,27 @@ public abstract class BaseUnitTest { ...@@ -46,22 +57,27 @@ public abstract class BaseUnitTest {
.email(USER_2_EMAIL) .email(USER_2_EMAIL)
.password(USER_2_PASSWORD) .password(USER_2_PASSWORD)
.emailVerified(USER_2_VERIFIED) .emailVerified(USER_2_VERIFIED)
.themeDark(USER_2_THEME_DARK)
.created(USER_2_CREATED)
.lastModified(USER_2_LAST_MODIFIED)
.build(); .build();
public final static Long TOKEN_1_ID = 1L; public final static Long TOKEN_1_ID = 1L;
public final static Boolean TOKEN_1_PROCESSED = true; public final static Boolean TOKEN_1_PROCESSED = false;
public final static String TOKEN_1_TOKEN = "mysecrettokenrandomlygenerated"; public final static String TOKEN_1_TOKEN = "mysecrettokenrandomlygenerated";
public final static Instant TOKEN_1_VALID_TO = Instant.now() public final static Instant TOKEN_1_VALID_TO = Instant.now()
.plus(1, ChronoUnit.DAYS); .plus(1, ChronoUnit.DAYS);
public final static Long TOKEN_2_ID = 2L; public final static Long TOKEN_2_ID = 2L;
public final static Boolean TOKEN_2_PROCESSED = false; public final static Boolean TOKEN_2_PROCESSED = true;
public final static String TOKEN_2_TOKEN = "blahblahblah"; public final static String TOKEN_2_TOKEN = "blahblahblah";
public final static Instant TOKEN_2_VALID_TO = Instant.now() public final static Instant TOKEN_2_VALID_TO = Instant.now()
.plus(1, ChronoUnit.DAYS); .plus(1, ChronoUnit.DAYS);
public final static TimeSecret TOKEN_1 = TimeSecret.builder() public final static TimeSecret TOKEN_1 = TimeSecret.builder()
.id(TOKEN_1_ID) .id(TOKEN_1_ID)
.uid(USER_1_ID)
.user(USER_1)
.token(TOKEN_1_TOKEN) .token(TOKEN_1_TOKEN)
.processed(TOKEN_1_PROCESSED) .processed(TOKEN_1_PROCESSED)
.validTo(TOKEN_1_VALID_TO) .validTo(TOKEN_1_VALID_TO)
...@@ -69,6 +85,8 @@ public abstract class BaseUnitTest { ...@@ -69,6 +85,8 @@ public abstract class BaseUnitTest {
public final static TimeSecret TOKEN_2 = TimeSecret.builder() public final static TimeSecret TOKEN_2 = TimeSecret.builder()
.id(TOKEN_2_ID) .id(TOKEN_2_ID)
.uid(USER_2_ID)
.user(USER_2)
.token(TOKEN_2_TOKEN) .token(TOKEN_2_TOKEN)
.processed(TOKEN_2_PROCESSED) .processed(TOKEN_2_PROCESSED)
.validTo(TOKEN_2_VALID_TO) .validTo(TOKEN_2_VALID_TO)
......
...@@ -2,7 +2,6 @@ package at.tuwien.service; ...@@ -2,7 +2,6 @@ package at.tuwien.service;
import at.tuwien.BaseUnitTest; import at.tuwien.BaseUnitTest;
import at.tuwien.config.ReadyConfig; import at.tuwien.config.ReadyConfig;
import at.tuwien.entities.user.User;
import at.tuwien.exception.UserEmailFailedException; import at.tuwien.exception.UserEmailFailedException;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
...@@ -10,21 +9,24 @@ import org.junit.jupiter.api.extension.ExtendWith; ...@@ -10,21 +9,24 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.mail.MailSendException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.thymeleaf.context.Context; import org.thymeleaf.context.Context;
import java.time.Instant;
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.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doThrow;
@Log4j2 @Log4j2
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
@TestPropertySource(properties = {"spring.mail.username=test"})
@SpringBootTest @SpringBootTest
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
public class MailServiceIntegrationTest extends BaseUnitTest { public class MailServiceUnitTest extends BaseUnitTest {
@MockBean @MockBean
private ReadyConfig readyConfig; private ReadyConfig readyConfig;
...@@ -32,37 +34,32 @@ public class MailServiceIntegrationTest extends BaseUnitTest { ...@@ -32,37 +34,32 @@ public class MailServiceIntegrationTest extends BaseUnitTest {
@Autowired @Autowired
private MailService mailService; private MailService mailService;
@MockBean
private JavaMailSender mailSender;
@Test @Test
public void send_succeeds() throws UserEmailFailedException { public void send_succeeds() throws UserEmailFailedException {
final User user = User.builder()
.username(USER_1_USERNAME)
.password(USER_1_PASSWORD)
.firstname(USER_1_FIRSTNAME)
.lastname(USER_1_LASTNAME)
.email("martinweiseat@gmail.com")
.build();
final Context context = new Context(); final Context context = new Context();
context.setVariable("username", user.getUsername()); context.setVariable("username", USER_1_USERNAME);
/* mock */
/* test */ /* test */
mailService.send(user, "Test", "welcome-mail.txt", context); mailService.send(USER_1, "Test", "welcome-mail.txt", context);
} }
@Test @Test
public void send_fails() { public void send_fails() {
final User user = User.builder()
.username(USER_1_USERNAME)
.password(USER_1_PASSWORD)
.firstname(USER_1_FIRSTNAME)
.lastname(USER_1_LASTNAME)
.email("doesnotexist@gmail.com")
.build();
final Context context = new Context(); final Context context = new Context();
context.setVariable("username", user.getUsername()); context.setVariable("username", USER_1_USERNAME);
/* mock */
doThrow(MailSendException.class).when(mailSender)
.send(any(SimpleMailMessage.class));
/* test */ /* test */
assertThrows(UserEmailFailedException.class, () -> { assertThrows(UserEmailFailedException.class, () -> {
mailService.send(user, "Test", "welcome-mail.txt", context); mailService.send(USER_1, "Test", "welcome-mail.txt", context);
}); });
} }
......
...@@ -5,9 +5,7 @@ import at.tuwien.api.auth.SignupRequestDto; ...@@ -5,9 +5,7 @@ import at.tuwien.api.auth.SignupRequestDto;
import at.tuwien.config.ReadyConfig; import at.tuwien.config.ReadyConfig;
import at.tuwien.entities.user.User; import at.tuwien.entities.user.User;
import at.tuwien.exception.*; import at.tuwien.exception.*;
import at.tuwien.repositories.TimeSecretRepository;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -30,14 +28,6 @@ public class UserServiceIntegrationTest extends BaseUnitTest { ...@@ -30,14 +28,6 @@ public class UserServiceIntegrationTest extends BaseUnitTest {
@Autowired @Autowired
private UserService userService; private UserService userService;
@Autowired
private TimeSecretRepository tokenRepository;
@BeforeEach
public void beforeEach() {
tokenRepository.save(TOKEN_1);
}
@Test @Test
public void create_succeeds() public void create_succeeds()
throws UserNameExistsException, RoleNotFoundException, UserEmailExistsException { throws UserNameExistsException, RoleNotFoundException, UserEmailExistsException {
......
# enable local spring profile
spring.profiles.active=local
# disable discovery # disable discovery
spring.cloud.discovery.enabled = false spring.cloud.discovery.enabled = false
......
...@@ -2,6 +2,7 @@ package at.tuwien.endpoint; ...@@ -2,6 +2,7 @@ package at.tuwien.endpoint;
import at.tuwien.BaseUnitTest; import at.tuwien.BaseUnitTest;
import at.tuwien.api.container.*; import at.tuwien.api.container.*;
import at.tuwien.auth.PermissionEvaluatorImpl;
import at.tuwien.config.ReadyConfig; import at.tuwien.config.ReadyConfig;
import at.tuwien.endpoints.ContainerEndpoint; import at.tuwien.endpoints.ContainerEndpoint;
import at.tuwien.exception.*; import at.tuwien.exception.*;
...@@ -43,6 +44,9 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -43,6 +44,9 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
@MockBean @MockBean
private ImageRepository imageRepository; private ImageRepository imageRepository;
@MockBean
private PermissionEvaluatorImpl permissionEvaluator;
@Autowired @Autowired
private ContainerEndpoint containerEndpoint; private ContainerEndpoint containerEndpoint;
...@@ -59,6 +63,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -59,6 +63,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "RESEARCHER")
public void create_succeeds() throws ImageNotFoundException, DockerClientException, UserNotFoundException, ContainerAlreadyExistsException { public void create_succeeds() throws ImageNotFoundException, DockerClientException, UserNotFoundException, ContainerAlreadyExistsException {
final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder() final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder()
.name(CONTAINER_1_NAME) .name(CONTAINER_1_NAME)
...@@ -166,6 +171,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -166,6 +171,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "RESEARCHER")
public void modify_start_succeeds() throws DockerClientException, ContainerNotFoundException { public void modify_start_succeeds() throws DockerClientException, ContainerNotFoundException {
final ContainerChangeDto request = ContainerChangeDto.builder() final ContainerChangeDto request = ContainerChangeDto.builder()
.action(ContainerActionTypeDto.START) .action(ContainerActionTypeDto.START)
...@@ -180,6 +186,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -180,6 +186,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "RESEARCHER")
public void modify_stop_succeeds() throws DockerClientException, ContainerNotFoundException, ContainerStillRunningException { public void modify_stop_succeeds() throws DockerClientException, ContainerNotFoundException, ContainerStillRunningException {
final ContainerChangeDto request = ContainerChangeDto.builder() final ContainerChangeDto request = ContainerChangeDto.builder()
.action(ContainerActionTypeDto.STOP) .action(ContainerActionTypeDto.STOP)
...@@ -194,6 +201,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -194,6 +201,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "RESEARCHER")
public void modify_startDocker_fails() throws DockerClientException, ContainerNotFoundException { public void modify_startDocker_fails() throws DockerClientException, ContainerNotFoundException {
final ContainerChangeDto request = ContainerChangeDto.builder() final ContainerChangeDto request = ContainerChangeDto.builder()
.action(ContainerActionTypeDto.START) .action(ContainerActionTypeDto.START)
...@@ -208,6 +216,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -208,6 +216,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "RESEARCHER")
public void modify_stopDocker_fails() throws DockerClientException, ContainerNotFoundException { public void modify_stopDocker_fails() throws DockerClientException, ContainerNotFoundException {
final ContainerChangeDto request = ContainerChangeDto.builder() final ContainerChangeDto request = ContainerChangeDto.builder()
.action(ContainerActionTypeDto.STOP) .action(ContainerActionTypeDto.STOP)
...@@ -222,6 +231,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -222,6 +231,7 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "RESEARCHER")
public void modify_stopNoContainer_fails() throws DockerClientException, ContainerNotFoundException { public void modify_stopNoContainer_fails() throws DockerClientException, ContainerNotFoundException {
final ContainerChangeDto request = ContainerChangeDto.builder() final ContainerChangeDto request = ContainerChangeDto.builder()
.action(ContainerActionTypeDto.STOP) .action(ContainerActionTypeDto.STOP)
...@@ -236,11 +246,16 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -236,11 +246,16 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "RESEARCHER")
public void delete_noContainer_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException { public void delete_noContainer_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException {
doThrow(new ContainerNotFoundException("no container")) doThrow(new ContainerNotFoundException("no container"))
.when(containerService) .when(containerService)
.remove(CONTAINER_1_ID); .remove(CONTAINER_1_ID);
doReturn(true)
.when(permissionEvaluator)
.hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
/* test */ /* test */
assertThrows(ContainerNotFoundException.class, () -> { assertThrows(ContainerNotFoundException.class, () -> {
containerEndpoint.delete(CONTAINER_1_ID); containerEndpoint.delete(CONTAINER_1_ID);
...@@ -248,22 +263,32 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -248,22 +263,32 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "RESEARCHER")
public void delete_success() throws DockerClientException, ContainerStillRunningException, ContainerNotFoundException { public void delete_success() throws DockerClientException, ContainerStillRunningException, ContainerNotFoundException {
doNothing() doNothing()
.when(containerService) .when(containerService)
.remove(CONTAINER_1_ID); .remove(CONTAINER_1_ID);
doReturn(true)
.when(permissionEvaluator)
.hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
/* test */ /* test */
final ResponseEntity<?> response = containerEndpoint.delete(CONTAINER_1_ID); final ResponseEntity<?> response = containerEndpoint.delete(CONTAINER_1_ID);
assertEquals(HttpStatus.OK, response.getStatusCode()); assertEquals(HttpStatus.OK, response.getStatusCode());
} }
@Test @Test
@WithMockUser(roles = "RESEARCHER")
public void delete_docker_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException { public void delete_docker_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException {
doThrow(new DockerClientException("docker failed")) doThrow(new DockerClientException("docker failed"))
.when(containerService) .when(containerService)
.remove(CONTAINER_1_ID); .remove(CONTAINER_1_ID);
doReturn(true)
.when(permissionEvaluator)
.hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
/* test */ /* test */
assertThrows(DockerClientException.class, () -> { assertThrows(DockerClientException.class, () -> {
containerEndpoint.delete(CONTAINER_1_ID); containerEndpoint.delete(CONTAINER_1_ID);
...@@ -271,11 +296,16 @@ public class ContainerEndpointUnitTest extends BaseUnitTest { ...@@ -271,11 +296,16 @@ public class ContainerEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "RESEARCHER")
public void delete_dockerStillRunning_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException { public void delete_dockerStillRunning_fails() throws ContainerStillRunningException, DockerClientException, ContainerNotFoundException {
doThrow(new ContainerStillRunningException("container running")) doThrow(new ContainerStillRunningException("container running"))
.when(containerService) .when(containerService)
.remove(CONTAINER_1_ID); .remove(CONTAINER_1_ID);
doReturn(true)
.when(permissionEvaluator)
.hasPermission(any(), eq(CONTAINER_1_ID), eq("DELETE_CONTAINER"));
/* test */ /* test */
assertThrows(ContainerStillRunningException.class, () -> { assertThrows(ContainerStillRunningException.class, () -> {
containerEndpoint.delete(CONTAINER_1_ID); containerEndpoint.delete(CONTAINER_1_ID);
......
...@@ -17,6 +17,7 @@ import org.springframework.boot.test.context.SpringBootTest; ...@@ -17,6 +17,7 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.security.Principal; import java.security.Principal;
...@@ -53,6 +54,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { ...@@ -53,6 +54,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "DEVELOPER")
public void create_succeeds() public void create_succeeds()
throws ImageNotFoundException, DockerClientException, ImageAlreadyExistsException, UserNotFoundException { throws ImageNotFoundException, DockerClientException, ImageAlreadyExistsException, UserNotFoundException {
final ImageCreateDto request = ImageCreateDto.builder() final ImageCreateDto request = ImageCreateDto.builder()
...@@ -75,6 +77,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { ...@@ -75,6 +77,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "DEVELOPER")
public void create_duplicate_fails() public void create_duplicate_fails()
throws ImageNotFoundException, DockerClientException, ImageAlreadyExistsException, UserNotFoundException { throws ImageNotFoundException, DockerClientException, ImageAlreadyExistsException, UserNotFoundException {
final ImageCreateDto request = ImageCreateDto.builder() final ImageCreateDto request = ImageCreateDto.builder()
...@@ -98,6 +101,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { ...@@ -98,6 +101,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "DEVELOPER")
public void create_notExists_fails() public void create_notExists_fails()
throws ImageNotFoundException, DockerClientException, ImageAlreadyExistsException, UserNotFoundException { throws ImageNotFoundException, DockerClientException, ImageAlreadyExistsException, UserNotFoundException {
final ImageCreateDto request = ImageCreateDto.builder() final ImageCreateDto request = ImageCreateDto.builder()
...@@ -148,6 +152,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { ...@@ -148,6 +152,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "DEVELOPER")
public void delete_success() throws ImageNotFoundException, PersistenceException { public void delete_success() throws ImageNotFoundException, PersistenceException {
/* mock */ /* mock */
...@@ -161,6 +166,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { ...@@ -161,6 +166,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "DEVELOPER")
public void delete_fails() throws ImageNotFoundException, PersistenceException { public void delete_fails() throws ImageNotFoundException, PersistenceException {
/* mock */ /* mock */
...@@ -175,6 +181,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { ...@@ -175,6 +181,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "DEVELOPER")
public void update_succeeds() throws ImageNotFoundException, DockerClientException { public void update_succeeds() throws ImageNotFoundException, DockerClientException {
final ImageChangeDto request = ImageChangeDto.builder() final ImageChangeDto request = ImageChangeDto.builder()
.defaultPort(1111) .defaultPort(1111)
...@@ -186,6 +193,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest { ...@@ -186,6 +193,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
} }
@Test @Test
@WithMockUser(roles = "DEVELOPER")
public void update_notFound_fails() throws ImageNotFoundException, DockerClientException { public void update_notFound_fails() throws ImageNotFoundException, DockerClientException {
final ImageChangeDto request = ImageChangeDto.builder() final ImageChangeDto request = ImageChangeDto.builder()
.defaultPort(1111) .defaultPort(1111)
......
...@@ -6,10 +6,12 @@ import com.github.dockerjava.api.model.NetworkSettings; ...@@ -6,10 +6,12 @@ import com.github.dockerjava.api.model.NetworkSettings;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.TestPropertySource;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.Map; import java.util.Map;
@TestPropertySource(locations = "classpath:application.properties")
public abstract class BaseMappingTest { public abstract class BaseMappingTest {
@Configuration @Configuration
......
...@@ -30,6 +30,7 @@ import java.security.Principal; ...@@ -30,6 +30,7 @@ import java.security.Principal;
import java.util.List; import java.util.List;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
@Log4j2 @Log4j2
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
...@@ -40,6 +41,9 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { ...@@ -40,6 +41,9 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
@MockBean @MockBean
private ReadyConfig readyConfig; private ReadyConfig readyConfig;
@MockBean
private UserService userService;
@Autowired @Autowired
private ContainerServiceImpl containerService; private ContainerServiceImpl containerService;
...@@ -151,6 +155,11 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { ...@@ -151,6 +155,11 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
.build(); .build();
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
/* mock */
doReturn(null)
.when(userService)
.findByUsername(USER_1_USERNAME);
/* test */ /* test */
final Container container = containerService.create(request, principal); final Container container = containerService.create(request, principal);
assertEquals(CONTAINER_1_NAME, container.getName()); assertEquals(CONTAINER_1_NAME, container.getName());
...@@ -168,10 +177,13 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { ...@@ -168,10 +177,13 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
/* mock */ /* mock */
doReturn(null)
.when(userService)
.findByUsername(USER_1_USERNAME);
containerService.create(request, principal); containerService.create(request, principal);
/* test */ /* test */
assertThrows(DockerClientException.class, () -> { assertThrows(ContainerAlreadyExistsException.class, () -> {
containerService.create(request, principal); containerService.create(request, principal);
}); });
} }
......
# enable local spring profile
spring.profiles.active=local
# disable discovery # disable discovery
spring.cloud.discovery.enabled = false spring.cloud.discovery.enabled = false
......
...@@ -9,6 +9,7 @@ import at.tuwien.service.impl.RabbitMqServiceImpl; ...@@ -9,6 +9,7 @@ import at.tuwien.service.impl.RabbitMqServiceImpl;
import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.exception.NotModifiedException; import com.github.dockerjava.api.exception.NotModifiedException;
import com.github.dockerjava.api.model.Network; import com.github.dockerjava.api.model.Network;
import com.github.dockerjava.api.model.PortBinding;
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Channel;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.apache.http.auth.BasicUserPrincipal; import org.apache.http.auth.BasicUserPrincipal;
...@@ -20,6 +21,8 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate; ...@@ -20,6 +21,8 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Profile;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.io.IOException; import java.io.IOException;
...@@ -32,6 +35,7 @@ import static at.tuwien.config.DockerConfig.hostConfig; ...@@ -32,6 +35,7 @@ import static at.tuwien.config.DockerConfig.hostConfig;
@Log4j2 @Log4j2
@SpringBootTest @SpringBootTest
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@ActiveProfiles("test-noelastic")
public class AmqpServiceIntegrationTest extends BaseUnitTest { public class AmqpServiceIntegrationTest extends BaseUnitTest {
private static final String AMQP_EXCHANGE = "fda"; private static final String AMQP_EXCHANGE = "fda";
...@@ -72,10 +76,15 @@ public class AmqpServiceIntegrationTest extends BaseUnitTest { ...@@ -72,10 +76,15 @@ public class AmqpServiceIntegrationTest extends BaseUnitTest {
/* create amqp */ /* create amqp */
final CreateContainerResponse request = dockerClient.createContainerCmd(BROKER_IMAGE + ":" + BROKER_TAG) final CreateContainerResponse request = dockerClient.createContainerCmd(BROKER_IMAGE + ":" + BROKER_TAG)
.withHostConfig(hostConfig.withNetworkMode("fda-public")) .withHostConfig(
hostConfig
.withNetworkMode("fda-public")
.withPortBindings(PortBinding.parse("5671:5671"), PortBinding.parse("5672:5672"))
)
.withName(BROKER_NAME) .withName(BROKER_NAME)
.withIpv4Address(BROKER_IP) .withIpv4Address(BROKER_IP)
.withHostName(BROKER_HOSTNAME) .withHostName(BROKER_HOSTNAME)
.withEnv("RABBITMQ_DEFAULT_USER=fda", "RABBITMQ_DEFAULT_PASS=fda")
.exec(); .exec();
dockerClient.startContainerCmd(request.getId()) dockerClient.startContainerCmd(request.getId())
.exec(); .exec();
......
...@@ -17,6 +17,7 @@ import com.github.dockerjava.api.model.Bind; ...@@ -17,6 +17,7 @@ import com.github.dockerjava.api.model.Bind;
import com.github.dockerjava.api.model.ExposedPort; import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.HostConfig; import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.Network; import com.github.dockerjava.api.model.Network;
import com.github.dockerjava.api.model.PortBinding;
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Channel;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.apache.http.auth.BasicUserPrincipal; import org.apache.http.auth.BasicUserPrincipal;
...@@ -31,10 +32,8 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; ...@@ -31,10 +32,8 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.security.Principal; import java.security.Principal;
import java.util.Optional;
import static at.tuwien.config.DockerConfig.*; import static at.tuwien.config.DockerConfig.*;
import static org.junit.jupiter.api.Assertions.*;
@Log4j2 @Log4j2
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
...@@ -92,12 +91,14 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { ...@@ -92,12 +91,14 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
/* create elastic search */ /* create elastic search */
final CreateContainerResponse search = dockerClient.createContainerCmd(SEARCH_IMAGE + ":" + SEARCH_TAG) final CreateContainerResponse search = dockerClient.createContainerCmd(SEARCH_IMAGE + ":" + SEARCH_TAG)
.withHostConfig(hostConfig.withNetworkMode("fda-public")) .withHostConfig(
hostConfig
.withNetworkMode("fda-public")
.withPortBindings(PortBinding.parse("9200:9200"), PortBinding.parse("9300:9300"))
)
.withName(SEARCH_NAME) .withName(SEARCH_NAME)
.withIpv4Address(SEARCH_IP) .withIpv4Address(SEARCH_IP)
.withHostName(SEARCH_HOSTNAME) .withHostName(SEARCH_HOSTNAME)
.withHostConfig(new HostConfig()
.withPortBindings())
.withEnv("discovery.type=single-node", "ES_JAVA_OPTS=-Xms512m -Xmx512m", "logger.level=WARN") .withEnv("discovery.type=single-node", "ES_JAVA_OPTS=-Xms512m -Xmx512m", "logger.level=WARN")
.exec(); .exec();
CONTAINER_SEARCH.setHash(search.getId()); CONTAINER_SEARCH.setHash(search.getId());
......
...@@ -3,14 +3,17 @@ package at.tuwien.service; ...@@ -3,14 +3,17 @@ package at.tuwien.service;
import at.tuwien.BaseUnitTest; import at.tuwien.BaseUnitTest;
import at.tuwien.api.database.DatabaseCreateDto; import at.tuwien.api.database.DatabaseCreateDto;
import at.tuwien.config.ReadyConfig; import at.tuwien.config.ReadyConfig;
import at.tuwien.entities.container.Container;
import at.tuwien.entities.database.Database; import at.tuwien.entities.database.Database;
import at.tuwien.exception.*; import at.tuwien.exception.*;
import at.tuwien.repository.jpa.ContainerRepository; import at.tuwien.repository.jpa.ContainerRepository;
import at.tuwien.repository.jpa.DatabaseRepository; import at.tuwien.repository.jpa.DatabaseRepository;
import at.tuwien.service.impl.MariaDbServiceImpl; import at.tuwien.service.impl.MariaDbServiceImpl;
import at.tuwien.service.impl.RabbitMqServiceImpl;
import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.exception.NotModifiedException; import com.github.dockerjava.api.exception.NotModifiedException;
import com.github.dockerjava.api.model.Network; import com.github.dockerjava.api.model.Network;
import com.rabbitmq.client.Channel;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.apache.http.auth.BasicUserPrincipal; import org.apache.http.auth.BasicUserPrincipal;
import org.hibernate.Session; import org.hibernate.Session;
...@@ -21,9 +24,9 @@ import org.junit.jupiter.api.extension.ExtendWith; ...@@ -21,9 +24,9 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.nio.channels.Channel;
import java.security.Principal; import java.security.Principal;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
...@@ -36,6 +39,7 @@ import static org.mockito.Mockito.*; ...@@ -36,6 +39,7 @@ import static org.mockito.Mockito.*;
@Log4j2 @Log4j2
@SpringBootTest @SpringBootTest
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@ActiveProfiles("test-noelastic")
public class DatabaseServiceUnitTest extends BaseUnitTest { public class DatabaseServiceUnitTest extends BaseUnitTest {
@MockBean @MockBean
...@@ -44,6 +48,9 @@ public class DatabaseServiceUnitTest extends BaseUnitTest { ...@@ -44,6 +48,9 @@ public class DatabaseServiceUnitTest extends BaseUnitTest {
@MockBean @MockBean
private Channel channel; private Channel channel;
@MockBean
private RabbitMqServiceImpl rabbitMqService;
@Autowired @Autowired
private MariaDbServiceImpl databaseService; private MariaDbServiceImpl databaseService;
...@@ -53,137 +60,79 @@ public class DatabaseServiceUnitTest extends BaseUnitTest { ...@@ -53,137 +60,79 @@ public class DatabaseServiceUnitTest extends BaseUnitTest {
@MockBean @MockBean
private ContainerRepository containerRepository; private ContainerRepository containerRepository;
@BeforeAll @Test
public static void beforeAll() throws InterruptedException { public void findAll_succeeds() {
afterAll(); /* mock */
/* create networks */ when(databaseRepository.findAll(CONTAINER_1_ID))
dockerClient.createNetworkCmd() .thenReturn(List.of(DATABASE_1));
.withName("fda-userdb")
.withIpam(new Network.Ipam() /* test */
.withConfig(new Network.Ipam.Config() final List<Database> response = databaseService.findAll(CONTAINER_1_ID);
.withSubnet("172.28.0.0/16"))) assertEquals(1, response.size());
.withEnableIpv6(false) assertEquals(DATABASE_1, response.get(0));
.exec();
dockerClient.createNetworkCmd()
.withName("fda-public")
.withIpam(new Network.Ipam()
.withConfig(new Network.Ipam.Config()
.withSubnet("172.29.0.0/16")))
.withEnableIpv6(false)
.exec();
/* create amqp */
final CreateContainerResponse request = dockerClient.createContainerCmd(BROKER_IMAGE + ":" + BROKER_TAG)
.withHostConfig(hostConfig.withNetworkMode("fda-public"))
.withName(BROKER_NAME)
.withIpv4Address(BROKER_IP)
.withHostName(BROKER_HOSTNAME)
.exec();
dockerClient.startContainerCmd(request.getId())
.exec();
Thread.sleep(12 * 1000);
} }
@AfterAll @Test
public static void afterAll() { public void findById_succeeds() throws DatabaseNotFoundException {
/* stop containers and remove them */ final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
dockerClient.listContainersCmd()
.withShowAll(true) /* mock */
.exec() when(databaseRepository.findById(DATABASE_1_ID))
.forEach(container -> { .thenReturn(Optional.of(DATABASE_1));
log.info("Delete container {}", container.getNames()[0]);
try { final Database response = databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID);
dockerClient.stopContainerCmd(container.getId()).exec();
} catch (NotModifiedException e) { /* test */
// ignore assertEquals(DATABASE_1, response);
} }
dockerClient.removeContainerCmd(container.getId()).exec();
@Test
public void findById_notFound_fails() {
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
/* mock */
when(databaseRepository.findById(DATABASE_1_ID))
.thenReturn(Optional.empty());
/* test */
assertThrows(DatabaseNotFoundException.class, () -> {
databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID);
}); });
}
/* remove networks */ @Test
dockerClient.listNetworksCmd() public void delete_notFound_fails() {
.exec() final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
.stream()
.filter(n -> n.getName().startsWith("fda")) /* mock */
.forEach(network -> { when(containerRepository.findById(CONTAINER_1_ID))
log.info("Delete network {}", network.getName()); .thenReturn(Optional.of(mock(Container.class)));
dockerClient.removeNetworkCmd(network.getId()).exec(); when(databaseRepository.findById(DATABASE_1_ID))
.thenReturn(Optional.empty());
/* test */
assertThrows(DatabaseNotFoundException.class, () -> {
databaseService.delete(CONTAINER_1_ID, DATABASE_1_ID, principal);
});
}
@Test
public void create_notFound_fails() {
final DatabaseCreateDto request = DatabaseCreateDto.builder()
.name(DATABASE_1_NAME)
.build();
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
/* mock */
when(containerRepository.findById(CONTAINER_1_ID))
.thenReturn(Optional.empty());
/* test */
assertThrows(ContainerNotFoundException.class, () -> {
databaseService.create(CONTAINER_1_ID, request, principal);
}); });
} }
// @Test
// public void findAll_succeeds() {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// when(databaseRepository.findAllByPublicAndContainerIdOrMine(CONTAINER_1_ID, USER_1_USERNAME))
// .thenReturn(List.of(DATABASE_1));
//
// /* test */
// final List<Database> response = databaseService.findAll(CONTAINER_1_ID, principal);
// assertEquals(1, response.size());
// assertEquals(DATABASE_1, response.get(0));
// }
//
// @Test
// public void findById_succeeds() throws DatabaseNotFoundException {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// when(databaseRepository.findById(DATABASE_1_ID))
// .thenReturn(Optional.of(DATABASE_1));
//
// final Database response = databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID, principal);
//
// /* test */
// assertEquals(DATABASE_1, response);
// }
//
// @Test
// public void findById_notFound_fails() {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// when(databaseRepository.findById(DATABASE_1_ID))
// .thenReturn(Optional.empty());
//
// /* test */
// assertThrows(DatabaseNotFoundException.class, () -> {
// databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID, principal);
// });
// }
//
// @Test
// public void delete_notFound_fails() {
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// when(databaseRepository.findById(DATABASE_1_ID))
// .thenReturn(Optional.empty());
//
// /* test */
// assertThrows(DatabaseNotFoundException.class, () -> {
// databaseService.delete(CONTAINER_1_ID, DATABASE_1_ID, principal);
// });
// }
//
// @Test
// public void create_notFound_fails() {
// final DatabaseCreateDto request = DatabaseCreateDto.builder()
// .name(DATABASE_1_NAME)
// .build();
// final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
//
// /* mock */
// when(containerRepository.findById(CONTAINER_1_ID))
// .thenReturn(Optional.empty());
//
// /* test */
// assertThrows(ContainerNotFoundException.class, () -> {
// databaseService.create(CONTAINER_1_ID, request, principal);
// });
// }
//
// @Test // @Test
// public void getSession_fails() { // public void getSession_fails() {
// /* no mock needed since unit test */ // /* no mock needed since unit test */
......
# enable local spring profile
spring.profiles.active=local
# disable discovery # disable discovery
spring.cloud.discovery.enabled = false spring.cloud.discovery.enabled = false
...@@ -16,3 +19,5 @@ spring.jpa.show-sql=false ...@@ -16,3 +19,5 @@ spring.jpa.show-sql=false
# disable elasticsearch # disable elasticsearch
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration
spring.rabbitmq.host=fda-broker-service
\ No newline at end of file
app.version: '@project.version@'
spring:
main.banner-mode: off
datasource:
url: jdbc:postgresql://localhost:5432/fda
driver-class-name: org.postgresql.Driver
username: postgres
password: postgres
jpa:
show-sql: false
database-platform: org.hibernate.dialect.PostgreSQLDialect
hibernate:
ddl-auto: validate
open-in-view: false
properties:
hibernate:
jdbc:
time_zone: UTC
application:
name: authentication-service
cloud:
loadbalancer.ribbon.enabled: false
server.port: 9096
logging:
pattern.console: "%d %highlight(%-5level) %msg%n"
level:
root: warn
at.tuwien.: debug
at.tuwien.auth.UserPermissionEvaluator: trace
org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug
eureka:
instance.hostname: authentication-service
client.serviceUrl.defaultZone: http://localhost:9090/eureka/
fda:
ready.path: ./ready
website: localhost:3000
gateway.endpoint: http://localhost:9095
\ No newline at end of file
...@@ -11,11 +11,13 @@ import at.tuwien.entities.database.Database; ...@@ -11,11 +11,13 @@ import at.tuwien.entities.database.Database;
import at.tuwien.entities.database.table.Table; import at.tuwien.entities.database.table.Table;
import at.tuwien.entities.identifier.Creator; import at.tuwien.entities.identifier.Creator;
import at.tuwien.entities.identifier.Identifier; import at.tuwien.entities.identifier.Identifier;
import at.tuwien.entities.identifier.IdentifierType;
import at.tuwien.entities.identifier.VisibilityType; import at.tuwien.entities.identifier.VisibilityType;
import at.tuwien.entities.user.User; import at.tuwien.entities.user.User;
import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.TestPropertySource;
import java.time.Instant; import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -27,12 +29,19 @@ public abstract class BaseUnitTest { ...@@ -27,12 +29,19 @@ public abstract class BaseUnitTest {
public final static String USER_1_PASSWORD = "junit"; public final static String USER_1_PASSWORD = "junit";
public final static String USER_1_EMAIL = "junit@example.com"; public final static String USER_1_EMAIL = "junit@example.com";
public final static Boolean USER_1_EMAIL_VERIFIED = true; public final static Boolean USER_1_EMAIL_VERIFIED = true;
public final static Boolean USER_1_THEME_DARK = false;
public final static Instant USER_1_CREATED = Instant.now()
.minus(1, ChronoUnit.DAYS);
public final static Instant USER_1_LAST_MODIFIED = USER_1_CREATED;
public final static User USER_1 = User.builder() public final static User USER_1 = User.builder()
.username(USER_1_USERNAME) .username(USER_1_USERNAME)
.password(USER_1_PASSWORD) .password(USER_1_PASSWORD)
.email(USER_1_EMAIL) .email(USER_1_EMAIL)
.emailVerified(USER_1_EMAIL_VERIFIED) .emailVerified(USER_1_EMAIL_VERIFIED)
.themeDark(USER_1_THEME_DARK)
.created(USER_1_CREATED)
.lastModified(USER_1_LAST_MODIFIED)
.build(); .build();
public final static Long DATABASE_1_ID = 1L; public final static Long DATABASE_1_ID = 1L;
...@@ -45,7 +54,7 @@ public abstract class BaseUnitTest { ...@@ -45,7 +54,7 @@ public abstract class BaseUnitTest {
public final static String DATABASE_2_NAME = "Test Database 2"; public final static String DATABASE_2_NAME = "Test Database 2";
public final static String DATABASE_2_INTERNAL_NAME = "test_database_2"; public final static String DATABASE_2_INTERNAL_NAME = "test_database_2";
public final static String DATABASE_2_EXCHANGE = "fda." + DATABASE_2_INTERNAL_NAME; public final static String DATABASE_2_EXCHANGE = "fda." + DATABASE_2_INTERNAL_NAME;
public final static Boolean DATABASE_2_PUBLIC = true; public final static Boolean DATABASE_2_PUBLIC = false;
public final static Long TABLE_1_ID = 1L; public final static Long TABLE_1_ID = 1L;
public final static String TABLE_1_NAME = "Rainfall"; public final static String TABLE_1_NAME = "Rainfall";
...@@ -236,6 +245,7 @@ public abstract class BaseUnitTest { ...@@ -236,6 +245,7 @@ public abstract class BaseUnitTest {
public final static Long IDENTIFIER_1_ID = 1L; public final static Long IDENTIFIER_1_ID = 1L;
public final static Long IDENTIFIER_1_QUERY_ID = QUERY_1_ID; public final static Long IDENTIFIER_1_QUERY_ID = QUERY_1_ID;
public final static Long IDENTIFIER_1_CONTAINER_ID = CONTAINER_1_ID;
public final static Long IDENTIFIER_1_DATABASE_ID = DATABASE_1_ID; public final static Long IDENTIFIER_1_DATABASE_ID = DATABASE_1_ID;
public final static String IDENTIFIER_1_DESCRIPTION = "Selecting all from the weather Australia table"; public final static String IDENTIFIER_1_DESCRIPTION = "Selecting all from the weather Australia table";
public final static String IDENTIFIER_1_TITLE = "Australia weather data"; public final static String IDENTIFIER_1_TITLE = "Australia weather data";
...@@ -251,15 +261,19 @@ public abstract class BaseUnitTest { ...@@ -251,15 +261,19 @@ public abstract class BaseUnitTest {
public final static String IDENTIFIER_1_QUERY = "SELECT `id` FROM `foobar`"; public final static String IDENTIFIER_1_QUERY = "SELECT `id` FROM `foobar`";
public final static String IDENTIFIER_1_NORMALIZED = "SELECT `id` FROM `foobar`"; public final static String IDENTIFIER_1_NORMALIZED = "SELECT `id` FROM `foobar`";
public final static Long IDENTIFIER_1_RESULT_NUMBER = 2L; public final static Long IDENTIFIER_1_RESULT_NUMBER = 2L;
public final static String IDENTIFIER_1_PUBLISHER = "Australian Government";
public final static IdentifierType IDENTIFIER_1_TYPE = IdentifierType.SUBSET;
public final static IdentifierTypeDto IDENTIFIER_1_TYPE_DTO = IdentifierTypeDto.SUBSET;
public final static Long IDENTIFIER_2_ID = 2L; public final static Long IDENTIFIER_2_ID = 2L;
public final static Long IDENTIFIER_2_QUERY_ID = QUERY_2_ID; public final static Long IDENTIFIER_2_QUERY_ID = QUERY_2_ID;
public final static Long IDENTIFIER_2_DATABASE_ID = DATABASE_1_ID; public final static Long IDENTIFIER_2_CONTAINER_ID = CONTAINER_2_ID;
public final static Long IDENTIFIER_2_DATABASE_ID = DATABASE_2_ID;
public final static String IDENTIFIER_2_DESCRIPTION = "Selecting all from the weather Austria table"; public final static String IDENTIFIER_2_DESCRIPTION = "Selecting all from the weather Austria table";
public final static String IDENTIFIER_2_TITLE = "Austria weather data"; public final static String IDENTIFIER_2_TITLE = "Austria weather data";
public final static String IDENTIFIER_2_DOI = "10.1000/183"; public final static String IDENTIFIER_2_DOI = "10.1000/183";
public final static VisibilityType IDENTIFIER_2_VISIBILITY = VisibilityType.EVERYONE; public final static VisibilityType IDENTIFIER_2_VISIBILITY = VisibilityType.SELF;
public final static VisibilityTypeDto IDENTIFIER_2_VISIBILITY_DTO = VisibilityTypeDto.EVERYONE; public final static VisibilityTypeDto IDENTIFIER_2_VISIBILITY_DTO = VisibilityTypeDto.SELF;
public final static Instant IDENTIFIER_2_CREATED = Instant.ofEpochSecond(1641588352); public final static Instant IDENTIFIER_2_CREATED = Instant.ofEpochSecond(1641588352);
public final static Instant IDENTIFIER_2_MODIFIED = Instant.ofEpochSecond(1541588352); public final static Instant IDENTIFIER_2_MODIFIED = Instant.ofEpochSecond(1541588352);
public final static Instant IDENTIFIER_2_EXECUTION = Instant.ofEpochSecond(1541588352); public final static Instant IDENTIFIER_2_EXECUTION = Instant.ofEpochSecond(1541588352);
...@@ -271,11 +285,14 @@ public abstract class BaseUnitTest { ...@@ -271,11 +285,14 @@ public abstract class BaseUnitTest {
public final static String IDENTIFIER_2_QUERY = "SELECT `id` FROM `foobar`"; public final static String IDENTIFIER_2_QUERY = "SELECT `id` FROM `foobar`";
public final static String IDENTIFIER_2_NORMALIZED = "SELECT `id` FROM `foobar`"; public final static String IDENTIFIER_2_NORMALIZED = "SELECT `id` FROM `foobar`";
public final static Long IDENTIFIER_2_RESULT_NUMBER = 2L; public final static Long IDENTIFIER_2_RESULT_NUMBER = 2L;
public final static String IDENTIFIER_2_PUBLISHER = "Austrian Government";
public final static IdentifierType IDENTIFIER_2_TYPE = IdentifierType.SUBSET;
public final static IdentifierTypeDto IDENTIFIER_2_TYPE_DTO = IdentifierTypeDto.SUBSET;
public final static Identifier IDENTIFIER_1 = Identifier.builder() public final static Identifier IDENTIFIER_1 = Identifier.builder()
.id(IDENTIFIER_1_ID) .id(IDENTIFIER_1_ID)
.containerId(CONTAINER_1_ID) .containerId(IDENTIFIER_1_CONTAINER_ID)
.databaseId(DATABASE_1_ID) .databaseId(IDENTIFIER_1_DATABASE_ID)
.queryId(IDENTIFIER_1_QUERY_ID) .queryId(IDENTIFIER_1_QUERY_ID)
.description(IDENTIFIER_1_DESCRIPTION) .description(IDENTIFIER_1_DESCRIPTION)
.title(IDENTIFIER_1_TITLE) .title(IDENTIFIER_1_TITLE)
...@@ -290,12 +307,14 @@ public abstract class BaseUnitTest { ...@@ -290,12 +307,14 @@ public abstract class BaseUnitTest {
.query(IDENTIFIER_1_QUERY) .query(IDENTIFIER_1_QUERY)
.queryNormalized(IDENTIFIER_1_NORMALIZED) .queryNormalized(IDENTIFIER_1_NORMALIZED)
.resultNumber(IDENTIFIER_1_RESULT_NUMBER) .resultNumber(IDENTIFIER_1_RESULT_NUMBER)
.publisher(IDENTIFIER_1_PUBLISHER)
.type(IDENTIFIER_1_TYPE)
.build(); .build();
public final static Identifier IDENTIFIER_2 = Identifier.builder() public final static Identifier IDENTIFIER_2 = Identifier.builder()
.id(IDENTIFIER_2_ID) .id(IDENTIFIER_2_ID)
.containerId(CONTAINER_2_ID) .containerId(IDENTIFIER_2_CONTAINER_ID)
.databaseId(DATABASE_2_ID) .databaseId(IDENTIFIER_2_DATABASE_ID)
.queryId(IDENTIFIER_2_QUERY_ID) .queryId(IDENTIFIER_2_QUERY_ID)
.description(IDENTIFIER_2_DESCRIPTION) .description(IDENTIFIER_2_DESCRIPTION)
.title(IDENTIFIER_2_TITLE) .title(IDENTIFIER_2_TITLE)
...@@ -312,6 +331,8 @@ public abstract class BaseUnitTest { ...@@ -312,6 +331,8 @@ public abstract class BaseUnitTest {
.query(IDENTIFIER_2_QUERY) .query(IDENTIFIER_2_QUERY)
.queryNormalized(IDENTIFIER_2_NORMALIZED) .queryNormalized(IDENTIFIER_2_NORMALIZED)
.resultNumber(IDENTIFIER_2_RESULT_NUMBER) .resultNumber(IDENTIFIER_2_RESULT_NUMBER)
.publisher(IDENTIFIER_2_PUBLISHER)
.type(IDENTIFIER_2_TYPE)
.build(); .build();
public final static Creator CREATOR_1 = Creator.builder() public final static Creator CREATOR_1 = Creator.builder()
...@@ -401,12 +422,16 @@ public abstract class BaseUnitTest { ...@@ -401,12 +422,16 @@ public abstract class BaseUnitTest {
public final static IdentifierCreateDto IDENTIFIER_1_DTO_REQUEST = IdentifierCreateDto.builder() public final static IdentifierCreateDto IDENTIFIER_1_DTO_REQUEST = IdentifierCreateDto.builder()
.qid(IDENTIFIER_1_QUERY_ID) .qid(IDENTIFIER_1_QUERY_ID)
.cid(IDENTIFIER_1_CONTAINER_ID)
.dbid(IDENTIFIER_1_DATABASE_ID)
.description(IDENTIFIER_1_DESCRIPTION) .description(IDENTIFIER_1_DESCRIPTION)
.title(IDENTIFIER_1_TITLE) .title(IDENTIFIER_1_TITLE)
.doi(IDENTIFIER_1_DOI) .doi(IDENTIFIER_1_DOI)
.visibility(IDENTIFIER_1_VISIBILITY_DTO) .visibility(IDENTIFIER_1_VISIBILITY_DTO)
.publicationYear(IDENTIFIER_1_PUBLICATION_YEAR) .publicationYear(IDENTIFIER_1_PUBLICATION_YEAR)
.creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO)) .creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO))
.publisher(IDENTIFIER_1_PUBLISHER)
.type(IDENTIFIER_1_TYPE_DTO)
.build(); .build();
public final static String RELATED_IDENTIFIER_1_VALUE = "10.5281/zenodo.6637333"; public final static String RELATED_IDENTIFIER_1_VALUE = "10.5281/zenodo.6637333";
...@@ -421,6 +446,8 @@ public abstract class BaseUnitTest { ...@@ -421,6 +446,8 @@ public abstract class BaseUnitTest {
public final static IdentifierCreateDto IDENTIFIER_2_DTO_REQUEST = IdentifierCreateDto.builder() public final static IdentifierCreateDto IDENTIFIER_2_DTO_REQUEST = IdentifierCreateDto.builder()
.qid(IDENTIFIER_2_QUERY_ID) .qid(IDENTIFIER_2_QUERY_ID)
.cid(IDENTIFIER_2_CONTAINER_ID)
.dbid(IDENTIFIER_2_DATABASE_ID)
.description(IDENTIFIER_2_DESCRIPTION) .description(IDENTIFIER_2_DESCRIPTION)
.title(IDENTIFIER_2_TITLE) .title(IDENTIFIER_2_TITLE)
.doi(IDENTIFIER_2_DOI) .doi(IDENTIFIER_2_DOI)
...@@ -430,6 +457,8 @@ public abstract class BaseUnitTest { ...@@ -430,6 +457,8 @@ public abstract class BaseUnitTest {
.publicationMonth(IDENTIFIER_2_PUBLICATION_MONTH) .publicationMonth(IDENTIFIER_2_PUBLICATION_MONTH)
.publicationYear(IDENTIFIER_2_PUBLICATION_YEAR) .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR)
.creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO)) .creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO))
.publisher(IDENTIFIER_2_PUBLISHER)
.type(IDENTIFIER_2_TYPE_DTO)
.build(); .build();
public final static String COLUMN_1_INTERNAL_NAME = "id"; public final static String COLUMN_1_INTERNAL_NAME = "id";
......
...@@ -67,6 +67,9 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { ...@@ -67,6 +67,9 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
creatorRepository.save(CREATOR_1); creatorRepository.save(CREATOR_1);
creatorRepository.save(CREATOR_2); creatorRepository.save(CREATOR_2);
IDENTIFIER_1.setCreators(List.of(CREATOR_1, CREATOR_2)); IDENTIFIER_1.setCreators(List.of(CREATOR_1, CREATOR_2));
identifierRepository.save(IDENTIFIER_1);
containerRepository.save(CONTAINER_2);
databaseRepository.save(DATABASE_2);
} }
@Test @Test
...@@ -76,6 +79,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { ...@@ -76,6 +79,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
/* mock */ /* mock */
identifierRepository.save(Identifier.builder() identifierRepository.save(Identifier.builder()
.id(IDENTIFIER_2_ID) .id(IDENTIFIER_2_ID)
.containerId(IDENTIFIER_2_CONTAINER_ID)
.queryId(IDENTIFIER_2_QUERY_ID) .queryId(IDENTIFIER_2_QUERY_ID)
.databaseId(IDENTIFIER_2_DATABASE_ID) .databaseId(IDENTIFIER_2_DATABASE_ID)
.description(IDENTIFIER_2_DESCRIPTION) .description(IDENTIFIER_2_DESCRIPTION)
...@@ -84,8 +88,10 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { ...@@ -84,8 +88,10 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
.visibility(IDENTIFIER_2_VISIBILITY) .visibility(IDENTIFIER_2_VISIBILITY)
.created(IDENTIFIER_2_CREATED) .created(IDENTIFIER_2_CREATED)
.lastModified(IDENTIFIER_2_MODIFIED) .lastModified(IDENTIFIER_2_MODIFIED)
.creators(List.of(CREATOR_1, CREATOR_2)) .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR)
.deleted(Instant.now().minus(4, ChronoUnit.MINUTES)) .deleted(Instant.now().minus(4, ChronoUnit.MINUTES))
.publisher(IDENTIFIER_2_PUBLISHER)
.type(IDENTIFIER_2_TYPE)
.build()); .build());
/* test */ /* test */
...@@ -100,6 +106,8 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { ...@@ -100,6 +106,8 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
assertEquals(2, response.get(0).getCreators().size()); assertEquals(2, response.get(0).getCreators().size());
assertEquals(CREATOR_1_ID, response.get(0).getCreators().get(0).getId()); assertEquals(CREATOR_1_ID, response.get(0).getCreators().get(0).getId());
assertEquals(CREATOR_2_ID, response.get(0).getCreators().get(1).getId()); assertEquals(CREATOR_2_ID, response.get(0).getCreators().get(1).getId());
assertEquals(IDENTIFIER_1_PUBLISHER, response.get(0).getPublisher());
assertEquals(IDENTIFIER_1_TYPE, response.get(0).getType());
} }
@Test @Test
...@@ -110,7 +118,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { ...@@ -110,7 +118,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
final String bearer = "Bearer abcxyz"; final String bearer = "Bearer abcxyz";
/* mock */ /* mock */
when(queryServiceGateway.find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer)) when(queryServiceGateway.find(CONTAINER_2_ID, DATABASE_2_ID, IDENTIFIER_2_DTO_REQUEST, bearer))
.thenReturn(QUERY_2_DTO); .thenReturn(QUERY_2_DTO);
/* test */ /* test */
...@@ -126,13 +134,17 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { ...@@ -126,13 +134,17 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
@Test @Test
public void create_queryNotExists_fails() throws QueryNotFoundException, RemoteUnavailableException { public void create_queryNotExists_fails() throws QueryNotFoundException, RemoteUnavailableException {
final IdentifierCreateDto request = IdentifierCreateDto.builder() IdentifierCreateDto request = IdentifierCreateDto.builder()
.qid(IDENTIFIER_2_QUERY_ID) .qid(IDENTIFIER_2_QUERY_ID)
.cid(IDENTIFIER_2_CONTAINER_ID)
.dbid(IDENTIFIER_2_DATABASE_ID)
.description(IDENTIFIER_2_DESCRIPTION) .description(IDENTIFIER_2_DESCRIPTION)
.title(IDENTIFIER_2_TITLE) .title(IDENTIFIER_2_TITLE)
.doi(IDENTIFIER_2_DOI) .doi(IDENTIFIER_2_DOI)
.visibility(IDENTIFIER_2_VISIBILITY_DTO) .visibility(IDENTIFIER_2_VISIBILITY_DTO)
.creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO)) .publicationYear(IDENTIFIER_2_PUBLICATION_YEAR)
.publisher(IDENTIFIER_2_PUBLISHER)
.type(IDENTIFIER_2_TYPE_DTO)
.build(); .build();
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
final String bearer = "Bearer abcxyz"; final String bearer = "Bearer abcxyz";
...@@ -140,7 +152,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { ...@@ -140,7 +152,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
/* mock */ /* mock */
doThrow(QueryNotFoundException.class) doThrow(QueryNotFoundException.class)
.when(queryServiceGateway) .when(queryServiceGateway)
.find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer); .find(CONTAINER_2_ID, DATABASE_2_ID, request, bearer);
/* test */ /* test */
assertThrows(QueryNotFoundException.class, () -> { assertThrows(QueryNotFoundException.class, () -> {
...@@ -149,21 +161,23 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { ...@@ -149,21 +161,23 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
} }
@Test @Test
public void create_identifierAlreadyExists_fails() throws QueryNotFoundException, RemoteUnavailableException { public void create_identifierAlreadyExists_fails() {
final IdentifierCreateDto request = IdentifierCreateDto.builder() IdentifierCreateDto request = IdentifierCreateDto.builder()
.qid(IDENTIFIER_1_QUERY_ID) .qid(IDENTIFIER_1_QUERY_ID)
.description(IDENTIFIER_2_DESCRIPTION) .cid(IDENTIFIER_1_CONTAINER_ID)
.title(IDENTIFIER_2_TITLE) .dbid(IDENTIFIER_1_DATABASE_ID)
.doi(IDENTIFIER_2_DOI) .description(IDENTIFIER_1_DESCRIPTION)
.visibility(IDENTIFIER_2_VISIBILITY_DTO) .title(IDENTIFIER_1_TITLE)
.creators(List.of(CREATOR_1_CREATE_DTO, CREATOR_2_CREATE_DTO)) .doi(IDENTIFIER_1_DOI)
.visibility(IDENTIFIER_1_VISIBILITY_DTO)
.publicationYear(IDENTIFIER_1_PUBLICATION_YEAR)
.publisher(IDENTIFIER_1_PUBLISHER)
.type(IDENTIFIER_1_TYPE_DTO)
.build(); .build();
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
final String bearer = "Bearer abcxyz"; final String bearer = "Bearer abcxyz";
/* mock */ /* mock */
when(queryServiceGateway.find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_1_DTO_REQUEST, bearer))
.thenReturn(QUERY_1_DTO);
/* test */ /* test */
assertThrows(IdentifierAlreadyExistsException.class, () -> { assertThrows(IdentifierAlreadyExistsException.class, () -> {
...@@ -179,7 +193,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { ...@@ -179,7 +193,7 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
/* mock */ /* mock */
doThrow(RemoteUnavailableException.class) doThrow(RemoteUnavailableException.class)
.when(queryServiceGateway) .when(queryServiceGateway)
.find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer); .find(CONTAINER_2_ID, DATABASE_2_ID, IDENTIFIER_2_DTO_REQUEST, bearer);
/* test */ /* test */
assertThrows(RemoteUnavailableException.class, () -> { assertThrows(RemoteUnavailableException.class, () -> {
...@@ -236,16 +250,18 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { ...@@ -236,16 +250,18 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
@Test @Test
public void publish_everyone_succeeds() throws IdentifierAlreadyPublishedException, IdentifierNotFoundException { public void publish_everyone_succeeds() throws IdentifierAlreadyPublishedException, IdentifierNotFoundException {
identifierRepository.save(IDENTIFIER_2);
/* test */ /* test */
identifierService.publish(IDENTIFIER_1_ID, VisibilityTypeDto.EVERYONE); identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.EVERYONE);
} }
@Test @Test
public void publish_trusted_succeeds() throws IdentifierAlreadyPublishedException, IdentifierNotFoundException { public void publish_trusted_succeeds() throws IdentifierAlreadyPublishedException, IdentifierNotFoundException {
identifierRepository.save(IDENTIFIER_2);
/* test */ /* test */
identifierService.publish(IDENTIFIER_1_ID, VisibilityTypeDto.TRUSTED); identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.TRUSTED);
} }
@Test @Test
...@@ -261,42 +277,13 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { ...@@ -261,42 +277,13 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
@Transactional @Transactional
public void publish_alreadyPublished_fails() public void publish_alreadyPublished_fails()
throws IdentifierAlreadyPublishedException, IdentifierNotFoundException { throws IdentifierAlreadyPublishedException, IdentifierNotFoundException {
identifierRepository.save(IDENTIFIER_2);
/* mock */ /* mock */
identifierService.publish(IDENTIFIER_1_ID, VisibilityTypeDto.EVERYONE);
/* test */
assertThrows(IdentifierAlreadyPublishedException.class, () -> {
identifierService.publish(IDENTIFIER_1_ID, VisibilityTypeDto.EVERYONE);
});
}
@Test
public void publish_queryNotFound_fails() throws QueryNotFoundException, RemoteUnavailableException {
final String bearer = "Bearer abcxyz";
/* mock */
doThrow(QueryNotFoundException.class)
.when(queryServiceGateway)
.find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer);
/* test */
assertThrows(IdentifierNotFoundException.class, () -> {
identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.EVERYONE); identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.EVERYONE);
});
}
@Test
public void publish_serviceUnavailable_fails() throws QueryNotFoundException, RemoteUnavailableException {
final String bearer = "Bearer abcxyz";
/* mock */
doThrow(RemoteUnavailableException.class)
.when(queryServiceGateway)
.find(CONTAINER_1_ID, DATABASE_1_ID, IDENTIFIER_2_DTO_REQUEST, bearer);
/* test */ /* test */
assertThrows(IdentifierNotFoundException.class, () -> { assertThrows(IdentifierAlreadyPublishedException.class, () -> {
identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.EVERYONE); identifierService.publish(IDENTIFIER_2_ID, VisibilityTypeDto.EVERYONE);
}); });
} }
......
...@@ -3,6 +3,7 @@ package at.tuwien.service; ...@@ -3,6 +3,7 @@ package at.tuwien.service;
import at.tuwien.BaseUnitTest; import at.tuwien.BaseUnitTest;
import at.tuwien.api.database.query.QueryDto; import at.tuwien.api.database.query.QueryDto;
import at.tuwien.api.identifier.IdentifierCreateDto; import at.tuwien.api.identifier.IdentifierCreateDto;
import at.tuwien.api.identifier.IdentifierTypeDto;
import at.tuwien.api.identifier.VisibilityTypeDto; import at.tuwien.api.identifier.VisibilityTypeDto;
import at.tuwien.entities.identifier.Identifier; import at.tuwien.entities.identifier.Identifier;
import at.tuwien.exception.*; import at.tuwien.exception.*;
...@@ -56,7 +57,7 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { ...@@ -56,7 +57,7 @@ public class IdentifierServiceUnitTest extends BaseUnitTest {
.thenReturn(List.of(IDENTIFIER_1)); .thenReturn(List.of(IDENTIFIER_1));
/* test */ /* test */
final List<Identifier> response = identifierService.findAll(CONTAINER_1_ID, DATABASE_1_ID); final List<Identifier> response = identifierService.findAll(DATABASE_1_ID, null);
assertEquals(1, response.size()); assertEquals(1, response.size());
assertEquals(IDENTIFIER_1, response.get(0)); assertEquals(IDENTIFIER_1, response.get(0));
} }
...@@ -106,6 +107,9 @@ public class IdentifierServiceUnitTest extends BaseUnitTest { ...@@ -106,6 +107,9 @@ public class IdentifierServiceUnitTest extends BaseUnitTest {
throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException, throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException,
QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException { QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException {
final IdentifierCreateDto request = IdentifierCreateDto.builder() final IdentifierCreateDto request = IdentifierCreateDto.builder()
.cid(CONTAINER_1_ID)
.dbid(DATABASE_1_ID)
.type(IdentifierTypeDto.SUBSET)
.qid(IDENTIFIER_1_QUERY_ID) .qid(IDENTIFIER_1_QUERY_ID)
.description(IDENTIFIER_1_DESCRIPTION) .description(IDENTIFIER_1_DESCRIPTION)
.title(IDENTIFIER_1_TITLE) .title(IDENTIFIER_1_TITLE)
......
# enable local spring profile
spring.profiles.active=local
# disable discovery # disable discovery
spring.cloud.discovery.enabled = false spring.cloud.discovery.enabled = false
......
...@@ -34,6 +34,7 @@ public class QueryDto { ...@@ -34,6 +34,7 @@ public class QueryDto {
private Long dbid; private Long dbid;
@JsonIgnore @JsonIgnore
@EqualsAndHashCode.Exclude
@NotNull(message = "created by is required") @NotNull(message = "created by is required")
private Long createdBy; private Long createdBy;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment