Skip to content

Commit 5d17b75

Browse files
Jalander Ramagiriafrittoli
authored andcommitted
add unit testing for CDEventClass generated for each schema file
Signed-off-by: Jalander Ramagiri <jalander.ramagiri@est.tech>
1 parent 8a4c12e commit 5d17b75

File tree

4 files changed

+91
-5
lines changed

4 files changed

+91
-5
lines changed

generator/src/main/java/dev/cdevents/generator/CDEventsGenerator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ private CDEventsGenerator() {
3030
private static final int VERSION_INDEX = 4;
3131
private static final int SUBSTRING_PIPELINE_INDEX = 8;
3232

33-
private static final String TARGET_PACKAGE = "src/main/java/dev/cdevents/events";
3433

3534
/**
3635
* Event JsonSchema files location.

sdk/src/main/java/dev/cdevents/constants/CDEventConstants.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package dev.cdevents.constants;
22

3+
import java.io.File;
4+
35
public final class CDEventConstants {
46

57
private CDEventConstants() {
@@ -8,7 +10,7 @@ private CDEventConstants() {
810
/**
911
* Event JsonSchema files location.
1012
*/
11-
public static final String SCHEMA_FOLDER = "../spec/schemas";
13+
public static final String SCHEMA_FOLDER = ".." + File.separator + "spec" + File.separator + "schemas";
1214

1315
/**
1416
* CDEvents Version.
Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,41 @@
11
package dev.cdevents.constants;
22

3-
import static org.assertj.core.api.Assertions.assertThat;
4-
3+
import com.fasterxml.jackson.databind.JsonNode;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import dev.cdevents.constants.CDEventConstants.CDEventTypes;
56
import org.junit.jupiter.api.Test;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
69

7-
import dev.cdevents.constants.CDEventConstants.CDEventTypes;
10+
import java.io.File;
11+
import java.io.IOException;
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
15+
import static org.assertj.core.api.Assertions.assertThat;
816

917
public class CDEventTypesTest {
1018
@Test
1119
void eventTypeNamesAreUnique() {
1220
assertThat(CDEventTypes.values()).extracting(CDEventTypes::getEventType).doesNotHaveDuplicates();
1321
}
22+
23+
@Test
24+
void eventTypesMatchesWithSchemaContextTypes() throws IOException {
25+
ObjectMapper objectMapper = new ObjectMapper();
26+
File folder = new File(CDEventConstants.SCHEMA_FOLDER);
27+
List<String> eventTypeList = new ArrayList<>();
28+
if (folder.isDirectory()) {
29+
File[] files = folder.listFiles((dir, name) -> name.toLowerCase().endsWith(".json"));
30+
if (files != null) {
31+
for (File file : files) {
32+
JsonNode rootNode = objectMapper.readTree(file);
33+
JsonNode contextNode = rootNode.get("properties").get("context").get("properties");
34+
String eventType = contextNode.get("type").get("enum").get(0).asText();
35+
eventTypeList.add(eventType.split("\\d+\\.\\d+\\.\\d+")[0]);
36+
}
37+
}
38+
}
39+
assertThat(CDEventTypes.values()).extracting(CDEventTypes::getEventType).hasSameElementsAs(eventTypeList);
40+
}
1441
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package dev.cdevents.events;
2+
3+
import com.fasterxml.jackson.databind.JsonNode;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import dev.cdevents.constants.CDEventConstants;
6+
import org.apache.commons.lang3.StringUtils;
7+
import org.junit.jupiter.api.Test;
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
11+
import java.io.File;
12+
import java.io.IOException;
13+
import java.util.ArrayList;
14+
import java.util.List;
15+
16+
import static org.assertj.core.api.Assertions.assertThat;
17+
18+
public class CDEventsGeneratorTest {
19+
20+
private static final int SUBJECT_INDEX = 2;
21+
private static final int PREDICATE_INDEX = 3;
22+
23+
private static final String EVENTS_PACKAGE = "src/main/java/dev/cdevents/events";
24+
25+
@Test
26+
void testCDEventClassGeneratedForEachSchemaFile() throws IOException {
27+
File eventsFolder = new File(EVENTS_PACKAGE);
28+
File[] eventFiles = eventsFolder.listFiles((dir, name) -> !name.equals("package-info.java") && name.endsWith(".java"));
29+
List<String> schemaClassFileList = getSchemaClassFileList();
30+
31+
assertThat(eventFiles).extracting(File::getName).hasSameElementsAs(schemaClassFileList);
32+
assertThat(eventFiles.length).isEqualTo(schemaClassFileList.size());
33+
}
34+
35+
private List<String> getSchemaClassFileList() throws IOException {
36+
ObjectMapper objectMapper = new ObjectMapper();
37+
File schemaFolder = new File(CDEventConstants.SCHEMA_FOLDER);
38+
List<String> schemaClassFileList = new ArrayList<>();
39+
if (schemaFolder.isDirectory()) {
40+
File[] files = schemaFolder.listFiles((dir, name) -> name.toLowerCase().endsWith(".json"));
41+
if (files != null) {
42+
for (File file : files) {
43+
JsonNode rootNode = objectMapper.readTree(file);
44+
JsonNode contextNode = rootNode.get("properties").get("context").get("properties");
45+
String eventType = contextNode.get("type").get("enum").get(0).asText();
46+
String[] type = eventType.split("\\.");
47+
String subject = type[SUBJECT_INDEX];
48+
String predicate = type[PREDICATE_INDEX];
49+
String capitalizedSubject = StringUtils.capitalize(subject);
50+
String capitalizedPredicate = StringUtils.capitalize(predicate);
51+
String classFileName = StringUtils.join(new String[]{capitalizedSubject, capitalizedPredicate, "CDEvent", ".java"});
52+
schemaClassFileList.add(classFileName);
53+
}
54+
}
55+
}
56+
return schemaClassFileList;
57+
}
58+
}

0 commit comments

Comments
 (0)