55import edu .kit .datamanager .ro_crate .RoCrate ;
66import edu .kit .datamanager .ro_crate .HelpFunctions ;
77import 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 ;
811import org .junit .jupiter .api .Test ;
912import org .junit .jupiter .api .io .TempDir ;
1013
1821class 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