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

Improved the mapping but still not fully working

parent 9b1e0157
Branches
Tags
2 merge requests!81New stable release,!80Multiple features connected with user management and ownership of databases
......@@ -12,6 +12,7 @@ import at.tuwien.entities.database.table.Table;
import at.tuwien.entities.identifier.Creator;
import at.tuwien.entities.identifier.Identifier;
import at.tuwien.entities.identifier.VisibilityType;
import at.tuwien.entities.user.User;
import org.springframework.test.context.TestPropertySource;
import java.time.Instant;
......@@ -23,26 +24,12 @@ import java.util.Map;
public abstract class BaseUnitTest {
public final static String USER_1_USERNAME = "junit";
public final static String USER_1_PASSWORD = "junit";
public final static String GATEWAY_SERVICE_REPOSITORY = "fda-gateway-service:latest";
public final static String GATEWAY_SERVICE_INTERNAL_NAME = "fda-gateway-service";
public final static String GATEWAY_SERVICE_IP = "172.29.0.4";
public final static String[] GATEWAY_SERVICE_ENV = new String[]{"SPRING_PROFILES_ACTIVE=docker"};
public final static String DISCOVERY_SERVICE_REPOSITORY = "fda-discovery-service:latest";
public final static String DISCOVERY_SERVICE_INTERNAL_NAME = "fda-discovery-service";
public final static String DISCOVERY_SERVICE_IP = "172.29.0.5";
public final static String[] DISCOVERY_SERVICE_ENV = new String[]{"SPRING_PROFILES_ACTIVE=docker"};
public final static String QUERY_SERVICE_REPOSITORY = "fda-query-service:latest";
public final static String QUERY_SERVICE_INTERNAL_NAME = "fda-query-service";
public final static String QUERY_SERVICE_IP = "172.29.0.6";
public final static String[] QUERY_SERVICE_ENV = new String[]{"SPRING_PROFILES_ACTIVE=docker"};
public final static String METADATA_DB_REPOSITORY = "fda-metadata-db:latest";
public final static String METADATA_DB_INTERNAL_NAME = "fda-metadata-db";
public final static String METADATA_DB_IP = "172.29.0.7";
public final static String[] METADATA_DB_ENV = new String[]{"POSTGRES_USER=postgres", "POSTGRES_PASSWORD=postgres", "POSTGRES_DB=fda"};
public final static User USER_1 = User.builder()
.username(USER_1_USERNAME)
.password(USER_1_PASSWORD)
.build();
public final static Long DATABASE_1_ID = 1L;
public final static String DATABASE_1_NAME = "Test Database";
......@@ -214,6 +201,7 @@ public abstract class BaseUnitTest {
.internalName(DATABASE_1_INTERNAL_NAME)
.exchange(DATABASE_1_EXCHANGE)
.tables(List.of())
.isPublic(DATABASE_1_PUBLIC)
.build();
public final static Database DATABASE_2 = Database.builder()
......@@ -222,6 +210,7 @@ public abstract class BaseUnitTest {
.internalName(DATABASE_2_INTERNAL_NAME)
.exchange(DATABASE_2_EXCHANGE)
.tables(List.of())
.isPublic(DATABASE_2_PUBLIC)
.build();
public final static Table TABLE_1 = Table.builder()
......
package at.tuwien.service;
import at.tuwien.BaseUnitTest;
import at.tuwien.api.database.query.QueryDto;
import at.tuwien.api.identifier.IdentifierCreateDto;
import at.tuwien.api.identifier.VisibilityTypeDto;
import at.tuwien.entities.identifier.Identifier;
import at.tuwien.exception.IdentifierNotFoundException;
import at.tuwien.exception.IdentifierPublishingNotAllowedException;
import at.tuwien.exception.*;
import at.tuwien.repository.jpa.IdentifierRepository;
import org.apache.http.auth.BasicUserPrincipal;
import org.junit.jupiter.api.Test;
......@@ -13,7 +13,11 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.web.client.RestTemplate;
import java.security.Principal;
import java.util.List;
......@@ -21,6 +25,7 @@ import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.when;
......@@ -34,11 +39,20 @@ public class IdentifierServiceUnitTest extends BaseUnitTest {
@MockBean
private IdentifierRepository identifierRepository;
@MockBean
private DatabaseService databaseService;
@MockBean
private RestTemplate restTemplate;
@MockBean
private UserService userService;
@Test
public void findAll_succeeds() {
/* mock */
when(identifierRepository.findAll())
when(identifierRepository.findByDbid(DATABASE_1_ID))
.thenReturn(List.of(IDENTIFIER_1));
/* test */
......@@ -88,7 +102,9 @@ public class IdentifierServiceUnitTest extends BaseUnitTest {
}
@Test
public void create_notSelfVisible_fails() {
public void create_succeeds()
throws DatabaseNotFoundException, UserNotFoundException, IdentifierAlreadyExistsException,
QueryNotFoundException, IdentifierPublishingNotAllowedException, RemoteUnavailableException {
final IdentifierCreateDto request = IdentifierCreateDto.builder()
.qid(IDENTIFIER_1_QUERY_ID)
.description(IDENTIFIER_1_DESCRIPTION)
......@@ -100,10 +116,19 @@ public class IdentifierServiceUnitTest extends BaseUnitTest {
final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
final String bearer = "Bearer abcxyz";
/* mock */
when(databaseService.find(CONTAINER_1_ID, DATABASE_1_ID))
.thenReturn(DATABASE_1);
when(restTemplate.exchange(anyString(), any(HttpMethod.class), any(HttpEntity.class), eq(QueryDto.class)))
.thenReturn(ResponseEntity.ok(QUERY_1_DTO));
when(userService.findByUsername(USER_1_USERNAME))
.thenReturn(USER_1);
when(identifierRepository.save(any(Identifier.class)))
.thenReturn(IDENTIFIER_1);
/* test */
assertThrows(IdentifierPublishingNotAllowedException.class, () -> {
identifierService.create(CONTAINER_1_ID, DATABASE_1_ID, request, principal, bearer);
});
}
@Test
......
......@@ -11,20 +11,25 @@ import org.springframework.transaction.annotation.Transactional;
@Mapper(componentModel = "spring")
public interface IdentifierMapper {
@Transactional(readOnly = true)
@Transactional
IdentifierDto identifierToIdentifierDto(Identifier data);
@Transactional(readOnly = true)
@Transactional
Identifier identifierCreateDtoToIdentifier(IdentifierCreateDto data);
@Transactional
Identifier identifierDtoToIdentifier(IdentifierDto data);
@Transactional
Creator creatorDtoToCreator(CreatorDto data);
@Transactional
Creator creatorCreateDtoToCreator(CreatorCreateDto data);
@Transactional
RelatedIdentifier relatedIdentifierCreateDtoToRelatedIdentifier(RelatedIdentifierCreateDto data);
@Transactional
VisibilityType visibilityTypeDtoToVisibilityType(VisibilityTypeDto data);
}
......@@ -113,16 +113,17 @@ public class IdentifierServiceImpl implements IdentifierService {
return creatorDto;
})
.collect(Collectors.toList()));
if (data.getRelatedIdentifiers() != null) {
entity.setRelatedIdentifiers(data.getRelatedIdentifiers()
.stream()
.map(r -> {
final RelatedIdentifier id = identifierMapper.relatedIdentifierCreateDtoToRelatedIdentifier(r);
id.setIid(entity.getId());
id.setIdentifier(entity);
id.setCreator(creator);
return id;
})
.collect(Collectors.toList()));
}
final Identifier identifier = identifierRepository.save(entity);
log.info("Created identifier with id {}", identifier.getId());
log.debug("created identifier {}", identifier);
......
......@@ -84,7 +84,10 @@ public class Identifier {
})
private Database database;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "identifier")
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = "iid", referencedColumnName = "id")
})
private List<RelatedIdentifier> relatedIdentifiers;
@Column(nullable = false, columnDefinition = "enum('EVERYONE', 'TRUSTED', 'SELF')")
......
......@@ -49,16 +49,9 @@ public class RelatedIdentifier {
@Enumerated(EnumType.STRING)
private RelationType relation;
@ToString.Exclude
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = "iid", referencedColumnName = "id", insertable = false, updatable = false)
})
private Identifier identifier;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = "created_by", referencedColumnName = "UserID", insertable = false, updatable = false)
@JoinColumn(name = "created_by", referencedColumnName = "UserID")
})
private User creator;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment