1
0

add hs_admin_contact table and repository with findContactByOptionalLabelLike+save

This commit is contained in:
Michael Hoennig
2022-09-06 19:43:15 +02:00
parent da793ee546
commit 2afdb3c3d7
11 changed files with 567 additions and 10 deletions

View File

@ -1,14 +1,144 @@
package net.hostsharing.hsadminng.hs.admin.contact;
import net.hostsharing.hsadminng.context.Context;
import net.hostsharing.hsadminng.context.ContextBasedTest;
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.ComponentScan;
import org.springframework.test.annotation.DirtiesContext;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
class HsAdminContactRepositoryIntegrationTest {
import static net.hostsharing.hsadminng.hs.admin.contact.TestHsAdminContact.hsAdminContact;
import static net.hostsharing.test.JpaAttempt.attempt;
import static org.assertj.core.api.Assertions.assertThat;
@Test
void test() throws UnsupportedEncodingException, NoSuchAlgorithmException {
@DataJpaTest
@ComponentScan(basePackageClasses = { Context.class, HsAdminContactRepository.class })
@DirtiesContext
class HsAdminContactRepositoryIntegrationTest extends ContextBasedTest {
@Autowired
HsAdminContactRepository contactRepo;
@Autowired
EntityManager em;
@MockBean
HttpServletRequest request;
@Nested
class CreateContact {
@Test
public void globalAdmin_withoutAssumedRole_canCreateNewContact() {
// given
context("alex@hostsharing.net");
final var count = contactRepo.count();
// when
final var result = attempt(em, () -> contactRepo.save(
hsAdminContact("a new contact", "contact-admin@www.example.com")));
// then
assertThat(result.wasSuccessful()).isTrue();
assertThat(result.returnedValue()).isNotNull().extracting(HsAdminContactEntity::getUuid).isNotNull();
assertThatContactIsPersisted(result.returnedValue());
assertThat(contactRepo.count()).isEqualTo(count + 1);
}
@Test
public void arbitraryUser_canCreateNewContact() {
// given
context("pac-admin-xxx00@xxx.example.com");
final var count = contactRepo.count();
// when
final var result = attempt(em, () -> contactRepo.save(
hsAdminContact("another new contact", "another-new-contact@example.com")));
// then
assertThat(result.wasSuccessful()).isTrue();
assertThat(result.returnedValue()).isNotNull().extracting(HsAdminContactEntity::getUuid).isNotNull();
assertThatContactIsPersisted(result.returnedValue());
assertThat(contactRepo.count()).isEqualTo(count + 1);
}
private void assertThatContactIsPersisted(final HsAdminContactEntity saved) {
final var found = contactRepo.findByUuid(saved.getUuid());
assertThat(found).isNotEmpty().get().usingRecursiveComparison().isEqualTo(saved);
}
}
@Nested
class FindAllContacts {
@Test
public void globalAdmin_withoutAssumedRole_canViewAllContacts() {
// given
context("alex@hostsharing.net");
// when
final var result = contactRepo.findContactByOptionalLabelLike(null);
// then
allTheseContactsAreReturned(result, "first contact", "second contact", "third contact");
}
@Test
public void arbitraryUser_canViewOnlyItsOwnContact() {
context("customer-admin@secondcontact.example.com");
final var result = contactRepo.findContactByOptionalLabelLike(null);
exactlyTheseContactsAreReturned(result, "second contact");
}
}
@Nested
class FindByPrefixLike {
@Test
public void globalAdmin_withoutAssumedRole_canViewAllContacts() {
// given
context("alex@hostsharing.net", null);
// when
final var result = contactRepo.findContactByOptionalLabelLike("second");
// then
exactlyTheseContactsAreReturned(result, "second contact");
}
@Test
public void arbitraryUser_withoutAssumedRole_canViewOnlyItsOwnContact() {
// given:
context("customer-admin@secondcontact.example.com", null);
// when:
final var result = contactRepo.findContactByOptionalLabelLike("second contact");
// then:
exactlyTheseContactsAreReturned(result, "second contact");
}
}
void exactlyTheseContactsAreReturned(final List<HsAdminContactEntity> actualResult, final String... contactLabels) {
assertThat(actualResult)
.hasSize(contactLabels.length)
.extracting(HsAdminContactEntity::getLabel)
.containsExactlyInAnyOrder(contactLabels);
}
void allTheseContactsAreReturned(final List<HsAdminContactEntity> actualResult, final String... contactLabels) {
assertThat(actualResult)
.extracting(HsAdminContactEntity::getLabel)
.contains(contactLabels);
}
}

View File

@ -0,0 +1,17 @@
package net.hostsharing.hsadminng.hs.admin.contact;
import java.util.UUID;
public class TestHsAdminContact {
public static final HsAdminContactEntity someContact = hsAdminContact("some contact", "some-contact@example.com");
static public HsAdminContactEntity hsAdminContact(final String label, final String emailAddr) {
return HsAdminContactEntity.builder()
.uuid(UUID.randomUUID())
.label(label)
.postalAddress("address of " + label)
.emailAddresses(emailAddr)
.build();
}
}