introduce-separate-database-schemas-hs-booking-and-hosting (#106)
Co-authored-by: Michael Hoennig <michael@hoennig.de> Reviewed-on: https://dev.hostsharing.net/hostsharing/hs.hsadmin.ng/pulls/106 Reviewed-by: Marc Sandlus <marc.sandlus@hostsharing.net>
This commit is contained in:
@@ -251,7 +251,7 @@ class HsBookingItemControllerAcceptanceTest extends ContextBasedTestWithCleanup
|
||||
RestAssured // @formatter:off
|
||||
.given()
|
||||
.header("current-subject", "superuser-alex@hostsharing.net")
|
||||
.header("assumed-roles", "hs_booking_project#D-1000313-D-1000313defaultproject:ADMIN")
|
||||
.header("assumed-roles", "hs_booking.project#D-1000313-D-1000313defaultproject:ADMIN")
|
||||
.port(port)
|
||||
.when()
|
||||
.get("http://localhost/api/hs/booking/items/" + givenBookingItem.getUuid())
|
||||
@@ -295,7 +295,7 @@ class HsBookingItemControllerAcceptanceTest extends ContextBasedTestWithCleanup
|
||||
RestAssured // @formatter:off
|
||||
.given()
|
||||
.header("current-subject", "superuser-alex@hostsharing.net")
|
||||
.header("assumed-roles", "hs_booking_project#D-1000111-D-1000111defaultproject:AGENT")
|
||||
.header("assumed-roles", "hs_booking.project#D-1000111-D-1000111defaultproject:AGENT")
|
||||
.contentType(ContentType.JSON)
|
||||
.body("""
|
||||
{
|
||||
|
@@ -70,7 +70,7 @@ class HsBookingItemRepositoryIntegrationTest extends ContextBasedTestWithCleanup
|
||||
final var query = em.createNativeQuery("""
|
||||
select currentTask, targetTable, targetOp, targetdelta->>'caption'
|
||||
from base.tx_journal_v
|
||||
where targettable = 'hs_booking_item';
|
||||
where targettable = 'hs_booking.item';
|
||||
""");
|
||||
|
||||
// when
|
||||
@@ -78,13 +78,13 @@ class HsBookingItemRepositoryIntegrationTest extends ContextBasedTestWithCleanup
|
||||
|
||||
// then
|
||||
assertThat(customerLogEntries).map(Arrays::toString).contains(
|
||||
"[creating booking-item test-data, hs_booking_item, INSERT, prod CloudServer]",
|
||||
"[creating booking-item test-data, hs_booking_item, INSERT, separate ManagedServer]",
|
||||
"[creating booking-item test-data, hs_booking_item, INSERT, separate ManagedWebspace]",
|
||||
"[creating booking-item test-data, hs_booking_item, INSERT, some ManagedServer]",
|
||||
"[creating booking-item test-data, hs_booking_item, INSERT, some ManagedWebspace]",
|
||||
"[creating booking-item test-data, hs_booking_item, INSERT, some PrivateCloud]",
|
||||
"[creating booking-item test-data, hs_booking_item, INSERT, test CloudServer]");
|
||||
"[creating booking-item test-data, hs_booking.item, INSERT, prod CloudServer]",
|
||||
"[creating booking-item test-data, hs_booking.item, INSERT, separate ManagedServer]",
|
||||
"[creating booking-item test-data, hs_booking.item, INSERT, separate ManagedWebspace]",
|
||||
"[creating booking-item test-data, hs_booking.item, INSERT, some ManagedServer]",
|
||||
"[creating booking-item test-data, hs_booking.item, INSERT, some ManagedWebspace]",
|
||||
"[creating booking-item test-data, hs_booking.item, INSERT, some PrivateCloud]",
|
||||
"[creating booking-item test-data, hs_booking.item, INSERT, test CloudServer]");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -92,7 +92,7 @@ class HsBookingItemRepositoryIntegrationTest extends ContextBasedTestWithCleanup
|
||||
// given
|
||||
final String nativeQuerySql = """
|
||||
select count(*)
|
||||
from hs_booking_item_hv ha;
|
||||
from hs_booking.item_hv ha;
|
||||
""";
|
||||
|
||||
// when
|
||||
@@ -101,7 +101,7 @@ class HsBookingItemRepositoryIntegrationTest extends ContextBasedTestWithCleanup
|
||||
@SuppressWarnings("unchecked") final var countBefore = (Integer) query.getSingleResult();
|
||||
|
||||
// then
|
||||
assertThat(countBefore).as("hs_booking_item should not contain rows for a timestamp in the past").isEqualTo(0);
|
||||
assertThat(countBefore).as("hs_booking.item should not contain rows for a timestamp in the past").isEqualTo(0);
|
||||
|
||||
// and when
|
||||
historicalContext(Timestamp.from(ZonedDateTime.now().plusHours(1).toInstant()));
|
||||
@@ -109,7 +109,7 @@ class HsBookingItemRepositoryIntegrationTest extends ContextBasedTestWithCleanup
|
||||
@SuppressWarnings("unchecked") final var countAfter = (Integer) query.getSingleResult();
|
||||
|
||||
// then
|
||||
assertThat(countAfter).as("hs_booking_item should contain rows for a timestamp in the future").isGreaterThan(1);
|
||||
assertThat(countAfter).as("hs_booking.item should contain rows for a timestamp in the future").isGreaterThan(1);
|
||||
}
|
||||
|
||||
@Nested
|
||||
@@ -167,32 +167,32 @@ class HsBookingItemRepositoryIntegrationTest extends ContextBasedTestWithCleanup
|
||||
final var all = rawRoleRepo.findAll();
|
||||
assertThat(distinctRoleNamesOf(all)).containsExactlyInAnyOrder(Array.from(
|
||||
initialRoleNames,
|
||||
"hs_booking_item#somenewbookingitem:ADMIN",
|
||||
"hs_booking_item#somenewbookingitem:AGENT",
|
||||
"hs_booking_item#somenewbookingitem:OWNER",
|
||||
"hs_booking_item#somenewbookingitem:TENANT"));
|
||||
"hs_booking.item#somenewbookingitem:ADMIN",
|
||||
"hs_booking.item#somenewbookingitem:AGENT",
|
||||
"hs_booking.item#somenewbookingitem:OWNER",
|
||||
"hs_booking.item#somenewbookingitem:TENANT"));
|
||||
assertThat(distinctGrantDisplaysOf(rawGrantRepo.findAll()))
|
||||
.containsExactlyInAnyOrder(fromFormatted(
|
||||
initialGrantNames,
|
||||
|
||||
// rbac.global-admin
|
||||
"{ grant perm:hs_booking_item#somenewbookingitem:INSERT>hs_booking_item to role:hs_booking_item#somenewbookingitem:ADMIN by system and assume }",
|
||||
"{ grant perm:hs_booking_item#somenewbookingitem:DELETE to role:rbac.global#global:ADMIN by system and assume }",
|
||||
"{ grant perm:hs_booking.item#somenewbookingitem:INSERT>hs_booking.item to role:hs_booking.item#somenewbookingitem:ADMIN by system and assume }",
|
||||
"{ grant perm:hs_booking.item#somenewbookingitem:DELETE to role:rbac.global#global:ADMIN by system and assume }",
|
||||
|
||||
// owner
|
||||
"{ grant role:hs_booking_item#somenewbookingitem:OWNER to role:hs_booking_project#D-1000111-D-1000111defaultproject:AGENT by system and assume }",
|
||||
"{ grant role:hs_booking.item#somenewbookingitem:OWNER to role:hs_booking.project#D-1000111-D-1000111defaultproject:AGENT by system and assume }",
|
||||
|
||||
// admin
|
||||
"{ grant perm:hs_booking_item#somenewbookingitem:UPDATE to role:hs_booking_item#somenewbookingitem:ADMIN by system and assume }",
|
||||
"{ grant role:hs_booking_item#somenewbookingitem:ADMIN to role:hs_booking_item#somenewbookingitem:OWNER by system and assume }",
|
||||
"{ grant perm:hs_booking.item#somenewbookingitem:UPDATE to role:hs_booking.item#somenewbookingitem:ADMIN by system and assume }",
|
||||
"{ grant role:hs_booking.item#somenewbookingitem:ADMIN to role:hs_booking.item#somenewbookingitem:OWNER by system and assume }",
|
||||
|
||||
// agent
|
||||
"{ grant role:hs_booking_item#somenewbookingitem:AGENT to role:hs_booking_item#somenewbookingitem:ADMIN by system and assume }",
|
||||
"{ grant role:hs_booking.item#somenewbookingitem:AGENT to role:hs_booking.item#somenewbookingitem:ADMIN by system and assume }",
|
||||
|
||||
// tenant
|
||||
"{ grant role:hs_booking_item#somenewbookingitem:TENANT to role:hs_booking_item#somenewbookingitem:AGENT by system and assume }",
|
||||
"{ grant perm:hs_booking_item#somenewbookingitem:SELECT to role:hs_booking_item#somenewbookingitem:TENANT by system and assume }",
|
||||
"{ grant role:hs_booking_project#D-1000111-D-1000111defaultproject:TENANT to role:hs_booking_item#somenewbookingitem:TENANT by system and assume }",
|
||||
"{ grant role:hs_booking.item#somenewbookingitem:TENANT to role:hs_booking.item#somenewbookingitem:AGENT by system and assume }",
|
||||
"{ grant perm:hs_booking.item#somenewbookingitem:SELECT to role:hs_booking.item#somenewbookingitem:TENANT by system and assume }",
|
||||
"{ grant role:hs_booking.project#D-1000111-D-1000111defaultproject:TENANT to role:hs_booking.item#somenewbookingitem:TENANT by system and assume }",
|
||||
null));
|
||||
}
|
||||
|
||||
@@ -230,7 +230,7 @@ class HsBookingItemRepositoryIntegrationTest extends ContextBasedTestWithCleanup
|
||||
// given:
|
||||
context("person-FirbySusan@example.com");
|
||||
final var debitor = debitorRepo.findDebitorByDebitorNumber(1000111);
|
||||
context("person-FirbySusan@example.com", "hs_booking_project#D-1000111-D-1000111defaultproject:OWNER");
|
||||
context("person-FirbySusan@example.com", "hs_booking.project#D-1000111-D-1000111defaultproject:OWNER");
|
||||
final var projectUuid = debitor.stream()
|
||||
.map(d -> realProjectRepo.findAllByDebitorUuid(d.getUuid()))
|
||||
.flatMap(List::stream)
|
||||
@@ -258,7 +258,7 @@ class HsBookingItemRepositoryIntegrationTest extends ContextBasedTestWithCleanup
|
||||
|
||||
// when
|
||||
final var result = jpaAttempt.transacted(() -> {
|
||||
context("superuser-alex@hostsharing.net", "hs_booking_project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
context("superuser-alex@hostsharing.net", "hs_booking.project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
final var foundBookingItem = em.find(HsBookingItemRbacEntity.class, givenBookingItemUuid);
|
||||
foundBookingItem.getResources().put("CPU", 2);
|
||||
foundBookingItem.getResources().remove("SSD-storage");
|
||||
@@ -311,12 +311,12 @@ class HsBookingItemRepositoryIntegrationTest extends ContextBasedTestWithCleanup
|
||||
@Test
|
||||
public void nonGlobalAdmin_canNotDeleteTheirRelatedBookingItem() {
|
||||
// given
|
||||
context("superuser-alex@hostsharing.net", "hs_booking_project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
context("superuser-alex@hostsharing.net", "hs_booking.project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
final var givenBookingItem = givenSomeTemporaryBookingItem("D-1000111 default project");
|
||||
|
||||
// when
|
||||
final var result = jpaAttempt.transacted(() -> {
|
||||
context("person-FirbySusan@example.com", "hs_booking_project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
context("person-FirbySusan@example.com", "hs_booking.project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
assertThat(rbacBookingItemRepo.findByUuid(givenBookingItem.getUuid())).isPresent();
|
||||
|
||||
rbacBookingItemRepo.deleteByUuid(givenBookingItem.getUuid());
|
||||
@@ -325,7 +325,7 @@ class HsBookingItemRepositoryIntegrationTest extends ContextBasedTestWithCleanup
|
||||
// then
|
||||
result.assertExceptionWithRootCauseMessage(
|
||||
JpaSystemException.class,
|
||||
"[403] Subject ", " is not allowed to delete hs_booking_item");
|
||||
"[403] Subject ", " is not allowed to delete hs_booking.item");
|
||||
assertThat(jpaAttempt.transacted(() -> {
|
||||
context("superuser-alex@hostsharing.net");
|
||||
return rbacBookingItemRepo.findByUuid(givenBookingItem.getUuid());
|
||||
@@ -335,7 +335,7 @@ class HsBookingItemRepositoryIntegrationTest extends ContextBasedTestWithCleanup
|
||||
@Test
|
||||
public void deletingABookingItemAlsoDeletesRelatedRolesAndGrants() {
|
||||
// given
|
||||
context("superuser-alex@hostsharing.net", "hs_booking_project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
context("superuser-alex@hostsharing.net", "hs_booking.project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
final var initialRoleNames = Array.from(distinctRoleNamesOf(rawRoleRepo.findAll()));
|
||||
final var initialGrantNames = Array.from(distinctGrantDisplaysOf(rawGrantRepo.findAll()));
|
||||
final var givenBookingItem = givenSomeTemporaryBookingItem("D-1000111 default project");
|
||||
|
@@ -168,7 +168,7 @@ class HsBookingProjectControllerAcceptanceTest extends ContextBasedTestWithClean
|
||||
RestAssured // @formatter:off
|
||||
.given()
|
||||
.header("current-subject", "person-TuckerJack@example.com")
|
||||
.header("assumed-roles", "hs_booking_project#D-1000313-D-1000313defaultproject:AGENT")
|
||||
.header("assumed-roles", "hs_booking.project#D-1000313-D-1000313defaultproject:AGENT")
|
||||
.port(port)
|
||||
.when()
|
||||
.get("http://localhost/api/hs/booking/projects/" + givenBookingProjectUuid)
|
||||
|
@@ -65,7 +65,7 @@ class HsBookingProjectRepositoryIntegrationTest extends ContextBasedTestWithClea
|
||||
final var query = em.createNativeQuery("""
|
||||
select currentTask, targetTable, targetOp, targetdelta->>'caption'
|
||||
from base.tx_journal_v
|
||||
where targettable = 'hs_booking_project';
|
||||
where targettable = 'hs_booking.project';
|
||||
""");
|
||||
|
||||
// when
|
||||
@@ -73,9 +73,9 @@ class HsBookingProjectRepositoryIntegrationTest extends ContextBasedTestWithClea
|
||||
|
||||
// then
|
||||
assertThat(customerLogEntries).map(Arrays::toString).contains(
|
||||
"[creating booking-project test-data, hs_booking_project, INSERT, D-1000111 default project]",
|
||||
"[creating booking-project test-data, hs_booking_project, INSERT, D-1000212 default project]",
|
||||
"[creating booking-project test-data, hs_booking_project, INSERT, D-1000313 default project]");
|
||||
"[creating booking-project test-data, hs_booking.project, INSERT, D-1000111 default project]",
|
||||
"[creating booking-project test-data, hs_booking.project, INSERT, D-1000212 default project]",
|
||||
"[creating booking-project test-data, hs_booking.project, INSERT, D-1000313 default project]");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -83,7 +83,7 @@ class HsBookingProjectRepositoryIntegrationTest extends ContextBasedTestWithClea
|
||||
// given
|
||||
final String nativeQuerySql = """
|
||||
select count(*)
|
||||
from hs_booking_project_hv ha;
|
||||
from hs_booking.project_hv ha;
|
||||
""";
|
||||
|
||||
// when
|
||||
@@ -92,7 +92,7 @@ class HsBookingProjectRepositoryIntegrationTest extends ContextBasedTestWithClea
|
||||
@SuppressWarnings("unchecked") final var countBefore = (Integer) query.getSingleResult();
|
||||
|
||||
// then
|
||||
assertThat(countBefore).as("hs_booking_project_hv should not contain rows for a timestamp in the past").isEqualTo(0);
|
||||
assertThat(countBefore).as("hs_booking.project_hv should not contain rows for a timestamp in the past").isEqualTo(0);
|
||||
|
||||
// and when
|
||||
historicalContext(Timestamp.from(ZonedDateTime.now().plusHours(1).toInstant()));
|
||||
@@ -100,7 +100,7 @@ class HsBookingProjectRepositoryIntegrationTest extends ContextBasedTestWithClea
|
||||
@SuppressWarnings("unchecked") final var countAfter = (Integer) query.getSingleResult();
|
||||
|
||||
// then
|
||||
assertThat(countAfter).as("hs_booking_project_hv should contain rows for a timestamp in the future").isGreaterThan(1);
|
||||
assertThat(countAfter).as("hs_booking.project_hv should contain rows for a timestamp in the future").isGreaterThan(1);
|
||||
}
|
||||
|
||||
@Nested
|
||||
@@ -152,33 +152,33 @@ class HsBookingProjectRepositoryIntegrationTest extends ContextBasedTestWithClea
|
||||
final var all = rawRoleRepo.findAll();
|
||||
assertThat(distinctRoleNamesOf(all)).containsExactlyInAnyOrder(Array.from(
|
||||
initialRoleNames,
|
||||
"hs_booking_project#D-1000111-somenewbookingproject:ADMIN",
|
||||
"hs_booking_project#D-1000111-somenewbookingproject:AGENT",
|
||||
"hs_booking_project#D-1000111-somenewbookingproject:OWNER",
|
||||
"hs_booking_project#D-1000111-somenewbookingproject:TENANT"));
|
||||
"hs_booking.project#D-1000111-somenewbookingproject:ADMIN",
|
||||
"hs_booking.project#D-1000111-somenewbookingproject:AGENT",
|
||||
"hs_booking.project#D-1000111-somenewbookingproject:OWNER",
|
||||
"hs_booking.project#D-1000111-somenewbookingproject:TENANT"));
|
||||
assertThat(distinctGrantDisplaysOf(rawGrantRepo.findAll()))
|
||||
.map(s -> s.replace("hs_office.", ""))
|
||||
.containsExactlyInAnyOrder(fromFormatted(
|
||||
initialGrantNames,
|
||||
|
||||
// rbacgGlobal-admin
|
||||
"{ grant perm:hs_booking_project#D-1000111-somenewbookingproject:DELETE to role:rbac.global#global:ADMIN by system and assume }",
|
||||
"{ grant perm:hs_booking.project#D-1000111-somenewbookingproject:DELETE to role:rbac.global#global:ADMIN by system and assume }",
|
||||
|
||||
// owner
|
||||
"{ grant role:hs_booking_project#D-1000111-somenewbookingproject:ADMIN to role:hs_booking_project#D-1000111-somenewbookingproject:OWNER by system and assume }",
|
||||
"{ grant role:hs_booking.project#D-1000111-somenewbookingproject:ADMIN to role:hs_booking.project#D-1000111-somenewbookingproject:OWNER by system and assume }",
|
||||
|
||||
// admin
|
||||
"{ grant role:hs_booking_project#D-1000111-somenewbookingproject:AGENT to role:hs_booking_project#D-1000111-somenewbookingproject:ADMIN by system and assume }",
|
||||
"{ grant perm:hs_booking_project#D-1000111-somenewbookingproject:UPDATE to role:hs_booking_project#D-1000111-somenewbookingproject:ADMIN by system and assume }",
|
||||
"{ grant perm:hs_booking_project#D-1000111-somenewbookingproject:INSERT>hs_booking_item to role:hs_booking_project#D-1000111-somenewbookingproject:ADMIN by system and assume }",
|
||||
"{ grant role:hs_booking.project#D-1000111-somenewbookingproject:AGENT to role:hs_booking.project#D-1000111-somenewbookingproject:ADMIN by system and assume }",
|
||||
"{ grant perm:hs_booking.project#D-1000111-somenewbookingproject:UPDATE to role:hs_booking.project#D-1000111-somenewbookingproject:ADMIN by system and assume }",
|
||||
"{ grant perm:hs_booking.project#D-1000111-somenewbookingproject:INSERT>hs_booking.item to role:hs_booking.project#D-1000111-somenewbookingproject:ADMIN by system and assume }",
|
||||
|
||||
// agent
|
||||
"{ grant role:hs_booking_project#D-1000111-somenewbookingproject:OWNER to role:relation#FirstGmbH-with-DEBITOR-FirstGmbH:AGENT by system }",
|
||||
"{ grant role:hs_booking_project#D-1000111-somenewbookingproject:TENANT to role:hs_booking_project#D-1000111-somenewbookingproject:AGENT by system and assume }",
|
||||
"{ grant role:hs_booking.project#D-1000111-somenewbookingproject:OWNER to role:relation#FirstGmbH-with-DEBITOR-FirstGmbH:AGENT by system }",
|
||||
"{ grant role:hs_booking.project#D-1000111-somenewbookingproject:TENANT to role:hs_booking.project#D-1000111-somenewbookingproject:AGENT by system and assume }",
|
||||
|
||||
// tenant
|
||||
"{ grant role:relation#FirstGmbH-with-DEBITOR-FirstGmbH:TENANT to role:hs_booking_project#D-1000111-somenewbookingproject:TENANT by system and assume }",
|
||||
"{ grant perm:hs_booking_project#D-1000111-somenewbookingproject:SELECT to role:hs_booking_project#D-1000111-somenewbookingproject:TENANT by system and assume }",
|
||||
"{ grant role:relation#FirstGmbH-with-DEBITOR-FirstGmbH:TENANT to role:hs_booking.project#D-1000111-somenewbookingproject:TENANT by system and assume }",
|
||||
"{ grant perm:hs_booking.project#D-1000111-somenewbookingproject:SELECT to role:hs_booking.project#D-1000111-somenewbookingproject:TENANT by system and assume }",
|
||||
|
||||
null));
|
||||
}
|
||||
@@ -214,7 +214,7 @@ class HsBookingProjectRepositoryIntegrationTest extends ContextBasedTestWithClea
|
||||
public void packetAgent_canViewOnlyRelatedBookingProjects(final TestCase testCase) {
|
||||
|
||||
// given:
|
||||
context("person-FirbySusan@example.com", "hs_booking_project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
context("person-FirbySusan@example.com", "hs_booking.project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
final var debitorUuid = debitorRepo.findByDebitorNumber(1000111).stream()
|
||||
.findAny().orElseThrow().getUuid();
|
||||
|
||||
@@ -238,7 +238,7 @@ class HsBookingProjectRepositoryIntegrationTest extends ContextBasedTestWithClea
|
||||
|
||||
// when
|
||||
final var result = jpaAttempt.transacted(() -> {
|
||||
context("superuser-alex@hostsharing.net", "hs_booking_project#D-1000111-sometempproject:ADMIN");
|
||||
context("superuser-alex@hostsharing.net", "hs_booking.project#D-1000111-sometempproject:ADMIN");
|
||||
final var foundBookingProject = em.find(HsBookingProjectRbacEntity.class, givenBookingProjectUuid);
|
||||
foundBookingProject.setCaption("updated caption");
|
||||
return toCleanup(repoUnderTest(testCase).save(foundBookingProject));
|
||||
@@ -290,7 +290,7 @@ class HsBookingProjectRepositoryIntegrationTest extends ContextBasedTestWithClea
|
||||
|
||||
// when
|
||||
final var result = jpaAttempt.transacted(() -> {
|
||||
context("person-FirbySusan@example.com", "hs_booking_project#D-1000111-sometempproject:AGENT");
|
||||
context("person-FirbySusan@example.com", "hs_booking.project#D-1000111-sometempproject:AGENT");
|
||||
assertThat(rbacProjectRepo.findByUuid(givenBookingProject.getUuid())).isPresent();
|
||||
|
||||
repoUnderTest(TestCase.RBAC).deleteByUuid(givenBookingProject.getUuid());
|
||||
@@ -299,7 +299,7 @@ class HsBookingProjectRepositoryIntegrationTest extends ContextBasedTestWithClea
|
||||
// then
|
||||
result.assertExceptionWithRootCauseMessage(
|
||||
JpaSystemException.class,
|
||||
"[403] Subject ", " is not allowed to delete hs_booking_project");
|
||||
"[403] Subject ", " is not allowed to delete hs_booking.project");
|
||||
assertThat(jpaAttempt.transacted(() -> {
|
||||
context("superuser-alex@hostsharing.net");
|
||||
return rbacProjectRepo.findByUuid(givenBookingProject.getUuid());
|
||||
|
@@ -114,7 +114,7 @@ class HsHostingAssetControllerAcceptanceTest extends ContextBasedTestWithCleanup
|
||||
RestAssured // @formatter:off
|
||||
.given()
|
||||
.header("current-subject", "superuser-alex@hostsharing.net")
|
||||
.header("assumed-roles", "hs_hosting_asset#fir01:AGENT")
|
||||
.header("assumed-roles", "hs_hosting.asset#fir01:AGENT")
|
||||
.port(port)
|
||||
.when()
|
||||
. get("http://localhost/api/hs/hosting/assets?type=" + EMAIL_ALIAS)
|
||||
@@ -218,7 +218,7 @@ class HsHostingAssetControllerAcceptanceTest extends ContextBasedTestWithCleanup
|
||||
final var location = RestAssured // @formatter:off
|
||||
.given()
|
||||
.header("current-subject", "superuser-alex@hostsharing.net")
|
||||
.header("assumed-roles", "hs_hosting_asset#vm1011:ADMIN")
|
||||
.header("assumed-roles", "hs_hosting.asset#vm1011:ADMIN")
|
||||
.contentType(ContentType.JSON)
|
||||
.body("""
|
||||
{
|
||||
@@ -454,7 +454,7 @@ class HsHostingAssetControllerAcceptanceTest extends ContextBasedTestWithCleanup
|
||||
RestAssured // @formatter:off
|
||||
.given()
|
||||
.header("current-subject", "person-TuckerJack@example.com")
|
||||
.header("assumed-roles", "hs_booking_project#D-1000313-D-1000313defaultproject:AGENT")
|
||||
.header("assumed-roles", "hs_booking.project#D-1000313-D-1000313defaultproject:AGENT")
|
||||
.port(port)
|
||||
.when()
|
||||
.get("http://localhost/api/hs/hosting/assets/" + givenAssetUuid)
|
||||
@@ -574,7 +574,7 @@ class HsHostingAssetControllerAcceptanceTest extends ContextBasedTestWithCleanup
|
||||
RestAssured // @formatter:off
|
||||
.given()
|
||||
.header("current-subject", "superuser-alex@hostsharing.net")
|
||||
//.header("assumed-roles", "hs_hosting_asset#vm2001:ADMIN")
|
||||
//.header("assumed-roles", "hs_hosting.asset#vm2001:ADMIN")
|
||||
.contentType(ContentType.JSON)
|
||||
.body("""
|
||||
{
|
||||
|
@@ -78,7 +78,7 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
final var query = em.createNativeQuery("""
|
||||
select currentTask, targetTable, targetOp, targetdelta->>'caption'
|
||||
from base.tx_journal_v
|
||||
where targettable = 'hs_hosting_asset';
|
||||
where targettable = 'hs_hosting.asset';
|
||||
""");
|
||||
|
||||
// when
|
||||
@@ -86,24 +86,24 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
|
||||
// then
|
||||
assertThat(customerLogEntries).map(Arrays::toString).contains(
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, another CloudServer]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some Domain-DNS-Setup]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some Domain-HTTP-Setup]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some Domain-MBOX-Setup]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some Domain-SMTP-Setup]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some Domain-Setup]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some E-Mail-Address]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some E-Mail-Alias]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some ManagedServer]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some UnixUser for E-Mail]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some UnixUser for Website]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some Webspace]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some default MariaDB instance]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some default MariaDB user]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some default MariaDB database]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some default Postgresql instance]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some default Postgresql user]",
|
||||
"[creating hosting-asset test-data, hs_hosting_asset, INSERT, some default Postgresql database]"
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, another CloudServer]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some Domain-DNS-Setup]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some Domain-HTTP-Setup]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some Domain-MBOX-Setup]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some Domain-SMTP-Setup]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some Domain-Setup]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some E-Mail-Address]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some E-Mail-Alias]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some ManagedServer]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some UnixUser for E-Mail]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some UnixUser for Website]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some Webspace]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some default MariaDB instance]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some default MariaDB user]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some default MariaDB database]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some default Postgresql instance]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some default Postgresql user]",
|
||||
"[creating hosting-asset test-data, hs_hosting.asset, INSERT, some default Postgresql database]"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
// given
|
||||
final String nativeQuerySql = """
|
||||
select count(*)
|
||||
from hs_hosting_asset_hv ha;
|
||||
from hs_hosting.asset_hv ha;
|
||||
""";
|
||||
|
||||
// when
|
||||
@@ -121,7 +121,7 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
@SuppressWarnings("unchecked") final var countBefore = (Integer) query.getSingleResult();
|
||||
|
||||
// then
|
||||
assertThat(countBefore).as("hs_hosting_asset_hv should not contain rows for a timestamp in the past").isEqualTo(0);
|
||||
assertThat(countBefore).as("hs_hosting.asset_hv should not contain rows for a timestamp in the past").isEqualTo(0);
|
||||
|
||||
// and when
|
||||
historicalContext(Timestamp.from(ZonedDateTime.now().plusHours(1).toInstant()));
|
||||
@@ -129,7 +129,7 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
@SuppressWarnings("unchecked") final var countAfter = (Integer) query.getSingleResult();
|
||||
|
||||
// then
|
||||
assertThat(countAfter).as("hs_hosting_asset_hv should contain rows for a timestamp in the future").isGreaterThan(1);
|
||||
assertThat(countAfter).as("hs_hosting.asset_hv should contain rows for a timestamp in the future").isGreaterThan(1);
|
||||
}
|
||||
|
||||
@Nested
|
||||
@@ -167,7 +167,7 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
public void createsAndGrantsRoles() {
|
||||
// given
|
||||
// TODO.test: remove context(...) once all entities have real entities
|
||||
context("superuser-alex@hostsharing.net", "hs_booking_project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
context("superuser-alex@hostsharing.net", "hs_booking.project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
final var givenManagedServer = givenHostingAsset("D-1000111 default project", MANAGED_SERVER);
|
||||
final var newWebspaceBookingItem = newBookingItem(givenManagedServer.getBookingItem(), HsBookingItemType.MANAGED_WEBSPACE, "fir01");
|
||||
em.flush();
|
||||
@@ -175,7 +175,7 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
final var initialGrantNames = distinctGrantDisplaysOf(rawGrantRepo.findAll());
|
||||
|
||||
// when
|
||||
context("superuser-alex@hostsharing.net", "hs_booking_project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
context("superuser-alex@hostsharing.net", "hs_booking.project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
final var result = attempt(em, () -> {
|
||||
final var newAsset = HsHostingAssetRbacEntity.builder()
|
||||
.bookingItem(newWebspaceBookingItem)
|
||||
@@ -192,37 +192,37 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
final var all = rawRoleRepo.findAll();
|
||||
assertThat(distinctRoleNamesOf(all)).containsExactlyInAnyOrder(Array.from(
|
||||
initialRoleNames,
|
||||
"hs_hosting_asset#fir00:ADMIN",
|
||||
"hs_hosting_asset#fir00:AGENT",
|
||||
"hs_hosting_asset#fir00:OWNER",
|
||||
"hs_hosting_asset#fir00:TENANT"));
|
||||
"hs_hosting.asset#fir00:ADMIN",
|
||||
"hs_hosting.asset#fir00:AGENT",
|
||||
"hs_hosting.asset#fir00:OWNER",
|
||||
"hs_hosting.asset#fir00:TENANT"));
|
||||
assertThat(distinctGrantDisplaysOf(rawGrantRepo.findAll()))
|
||||
.containsExactlyInAnyOrder(fromFormatted(
|
||||
initialGrantNames,
|
||||
|
||||
// rbac.global-admin
|
||||
"{ grant role:hs_hosting_asset#fir00:OWNER to role:rbac.global#global:ADMIN by system }", // workaround
|
||||
"{ grant role:hs_hosting.asset#fir00:OWNER to role:rbac.global#global:ADMIN by system }", // workaround
|
||||
|
||||
// owner
|
||||
"{ grant role:hs_hosting_asset#fir00:OWNER to user:superuser-alex@hostsharing.net by hs_hosting_asset#fir00:OWNER and assume }",
|
||||
"{ grant role:hs_hosting_asset#fir00:OWNER to role:hs_booking_item#fir01:ADMIN by system and assume }",
|
||||
"{ grant role:hs_hosting_asset#fir00:OWNER to role:hs_hosting_asset#vm1011:ADMIN by system and assume }",
|
||||
"{ grant perm:hs_hosting_asset#fir00:DELETE to role:hs_hosting_asset#fir00:OWNER by system and assume }",
|
||||
"{ grant role:hs_hosting.asset#fir00:OWNER to user:superuser-alex@hostsharing.net by hs_hosting.asset#fir00:OWNER and assume }",
|
||||
"{ grant role:hs_hosting.asset#fir00:OWNER to role:hs_booking.item#fir01:ADMIN by system and assume }",
|
||||
"{ grant role:hs_hosting.asset#fir00:OWNER to role:hs_hosting.asset#vm1011:ADMIN by system and assume }",
|
||||
"{ grant perm:hs_hosting.asset#fir00:DELETE to role:hs_hosting.asset#fir00:OWNER by system and assume }",
|
||||
|
||||
// admin
|
||||
"{ grant role:hs_hosting_asset#fir00:ADMIN to role:hs_hosting_asset#fir00:OWNER by system and assume }",
|
||||
"{ grant role:hs_hosting_asset#fir00:ADMIN to role:hs_booking_item#fir01:AGENT by system and assume }",
|
||||
"{ grant perm:hs_hosting_asset#fir00:UPDATE to role:hs_hosting_asset#fir00:ADMIN by system and assume }",
|
||||
"{ grant role:hs_hosting.asset#fir00:ADMIN to role:hs_hosting.asset#fir00:OWNER by system and assume }",
|
||||
"{ grant role:hs_hosting.asset#fir00:ADMIN to role:hs_booking.item#fir01:AGENT by system and assume }",
|
||||
"{ grant perm:hs_hosting.asset#fir00:UPDATE to role:hs_hosting.asset#fir00:ADMIN by system and assume }",
|
||||
|
||||
// agent
|
||||
"{ grant role:hs_hosting_asset#fir00:ADMIN to role:hs_hosting_asset#vm1011:AGENT by system and assume }",
|
||||
"{ grant role:hs_hosting_asset#fir00:AGENT to role:hs_hosting_asset#fir00:ADMIN by system and assume }",
|
||||
"{ grant role:hs_hosting.asset#fir00:ADMIN to role:hs_hosting.asset#vm1011:AGENT by system and assume }",
|
||||
"{ grant role:hs_hosting.asset#fir00:AGENT to role:hs_hosting.asset#fir00:ADMIN by system and assume }",
|
||||
|
||||
// tenant
|
||||
"{ grant role:hs_booking_item#fir01:TENANT to role:hs_hosting_asset#fir00:TENANT by system and assume }",
|
||||
"{ grant role:hs_hosting_asset#fir00:TENANT to role:hs_hosting_asset#fir00:AGENT by system and assume }",
|
||||
"{ grant role:hs_hosting_asset#vm1011:TENANT to role:hs_hosting_asset#fir00:TENANT by system and assume }",
|
||||
"{ grant perm:hs_hosting_asset#fir00:SELECT to role:hs_hosting_asset#fir00:TENANT by system and assume }",
|
||||
"{ grant role:hs_booking.item#fir01:TENANT to role:hs_hosting.asset#fir00:TENANT by system and assume }",
|
||||
"{ grant role:hs_hosting.asset#fir00:TENANT to role:hs_hosting.asset#fir00:AGENT by system and assume }",
|
||||
"{ grant role:hs_hosting.asset#vm1011:TENANT to role:hs_hosting.asset#fir00:TENANT by system and assume }",
|
||||
"{ grant perm:hs_hosting.asset#fir00:SELECT to role:hs_hosting.asset#fir00:TENANT by system and assume }",
|
||||
|
||||
null));
|
||||
}
|
||||
@@ -251,7 +251,7 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
assertThatAssetIsPersisted(result.returnedValue());
|
||||
|
||||
// ... a rbac.global admin can see the new domain setup as well if the domain OWNER role is assumed
|
||||
context("superuser-alex@hostsharing.net", "hs_hosting_asset#example.net:OWNER"); // only works with the assumed role
|
||||
context("superuser-alex@hostsharing.net", "hs_hosting.asset#example.net:OWNER"); // only works with the assumed role
|
||||
assertThatAssetIsPersisted(result.returnedValue());
|
||||
}
|
||||
|
||||
@@ -287,7 +287,7 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
@Test
|
||||
public void normalUser_canViewOnlyRelatedAssets() {
|
||||
// given:
|
||||
context("person-FirbySusan@example.com", "hs_booking_project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
context("person-FirbySusan@example.com", "hs_booking.project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
final var projectUuid = projectRepo.findByCaption("D-1000111 default project").stream()
|
||||
.findAny().orElseThrow().getUuid();
|
||||
|
||||
@@ -309,7 +309,7 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
.findAny().orElseThrow().getUuid();
|
||||
|
||||
// when
|
||||
context("superuser-alex@hostsharing.net", "hs_hosting_asset#vm1012:AGENT");
|
||||
context("superuser-alex@hostsharing.net", "hs_hosting.asset#vm1012:AGENT");
|
||||
final var result = rbacAssetRepo.findAllByCriteria(null, parentAssetUuid, null);
|
||||
|
||||
// then
|
||||
@@ -326,7 +326,7 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
context("superuser-alex@hostsharing.net");
|
||||
|
||||
// when
|
||||
context("superuser-alex@hostsharing.net", "hs_hosting_asset#sec01:AGENT");
|
||||
context("superuser-alex@hostsharing.net", "hs_hosting.asset#sec01:AGENT");
|
||||
final var result = rbacAssetRepo.findAllByCriteria(null, null, EMAIL_ADDRESS);
|
||||
|
||||
// then
|
||||
@@ -397,7 +397,7 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
|
||||
// when
|
||||
final var result = jpaAttempt.transacted(() -> {
|
||||
context("person-FirbySusan@example.com", "hs_booking_project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
context("person-FirbySusan@example.com", "hs_booking.project#D-1000111-D-1000111defaultproject:AGENT");
|
||||
assertThat(rbacAssetRepo.findByUuid(givenAsset.getUuid())).isPresent();
|
||||
|
||||
rbacAssetRepo.deleteByUuid(givenAsset.getUuid());
|
||||
@@ -417,7 +417,7 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
|
||||
// when
|
||||
final var result = jpaAttempt.transacted(() -> {
|
||||
context("person-FirbySusan@example.com", "hs_hosting_asset#vm1000:ADMIN");
|
||||
context("person-FirbySusan@example.com", "hs_hosting.asset#vm1000:ADMIN");
|
||||
assertThat(rbacAssetRepo.findByUuid(givenAsset.getUuid())).isPresent();
|
||||
|
||||
rbacAssetRepo.deleteByUuid(givenAsset.getUuid());
|
||||
@@ -426,7 +426,7 @@ class HsHostingAssetRepositoryIntegrationTest extends ContextBasedTestWithCleanu
|
||||
// then
|
||||
result.assertExceptionWithRootCauseMessage(
|
||||
JpaSystemException.class,
|
||||
"[403] Subject ", " is not allowed to delete hs_hosting_asset");
|
||||
"[403] Subject ", " is not allowed to delete hs_hosting.asset");
|
||||
assertThat(jpaAttempt.transacted(() -> {
|
||||
return realAssetRepo.findByUuid(givenAsset.getUuid());
|
||||
}).assertSuccessful().returnedValue()).isPresent(); // still there
|
||||
|
@@ -68,7 +68,7 @@ class HsUnixUserHostingAssetValidatorUnitTest {
|
||||
void initMocks() {
|
||||
final var nativeQueryMock = mock(Query.class);
|
||||
lenient().when(nativeQueryMock.getSingleResult()).thenReturn(12345678);
|
||||
lenient().when(em.createNativeQuery("SELECT nextval('hs_hosting_asset_unixuser_system_id_seq')", Integer.class))
|
||||
lenient().when(em.createNativeQuery("SELECT nextval('hs_hosting.asset_unixuser_system_id_seq')", Integer.class))
|
||||
.thenReturn(nativeQueryMock);
|
||||
|
||||
}
|
||||
|
@@ -677,7 +677,7 @@ public abstract class BaseOfficeDataImport extends CsvDataImport {
|
||||
jpaAttempt.transacted(() -> {
|
||||
context(rbacSuperuser);
|
||||
coopAssets.forEach(this::persist);
|
||||
updateLegacyIds(coopAssets, "hs_office.coopassetstransaction_legacy_id", "member_asset_id");
|
||||
updateLegacyIds(coopAssets, "hs_office.coopassettx_legacy_id", "member_asset_id");
|
||||
}).assertSuccessful();
|
||||
|
||||
}
|
||||
|
@@ -187,7 +187,7 @@ public class CsvDataImport extends ContextBasedTest {
|
||||
}
|
||||
|
||||
final var query = em.createNativeQuery("""
|
||||
insert into hs_hosting_asset(
|
||||
insert into hs_hosting.asset(
|
||||
uuid,
|
||||
type,
|
||||
bookingitemuuid,
|
||||
@@ -248,15 +248,15 @@ public class CsvDataImport extends ContextBasedTest {
|
||||
jpaAttempt.transacted(() -> {
|
||||
context(rbacSuperuser);
|
||||
// TODO.perf: could we instead skip creating test-data based on an env var?
|
||||
em.createNativeQuery("delete from hs_hosting_asset where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_hosting_asset_ex where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_booking_item where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_booking_item_ex where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_booking_project where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_booking_project_ex where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_office.coopassetstransaction where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_office.coopassetstransaction_legacy_id where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_office.coopsharestransaction where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_hosting.asset where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_hosting.asset_ex where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_booking.item where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_booking.item_ex where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_booking.project where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_booking.project_ex where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_office.coopassettx where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_office.coopassettx_legacy_id where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_office.coopsharetx where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_office.coopsharestransaction_legacy_id where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_office.membership where true").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_office.sepamandate where true").executeUpdate();
|
||||
@@ -275,7 +275,7 @@ public class CsvDataImport extends ContextBasedTest {
|
||||
jpaAttempt.transacted(() -> {
|
||||
context(rbacSuperuser);
|
||||
em.createNativeQuery("alter sequence hs_office.contact_legacy_id_seq restart with 1000000000;").executeUpdate();
|
||||
em.createNativeQuery("alter sequence hs_office.coopassetstransaction_legacy_id_seq restart with 1000000000;")
|
||||
em.createNativeQuery("alter sequence hs_office.coopassettx_legacy_id_seq restart with 1000000000;")
|
||||
.executeUpdate();
|
||||
em.createNativeQuery("alter sequence public.hs_office.coopsharestransaction_legacy_id_seq restart with 1000000000;")
|
||||
.executeUpdate();
|
||||
|
@@ -913,7 +913,7 @@ public class ImportHostingAssets extends BaseOfficeDataImport {
|
||||
@Test
|
||||
@Order(19910)
|
||||
void verifyBookingItemsAreActuallyPersisted() {
|
||||
final var biCount = (Integer) em.createNativeQuery("select count(*) from hs_booking_item", Integer.class)
|
||||
final var biCount = (Integer) em.createNativeQuery("select count(*) from hs_booking.item", Integer.class)
|
||||
.getSingleResult();
|
||||
assertThat(biCount).isGreaterThan(isImportingControlledTestData() ? 5 : 500);
|
||||
}
|
||||
@@ -921,7 +921,7 @@ public class ImportHostingAssets extends BaseOfficeDataImport {
|
||||
@Test
|
||||
@Order(19920)
|
||||
void verifyHostingAssetsAreActuallyPersisted() {
|
||||
final var haCount = (Integer) em.createNativeQuery("select count(*) from hs_hosting_asset", Integer.class)
|
||||
final var haCount = (Integer) em.createNativeQuery("select count(*) from hs_hosting.asset", Integer.class)
|
||||
.getSingleResult();
|
||||
assertThat(haCount).isGreaterThan(isImportingControlledTestData() ? 40 : 15000);
|
||||
|
||||
@@ -1068,8 +1068,8 @@ public class ImportHostingAssets extends BaseOfficeDataImport {
|
||||
assumeThatWeAreImportingControlledTestData();
|
||||
|
||||
final var haCount = jpaAttempt.transacted(() -> {
|
||||
context(rbacSuperuser, "hs_booking_project#D-1000300-mimdefaultproject:AGENT");
|
||||
return (Integer) em.createNativeQuery("select count(*) from hs_hosting_asset_rv where type='EMAIL_ADDRESS'", Integer.class)
|
||||
context(rbacSuperuser, "hs_booking.project#D-1000300-mimdefaultproject:AGENT");
|
||||
return (Integer) em.createNativeQuery("select count(*) from hs_hosting.asset_rv where type='EMAIL_ADDRESS'", Integer.class)
|
||||
.getSingleResult();
|
||||
}).assertSuccessful().returnedValue();
|
||||
assertThat(haCount).isEqualTo(68);
|
||||
@@ -1136,7 +1136,7 @@ public class ImportHostingAssets extends BaseOfficeDataImport {
|
||||
|
||||
jpaAttempt.transacted(() -> {
|
||||
context(rbacSuperuser);
|
||||
updateLegacyIds(assets, "hs_hosting_asset_legacy_id", "legacy_id");
|
||||
updateLegacyIds(assets, "hs_hosting.asset_legacy_id", "legacy_id");
|
||||
}).assertSuccessful();
|
||||
}
|
||||
|
||||
@@ -1145,7 +1145,7 @@ public class ImportHostingAssets extends BaseOfficeDataImport {
|
||||
final int expectedCountInTestDataCount,
|
||||
final int minCountExpectedInProdData) {
|
||||
final var q = em.createNativeQuery(
|
||||
"select count(*) from hs_hosting_asset where type = cast(:type as HsHostingAssetType)",
|
||||
"select count(*) from hs_hosting.asset where type = cast(:type as hs_hosting.AssetType)",
|
||||
Integer.class);
|
||||
q.setParameter("type", assetType.name());
|
||||
final var count = (Integer) q.getSingleResult();
|
||||
@@ -1895,8 +1895,8 @@ public class ImportHostingAssets extends BaseOfficeDataImport {
|
||||
//noinspection unchecked
|
||||
return ((List<List<?>>) em.createNativeQuery(
|
||||
"""
|
||||
SELECT li.* FROM hs_hosting_asset_legacy_id li
|
||||
JOIN hs_hosting_asset ha ON ha.uuid=li.uuid
|
||||
SELECT li.* FROM hs_hosting.asset_legacy_id li
|
||||
JOIN hs_hosting.asset ha ON ha.uuid=li.uuid
|
||||
WHERE CAST(ha.type AS text)=:type
|
||||
ORDER BY legacy_id
|
||||
""",
|
||||
@@ -1910,8 +1910,8 @@ public class ImportHostingAssets extends BaseOfficeDataImport {
|
||||
//noinspection unchecked
|
||||
return ((List<List<?>>) em.createNativeQuery(
|
||||
"""
|
||||
SELECT ha.uuid, ha.type, ha.identifier FROM hs_hosting_asset ha
|
||||
JOIN hs_hosting_asset_legacy_id li ON li.uuid=ha.uuid
|
||||
SELECT ha.uuid, ha.type, ha.identifier FROM hs_hosting.asset ha
|
||||
JOIN hs_hosting.asset_legacy_id li ON li.uuid=ha.uuid
|
||||
WHERE li.legacy_id is null AND CAST(ha.type AS text)=:type
|
||||
ORDER BY li.legacy_id
|
||||
""",
|
||||
|
@@ -391,9 +391,9 @@ class HsOfficeCoopAssetsTransactionControllerAcceptanceTest extends ContextBased
|
||||
void cleanup() {
|
||||
jpaAttempt.transacted(() -> {
|
||||
context.define("superuser-alex@hostsharing.net", null);
|
||||
// HsOfficeCoopAssetsTransactionEntity respectively hs_office.coopassetstransaction_rv
|
||||
// HsOfficeCoopAssetsTransactionEntity respectively hs_office.coopassettx_rv
|
||||
// cannot be deleted at all, but the underlying table record can be deleted.
|
||||
em.createNativeQuery("delete from hs_office.coopassetstransaction where reference like 'temp %'")
|
||||
em.createNativeQuery("delete from hs_office.coopassettx where reference like 'temp %'")
|
||||
.executeUpdate();
|
||||
}).assertSuccessful();
|
||||
}
|
||||
|
@@ -112,8 +112,8 @@ class HsOfficeCoopAssetsTransactionRepositoryIntegrationTest extends ContextBase
|
||||
.map(s -> s.replace("hs_office.", ""))
|
||||
.containsExactlyInAnyOrder(Array.fromFormatted(
|
||||
initialGrantNames,
|
||||
"{ grant perm:coopassetstransaction#temprefB:SELECT to role:membership#M-1000101:AGENT by system and assume }",
|
||||
"{ grant perm:coopassetstransaction#temprefB:UPDATE to role:membership#M-1000101:ADMIN by system and assume }",
|
||||
"{ grant perm:coopassettx#temprefB:SELECT to role:membership#M-1000101:AGENT by system and assume }",
|
||||
"{ grant perm:coopassettx#temprefB:UPDATE to role:membership#M-1000101:ADMIN by system and assume }",
|
||||
null));
|
||||
}
|
||||
|
||||
@@ -222,7 +222,7 @@ class HsOfficeCoopAssetsTransactionRepositoryIntegrationTest extends ContextBase
|
||||
final var query = em.createNativeQuery("""
|
||||
select currentTask, targetTable, targetOp, targetdelta->>'reference'
|
||||
from base.tx_journal_v
|
||||
where targettable = 'hs_office.coopassetstransaction';
|
||||
where targettable = 'hs_office.coopassettx';
|
||||
""");
|
||||
|
||||
// when
|
||||
@@ -230,18 +230,18 @@ class HsOfficeCoopAssetsTransactionRepositoryIntegrationTest extends ContextBase
|
||||
|
||||
// then
|
||||
assertThat(customerLogEntries).map(Arrays::toString).contains(
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassetstransaction, INSERT, ref 1000101-1]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassetstransaction, INSERT, ref 1000101-2]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassetstransaction, INSERT, ref 1000101-3]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassetstransaction, INSERT, ref 1000101-3]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassetstransaction, INSERT, ref 1000202-1]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassetstransaction, INSERT, ref 1000202-2]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassetstransaction, INSERT, ref 1000202-3]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassetstransaction, INSERT, ref 1000202-3]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassetstransaction, INSERT, ref 1000303-1]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassetstransaction, INSERT, ref 1000303-2]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassetstransaction, INSERT, ref 1000303-3]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassetstransaction, INSERT, ref 1000303-3]");
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassettx, INSERT, ref 1000101-1]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassettx, INSERT, ref 1000101-2]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassettx, INSERT, ref 1000101-3]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassettx, INSERT, ref 1000101-3]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassettx, INSERT, ref 1000202-1]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassettx, INSERT, ref 1000202-2]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassettx, INSERT, ref 1000202-3]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassettx, INSERT, ref 1000202-3]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassettx, INSERT, ref 1000303-1]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassettx, INSERT, ref 1000303-2]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassettx, INSERT, ref 1000303-3]",
|
||||
"[creating coopAssetsTransaction test-data, hs_office.coopassettx, INSERT, ref 1000303-3]");
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
|
@@ -55,9 +55,9 @@ class HsOfficeCoopSharesTransactionControllerAcceptanceTest extends ContextBased
|
||||
void cleanup() {
|
||||
jpaAttempt.transacted(() -> {
|
||||
context.define("superuser-alex@hostsharing.net", null);
|
||||
// HsOfficeCoopSharesTransactionEntity respectively hs_office.coopsharestransaction_rv
|
||||
// HsOfficeCoopSharesTransactionEntity respectively hs_office.coopsharetx_rv
|
||||
// cannot be deleted at all, but the underlying table record can be deleted.
|
||||
em.createNativeQuery("delete from hs_office.coopsharestransaction where reference like 'temp %'").executeUpdate();
|
||||
em.createNativeQuery("delete from hs_office.coopsharetx where reference like 'temp %'").executeUpdate();
|
||||
}).assertSuccessful();
|
||||
}
|
||||
|
||||
|
@@ -111,8 +111,8 @@ class HsOfficeCoopSharesTransactionRepositoryIntegrationTest extends ContextBase
|
||||
.map(s -> s.replace("hs_office.", ""))
|
||||
.containsExactlyInAnyOrder(Array.fromFormatted(
|
||||
initialGrantNames,
|
||||
"{ grant perm:coopsharestransaction#temprefB:SELECT to role:membership#M-1000101:AGENT by system and assume }",
|
||||
"{ grant perm:coopsharestransaction#temprefB:UPDATE to role:membership#M-1000101:ADMIN by system and assume }",
|
||||
"{ grant perm:coopsharetx#temprefB:SELECT to role:membership#M-1000101:AGENT by system and assume }",
|
||||
"{ grant perm:coopsharetx#temprefB:UPDATE to role:membership#M-1000101:ADMIN by system and assume }",
|
||||
null));
|
||||
}
|
||||
|
||||
@@ -221,7 +221,7 @@ class HsOfficeCoopSharesTransactionRepositoryIntegrationTest extends ContextBase
|
||||
final var query = em.createNativeQuery("""
|
||||
select currentTask, targetTable, targetOp, targetdelta->>'reference'
|
||||
from base.tx_journal_v
|
||||
where targettable = 'hs_office.coopsharestransaction';
|
||||
where targettable = 'hs_office.coopsharetx';
|
||||
""");
|
||||
|
||||
// when
|
||||
@@ -229,18 +229,18 @@ class HsOfficeCoopSharesTransactionRepositoryIntegrationTest extends ContextBase
|
||||
|
||||
// then
|
||||
assertThat(customerLogEntries).map(Arrays::toString).contains(
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharestransaction, INSERT, ref 1000101-1]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharestransaction, INSERT, ref 1000101-2]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharestransaction, INSERT, ref 1000101-3]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharestransaction, INSERT, ref 1000101-4]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharestransaction, INSERT, ref 1000202-1]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharestransaction, INSERT, ref 1000202-2]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharestransaction, INSERT, ref 1000202-3]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharestransaction, INSERT, ref 1000202-4]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharestransaction, INSERT, ref 1000303-1]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharestransaction, INSERT, ref 1000303-2]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharestransaction, INSERT, ref 1000303-3]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharestransaction, INSERT, ref 1000303-4]");
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharetx, INSERT, ref 1000101-1]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharetx, INSERT, ref 1000101-2]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharetx, INSERT, ref 1000101-3]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharetx, INSERT, ref 1000101-4]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharetx, INSERT, ref 1000202-1]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharetx, INSERT, ref 1000202-2]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharetx, INSERT, ref 1000202-3]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharetx, INSERT, ref 1000202-4]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharetx, INSERT, ref 1000303-1]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharetx, INSERT, ref 1000303-2]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharetx, INSERT, ref 1000303-3]",
|
||||
"[creating coopSharesTransaction test-data, hs_office.coopsharetx, INSERT, ref 1000303-4]");
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
|
@@ -185,7 +185,7 @@ class HsOfficeDebitorRepositoryIntegrationTest extends ContextBasedTestWithClean
|
||||
.containsExactlyInAnyOrder(Array.fromFormatted(
|
||||
initialGrantNames,
|
||||
"{ grant perm:relation#FirstGmbH-with-DEBITOR-FourtheG:INSERT>sepamandate to role:relation#FirstGmbH-with-DEBITOR-FourtheG:ADMIN by system and assume }",
|
||||
"{ grant perm:relation#FirstGmbH-with-DEBITOR-FourtheG:INSERT>hs_booking_project to role:relation#FirstGmbH-with-DEBITOR-FourtheG:ADMIN by system and assume }",
|
||||
"{ grant perm:relation#FirstGmbH-with-DEBITOR-FourtheG:INSERT>hs_booking.project to role:relation#FirstGmbH-with-DEBITOR-FourtheG:ADMIN by system and assume }",
|
||||
|
||||
// owner
|
||||
"{ grant perm:debitor#D-1000122:DELETE to role:relation#FirstGmbH-with-DEBITOR-FourtheG:OWNER by system and assume }",
|
||||
|
@@ -118,8 +118,8 @@ class HsOfficeMembershipRepositoryIntegrationTest extends ContextBasedTestWithCl
|
||||
.containsExactlyInAnyOrder(Array.fromFormatted(
|
||||
initialGrantNames,
|
||||
// insert
|
||||
"{ grant perm:membership#M-1000117:INSERT>coopassetstransaction to role:membership#M-1000117:ADMIN by system and assume }",
|
||||
"{ grant perm:membership#M-1000117:INSERT>coopsharestransaction to role:membership#M-1000117:ADMIN by system and assume }",
|
||||
"{ grant perm:membership#M-1000117:INSERT>coopassettx to role:membership#M-1000117:ADMIN by system and assume }",
|
||||
"{ grant perm:membership#M-1000117:INSERT>coopsharetx to role:membership#M-1000117:ADMIN by system and assume }",
|
||||
|
||||
// owner
|
||||
"{ grant perm:membership#M-1000117:DELETE to role:membership#M-1000117:ADMIN by system and assume }",
|
||||
|
@@ -39,9 +39,6 @@ class HsOfficeRelationControllerAcceptanceTest extends ContextBasedTestWithClean
|
||||
@Autowired
|
||||
Context context;
|
||||
|
||||
@Autowired
|
||||
Context contextMock;
|
||||
|
||||
@Autowired
|
||||
HsOfficeRelationRealRepository relationrealRepo;
|
||||
|
||||
|
@@ -95,7 +95,7 @@ class RbacGrantsDiagramServiceIntegrationTest extends ContextBasedTestWithCleanu
|
||||
|
||||
//final var graph = grantsMermaidService.allGrantsTocurrentSubject(EnumSet.of(Include.NON_TEST_ENTITIES, Include.PERMISSIONS));
|
||||
|
||||
final var targetObject = (UUID) em.createNativeQuery("SELECT uuid FROM hs_office.coopassetstransaction WHERE reference='ref 1000101-1'").getSingleResult();
|
||||
final var targetObject = (UUID) em.createNativeQuery("SELECT uuid FROM hs_office.coopassettx WHERE reference='ref 1000101-1'").getSingleResult();
|
||||
final var graph = grantsMermaidService.allGrantsFrom(targetObject, "view", EnumSet.of(Include.USERS));
|
||||
|
||||
RbacGrantsDiagramService.writeToFile(join(";", context.fetchAssumedRoles()), graph, "doc/all-grants.md");
|
||||
|
@@ -305,7 +305,7 @@ public abstract class ContextBasedTestWithCleanup extends ContextBasedTest {
|
||||
protected String[] roleNames(final String sqlLikeExpression) {
|
||||
final var pattern = Pattern.compile(sqlLikeExpression);
|
||||
//noinspection unchecked
|
||||
final List<Object[]> rows = (List<Object[]>) em.createNativeQuery("select * from rbac.role_ev where roleidname like 'hs_booking_project#%'")
|
||||
final List<Object[]> rows = (List<Object[]>) em.createNativeQuery("select * from rbac.role_ev where roleidname like 'hs_booking.project#%'")
|
||||
.getResultList();
|
||||
return rows.stream()
|
||||
.map(row -> (row[0]).toString())
|
||||
|
Reference in New Issue
Block a user