feature/use-case-acceptance-tests #116
@ -10,6 +10,8 @@ import net.hostsharing.hsadminng.hs.office.usecases.membership.CreateMembership;
|
||||
import net.hostsharing.hsadminng.hs.office.usecases.partner.CreatePartner;
|
||||
import net.hostsharing.hsadminng.hs.office.usecases.debitor.DeleteDebitor;
|
||||
import net.hostsharing.hsadminng.hs.office.usecases.partner.DeletePartner;
|
||||
import net.hostsharing.hsadminng.hs.office.usecases.subscription.SubscribeToMailinglist;
|
||||
import net.hostsharing.hsadminng.hs.office.usecases.subscription.UnsubscribeFromMailinglist;
|
||||
import net.hostsharing.hsadminng.rbac.test.JpaAttempt;
|
||||
import org.junit.jupiter.api.MethodOrderer;
|
||||
import org.junit.jupiter.api.Order;
|
||||
@ -132,7 +134,7 @@ class HsOfficeUseCasesTest extends UseCaseTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(3000)
|
||||
@Order(4000)
|
||||
@Requires("Partner: Test AG")
|
||||
void shouldCreateMembershipForPartner() {
|
||||
new CreateMembership(this)
|
||||
@ -142,4 +144,28 @@ class HsOfficeUseCasesTest extends UseCaseTest {
|
||||
.given("membershipFeeBillable", "true")
|
||||
.doRun();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(5000)
|
||||
@Requires("Person: Test AG")
|
||||
@Produces("Subscription: Michael Miller to operations-announce")
|
||||
void shouldSubscribeNewPersonAndContactToMailinglist() {
|
||||
new SubscribeToMailinglist(this)
|
||||
.given("partnerPersonUuid", "%{Person: Test AG}")
|
||||
.given("subscriberFamilyName", "Miller")
|
||||
.given("subscriberGivenName", "Michael")
|
||||
.given("subscriberEMailAddress", "michael.miller@example.org")
|
||||
.given("mailingList", "operations-announce")
|
||||
.doRun()
|
||||
.keep();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(5001)
|
||||
@Requires("Subscription: Michael Miller to operations-announce")
|
||||
void shouldUnsubscribeNewPersonAndContactToMailinglist() {
|
||||
new UnsubscribeFromMailinglist(this)
|
||||
.given("subscriptionUuid", "%{Subscription: Michael Miller to operations-announce}")
|
||||
.doRun();
|
||||
}
|
||||
}
|
||||
|
@ -93,7 +93,7 @@ public class TemplateResolver {
|
||||
|
||||
private char currentChar() {
|
||||
if (position >= template.length()) {
|
||||
throw new IllegalStateException("no more characters. resolved so far: " + resolved);
|
||||
throw new IllegalStateException("no more characters, maybe closing bracelet missing in template: '''\n" + template + "\n'''");
|
||||
}
|
||||
return template.charAt(position);
|
||||
}
|
||||
|
@ -115,7 +115,7 @@ public abstract class UseCase<T extends UseCase<?>> {
|
||||
}
|
||||
|
||||
public final UUID uuid(final String alias) {
|
||||
return UseCaseTest.getAlias(alias).uuid();
|
||||
return UseCaseTest.uuid(alias);
|
||||
}
|
||||
|
||||
public static class JsonTemplate {
|
||||
|
@ -29,6 +29,7 @@ import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.util.Arrays.asList;
|
||||
import static java.util.Optional.ofNullable;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public abstract class UseCaseTest extends ContextBasedTest {
|
||||
@ -151,10 +152,10 @@ public abstract class UseCaseTest extends ContextBasedTest {
|
||||
return aliases.containsKey(alias);
|
||||
}
|
||||
|
||||
static Alias<?> getAlias(final String name) {
|
||||
final var alias = aliases.get(name);
|
||||
assertThat(alias).as("alias '" + name + "' not found in aliases [" +
|
||||
aliases.keySet().stream().map(v -> "'" + v + "'").collect(Collectors.joining(", ")) + "]"
|
||||
static UUID uuid(final String name) {
|
||||
final UUID alias = ofNullable(knowVariables().get(name)).filter(v -> v instanceof UUID).map(UUID.class::cast).orElse(null);
|
||||
assertThat(alias).as("alias '" + name + "' not found in aliases nor in properties [" +
|
||||
knowVariables().keySet().stream().map(v -> "'" + v + "'").collect(Collectors.joining(", ")) + "]"
|
||||
).isNotNull();
|
||||
return alias;
|
||||
}
|
||||
@ -164,7 +165,7 @@ public abstract class UseCaseTest extends ContextBasedTest {
|
||||
}
|
||||
|
||||
static void putProperty(final String name, final Object value) {
|
||||
properties.put(name, (value instanceof String string) ? resolve(string) : value);
|
||||
properties.put(name, (value instanceof String string) ? resolveTyped(string) : value);
|
||||
}
|
||||
|
||||
static Map<String, Object> knowVariables() {
|
||||
@ -179,4 +180,14 @@ public abstract class UseCaseTest extends ContextBasedTest {
|
||||
return resolved;
|
||||
}
|
||||
|
||||
static Object resolveTyped(final String text) {
|
||||
final var resolved = resolve(text);
|
||||
try {
|
||||
return UUID.fromString(resolved);
|
||||
} catch (final IllegalArgumentException e) {
|
||||
// ignore and just use the String value
|
||||
}
|
||||
return resolved;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,53 @@
|
||||
package net.hostsharing.hsadminng.hs.office.usecases.subscription;
|
||||
|
||||
import io.restassured.http.ContentType;
|
||||
import net.hostsharing.hsadminng.hs.office.usecases.UseCase;
|
||||
import net.hostsharing.hsadminng.hs.office.usecases.UseCaseTest;
|
||||
import org.springframework.http.HttpStatus;
|
||||
|
||||
import static io.restassured.http.ContentType.JSON;
|
||||
import static org.springframework.http.HttpStatus.CREATED;
|
||||
|
||||
public class SubscribeToMailinglist extends UseCase<SubscribeToMailinglist> {
|
||||
|
||||
public SubscribeToMailinglist(final UseCaseTest testSuite) {
|
||||
super(testSuite);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected HttpResponse run() {
|
||||
keep("Person: %{subscriberGivenName} %{subscriberFamilyName}", () ->
|
||||
httpPost("/api/hs/office/persons", usingJsonBody("""
|
||||
{
|
||||
"personType": "NATURAL_PERSON",
|
||||
"familyName": ${subscriberFamilyName},
|
||||
"givenName": ${subscriberGivenName}
|
||||
}
|
||||
"""))
|
||||
.expecting(HttpStatus.CREATED).expecting(ContentType.JSON)
|
||||
);
|
||||
|
||||
keep("Contact: %{subscriberGivenName} %{subscriberFamilyName}", () ->
|
||||
httpPost("/api/hs/office/contacts", usingJsonBody("""
|
||||
{
|
||||
"caption": "%{subscriberGivenName} %{subscriberFamilyName}",
|
||||
"emailAddresses": {
|
||||
"main": ${subscriberEMailAddress}
|
||||
}
|
||||
}
|
||||
"""))
|
||||
.expecting(CREATED).expecting(JSON)
|
||||
);
|
||||
|
||||
return httpPost("/api/hs/office/relations", usingJsonBody("""
|
||||
{
|
||||
"type": "SUBSCRIBER",
|
||||
"mark": ${mailingList},
|
||||
"anchorUuid": ${partnerPersonUuid},
|
||||
"holderUuid": ${Person: %{subscriberGivenName} %{subscriberFamilyName}},
|
||||
"contactUuid": ${Contact: %{subscriberGivenName} %{subscriberFamilyName}}
|
||||
}
|
||||
"""))
|
||||
.expecting(CREATED).expecting(JSON);
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package net.hostsharing.hsadminng.hs.office.usecases.subscription;
|
||||
|
||||
import net.hostsharing.hsadminng.hs.office.usecases.UseCase;
|
||||
import net.hostsharing.hsadminng.hs.office.usecases.UseCaseTest;
|
||||
|
||||
import static org.springframework.http.HttpStatus.NO_CONTENT;
|
||||
|
||||
public class UnsubscribeFromMailinglist extends UseCase<UnsubscribeFromMailinglist> {
|
||||
|
||||
public UnsubscribeFromMailinglist(final UseCaseTest testSuite) {
|
||||
super(testSuite);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected HttpResponse run() {
|
||||
|
||||
return httpDelete("/api/hs/office/relations/" + uuid("subscriptionUuid"))
|
||||
.expecting(NO_CONTENT);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user