Skip to content

Commit 370b35d

Browse files
committed
Improve exercise one.
Make structure of tests consistent in provider and consumer. Restructure pact execution to move things next to each other. Rename Provider test. Add comments to each pact test. Update presentation file accordingly.
1 parent f1158f7 commit 370b35d

File tree

11 files changed

+72
-55
lines changed

11 files changed

+72
-55
lines changed

address-service/src/test/java/net/nautsch/address/AddressTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package net.nautsch.address;
22

3+
import net.nautsch.address.builders.a;
4+
35
import org.junit.Test;
46

57
import static org.hamcrest.CoreMatchers.is;

address-service/src/test/java/net/nautsch/address/AddressBuilder.java renamed to address-service/src/test/java/net/nautsch/address/builders/AddressBuilder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package net.nautsch.address;
1+
package net.nautsch.address.builders;
2+
3+
import net.nautsch.address.Address;
24

35
public class AddressBuilder {
46

address-service/src/test/java/net/nautsch/address/a.java renamed to address-service/src/test/java/net/nautsch/address/builders/a.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.nautsch.address;
1+
package net.nautsch.address.builders;
22

33
public class a {
44

address-service/src/test/java/net/nautsch/address/pact/ProviderPactTest.java renamed to address-service/src/test/java/net/nautsch/address/pact/PactProviderVerificationTest.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import au.com.dius.pact.provider.junit.target.HttpTarget;
77
import au.com.dius.pact.provider.junit.target.Target;
88
import au.com.dius.pact.provider.junit.target.TestTarget;
9+
910
import org.junit.Before;
1011
import org.junit.runner.RunWith;
1112
import org.springframework.boot.test.context.SpringBootTest;
@@ -18,19 +19,19 @@
1819
@Provider("address_service")
1920
@PactFolder("pacts")
2021
//@PactBroker(host="broker.nautsch.net", port = "80")
21-
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.DEFINED_PORT)
22-
public class ProviderPactTest {
22+
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
23+
public class PactProviderVerificationTest {
2324

24-
private static int port =8888;
25+
private final static int PORT = 8888;
2526

2627

2728
@Before
2829
public void before() throws Exception {
29-
TestContextManager testContextManager = new TestContextManager(ProviderPactTest.class);
30+
TestContextManager testContextManager = new TestContextManager(PactProviderVerificationTest.class);
3031
testContextManager.prepareTestInstance(this);
3132
}
3233

3334

3435
@TestTarget
35-
public final Target target = new HttpTarget(port);
36+
public final Target target = new HttpTarget(PORT);
3637
}

invoice-service/src/test/java/net/nautsch/invoice/RecipientProviderTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package net.nautsch.invoice;
22

33
import net.nautsch.invoice.adapters.address.AddressToRecipientConverter;
4+
import net.nautsch.invoice.builders.a;
5+
46
import org.junit.Test;
57

68
import static org.hamcrest.CoreMatchers.notNullValue;
@@ -15,7 +17,7 @@ public class RecipientProviderTest {
1517
public void shouldDeliverRecipient() {
1618
// given
1719
AddressProvider addressProvider =
18-
a.recipientProvider().delivering(a.address()).build();
20+
a.addressProvider().delivering(a.address()).build();
1921

2022
RecipientProvider sut = new RecipientProvider(addressProvider, new AddressToRecipientConverter());
2123
// when

invoice-service/src/test/java/net/nautsch/invoice/adapters/address/AddressToRecipientConverterTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import net.nautsch.invoice.Address;
44
import net.nautsch.invoice.Recipient;
5-
import net.nautsch.invoice.a;
5+
import net.nautsch.invoice.builders.a;
66
import org.junit.Test;
77

88
import static org.hamcrest.CoreMatchers.is;

invoice-service/src/test/java/net/nautsch/invoice/AddressBuilder.java renamed to invoice-service/src/test/java/net/nautsch/invoice/builders/AddressBuilder.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package net.nautsch.invoice;
1+
package net.nautsch.invoice.builders;
2+
3+
import net.nautsch.invoice.Address;
24

35
/**
46
* test data builder.
@@ -8,6 +10,10 @@ public class AddressBuilder {
810
private String surname = "surname";
911
private String firstname = "firstname";
1012

13+
AddressBuilder() {
14+
super();
15+
}
16+
1117
public Address build() {
1218
return new AddressDummy();
1319
}

invoice-service/src/test/java/net/nautsch/invoice/AddressProviderBuilder.java renamed to invoice-service/src/test/java/net/nautsch/invoice/builders/AddressProviderBuilder.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,29 @@
1-
package net.nautsch.invoice;
1+
package net.nautsch.invoice.builders;
2+
3+
import net.nautsch.invoice.Address;
4+
import net.nautsch.invoice.AddressProvider;
25

36
/**
47
* test data builder.
58
*/
6-
class AddressProviderBuilder {
9+
public class AddressProviderBuilder {
710

811
private Address addressToDeliver;
912

10-
AddressProvider build() {
13+
AddressProviderBuilder() {
14+
super();
15+
}
16+
17+
public AddressProvider build() {
1118
return new AddressProviderDummy();
1219
}
1320

14-
AddressProviderBuilder delivering(Address address) {
21+
public AddressProviderBuilder delivering(Address address) {
1522
this.addressToDeliver = address;
1623
return this;
1724
}
1825

19-
AddressProviderBuilder delivering(AddressBuilder address) {
26+
public AddressProviderBuilder delivering(AddressBuilder address) {
2027
this.delivering(address.build());
2128
return this;
2229
}

invoice-service/src/test/java/net/nautsch/invoice/a.java renamed to invoice-service/src/test/java/net/nautsch/invoice/builders/a.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package net.nautsch.invoice;
1+
package net.nautsch.invoice.builders;
22

33
/**
44
* start point for all test data builders.
55
*/
66
public class a {
77

8-
public static AddressProviderBuilder recipientProvider() {
8+
public static AddressProviderBuilder addressProvider() {
99
return new AddressProviderBuilder();
1010
}
1111

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,70 @@
1-
package net.nautsch.invoice.adapters.address;
1+
package net.nautsch.invoice.pact;
22

33
import au.com.dius.pact.consumer.ConsumerPactBuilder;
44
import au.com.dius.pact.consumer.PactError;
5-
import au.com.dius.pact.consumer.TestRun;
65
import au.com.dius.pact.consumer.VerificationResult;
76
import au.com.dius.pact.consumer.dsl.PactDslJsonBody;
87
import au.com.dius.pact.model.MockProviderConfig;
98
import au.com.dius.pact.model.PactFragment;
109
import au.com.dius.pact.model.PactSpecVersion;
10+
import java.util.Collections;
11+
import java.util.function.Consumer;
1112
import net.nautsch.invoice.Address;
12-
import org.apache.http.entity.ContentType;
13-
import org.junit.Test;
13+
import net.nautsch.invoice.adapters.address.AddressServiceAdapter;
1414

15-
import java.util.HashMap;
16-
import java.util.Map;
15+
import org.apache.http.HttpStatus;
16+
import org.junit.Test;
1717

1818
import static au.com.dius.pact.consumer.ConsumerPactTest.PACT_VERIFIED;
19+
import static org.apache.http.entity.ContentType.APPLICATION_JSON;
1920
import static org.hamcrest.CoreMatchers.is;
2021
import static org.junit.Assert.assertThat;
2122

2223
/**
23-
* integration test.
24+
* Pact consumer test, generates the consumer contract.
2425
*/
2526
public class AddressServiceAdapterTest {
2627

2728
private static final String ADDRESS = "address_service";
2829
private static final String INVOICE = "invoice_service";
2930

30-
31-
// tag::shouldDeliverAnAddress[]
31+
// tag::shouldDeliverValidAddress[]
3232
@Test
33-
public void shouldDeliverAnAddress() {
33+
public void shouldDeliverValidAddress() {
3434
PactDslJsonBody responseBody = new PactDslJsonBody()
3535
.stringType("firstName", "Jan")
3636
.stringType("surname", "Wloka");
3737

38-
PactFragment fragment = buildPactFragment(responseBody, "get an address");
38+
PactFragment pact = buildPact("", responseBody, "get an address");
3939

40-
runTest(fragment);
41-
}
42-
// end::shouldDeliverAnAddress[]
40+
assertPact(pact, config -> {
41+
Address actual = new AddressServiceAdapter(config.url()).getAddress("1");
4342

44-
private PactFragment buildPactFragment(PactDslJsonBody responseBody, String description) {
45-
return buildPactFragment("", responseBody, description);
43+
assertThat(actual.getFirstName(), is("Jan"));
44+
assertThat(actual.getSurname(), is("Wloka"));
45+
});
4646
}
47+
// end::shouldDeliverValidAddress[]
4748

48-
private PactFragment buildPactFragment(String requestBody, PactDslJsonBody responseBody, String description) {
49-
Map<String, String> headers = new HashMap<>();
50-
headers.put("Content-Type", ContentType.APPLICATION_JSON.toString());
49+
private PactFragment buildPact(String requestBody, PactDslJsonBody responseBody, String description) {
5150
return ConsumerPactBuilder
5251
.consumer(INVOICE)
5352
.hasPactWith(ADDRESS)
5453
.uponReceiving(description)
5554
.path("/addresses/1")
5655
.method("GET")
5756
.body(requestBody)
58-
.headers(new HashMap<>())
57+
.headers(Collections.emptyMap())
5958
.willRespondWith()
60-
.status(200)
59+
.status(HttpStatus.SC_OK)
6160
.body(responseBody)
62-
.headers(headers)
61+
.headers(Collections.singletonMap("Content-Type", APPLICATION_JSON.toString()))
6362
.toFragment();
6463
}
6564

66-
private void runTest(final PactFragment pactFragment) {
65+
private void assertPact(PactFragment pact, Consumer<MockProviderConfig> consumer) {
6766
MockProviderConfig config = MockProviderConfig.createDefault(PactSpecVersion.V3);
68-
VerificationResult result = pactFragment.runConsumer(config, new TestRun() {
69-
@Override
70-
public void run(MockProviderConfig config) {
71-
Address result = new AddressServiceAdapter(config.url()).getAddress("1");
72-
assertThat(result.getFirstName(), is("Jan"));
73-
assertThat(result.getSurname(), is("Wloka"));
74-
}
75-
});
67+
VerificationResult result = pact.runConsumer(config, consumer::accept);
7668

7769
if (result instanceof PactError) {
7870
throw new RuntimeException(((PactError)result).error());

presentation/src/docs/asciidoc/presentation.adoc

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,16 @@ Let's exercise, hack and talk about
2222

2323
image::service-example.png[consumer - communicate - producer]
2424

25-
== Exercise-01 - Run the test
25+
== Exercise-01 - Run the tests
2626

27-
* checkout repo `[email protected]:ollin/cdc-workshop.git`
28-
* cd into `cdc-workshop`
29-
* run `./gradlew check` (on windows: `./gradlew.bat check`)
27+
* *Get the code:*
28+
** checkout repo +
29+
`[email protected]:ollin/cdc-workshop.git`
30+
** cd into `cdc-workshop`
31+
* *Check your setup:*
32+
** run `./gradlew check` (on windows: `./gradlew.bat`)
33+
* *Run the tests:*
34+
** run `./gradlew clean test` (on windows: `./gradlew.bat`)
3035

3136
== Project Overview
3237

@@ -67,14 +72,14 @@ image::service-overview.png[projects - producer - consumer]
6772
== Consumers test
6873

6974
[source,java]
70-
.cdc-workshop/invoice-service/src/test/java/net/nautsch/invoice/adapters/address/AddressServiceAdapterTest.java
75+
.cdc-workshop/invoice-service/src/test/java/net/nautsch/invoice/pact/AddressServiceAdapterTest.java
7176
----
7277
...
73-
include::{invoice-sourcedir}/src/test/java/net/nautsch/invoice/adapters/address/AddressServiceAdapterTest.java[tags=shouldDeliverAnAddress]
78+
include::{invoice-sourcedir}/src/test/java/net/nautsch/invoice/pact/AddressServiceAdapterTest.java[tags=shouldDeliverValidAddress]
7479
...
7580
----
7681

77-
== Exercise-02 - Add street
82+
== Exercise-02 - Add street to consumer
7883

7984
The Consumer needs a street value
8085

0 commit comments

Comments
 (0)