Skip to content

Commit a288697

Browse files
Merge pull request #1216 from SpineEventEngine/expose-query-result
Expose Query result in QueryResultSubject
2 parents 3759f2a + 41d740f commit a288697

File tree

7 files changed

+80
-151
lines changed

7 files changed

+80
-151
lines changed

config

license-report.md

Lines changed: 22 additions & 116 deletions
Large diffs are not rendered by default.

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ all modules and does not describe the project structure per-subproject.
1212

1313
<groupId>io.spine</groupId>
1414
<artifactId>spine-core-java</artifactId>
15-
<version>1.3.0</version>
15+
<version>1.3.1</version>
1616

1717
<inceptionYear>2015</inceptionYear>
1818

testutil-server/src/main/java/io/spine/testing/server/blackbox/BlackBoxBoundedContext.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -918,16 +918,14 @@ public QueryResultSubject assertQueryResult(Query query) {
918918
*
919919
* <p>The method may be used as follows:
920920
* <pre>
921-
* {@code
922-
* VerifyingCounter updateCounter =
923-
* context.assertSubscriptionUpdates(
924-
* topic,
925-
* assertEachReceived -> assertEachReceived.comparingExpectedFieldsOnly()
926-
* .isEqualTo(expected)
927-
* );
928-
* context.receivesCommand(createProject); // Some command creating the `expected`.
929-
* updateCounter.verifyEquals(1);
930-
* }
921+
* VerifyingCounter updateCounter =
922+
* context.assertSubscriptionUpdates(
923+
* topic,
924+
* assertEachReceived -> assertEachReceived.comparingExpectedFieldsOnly()
925+
* .isEqualTo(expected)
926+
* );
927+
* context.receivesCommand(createProject); // Some command creating the `expected`.
928+
* updateCounter.verifyEquals(1);
931929
* </pre>
932930
*
933931
* <p>Please note that the return value may be ignored, but then receiving {@code 0} incoming

testutil-server/src/main/java/io/spine/testing/server/blackbox/verify/query/QueryResultSubject.java

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@
5252
* .containsExactly(state1, state2);
5353
* </pre>
5454
*
55+
* <p>If the actual queried messages are required, the subject can return them as follows:
56+
* <pre>
57+
* context.assertQueryResult(query)
58+
* .actual();
59+
* </pre>
60+
*
5561
* <p>There are also convenience methods for checking response {@link Status} and received entity
5662
* {@linkplain Version versions}, as well as some others.
5763
*
@@ -80,22 +86,12 @@ public final class QueryResultSubject
8086
*/
8187
private IterableEntityVersionSubject versionsSubject;
8288

83-
private final Iterable<EntityState> actual;
89+
private final ImmutableList<EntityState> actual;
8490

8591
private QueryResultSubject(FailureMetadata failureMetadata,
8692
Iterable<EntityState> entityStates) {
8793
super(failureMetadata, entityStates);
88-
this.actual = entityStates;
89-
}
90-
91-
private void initChildSubjects(QueryResponse queryResponse) {
92-
Status status = extractStatus(queryResponse);
93-
statusSubject = check("getResponse().getStatus()").about(responseStatus())
94-
.that(status);
95-
96-
Iterable<Version> versions = extractEntityVersions(queryResponse);
97-
versionsSubject = check("getEntityVersions()").about(entityVersions())
98-
.that(versions);
94+
this.actual = ImmutableList.copyOf(entityStates);
9995
}
10096

10197
/**
@@ -104,8 +100,7 @@ private void initChildSubjects(QueryResponse queryResponse) {
104100
* <p>Unlike other {@code Subject}s, the {@code QueryResultSubject} does not accept
105101
* {@code null} arguments, as {@code null} {@code QueryResponse} always indicates an error.
106102
*/
107-
public static
108-
QueryResultSubject assertQueryResult(QueryResponse queryResponse) {
103+
public static QueryResultSubject assertQueryResult(QueryResponse queryResponse) {
109104
checkNotNull(queryResponse, "`QueryResponse` must never be `null`.");
110105

111106
Iterable<EntityState> entityStates = extractEntityStates(queryResponse);
@@ -114,6 +109,23 @@ QueryResultSubject assertQueryResult(QueryResponse queryResponse) {
114109
return subject;
115110
}
116111

112+
private void initChildSubjects(QueryResponse queryResponse) {
113+
Status status = extractStatus(queryResponse);
114+
statusSubject = check("getResponse().getStatus()").about(responseStatus())
115+
.that(status);
116+
117+
Iterable<Version> versions = extractEntityVersions(queryResponse);
118+
versionsSubject = check("getEntityVersions()").about(entityVersions())
119+
.that(versions);
120+
}
121+
122+
/**
123+
* Obtains the actually queried entity states.
124+
*/
125+
public ImmutableList<EntityState> actual(){
126+
return actual;
127+
}
128+
117129
/**
118130
* Verifies the status of the received {@link QueryResponse}.
119131
*/
@@ -135,8 +147,10 @@ public ResponseStatusSubject hasStatusThat() {
135147
*/
136148
public ProtoSubject containsSingleEntityStateThat() {
137149
assertContainsSingleItem();
138-
EntityState state = actual.iterator().next();
139-
ProtoSubject subject = check("singleEntityState()").about(protos()).that(state);
150+
EntityState state = actual.iterator()
151+
.next();
152+
ProtoSubject subject = check("singleEntityState()").about(protos())
153+
.that(state);
140154
return subject;
141155
}
142156

@@ -160,7 +174,7 @@ private void assertContainsSingleItem() {
160174
hasSize(1);
161175
}
162176

163-
private static Iterable<EntityState> extractEntityStates(QueryResponse queryResponse) {
177+
private static ImmutableList<EntityState> extractEntityStates(QueryResponse queryResponse) {
164178
ImmutableList<EntityState> result = ImmutableList.copyOf(queryResponse.states());
165179
return result;
166180
}
@@ -170,8 +184,9 @@ private static Collection<Version> extractEntityVersions(QueryResponse queryResp
170184
}
171185

172186
private static Status extractStatus(QueryResponse queryResponse) {
173-
return queryResponse.getResponse()
174-
.getStatus();
187+
return queryResponse
188+
.getResponse()
189+
.getStatus();
175190
}
176191

177192
static Subject.Factory<QueryResultSubject, Iterable<EntityState>> queryResult() {

testutil-server/src/test/java/io/spine/testing/server/blackbox/verify/query/QueryResultSubjectTest.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
package io.spine.testing.server.blackbox.verify.query;
2222

23+
import com.google.common.collect.ImmutableList;
2324
import com.google.common.testing.NullPointerTester;
2425
import com.google.common.truth.Subject;
2526
import io.spine.base.EntityState;
@@ -29,6 +30,7 @@
2930
import org.junit.jupiter.api.Test;
3031

3132
import static com.google.common.truth.ExpectFailure.assertThat;
33+
import static com.google.common.truth.Truth.assertThat;
3234
import static io.spine.core.Status.StatusCase.ERROR;
3335
import static io.spine.core.Status.StatusCase.OK;
3436
import static io.spine.testing.DisplayNames.NOT_ACCEPT_NULLS;
@@ -80,6 +82,14 @@ void checkResponseStatus() {
8082
.isEqualTo(OK.toString());
8183
}
8284

85+
@Test
86+
@DisplayName("return actual query results")
87+
void provideActualResults() {
88+
QueryResponse response = responseWithMultipleEntities();
89+
ImmutableList<EntityState> actualEntities = assertWithSubjectThat(response).actual();
90+
assertThat(actualEntities).hasSize(2);
91+
}
92+
8393
@Test
8494
@DisplayName("provide subject for the response status")
8595
void provideResponseStatusSubject() {
@@ -117,7 +127,7 @@ void provideEntityStateProtoSubject() {
117127
expectSomeFailure(
118128
() -> assertWithSubjectThat(responseWithSingleEntity())
119129
.containsSingleEntityStateThat()
120-
.isEqualTo(state2())
130+
.isEqualTo(state2())
121131
);
122132
}
123133

version.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@
2525
* as we want to manage the versions in a single source.
2626
*/
2727

28-
final def spineVersion = '1.3.0'
28+
final def spineVersion = '1.3.1'
2929

3030
ext {
3131
// The version of the modules in this project.
3232
versionToPublish = spineVersion
3333

3434
// Depend on `base` for the general definitions and a model compiler.
35-
spineBaseVersion = spineVersion
35+
spineBaseVersion = '1.3.0'
3636

3737
// Depend on `time` for `ZoneId`, `ZoneOffset` and other date/time types and utilities.
38-
spineTimeVersion = spineVersion
38+
spineTimeVersion = '1.3.0'
3939
}

0 commit comments

Comments
 (0)