Skip to content

Commit 5134b27

Browse files
committed
Remove spaces in runtime to avoid qualifier mismatches and add tests.
1 parent a96e8de commit 5134b27

File tree

5 files changed

+65
-6
lines changed

5 files changed

+65
-6
lines changed

server/src/main/java/org/spine3/server/event/enrich/EventEnrichmentsMap.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,10 +164,11 @@ private static Collection<String> parseFieldNames(String qualifiers) {
164164
final Collection<String> result = new LinkedList<>();
165165
final String[] fieldNames = PIPE_SEPARATOR_PATTERN.split(qualifiers);
166166
for (String singleFieldName : fieldNames) {
167-
if (singleFieldName.isEmpty()) {
167+
final String normalizedFieldName = singleFieldName.trim();
168+
if (normalizedFieldName.isEmpty()) {
168169
continue;
169170
}
170-
final String fieldName = getSimpleFieldName(singleFieldName);
171+
final String fieldName = getSimpleFieldName(normalizedFieldName);
171172
result.add(fieldName);
172173
}
173174
return result;

server/src/main/java/org/spine3/server/event/enrich/ReferenceValidator.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@ class ReferenceValidator {
6565
private static final String PIPE_SEPARATOR = "|";
6666
private static final Pattern PATTERN_PIPE_SEPARATOR = Pattern.compile("\\|");
6767

68+
private static final String SPACE = " ";
69+
private static final String EMPTY_STRING = "";
70+
private static final Pattern SPACE_PATTERN = Pattern.compile(SPACE, Pattern.LITERAL);
71+
72+
6873
/** The reference to the event context used in the `by` field option. */
6974
private static final String CONTEXT_REFERENCE = "context";
7075

@@ -118,11 +123,12 @@ private Collection<FieldDescriptor> findSourceFields(FieldDescriptor enrichmentF
118123
final String byOptionArgument = enrichmentField.getOptions()
119124
.getExtension(EventAnnotationsProto.by);
120125
checkNotNull(byOptionArgument);
121-
final int pipeSeparatorIndex = byOptionArgument.indexOf(PIPE_SEPARATOR);
126+
final String targetFields = removeSpaces(byOptionArgument);
127+
final int pipeSeparatorIndex = targetFields.indexOf(PIPE_SEPARATOR);
122128
if (pipeSeparatorIndex < 0) {
123-
return Collections.singleton(findSourceFieldByName(byOptionArgument, enrichmentField, true));
129+
return Collections.singleton(findSourceFieldByName(targetFields, enrichmentField, true));
124130
} else {
125-
final String[] targetFieldNames = PATTERN_PIPE_SEPARATOR.split(byOptionArgument);
131+
final String[] targetFieldNames = PATTERN_PIPE_SEPARATOR.split(targetFields);
126132
return findSourceFieldsByNames(targetFieldNames, enrichmentField);
127133
}
128134
}
@@ -147,6 +153,13 @@ private FieldDescriptor findSourceFieldByName(String name, FieldDescriptor enric
147153
return field;
148154
}
149155

156+
private static String removeSpaces(String source) {
157+
checkNotNull(source);
158+
final String result = SPACE_PATTERN.matcher(source)
159+
.replaceAll(EMPTY_STRING);
160+
return result;
161+
}
162+
150163
private Collection<FieldDescriptor> findSourceFieldsByNames(String[] names, FieldDescriptor enrichmentField) {
151164
checkArgument(names.length > 0, "Names may not be empty");
152165
checkArgument(names.length > 1,

server/src/test/java/org/spine3/server/event/enrich/EventEnrichmentsMapShould.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.spine3.test.event.ProjectStarted;
3333
import org.spine3.test.event.TaskAdded;
3434
import org.spine3.test.event.enrichment.EnrichmentBoundThoughFieldFqnWithFieldsWithDifferentNames;
35+
import org.spine3.test.event.enrichment.EnrichmentBoundWithFieldsSeparatedWithSpaces;
3536
import org.spine3.test.event.enrichment.EnrichmentBoundWithFieldsWithDifferentNames;
3637
import org.spine3.test.event.enrichment.EnrichmentBoundWithFieldsWithDifferentNamesOfWildcardTypes;
3738
import org.spine3.test.event.enrichment.EnrichmentBoundWithMultipleFieldsWithDifferentNames;
@@ -189,6 +190,13 @@ public void contain_enrichments_defined_with_by_with_multiple_arguments_using_wi
189190
PermissionRevokedEvent.class);
190191
}
191192

193+
@Test
194+
public void contain_enrichments_defined_with_by_containing_separating_spaces() {
195+
assertOnlyEventTypeByEnrichmentType(EnrichmentBoundWithFieldsSeparatedWithSpaces.class,
196+
TaskAdded.class,
197+
PermissionGrantedEvent.class);
198+
}
199+
192200
@SafeVarargs
193201
private static void assertEventTypeByEnrichmentType(
194202
Class<? extends Message> enrichmentClass,

server/src/test/java/org/spine3/server/event/enrich/ReferenceValidatorShould.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import org.spine3.server.event.Given;
2828
import org.spine3.server.event.enrich.ReferenceValidator.ValidationResult;
2929
import org.spine3.test.event.ProjectCreated;
30+
import org.spine3.test.event.TaskAdded;
31+
import org.spine3.test.event.enrichment.EnrichmentBoundWithFieldsSeparatedWithSpaces;
3032
import org.spine3.test.event.enrichment.EnrichmentBoundWithMultipleFieldsWithDifferentNames;
3133
import org.spine3.test.event.enrichment.GranterEventsEnrichment;
3234
import org.spine3.test.event.enrichment.ProjectCreatedEnrichmentAnotherPackage;
@@ -52,6 +54,7 @@
5254
*/
5355
public class ReferenceValidatorShould {
5456

57+
private static final String USER_GOOGLE_UID_FIELD = "user_google_uid";
5558
private final EventEnricher eventEnricher = Given.Enrichment.newEventEnricher();
5659

5760
@Test
@@ -97,7 +100,7 @@ public void store_valid_map_of_enrichment_fields_after_validation() {
97100

98101
final FieldDescriptor enrichmentField = enrichmentFieldIterator.next();
99102
final String enrichmentFieldName = enrichmentField.getName();
100-
assertEquals("user_google_uid", enrichmentFieldName);
103+
assertEquals(USER_GOOGLE_UID_FIELD, enrichmentFieldName);
101104
}
102105

103106
@Test(expected = IllegalStateException.class)
@@ -123,4 +126,34 @@ public void skip_mapping_if_no_mapping_function_is_defined() {
123126
final Multimap<FieldDescriptor, FieldDescriptor> fields = result.getFieldMap();
124127
assertEmpty(fields);
125128
}
129+
130+
@Test
131+
public void handle_separator_spaces_in_by_argument() {
132+
final ReferenceValidator validator
133+
= new ReferenceValidator(eventEnricher,
134+
TaskAdded.class,
135+
EnrichmentBoundWithFieldsSeparatedWithSpaces.class);
136+
final ValidationResult result = validator.validate();
137+
final Multimap<FieldDescriptor, FieldDescriptor> fieldMap = result.getFieldMap();
138+
assertFalse(fieldMap.isEmpty());
139+
assertSize(1, fieldMap);
140+
141+
final Iterator<Map.Entry<FieldDescriptor, Collection<FieldDescriptor>>> mapIterator = fieldMap.asMap()
142+
.entrySet()
143+
.iterator();
144+
assertTrue(mapIterator.hasNext());
145+
final Map.Entry<FieldDescriptor, Collection<FieldDescriptor>> singleEntry = mapIterator.next();
146+
final FieldDescriptor boundField = singleEntry.getKey();
147+
148+
final String boundFieldName = boundField.getName();
149+
assertEquals("project_id", boundFieldName);
150+
151+
final Collection<FieldDescriptor> targets = singleEntry.getValue();
152+
assertSize(1, targets);
153+
154+
final FieldDescriptor targetField = targets.iterator()
155+
.next();
156+
final String targetFieldName = targetField.getName();
157+
assertEquals(USER_GOOGLE_UID_FIELD, targetFieldName);
158+
}
126159
}

server/src/test/proto/spine/test/event/enrichment/enrichment.proto

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,7 @@ message EnrichmentBoundWithMultipleFieldsWithDifferentNames {
110110

111111
int32 user_google_uid = 1 [(by) = "SharingRequestApproved.second_user_uid|PermissionGrantedEvent.user_uid|UserDeletedEvent.deleted_uid"];
112112
}
113+
114+
message EnrichmentBoundWithFieldsSeparatedWithSpaces {
115+
string user_google_uid = 1 [(by) = " spine.test.event.TaskAdded.project_id | spine.test.event.user.permission.PermissionGrantedEvent.user_uid "];
116+
}

0 commit comments

Comments
 (0)