diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SchemaServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SchemaServiceIntegrationTest.java index 25dcb0caea1e161e0c6964b5cc121495aed78130..db00195e049295bfd4b054f831ffd2c50f17f01c 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SchemaServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SchemaServiceIntegrationTest.java @@ -53,7 +53,9 @@ public class SchemaServiceIntegrationTest extends AbstractUnitTest { genesis(); /* metadata database */ MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_INTERNALNAME); + MariaDbConfig.dropDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_2_INTERNALNAME); MariaDbConfig.createInitDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_1_DTO); + MariaDbConfig.createInitDatabase(CONTAINER_1_PRIVILEGED_DTO, DATABASE_2_DTO); } @Test @@ -92,6 +94,46 @@ public class SchemaServiceIntegrationTest extends AbstractUnitTest { assertEquals(0, foreignKeys.size()); } + @Test + public void inspectTableEnum_succeeds() throws TableNotFoundException, SQLException, QueryMalformedException { + + /* test */ + final TableDto response = schemaService.inspectTable(DATABASE_2_PRIVILEGED_DTO, "experiments"); + assertEquals("experiments", response.getInternalName()); + assertEquals("experiments", response.getName()); + assertEquals(DATABASE_2_ID, response.getTdbid()); + assertTrue(response.getIsVersioned()); + assertEquals(DATABASE_2_PUBLIC, response.getIsPublic()); + assertEquals(DATABASE_2_OWNER, response.getCreatedBy()); + assertNotNull(response.getCreator()); + assertEquals(DATABASE_2_OWNER, response.getCreator().getId()); + assertEquals(USER_2_NAME, response.getCreator().getName()); + assertEquals(USER_2_USERNAME, response.getCreator().getUsername()); + assertEquals(USER_2_FIRSTNAME, response.getCreator().getFirstname()); + assertEquals(USER_2_LASTNAME, response.getCreator().getLastname()); + assertEquals(USER_2_QUALIFIED_NAME, response.getCreator().getQualifiedName()); + assertNotNull(response.getCreator().getAttributes()); + assertEquals(USER_2_AFFILIATION, response.getCreator().getAttributes().getAffiliation()); + assertEquals(USER_2_THEME, response.getCreator().getAttributes().getTheme()); + assertEquals(USER_2_LANGUAGE, response.getCreator().getAttributes().getLanguage()); + assertEquals(USER_2_ORCID_URL, response.getCreator().getAttributes().getOrcid()); + assertNull(response.getCreator().getAttributes().getMariadbPassword()); + final List<IdentifierDto> identifiers = response.getIdentifiers(); + assertNotNull(identifiers); + assertEquals(0, identifiers.size()); + final List<ColumnDto> columns = response.getColumns(); + assertNotNull(columns); + assertEquals(3, columns.size()); + assertColumn(columns.get(0), null, null, DATABASE_2_ID, "id", "id", ColumnTypeDto.BIGINT, 19L, 0L, false, null, null); + assertColumn(columns.get(1), null, null, DATABASE_2_ID, "mode", "mode", ColumnTypeDto.ENUM, 3L, null, false, null, null); + assertEquals(2, columns.get(1).getEnums().size()); + assertEquals(List.of("ABC", "DEF"), columns.get(1).getEnums()); + assertColumn(columns.get(2), null, null, DATABASE_2_ID, "seq", "seq", ColumnTypeDto.SET, 5L, null, true, null, null); + assertEquals(3, columns.get(2).getSets().size()); + assertEquals(List.of("1", "2", "3"), columns.get(2).getSets()); + /* ignore rest (constraints) */ + } + @Test public void inspectTableFullConstraints_succeeds() throws TableNotFoundException, SQLException, QueryMalformedException { @@ -348,8 +390,8 @@ public class SchemaServiceIntegrationTest extends AbstractUnitTest { } protected static void assertColumn(ColumnDto column, Long id, Long tableId, Long databaseId, String name, - String internalName, ColumnTypeDto type, Long size, Long d, Boolean nullAllowed, - Long dfid, String description) { + String internalName, ColumnTypeDto type, Long size, Long d, Boolean nullAllowed, + Long dfid, String description) { log.trace("assert column: {}", internalName); assertNotNull(column); assertEquals(id, column.getId()); diff --git a/dbrepo-data-service/rest-service/src/test/resources/init/zoo.sql b/dbrepo-data-service/rest-service/src/test/resources/init/zoo.sql index 6279d887cc22e7112e663eb87242e9b7092b4a7f..88284978c5921f696dc6acfd821bde5856e6b6eb 100644 --- a/dbrepo-data-service/rest-service/src/test/resources/init/zoo.sql +++ b/dbrepo-data-service/rest-service/src/test/resources/init/zoo.sql @@ -38,6 +38,15 @@ create table names unique key (firstname, lastname) ) with system versioning; +CREATE SEQUENCE seq_experiments; + +create table experiments +( + id bigint not null default nextval(seq_experiments), + mode enum ('ABC', 'DEF') not null, + seq set ('1','2','3') +) WITH SYSTEM VERSIONING; + create table likes ( name_id bigint not null, diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MariaDbMapper.java b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MariaDbMapper.java index 5be39d4f0ae9c5b3255be9782ed1a70ce1316831..ea6734bac35b5b6209a243adf29406fa9ad0f6d6 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MariaDbMapper.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MariaDbMapper.java @@ -754,6 +754,22 @@ public interface MariaDbMapper { .databaseId(table.getTdbid()) .description(resultSet.getString(11)) .build(); + if (column.getColumnType().equals(ColumnTypeDto.ENUM)) { + column.setEnums(Arrays.stream(resultSet.getString(8) + .substring(0, resultSet.getString(8).length() - 1) + .replace("enum(", "") + .split(",")) + .map(value -> value.replace("'", "")) + .toList()); + } + if (column.getColumnType().equals(ColumnTypeDto.SET)) { + column.setSets(Arrays.stream(resultSet.getString(8) + .substring(0, resultSet.getString(8).length() - 1) + .replace("set(", "") + .split(",")) + .map(value -> value.replace("'", "")) + .toList()); + } /* constraints */ if (resultSet.getString(9) != null && resultSet.getString(9).equals("PRI")) { table.getConstraints().getPrimaryKey().add(PrimaryKeyDto.builder() diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/MetadataMapperUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/MetadataMapperUnitTest.java index 8b4e8ce13657453033c2ecf9e27c0450102795db..c357020a684be7b90120ef6dc0fad68a42dcd098 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/MetadataMapperUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mapper/MetadataMapperUnitTest.java @@ -284,17 +284,17 @@ public class MetadataMapperUnitTest extends AbstractUnitTest { assertEquals("fk_location", table1fk.getName()); assertEquals(ReferenceTypeDto.NO_ACTION, table1fk.getOnDelete()); assertEquals(ReferenceTypeDto.NO_ACTION, table1fk.getOnUpdate()); - assertEquals(TABLE_1_ID, table1fk.getTable().getId()); + assertEquals(TABLE_2_ID, table1fk.getTable().getId()); assertEquals(DATABASE_1_ID, table1fk.getTable().getDatabaseId()); - assertEquals(TABLE_2_ID, table1fk.getReferencedTable().getId()); + assertEquals(TABLE_1_ID, table1fk.getReferencedTable().getId()); assertEquals(DATABASE_1_ID, table1fk.getReferencedTable().getDatabaseId()); final ForeignKeyReferenceDto table1fkr = table1fk.getReferences().get(0); assertEquals(1L, table1fkr.getId()); assertEquals(TABLE_2_COLUMNS_DTO.get(2).getId(), table1fkr.getColumn().getId()); - assertEquals(TABLE_2_COLUMNS_DTO.get(2).getTable().getId(), table1fkr.getColumn().getTableId()); + assertEquals(TABLE_2_COLUMNS_DTO.get(2).getTableId(), table1fkr.getColumn().getTableId()); assertEquals(TABLE_2_COLUMNS_DTO.get(2).getDatabaseId(), table1fkr.getColumn().getDatabaseId()); - assertEquals(TABLE_1_COLUMNS_DTO.get(0).getDatabaseId(), table1fkr.getReferencedColumn().getId()); - assertEquals(TABLE_1_COLUMNS_DTO.get(0).getDatabaseId(), table1fkr.getReferencedColumn().getTableId()); + assertEquals(TABLE_1_COLUMNS_DTO.get(0).getId(), table1fkr.getReferencedColumn().getId()); + assertEquals(TABLE_1_COLUMNS_DTO.get(0).getTableId(), table1fkr.getReferencedColumn().getTableId()); assertEquals(TABLE_1_COLUMNS_DTO.get(0).getDatabaseId(), table1fkr.getReferencedColumn().getDatabaseId()); assertEquals(1, table1.getConstraints().getPrimaryKey().size()); final PrimaryKeyDto table1pk = new ArrayList<>(table1.getConstraints().getPrimaryKey()).get(0); diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java index cf32bf4f005830c3aff5ff22b13dea03df26bb3e..156563a041c833376f850465032f28b69602e020 100644 --- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java +++ b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java @@ -72,9 +72,13 @@ public abstract class AbstractUnitTest extends BaseTest { /* DATABASE 2 */ DATABASE_2.setSubsets(new LinkedList<>()); DATABASE_2.setAccesses(new LinkedList<>(List.of(DATABASE_2_USER_2_WRITE_ALL_ACCESS, DATABASE_2_USER_3_READ_ACCESS))); + DATABASE_2_PRIVILEGED_DTO.setAccesses(new LinkedList<>(List.of(DATABASE_2_USER_2_WRITE_ALL_ACCESS_DTO, DATABASE_2_USER_3_READ_ACCESS_DTO))); DATABASE_2.setTables(new LinkedList<>(List.of(TABLE_5, TABLE_6, TABLE_7))); DATABASE_2.setViews(new LinkedList<>(List.of(VIEW_4))); DATABASE_2.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_5))); + DATABASE_2_PRIVILEGED_DTO.setTables(new LinkedList<>(List.of(TABLE_5_DTO, TABLE_6_DTO, TABLE_7_DTO))); + DATABASE_2_PRIVILEGED_DTO.setViews(new LinkedList<>(List.of(VIEW_4_DTO))); + DATABASE_2_PRIVILEGED_DTO.setIdentifiers(new LinkedList<>(List.of(IDENTIFIER_5_DTO))); TABLE_5.setDatabase(DATABASE_2); TABLE_5.setColumns(new LinkedList<>(TABLE_5_COLUMNS)); TABLE_5.setConstraints(TABLE_5_CONSTRAINTS); diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java index fa47be8af84496f5fcbd96fb9c485a9fffdc3ceb..2d9a2f40a03a60b4650e8fa626d9ef17e7ab9eb4 100644 --- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java +++ b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java @@ -29,7 +29,6 @@ import at.tuwien.api.database.table.internal.PrivilegedTableDto; import at.tuwien.api.datacite.DataCiteBody; import at.tuwien.api.datacite.DataCiteData; import at.tuwien.api.datacite.doi.DataCiteDoi; -import at.tuwien.api.error.ApiErrorDto; import at.tuwien.api.identifier.*; import at.tuwien.api.keycloak.CredentialDto; import at.tuwien.api.keycloak.CredentialTypeDto; @@ -74,21 +73,15 @@ import at.tuwien.entities.maintenance.BannerMessageType; import at.tuwien.entities.semantics.Ontology; import at.tuwien.entities.user.User; import at.tuwien.test.utils.ArrayUtils; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.responses.ApiResponse; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.http.MediaType; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.web.bind.annotation.ResponseStatus; import java.io.File; import java.io.IOException; -import java.lang.reflect.Method; import java.math.BigDecimal; import java.math.BigInteger; import java.nio.charset.Charset; @@ -592,6 +585,8 @@ public abstract class BaseTest { .firstname(USER_2_FIRSTNAME) .lastname(USER_2_LASTNAME) .name(USER_2_NAME) + .qualifiedName(USER_2_QUALIFIED_NAME) + .attributes(USER_2_ATTRIBUTES_DTO) .build(); public final static UserBriefDto USER_2_BRIEF_DTO = UserBriefDto.builder() @@ -1257,14 +1252,6 @@ public abstract class BaseTest { public final static UUID DATABASE_2_OWNER = USER_2_ID; public final static UUID DATABASE_2_CREATOR = USER_2_ID; - public final static PrivilegedDatabaseDto DATABASE_2_PRIVILEGED_DTO = PrivilegedDatabaseDto.builder() - .id(DATABASE_2_ID) - .name(DATABASE_2_NAME) - .internalName(DATABASE_2_INTERNALNAME) - .container(CONTAINER_1_PRIVILEGED_DTO) - .views(new LinkedList<>()) - .build(); - public final static DatabaseCreateDto DATABASE_2_CREATE = DatabaseCreateDto.builder() .name(DATABASE_2_NAME) .isPublic(DATABASE_2_PUBLIC) @@ -7178,6 +7165,22 @@ public abstract class BaseTest { .identifiers(new LinkedList<>()) .build(); + public final static PrivilegedDatabaseDto DATABASE_2_PRIVILEGED_DTO = PrivilegedDatabaseDto.builder() + .id(DATABASE_2_ID) + .created(Instant.now().minus(1, HOURS)) + .isPublic(DATABASE_2_PUBLIC) + .name(DATABASE_2_NAME) + .container(CONTAINER_1_PRIVILEGED_DTO) + .internalName(DATABASE_2_INTERNALNAME) + .exchangeName(DATABASE_2_EXCHANGE) + .identifiers(List.of(IDENTIFIER_5_DTO)) + .tables(List.of(TABLE_5_DTO, TABLE_6_DTO, TABLE_7_DTO)) + .views(List.of(VIEW_4_DTO)) + .created(DATABASE_2_CREATED) + .creator(USER_2_DTO) + .owner(USER_2_DTO) + .build(); + public final static DatabaseDto DATABASE_2_DTO = DatabaseDto.builder() .id(DATABASE_2_ID) .created(DATABASE_2_CREATED) @@ -7240,6 +7243,13 @@ public abstract class BaseTest { .user(USER_2) .build(); + public final static DatabaseAccessDto DATABASE_2_USER_2_WRITE_ALL_ACCESS_DTO = DatabaseAccessDto.builder() + .type(AccessTypeDto.WRITE_ALL) + .hdbid(DATABASE_2_ID) + .huserid(USER_2_ID) + .user(USER_2_DTO) + .build(); + public final static DatabaseAccess DATABASE_2_USER_3_READ_ACCESS = DatabaseAccess.builder() .type(AccessType.READ) .hdbid(DATABASE_2_ID) @@ -7248,6 +7258,13 @@ public abstract class BaseTest { .user(USER_3) .build(); + public final static DatabaseAccessDto DATABASE_2_USER_3_READ_ACCESS_DTO = DatabaseAccessDto.builder() + .type(AccessTypeDto.READ) + .hdbid(DATABASE_2_ID) + .huserid(USER_3_ID) + .user(USER_3_DTO) + .build(); + public final static DatabaseAccess DATABASE_2_USER_3_WRITE_OWN_ACCESS = DatabaseAccess.builder() .type(AccessType.WRITE_OWN) .hdbid(DATABASE_2_ID) @@ -7555,8 +7572,8 @@ public abstract class BaseTest { .referencedColumn(TABLE_1_COLUMNS.get(0)) .foreignKey(null) // set later .build()))) - .table(TABLE_1) - .referencedTable(TABLE_2) + .table(TABLE_2) + .referencedTable(TABLE_1) .onUpdate(ReferenceType.NO_ACTION) .build()))) .uniques(new LinkedList<>(List.of(Unique.builder()