fix Error code 500 in Relation.find without type (NullPointerException) #109
@ -0,0 +1,98 @@
|
||||
package net.hostsharing.hsadminng.hs.office.relation;
|
||||
|
||||
import net.hostsharing.hsadminng.context.Context;
|
||||
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonRepository;
|
||||
import net.hostsharing.hsadminng.hs.office.person.HsOfficePersonType;
|
||||
import net.hostsharing.hsadminng.rbac.test.ContextBasedTestWithCleanup;
|
||||
import net.hostsharing.hsadminng.rbac.test.JpaAttempt;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.PersistenceContext;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import static net.hostsharing.hsadminng.hs.office.person.HsOfficePersonType.NATURAL_PERSON;
|
||||
import static net.hostsharing.hsadminng.hs.office.relation.HsOfficeRelationType.REPRESENTATIVE;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@DataJpaTest
|
||||
@Import( { Context.class, JpaAttempt.class })
|
||||
class HsOfficeRealRelationRepositoryIntegrationTest extends ContextBasedTestWithCleanup {
|
||||
|
||||
@Autowired
|
||||
HsOfficeRelationRealRepository relationRealRepo;
|
||||
|
||||
@Autowired
|
||||
HsOfficePersonRepository personRepo;
|
||||
|
||||
@PersistenceContext
|
||||
EntityManager em;
|
||||
|
||||
@MockBean
|
||||
HttpServletRequest request;
|
||||
|
||||
@Nested
|
||||
class FindRelations {
|
||||
|
||||
@Test
|
||||
public void canFindAllRelationsOfGivenPerson() {
|
||||
// given
|
||||
final var personUuid = determinePersonUuid(NATURAL_PERSON, "Smith");
|
||||
|
||||
// when
|
||||
final var result = relationRealRepo.findRelationRelatedToPersonUuidAndRelationType(personUuid, null);
|
||||
|
||||
// then
|
||||
context("superuser-alex@hostsharing.net"); // just to be able to access RBAc-entities persons+contact
|
||||
exactlyTheseRelationsAreReturned(
|
||||
result,
|
||||
"rel(anchor='LP Second e.K.', type='REPRESENTATIVE', holder='NP Smith, Peter', contact='second contact')",
|
||||
"rel(anchor='LP Hostsharing eG', type='PARTNER', holder='NP Smith, Peter', contact='sixth contact')",
|
||||
"rel(anchor='NP Smith, Peter', type='DEBITOR', holder='NP Smith, Peter', contact='third contact')",
|
||||
"rel(anchor='IF Third OHG', type='SUBSCRIBER', mark='members-announce', holder='NP Smith, Peter', contact='third contact')"
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canFindAllRelationsOfGivenPersonAndType() {
|
||||
// given:
|
||||
final var personUuid = determinePersonUuid(NATURAL_PERSON, "Smith");
|
||||
|
||||
// when:
|
||||
final var result = relationRealRepo.findRelationRelatedToPersonUuidAndRelationType(personUuid, REPRESENTATIVE);
|
||||
|
||||
// then:
|
||||
context("superuser-alex@hostsharing.net"); // just to be able to access RBAc-entities persons+contact
|
||||
exactlyTheseRelationsAreReturned(
|
||||
result,
|
||||
"rel(anchor='LP Second e.K.', type='REPRESENTATIVE', holder='NP Smith, Peter', contact='second contact')"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private UUID determinePersonUuid(final HsOfficePersonType type, final String familyName) {
|
||||
return (UUID) em.createNativeQuery("""
|
||||
SELECT uuid FROM hs_office.person p
|
||||
WHERE p.personType = cast(:type as hs_office.PersonType) AND p.familyName = :familyName
|
||||
""", UUID.class)
|
||||
.setParameter("familyName", familyName)
|
||||
.setParameter("type", type.toString())
|
||||
.getSingleResult();
|
||||
|
||||
}
|
||||
|
||||
private void exactlyTheseRelationsAreReturned(
|
||||
final List<HsOfficeRelationRealEntity> actualResult,
|
||||
final String... relationNames) {
|
||||
assertThat(actualResult)
|
||||
.extracting(HsOfficeRelation::toString)
|
||||
.containsExactlyInAnyOrder(relationNames);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user