Skip to content

Commit 8156a8b

Browse files
committed
Move the columns of StgProject to GivenStorageProject and update naming.
Introduce another set of API endpoints in `GivenStorageProject` which treat it as an Entity state.
1 parent 7bffd01 commit 8156a8b

File tree

3 files changed

+88
-63
lines changed

3 files changed

+88
-63
lines changed

server/src/test/java/io/spine/server/storage/given/GivenStorageProject.java

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,24 @@
2626

2727
package io.spine.server.storage.given;
2828

29+
import com.google.protobuf.Any;
2930
import com.google.protobuf.Timestamp;
3031
import com.google.protobuf.util.Durations;
3132
import com.google.protobuf.util.Timestamps;
33+
import io.spine.base.Identifier;
34+
import io.spine.protobuf.AnyPacker;
35+
import io.spine.query.Columns;
36+
import io.spine.query.RecordColumn;
37+
import io.spine.query.RecordColumns;
38+
import io.spine.server.entity.EntityRecord;
39+
import io.spine.server.entity.storage.SpecScanner;
40+
import io.spine.server.storage.MessageRecordSpec;
41+
import io.spine.server.storage.RecordWithColumns;
3242
import io.spine.test.storage.StgProject;
3343
import io.spine.test.storage.StgProject.Status;
3444
import io.spine.test.storage.StgProjectId;
3545
import io.spine.test.storage.StgTask;
46+
import io.spine.testing.core.given.GivenVersion;
3647

3748
import static io.spine.base.Identifier.newUuid;
3849
import static io.spine.base.Time.currentTime;
@@ -41,6 +52,15 @@
4152

4253
public final class GivenStorageProject {
4354

55+
private static final MessageRecordSpec<StgProjectId, StgProject> messageSpec =
56+
new MessageRecordSpec<>(StgProjectId.class,
57+
StgProject.class,
58+
StgProject::getId,
59+
StgProjectColumns.definitions());
60+
61+
private static final MessageRecordSpec<StgProjectId, EntityRecord> entityRecordSpec =
62+
SpecScanner.scan(StgProjectId.class, StgProject.class);
63+
4464
/**
4565
* Prevents this utility from instantiation.
4666
*/
@@ -108,4 +128,55 @@ public static StgProject newState() {
108128
var id = newId();
109129
return newState(id);
110130
}
131+
132+
/**
133+
* Returns the record specification for {@code StgProject}.
134+
*/
135+
public static MessageRecordSpec<StgProjectId, StgProject> projectMessageSpec() {
136+
return messageSpec;
137+
}
138+
139+
/**
140+
* Generates a new {@code StgProject} as Entity,
141+
* and wraps it into a {@code RecordWithColumns}.
142+
*/
143+
public static RecordWithColumns<StgProjectId, EntityRecord> newEntityRecord() {
144+
var project = newState();
145+
var record = EntityRecord.newBuilder()
146+
.setEntityId(Identifier.pack(project.getId()))
147+
.setVersion(GivenVersion.withNumber(7))
148+
.setState(AnyPacker.pack(project))
149+
.build();
150+
var result = RecordWithColumns.create(record, entityRecordSpec);
151+
return result;
152+
}
153+
154+
/**
155+
* Columns of {@code StgProject} stored as record.
156+
*/
157+
@RecordColumns(ofType = StgProject.class)
158+
public static final class StgProjectColumns {
159+
160+
private StgProjectColumns() {
161+
}
162+
163+
public static final RecordColumn<StgProject, String> name =
164+
RecordColumn.create("name", String.class, StgProject::getName);
165+
166+
public static final RecordColumn<StgProject, Timestamp> due_date =
167+
RecordColumn.create("due_date", Timestamp.class, StgProject::getDueDate);
168+
169+
public static final RecordColumn<StgProject, Any> state_as_any =
170+
RecordColumn.create("state_as_any", Any.class, AnyPacker::pack);
171+
172+
public static final RecordColumn<StgProject, String> random_non_stored_column =
173+
RecordColumn.create("random_non_stored_column", String.class, (p) -> "31415926");
174+
175+
/**
176+
* Returns all the column definitions.
177+
*/
178+
public static Columns<StgProject> definitions() {
179+
return Columns.of(name, due_date, state_as_any);
180+
}
181+
}
111182
}

server/src/test/java/io/spine/server/storage/memory/RecordQueryMatcherTest.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,19 @@
2727
package io.spine.server.storage.memory;
2828

2929
import io.spine.server.storage.RecordWithColumns;
30-
import io.spine.server.storage.memory.given.RecordQueryMatcherTestEnv;
31-
import io.spine.server.storage.memory.given.RecordQueryMatcherTestEnv.StgProjectColumns;
30+
import io.spine.server.storage.given.GivenStorageProject.StgProjectColumns;
31+
import io.spine.test.storage.StgProject;
3232
import io.spine.test.storage.StgProjectId;
33+
import org.checkerframework.checker.nullness.qual.NonNull;
3334
import org.junit.jupiter.api.DisplayName;
3435
import org.junit.jupiter.api.Test;
3536

3637
import static com.google.common.truth.Truth.assertThat;
3738
import static io.spine.protobuf.AnyPacker.pack;
3839
import static io.spine.server.storage.given.GivenStorageProject.newState;
40+
import static io.spine.server.storage.given.GivenStorageProject.projectMessageSpec;
3941
import static io.spine.server.storage.memory.given.RecordQueryMatcherTestEnv.newBuilder;
4042
import static io.spine.server.storage.memory.given.RecordQueryMatcherTestEnv.recordSubject;
41-
import static io.spine.server.storage.memory.given.RecordQueryMatcherTestEnv.projectSpec;
4243
import static io.spine.testdata.Sample.messageOfType;
4344
import static io.spine.testing.TestValues.nullRef;
4445

@@ -53,7 +54,7 @@ void matchEverythingToEmpty() {
5354

5455
assertThat(matcher.test(nullRef()))
5556
.isFalse();
56-
assertThat(matcher.test(RecordWithColumns.create(newState(), projectSpec())))
57+
assertThat(matcher.test(asRecord(newState())))
5758
.isTrue();
5859
}
5960

@@ -67,8 +68,8 @@ void matchIds() {
6768
var matcher = new RecordQueryMatcher<>(subject);
6869
var matching = newState(matchingId);
6970
var nonMatching = newState(nonMatchingId);
70-
var matchingRecord = RecordWithColumns.create(matching, projectSpec());
71-
var nonMatchingRecord = RecordWithColumns.create(nonMatching, projectSpec());
71+
var matchingRecord = asRecord(matching);
72+
var nonMatchingRecord = asRecord(nonMatching);
7273
assertThat(matcher.test(matchingRecord))
7374
.isTrue();
7475
assertThat(matcher.test(nonMatchingRecord))
@@ -82,23 +83,28 @@ void matchColumns() {
8283
var matchingName = matchingState.getName();
8384
var query = newBuilder().where(StgProjectColumns.name).is(matchingName).build();
8485
var matcher = new RecordQueryMatcher<>(query.subject());
85-
var matchingRecord = RecordWithColumns.create(matchingState, projectSpec());
86+
var matchingRecord = asRecord(matchingState);
8687
var nonMatching = newState();
87-
var nonMatchingRecord = RecordWithColumns.create(nonMatching, projectSpec());
88+
var nonMatchingRecord = asRecord(nonMatching);
8889

8990
assertThat(matcher.test(matchingRecord))
9091
.isTrue();
9192
assertThat(matcher.test(nonMatchingRecord))
9293
.isFalse();
9394
}
9495

96+
@NonNull
97+
private static RecordWithColumns<StgProjectId, StgProject> asRecord(StgProject state) {
98+
return RecordWithColumns.create(state, projectMessageSpec());
99+
}
100+
95101
@Test
96102
@DisplayName("match `Any` instances")
97103
void matchAnyInstances() {
98104
var matchingState = newState();
99105
var queryValue = pack(matchingState);
100-
var matchingRecord = RecordWithColumns.create(matchingState, projectSpec());
101-
var nonMatchingRecord = RecordWithColumns.create(newState(), projectSpec());
106+
var matchingRecord = asRecord(matchingState);
107+
var nonMatchingRecord = asRecord(newState());
102108

103109
var query = newBuilder()
104110
.where(StgProjectColumns.state_as_any).is(queryValue).build();
@@ -117,7 +123,7 @@ void notMatchByWrongField() {
117123
.build();
118124
var matcher = new RecordQueryMatcher<>(query);
119125

120-
var recordWithColumns = RecordWithColumns.create(newState(), projectSpec());
126+
var recordWithColumns = asRecord(newState());
121127
assertThat(matcher.test(recordWithColumns))
122128
.isFalse();
123129
}

server/src/test/java/io/spine/server/storage/memory/given/RecordQueryMatcherTestEnv.java

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -26,45 +26,22 @@
2626

2727
package io.spine.server.storage.memory.given;
2828

29-
import com.google.protobuf.Any;
30-
import com.google.protobuf.Timestamp;
31-
import io.spine.protobuf.AnyPacker;
32-
import io.spine.query.Columns;
33-
import io.spine.query.RecordColumn;
34-
import io.spine.query.RecordColumns;
3529
import io.spine.query.RecordQuery;
3630
import io.spine.query.RecordQueryBuilder;
3731
import io.spine.query.Subject;
38-
import io.spine.server.storage.MessageRecordSpec;
3932
import io.spine.test.storage.StgProject;
4033
import io.spine.test.storage.StgProjectId;
4134

4235
/**
4336
* The test environment for {@link io.spine.server.storage.memory.RecordQueryMatcher} tests.
44-
*
45-
* <p>Provides various types of {@linkplain RecordColumn record columns}
46-
* that can be used to emulate a client-side query.
4737
*/
4838
@SuppressWarnings("BadImport") // `create` looks fine in this context.
4939
public final class RecordQueryMatcherTestEnv {
5040

51-
private static final MessageRecordSpec<StgProjectId, StgProject> spec =
52-
new MessageRecordSpec<>(StgProjectId.class,
53-
StgProject.class,
54-
StgProject::getId,
55-
StgProjectColumns.definitions());
56-
5741
/** Prevents instantiation of this test env class. */
5842
private RecordQueryMatcherTestEnv() {
5943
}
6044

61-
/**
62-
* Returns the record specification for {@code StgProject}.
63-
*/
64-
public static MessageRecordSpec<StgProjectId, StgProject> projectSpec() {
65-
return spec;
66-
}
67-
6845
/**
6946
* Creates an empty {@code Subject} for the {@code StgProject}.
7047
*/
@@ -95,33 +72,4 @@ private static <I> Class<I> parameterizedClsOf(I id) {
9572
public static RecordQueryBuilder<StgProjectId, StgProject> newBuilder() {
9673
return RecordQuery.newBuilder(StgProjectId.class, StgProject.class);
9774
}
98-
99-
/**
100-
* Columns of {@code StgProject} stored as record.
101-
*/
102-
@RecordColumns(ofType = StgProject.class)
103-
public static final class StgProjectColumns {
104-
105-
private StgProjectColumns() {
106-
}
107-
108-
public static final RecordColumn<StgProject, String> name =
109-
RecordColumn.create("name", String.class, StgProject::getName);
110-
111-
public static final RecordColumn<StgProject, Timestamp> due_date =
112-
RecordColumn.create("due_date", Timestamp.class, StgProject::getDueDate);
113-
114-
public static final RecordColumn<StgProject, Any> state_as_any =
115-
RecordColumn.create("state_as_any", Any.class, AnyPacker::pack);
116-
117-
public static final RecordColumn<StgProject, String> random_non_stored_column =
118-
RecordColumn.create("random_non_stored_column", String.class, (p) -> "31415926");
119-
120-
/**
121-
* Returns all the column definitions.
122-
*/
123-
public static Columns<StgProject> definitions() {
124-
return Columns.of(name, due_date, state_as_any);
125-
}
126-
}
12775
}

0 commit comments

Comments
 (0)