Skip to content

Commit b855b80

Browse files
committed
test: add validation for RO-Crate metadata after writing and modifying implicitly or explicitly
1 parent 4e817e9 commit b855b80

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

src/test/java/edu/kit/datamanager/ro_crate/writer/RoCrateMetadataGenerationTest.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
import edu.kit.datamanager.ro_crate.RoCrate;
66
import edu.kit.datamanager.ro_crate.HelpFunctions;
77
import edu.kit.datamanager.ro_crate.reader.Readers;
8+
import edu.kit.datamanager.ro_crate.validation.JsonSchemaValidation;
9+
import edu.kit.datamanager.ro_crate.validation.Validator;
10+
import org.junit.jupiter.api.BeforeEach;
811
import org.junit.jupiter.api.Test;
912
import org.junit.jupiter.api.io.TempDir;
1013

@@ -18,14 +21,31 @@
1821
class RoCrateMetadataGenerationTest {
1922

2023
private final ObjectMapper objectMapper = new ObjectMapper();
24+
private Validator validator;
25+
26+
@BeforeEach
27+
void setUp() {
28+
validator = new Validator(new JsonSchemaValidation());
29+
}
30+
31+
private void validateCrate(RoCrate crate) {
32+
assertTrue(validator.validate(crate),
33+
"Crate should validate against the JSON schema");
34+
}
2135

2236
@Test
2337
void should_ContainRoCrateJavaEntities_When_WritingEmptyCrate(@TempDir Path tempDir) throws IOException {
2438
// Create and write crate
2539
RoCrate crate = new RoCrate.RoCrateBuilder().build();
40+
validateCrate(crate);
41+
2642
Path outputPath = tempDir.resolve("test-crate");
2743
Writers.newFolderWriter().save(crate, outputPath.toString());
2844

45+
// Re-read the crate to verify it's still valid after writing
46+
RoCrate readCrate = Readers.newFolderReader().readCrate(outputPath.toString());
47+
validateCrate(readCrate);
48+
2949
// Read and print metadata for debugging
3050
String metadata = Files.readString(outputPath.resolve("ro-crate-metadata.json"));
3151
HelpFunctions.prettyPrintJsonString(metadata);
@@ -52,9 +72,14 @@ void should_ContainRoCrateJavaEntities_When_WritingEmptyCrate(@TempDir Path temp
5272
void should_HaveRequiredPropertiesInRoCrateJavaEntity_When_WritingCrate(@TempDir Path tempDir) throws IOException {
5373
// Create and write crate
5474
RoCrate crate = new RoCrate.RoCrateBuilder().build();
75+
validateCrate(crate);
76+
5577
Path outputPath = tempDir.resolve("test-crate");
5678
Writers.newFolderWriter().save(crate, outputPath.toString());
5779

80+
RoCrate readCrate = Readers.newFolderReader().readCrate(outputPath.toString());
81+
validateCrate(readCrate);
82+
5883
// Read and print metadata for debugging
5984
String metadata = Files.readString(outputPath.resolve("ro-crate-metadata.json"));
6085
HelpFunctions.prettyPrintJsonString(metadata);
@@ -77,9 +102,14 @@ void should_HaveRequiredPropertiesInRoCrateJavaEntity_When_WritingCrate(@TempDir
77102
void should_HaveBidirectionalRelation_Between_RoCrateJavaAndItsAction(@TempDir Path tempDir) throws IOException {
78103
// Create and write crate
79104
RoCrate crate = new RoCrate.RoCrateBuilder().build();
105+
validateCrate(crate);
106+
80107
Path outputPath = tempDir.resolve("test-crate");
81108
Writers.newFolderWriter().save(crate, outputPath.toString());
82109

110+
RoCrate readCrate = Readers.newFolderReader().readCrate(outputPath.toString());
111+
validateCrate(readCrate);
112+
83113
// Read and print metadata for debugging
84114
String metadata = Files.readString(outputPath.resolve("ro-crate-metadata.json"));
85115
HelpFunctions.prettyPrintJsonString(metadata);
@@ -112,12 +142,16 @@ void should_HaveBidirectionalRelation_Between_RoCrateJavaAndItsAction(@TempDir P
112142
void should_AccumulateActions_When_WritingMultipleTimes(@TempDir Path tempDir) throws IOException {
113143
// Create and write crate first time
114144
RoCrate crate = new RoCrate.RoCrateBuilder().build();
145+
validateCrate(crate);
146+
115147
Path outputPath = tempDir.resolve("test-crate");
116148
Writers.newFolderWriter().save(crate, outputPath.toString());
149+
validateCrate(Readers.newFolderReader().readCrate(outputPath.toString()));
117150

118151
// Write same crate two more times to simulate updates
119152
Writers.newFolderWriter().save(crate, outputPath.toString());
120153
Writers.newFolderWriter().save(crate, outputPath.toString());
154+
validateCrate(Readers.newFolderReader().readCrate(outputPath.toString()));
121155

122156
// Read and print metadata for debugging
123157
String metadata = Files.readString(outputPath.resolve("ro-crate-metadata.json"));
@@ -175,8 +209,11 @@ void should_AccumulateActions_When_WritingMultipleTimes(@TempDir Path tempDir) t
175209
void should_HaveValidVersionFormat_When_WritingCrate(@TempDir Path tempDir) throws IOException {
176210
// Create and write crate
177211
RoCrate crate = new RoCrate.RoCrateBuilder().build();
212+
validateCrate(crate);
213+
178214
Path outputPath = tempDir.resolve("test-crate");
179215
Writers.newFolderWriter().save(crate, outputPath.toString());
216+
validateCrate(Readers.newFolderReader().readCrate(outputPath.toString()));
180217

181218
// Read and print metadata for debugging
182219
String metadata = Files.readString(outputPath.resolve("ro-crate-metadata.json"));
@@ -206,8 +243,11 @@ void should_HaveValidVersionFormat_When_WritingCrate(@TempDir Path tempDir) thro
206243
void should_HaveCompleteMetadata_When_WritingCrate(@TempDir Path tempDir) throws IOException {
207244
// Create and write crate
208245
RoCrate crate = new RoCrate.RoCrateBuilder().build();
246+
validateCrate(crate);
247+
209248
Path outputPath = tempDir.resolve("test-crate");
210249
Writers.newFolderWriter().save(crate, outputPath.toString());
250+
validateCrate(Readers.newFolderReader().readCrate(outputPath.toString()));
211251

212252
// Read and print metadata for debugging
213253
String metadata = Files.readString(outputPath.resolve("ro-crate-metadata.json"));
@@ -245,6 +285,8 @@ void should_HaveCompleteMetadata_When_WritingCrate(@TempDir Path tempDir) throws
245285
void should_AddProvenanceInfo_When_ModifyingExistingCrateWithoutProvenance(@TempDir Path tempDir) throws IOException {
246286
// First create a crate without provenance information
247287
RoCrate originalCrate = new RoCrate.RoCrateBuilder().build();
288+
validateCrate(originalCrate);
289+
248290
Path outputPath = tempDir.resolve("test-crate");
249291

250292
// Use writer with disabled provenance (not implemented yet)
@@ -267,7 +309,9 @@ void should_AddProvenanceInfo_When_ModifyingExistingCrateWithoutProvenance(@Temp
267309

268310
// Now read and modify the crate
269311
RoCrate modifiedCrate = Readers.newFolderReader().readCrate(outputPath.toString());
312+
validateCrate(modifiedCrate);
270313
modifiedCrate.getRootDataEntity().addProperty("description", "Modified crate");
314+
validateCrate(modifiedCrate);
271315

272316
// Write the modified crate with provenance enabled (default)
273317
Path modifiedPath = tempDir.resolve("modified-crate");
@@ -312,12 +356,16 @@ void should_AddProvenanceInfo_When_ModifyingExistingCrateWithoutProvenance(@Temp
312356
void should_PreserveExistingProvenance_When_ModifyingCrate(@TempDir Path tempDir) throws IOException {
313357
// First create a crate with normal provenance
314358
RoCrate originalCrate = new RoCrate.RoCrateBuilder().build();
359+
validateCrate(originalCrate);
360+
315361
Path outputPath = tempDir.resolve("test-crate");
316362
Writers.newFolderWriter().save(originalCrate, outputPath.toString());
317363

318364
// Now read and modify the crate
319365
RoCrate modifiedCrate = Readers.newFolderReader().readCrate(outputPath.toString());
366+
validateCrate(modifiedCrate);
320367
modifiedCrate.getRootDataEntity().addProperty("description", "Modified crate");
368+
validateCrate(modifiedCrate);
321369

322370
// Write the modified crate
323371
Writers.newFolderWriter().save(modifiedCrate, outputPath.toString());

0 commit comments

Comments
 (0)