Skip to content

Commit 71e7caa

Browse files
committed
WIP fix deprecation warnings and simplify tests
1 parent b341acf commit 71e7caa

File tree

5 files changed

+434
-173
lines changed

5 files changed

+434
-173
lines changed

src/main/java/edu/kit/datamanager/ro_crate/writer/Writers.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public static CrateWriter<OutputStream> newZipStreamWriter() {
3636
*
3737
* @return a new instance of {@link CrateWriter} for writing to a zip file
3838
*/
39-
public static CrateWriter<String> newZipFileWriter() {
39+
public static CrateWriter<String> newZipPathWriter() {
4040
return new CrateWriter<>(new ZipStrategy());
4141
}
4242
}
Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
package edu.kit.datamanager.ro_crate.reader;
2+
3+
import edu.kit.datamanager.ro_crate.Crate;
4+
import edu.kit.datamanager.ro_crate.HelpFunctions;
5+
import edu.kit.datamanager.ro_crate.RoCrate;
6+
import edu.kit.datamanager.ro_crate.entities.data.FileEntity;
7+
import edu.kit.datamanager.ro_crate.writer.CrateWriter;
8+
import edu.kit.datamanager.ro_crate.writer.Writers;
9+
import org.apache.commons.io.FileUtils;
10+
import org.junit.jupiter.api.Test;
11+
import org.junit.jupiter.api.io.TempDir;
12+
13+
import java.io.*;
14+
import java.nio.charset.Charset;
15+
import java.nio.file.Path;
16+
17+
import static org.junit.jupiter.api.Assertions.*;
18+
19+
class CrateReaderTest extends ReaderTest {
20+
21+
@Test
22+
void testReadingBasicCrate(@TempDir Path temp) throws IOException {
23+
24+
RoCrate roCrate = BASE_CRATE.build();
25+
26+
Path zipPath = temp.resolve("result.zip");
27+
Writers.newZipPathWriter()
28+
.save(roCrate, zipPath.toString());
29+
File zipFile = zipPath.toFile();
30+
assertTrue(zipFile.isFile());
31+
32+
Crate importedCrate = Readers.newZipStreamReader()
33+
.readCrate(new FileInputStream(zipFile));
34+
HelpFunctions.compareTwoCrateJson(roCrate, importedCrate);
35+
}
36+
37+
@Test
38+
void testWithFile(@TempDir Path temp) throws IOException {
39+
Path csvPath = temp.resolve("survey-responses-2019.csv");
40+
FileUtils.touch(csvPath.toFile());
41+
FileUtils.writeStringToFile(csvPath.toFile(), "fkdjaflkjfla", Charset.defaultCharset());
42+
RoCrate rawCrate = new RoCrate.RoCrateBuilder(
43+
"minimal",
44+
"minimal RO_crate",
45+
"2024",
46+
"https://creativecommons.org/licenses/by-nc-sa/3.0/au/"
47+
)
48+
.addDataEntity(
49+
getDataEntity(csvPath)
50+
)
51+
.build();
52+
53+
assertEquals(1, rawCrate.getAllDataEntities().size());
54+
55+
Path zipPath = temp.resolve("result.zip");
56+
Writers.newZipPathWriter()
57+
.save(rawCrate, zipPath.toFile().getAbsolutePath());
58+
Crate importedCrate = Readers.newZipStreamReader()
59+
.readCrate(new FileInputStream(zipPath.toFile()));
60+
61+
HelpFunctions.compareTwoCrateJson(rawCrate, importedCrate);
62+
}
63+
64+
private static FileEntity getDataEntity(Path filePath) throws IllegalArgumentException {
65+
return new FileEntity.FileEntityBuilder()
66+
.setLocationWithExceptions(filePath)
67+
.setId(filePath.toFile().getName())
68+
.addProperty("name", "Survey responses")
69+
.addProperty("contentSize", "26452")
70+
.addProperty("encodingFormat", "text/csv")
71+
.build();
72+
}
73+
74+
@Test
75+
void TestWithFileWithLocation(@TempDir Path temp) throws IOException {
76+
Path csvPath = temp.resolve("survey-responses-2019.csv");
77+
FileUtils.writeStringToFile(csvPath.toFile(), "fakecsv.1", Charset.defaultCharset());
78+
RoCrate rawCrate = new RoCrate.RoCrateBuilder(
79+
"minimal",
80+
"minimal RO_crate",
81+
"2024",
82+
"https://creativecommons.org/licenses/by-nc-sa/3.0/au/"
83+
)
84+
.addDataEntity(
85+
new FileEntity.FileEntityBuilder()
86+
.addProperty("name", "Survey responses")
87+
.addProperty("contentSize", "26452")
88+
.addProperty("encodingFormat", "text/csv")
89+
.setLocationWithExceptions(csvPath)
90+
.setId("survey-responses-2019.csv")
91+
.build()
92+
)
93+
.setPreview(null)//disable preview to allow to compare folders before and after
94+
.build();
95+
96+
// write to zip file and read via zip stream
97+
Path zipPath = temp.resolve("result.zip");
98+
Writers.newZipPathWriter()
99+
.save(rawCrate, zipPath.toString());
100+
Crate importedCrate = Readers.newZipStreamReader()
101+
.readCrate(new FileInputStream(zipPath.toFile()));
102+
103+
// write raw crate and imported crate to folders and compare the results
104+
Path rawCrateTarget = temp.resolve("rawCrateSaved");
105+
Path importedCrateTarget = temp.resolve("importedCrateSaved");
106+
{
107+
// write raw crate and imported crate to two different directories
108+
CrateWriter<String> writer = Writers.newFolderWriter();
109+
writer.save(rawCrate, rawCrateTarget.toString());
110+
writer.save(importedCrate, importedCrateTarget.toString());
111+
}
112+
113+
assertTrue(HelpFunctions.compareTwoDir(rawCrateTarget.toFile(), importedCrateTarget.toFile()));
114+
HelpFunctions.compareTwoCrateJson(rawCrate, importedCrate);
115+
}
116+
117+
@Test
118+
void TestWithFileWithLocationAddEntity(@TempDir Path temp) throws IOException {
119+
Path csvPath = temp.resolve("file.csv");
120+
FileUtils.writeStringToFile(csvPath.toFile(), "fakecsv.1", Charset.defaultCharset());
121+
RoCrate rawCrate = new RoCrate.RoCrateBuilder(
122+
"minimal",
123+
"minimal RO_crate",
124+
"2024",
125+
"https://creativecommons.org/licenses/by-nc-sa/3.0/au/"
126+
)
127+
.addDataEntity(
128+
new FileEntity.FileEntityBuilder()
129+
.addProperty("name", "Survey responses")
130+
.addProperty("contentSize", "26452")
131+
.addProperty("encodingFormat", "text/csv")
132+
.setLocationWithExceptions(csvPath)
133+
.setId("survey-responses-2019.csv")
134+
.build()
135+
)
136+
.build();
137+
138+
// write to zip file and import via zip stream
139+
Path zipPath = temp.resolve("result.zip");
140+
Writers.newZipPathWriter()
141+
.save(rawCrate, zipPath.toString());
142+
Crate importedCrate = Readers.newZipStreamReader()
143+
.readCrate(new FileInputStream(zipPath.toFile()));
144+
{
145+
// modify the imported crate
146+
Path newFile = temp.resolve("new_file");
147+
FileUtils.writeStringToFile(newFile.toFile(), "Some file content", Charset.defaultCharset());
148+
importedCrate.addDataEntity(new FileEntity.FileEntityBuilder()
149+
.setEncodingFormat("setnew")
150+
.setLocationWithExceptions(newFile)
151+
.setId("new_file")
152+
.build());
153+
}
154+
// write raw crate to a folder
155+
Path rawCrateTarget = temp.resolve("rawCrateSaved");
156+
Path importedCrateTarget = temp.resolve("importedCrateSaved");
157+
{
158+
// write raw crate and imported crate to two different directories
159+
CrateWriter<String> writer = Writers.newFolderWriter();
160+
writer.save(rawCrate, rawCrateTarget.toString());
161+
writer.save(importedCrate, importedCrateTarget.toFile().toString());
162+
}
163+
// assert the folders are different
164+
assertFalse(HelpFunctions.compareTwoDir(rawCrateTarget.toFile(), importedCrateTarget.toFile()));
165+
HelpFunctions.compareTwoMetadataJsonNotEqual(rawCrate, importedCrate);
166+
// assert the importedCrateTarget folder contains newFile
167+
assertTrue(importedCrateTarget.resolve("new_file").toFile().isFile());
168+
}
169+
170+
@Test
171+
void testReadingBasicCrateWithCustomPath(@TempDir Path temp) throws IOException {
172+
RoCrate rawCrate = new RoCrate.RoCrateBuilder(
173+
"minimal",
174+
"minimal RO_crate",
175+
"2024",
176+
"https://creativecommons.org/licenses/by-nc-sa/3.0/au/"
177+
)
178+
.build();
179+
180+
// Write to zip file
181+
Path zipPath = temp.resolve("result.zip");
182+
Writers.newZipPathWriter()
183+
.save(rawCrate, zipPath.toString());
184+
File zipFile = zipPath.toFile();
185+
assertTrue(zipFile.isFile());
186+
187+
Path differentFolder = temp.resolve("differentFolder");
188+
ZipStreamStrategy readerType = new ZipStreamStrategy(differentFolder, true);
189+
assertFalse(readerType.isExtracted());
190+
assertEquals(readerType.getTemporaryFolder().getFileName().toString(), readerType.getID());
191+
assertTrue(readerType.getTemporaryFolder().startsWith(differentFolder));
192+
193+
Crate importedCrate = new CrateReader<>(readerType)
194+
.readCrate(new FileInputStream(zipFile));
195+
assertTrue(readerType.isExtracted());
196+
HelpFunctions.compareTwoCrateJson(rawCrate, importedCrate);
197+
198+
{
199+
// try it again without the UUID subfolder and test if the directory is being cleaned up (using coverage).
200+
ZipStreamStrategy newReaderType = new ZipStreamStrategy(differentFolder, false);
201+
assertFalse(newReaderType.isExtracted());
202+
assertNotEquals(newReaderType.getTemporaryFolder().getFileName().toString(), newReaderType.getID());
203+
assertTrue(newReaderType.getTemporaryFolder().startsWith(differentFolder));
204+
205+
CrateReader<InputStream> reader = new CrateReader<>(newReaderType);
206+
Crate crate = reader.readCrate(new FileInputStream(zipFile));
207+
assertTrue(newReaderType.isExtracted());
208+
HelpFunctions.compareTwoCrateJson(rawCrate, crate);
209+
}
210+
211+
{
212+
// show we can also do it with the convenience API
213+
CrateReader<InputStream> reader = Readers.newZipStreamReader(differentFolder, false);
214+
Crate crate = reader.readCrate(new FileInputStream(zipFile));
215+
HelpFunctions.compareTwoCrateJson(rawCrate, crate);
216+
}
217+
}
218+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package edu.kit.datamanager.ro_crate.reader;
2+
3+
import edu.kit.datamanager.ro_crate.RoCrate;
4+
import org.junit.jupiter.api.io.TempDir;
5+
6+
import java.io.IOException;
7+
import java.nio.file.Path;
8+
9+
public abstract class ReaderTest {
10+
protected static final RoCrate.RoCrateBuilder BASE_CRATE = new RoCrate.RoCrateBuilder(
11+
"minimal",
12+
"minimal RO_crate",
13+
"2024",
14+
"https://creativecommons.org/licenses/by-nc-sa/3.0/au/"
15+
);
16+
17+
abstract void testReadingBasicCrate(@TempDir Path temp) throws IOException;
18+
19+
abstract void testWithFile(@TempDir Path temp) throws IOException;
20+
21+
abstract void TestWithFileWithLocation(@TempDir Path temp) throws IOException;
22+
23+
abstract void TestWithFileWithLocationAddEntity(@TempDir Path temp) throws IOException;
24+
25+
abstract void testReadingBasicCrateWithCustomPath(@TempDir Path temp) throws IOException;
26+
}

0 commit comments

Comments
 (0)