Michael Hoennig
2022-10-19 ca0589d084e01e90d3e9a67dd119dfc9d62a0e52
hs-office-coopshares: use only membership uuid in filter
5 files modified
72 ■■■■ changed files
src/main/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionController.java 3 ●●●● patch | view | raw | blame | history
src/main/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionRepository.java 4 ●●●● patch | view | raw | blame | history
src/main/resources/api-definition/hs-office/hs-office-coopshares.yaml 6 ●●●●● patch | view | raw | blame | history
src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionControllerAcceptanceTest.java 19 ●●●● patch | view | raw | blame | history
src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionRepositoryIntegrationTest.java 40 ●●●●● patch | view | raw | blame | history
src/main/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionController.java
@@ -40,14 +40,13 @@
            final String currentUser,
            final String assumedRoles,
            final UUID membershipUuid,
            Integer memberNumber, // TODO: remove
            final @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate fromValueDate,
            final @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate toValueDate) {
        context.define(currentUser, assumedRoles);
        final var entities = coopSharesTransactionRepo.findCoopSharesTransactionByOptionalMembershipUuidAndDateRange(
                memberNumber,
                membershipUuid,
                fromValueDate,
                toValueDate);
src/main/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionRepository.java
@@ -14,13 +14,13 @@
    @Query("""
            SELECT st FROM HsOfficeCoopSharesTransactionEntity st
                WHERE (:memberNumber IS NULL OR st.membership.memberNumber = :memberNumber)
                WHERE ( CAST(:membershipUuid AS org.hibernate.type.UUIDCharType) IS NULL OR st.membership.uuid = :membershipUuid)
                    AND ( CAST(:fromValueDate AS java.time.LocalDate) IS NULL OR (st.valueDate >= :fromValueDate))
                    AND ( CAST(:toValueDate AS java.time.LocalDate)IS NULL OR (st.valueDate <= :toValueDate))
                ORDER BY st.membership.memberNumber, st.valueDate
               """)
    List<HsOfficeCoopSharesTransactionEntity> findCoopSharesTransactionByOptionalMembershipUuidAndDateRange(
            Integer memberNumber, LocalDate fromValueDate, LocalDate toValueDate);
            UUID membershipUuid, LocalDate fromValueDate, LocalDate toValueDate);
    HsOfficeCoopSharesTransactionEntity save(final HsOfficeCoopSharesTransactionEntity entity);
src/main/resources/api-definition/hs-office/hs-office-coopshares.yaml
@@ -14,12 +14,6 @@
        type: string
        format: uuid
      description: Optional UUID of the related membership.
    - name: memberNumber
      in: query
      required: false
      schema:
        type: integer
      description: Optional member number of the related membership.
    - name: fromValueDate
      in: query
      required: false
src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionControllerAcceptanceTest.java
@@ -75,12 +75,16 @@
        @Test
        void globalAdmin_canFindCoopSharesTransactionsByMemberNumber() {
            context.define("superuser-alex@hostsharing.net");
            final var givenMembership = membershipRepo.findMembershipsByOptionalPartnerUuidAndOptionalMemberNumber(null, 10002)
                    .get(0);
            RestAssured // @formatter:off
                    .given()
                    .header("current-user", "superuser-alex@hostsharing.net")
                    .port(port)
                .when()
                    .get("http://localhost/api/hs/office/coopsharestransactions?memberNumber=10002")
                    .get("http://localhost/api/hs/office/coopsharestransactions?membershipUuid="+givenMembership.getUuid())
                .then().log().all().assertThat()
                    .statusCode(200)
                    .contentType("application/json")
@@ -114,13 +118,18 @@
        @Test
        void globalAdmin_canFindCoopSharesTransactionsByMemberNumberAndDateRange() {
            context.define("superuser-alex@hostsharing.net");
            final var givenMembership = membershipRepo.findMembershipsByOptionalPartnerUuidAndOptionalMemberNumber(null, 10002)
                    .get(0);
            RestAssured // @formatter:off
                    .given()
                .given()
                    .header("current-user", "superuser-alex@hostsharing.net")
                    .port(port)
                    .when()
                    .get("http://localhost/api/hs/office/coopsharestransactions?memberNumber=10002&fromValueDate=2020-01-01&toValueDate=2021-12-31")
                    .then().log().all().assertThat()
                .when()
                    .get("http://localhost/api/hs/office/coopsharestransactions?membershipUuid="
                            + givenMembership.getUuid() + "&fromValueDate=2020-01-01&toValueDate=2021-12-31")
                .then().log().all().assertThat()
                    .statusCode(200)
                    .contentType("application/json")
                    .body("", lenientlyEquals("""
src/test/java/net/hostsharing/hsadminng/hs/office/coopshares/HsOfficeCoopSharesTransactionRepositoryIntegrationTest.java
@@ -134,7 +134,7 @@
    class FindAllCoopSharesTransactions {
        @Test
        public void globalAdmin_withoutAssumedRole_canViewAllCoopSharesTransactions() {
        public void globalAdmin_anViewAllCoopSharesTransactions() {
            // given
            context("superuser-alex@hostsharing.net");
@@ -161,6 +161,44 @@
        }
        @Test
        public void globalAdmin_canViewCoopSharesTransactions_filteredByMembershipUuid() {
            // given
            context("superuser-alex@hostsharing.net");
            final var givenMembership = membershipRepo.findMembershipsByOptionalPartnerUuidAndOptionalMemberNumber(null, 10002).get(0);
            // when
            final var result = coopSharesTransactionRepo.findCoopSharesTransactionByOptionalMembershipUuidAndDateRange(
                    givenMembership.getUuid(),
                    null,
                    null);
            // then
            allTheseCoopSharesTransactionsAreReturned(
                    result,
                    "CoopShareTransaction(10002, 2010-03-15, SUBSCRIPTION, 2, ref 10002-1)",
                    "CoopShareTransaction(10002, 2021-09-01, SUBSCRIPTION, 24, ref 10002-2)",
                    "CoopShareTransaction(10002, 2022-10-20, CANCELLATION, 12, ref 10002-3)");
        }
        @Test
        public void globalAdmin_canViewCoopSharesTransactions_filteredByMembershipUuidAndValueDateRange() {
            // given
            context("superuser-alex@hostsharing.net");
            final var givenMembership = membershipRepo.findMembershipsByOptionalPartnerUuidAndOptionalMemberNumber(null, 10002).get(0);
            // when
            final var result = coopSharesTransactionRepo.findCoopSharesTransactionByOptionalMembershipUuidAndDateRange(
                    givenMembership.getUuid(),
                    LocalDate.parse("2021-09-01"),
                    LocalDate.parse("2021-09-01"));
            // then
            allTheseCoopSharesTransactionsAreReturned(
                    result,
                    "CoopShareTransaction(10002, 2021-09-01, SUBSCRIPTION, 24, ref 10002-2)");
        }
        @Test
        public void normalUser_canViewOnlyRelatedCoopSharesTransactions() {
            // given:
            context("superuser-alex@hostsharing.net", "hs_office_partner#FirstGmbH-firstcontact.admin");