Skip to content

Commit 1121736

Browse files
committed
Refactor MetadataEditorIT to load test files dynamically
1 parent c1ec3aa commit 1121736

File tree

4 files changed

+66
-40
lines changed

4 files changed

+66
-40
lines changed

Kitodo/src/test/java/org/kitodo/MockDatabase.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,17 @@
2222
import java.time.Duration;
2323
import java.time.LocalDate;
2424
import java.time.ZoneId;
25-
import java.util.*;
25+
import java.util.ArrayList;
26+
import java.util.Arrays;
27+
import java.util.Collection;
28+
import java.util.Collections;
29+
import java.util.HashMap;
30+
import java.util.HashSet;
31+
import java.util.LinkedList;
32+
import java.util.List;
33+
import java.util.Map;
34+
import java.util.Objects;
35+
import java.util.Set;
2636
import java.util.concurrent.TimeUnit;
2737
import java.util.function.Supplier;
2838

Kitodo/src/test/java/org/kitodo/production/metadata/MetadataEditorIT.java

+31-12
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.ArrayList;
2020
import java.util.List;
2121
import java.util.Locale;
22+
import java.util.Map;
2223

2324
import org.apache.commons.io.FileUtils;
2425
import org.junit.AfterClass;
@@ -39,12 +40,16 @@
3940
import org.kitodo.data.database.beans.User;
4041
import org.kitodo.production.services.ServiceManager;
4142
import org.kitodo.production.services.data.ProcessService;
43+
import org.kitodo.utils.ProcessTestUtils;
4244

4345

4446
public class MetadataEditorIT {
4547
private static final ProcessService processService = ServiceManager.getProcessService();
46-
4748
private static final String firstProcess = "First process";
49+
private static Map<String, Integer> testProcessIds;
50+
private static final String TEST_METADATA_CHILD_PROCESS_TO_ADD = "testMetadataForNonBlockingParallelTasksTest.xml";
51+
private static final String TEST_METADATA_FILE = "testMetadataFileServiceTest.xml";
52+
private static final String TEST_PROCESS_TITLE = "Test process";
4853

4954
/**
5055
* Is running before the class runs.
@@ -53,7 +58,9 @@ public class MetadataEditorIT {
5358
public static void prepareDatabase() throws Exception {
5459
MockDatabase.startNode();
5560
MockDatabase.insertProcessesFull();
56-
MockDatabase.insertProcessesForHierarchyTests();
61+
testProcessIds = MockDatabase.insertProcessesForHierarchyTests();
62+
ProcessTestUtils.copyHierarchyTestFiles(testProcessIds);
63+
ProcessTestUtils.copyTestFiles(testProcessIds.get(MockDatabase.HIERARCHY_CHILD_TO_ADD), TEST_METADATA_CHILD_PROCESS_TO_ADD);
5764
MockDatabase.setUpAwaitility();
5865
User userOne = ServiceManager.getUserService().getById(1);
5966
SecurityTestUtils.addUserDataToSecurityContext(userOne, 1);
@@ -68,6 +75,8 @@ public static void prepareDatabase() throws Exception {
6875
*/
6976
@AfterClass
7077
public static void cleanDatabase() throws Exception {
78+
ProcessTestUtils.removeTestProcess(testProcessIds.get(MockDatabase.HIERARCHY_PARENT));
79+
ProcessTestUtils.removeTestProcess(testProcessIds.get(MockDatabase.HIERARCHY_CHILD_TO_ADD));
7180
MockDatabase.stopNode();
7281
MockDatabase.cleanDatabase();
7382
}
@@ -77,22 +86,25 @@ public static void cleanDatabase() throws Exception {
7786

7887
@Test
7988
public void shouldAddLink() throws Exception {
80-
File metaXmlFile = new File("src/test/resources/metadata/4/meta.xml");
89+
int parentId = testProcessIds.get(MockDatabase.HIERARCHY_PARENT);
90+
int childId = testProcessIds.get(MockDatabase.HIERARCHY_CHILD_TO_ADD);
91+
File metaXmlFile = new File("src/test/resources/metadata/" + parentId + "/meta.xml");
8192
List<String> metaXmlContentBefore = FileUtils.readLines(metaXmlFile, StandardCharsets.UTF_8);
8293

83-
MetadataEditor.addLink(ServiceManager.getProcessService().getById(4), "0", 7);
94+
MetadataEditor.addLink(ServiceManager.getProcessService().getById(parentId), "0", childId);
8495

8596
assertTrue("The link was not added correctly!",
86-
isInternalMetsLink(FileUtils.readLines(metaXmlFile, StandardCharsets.UTF_8).get(36), 7));
97+
isInternalMetsLink(FileUtils.readLines(metaXmlFile, StandardCharsets.UTF_8).get(36), childId));
8798

8899
FileUtils.writeLines(metaXmlFile, StandardCharsets.UTF_8.toString(), metaXmlContentBefore);
89-
FileUtils.deleteQuietly(new File("src/test/resources/metadata/4/meta.xml.1"));
100+
FileUtils.deleteQuietly(new File("src/test/resources/metadata/" + parentId + "/meta.xml.1"));
90101
}
91102

92103
@Test
93104
public void shouldAddMultipleStructuresWithoutMetadata() throws Exception {
94-
95-
File metaXmlFile = new File("src/test/resources/metadata/2/meta.xml");
105+
int testProcessId = MockDatabase.insertTestProcess(TEST_PROCESS_TITLE, 1, 1, 1);
106+
ProcessTestUtils.copyTestMetadataFile(testProcessId, TEST_METADATA_FILE);
107+
File metaXmlFile = new File("src/test/resources/metadata/" + testProcessId + "/meta.xml");
96108
Workpiece workpiece = ServiceManager.getMetsService().loadWorkpiece(metaXmlFile.toURI());
97109

98110
int oldNrLogicalDivisions = workpiece.getAllLogicalDivisions().size();
@@ -104,6 +116,7 @@ public void shouldAddMultipleStructuresWithoutMetadata() throws Exception {
104116

105117
List<LogicalDivision> logicalDivisions = workpiece.getAllLogicalDivisions();
106118
assertTrue("Metadata should be empty", logicalDivisions.get(newNrDivisions - 1).getMetadata().isEmpty());
119+
ProcessTestUtils.removeTestProcess(testProcessId);
107120
}
108121

109122
@Test
@@ -115,7 +128,9 @@ public void shouldAddMultipleStructuresWithMetadataGroup() throws Exception {
115128
Locale.LanguageRange.parse("en"));
116129
String metadataKey = "TitleDocMain";
117130

118-
File metaXmlFile = new File("src/test/resources/metadata/2/meta.xml");
131+
int testProcessId = MockDatabase.insertTestProcess(TEST_PROCESS_TITLE, 1, 1, 1);
132+
ProcessTestUtils.copyTestMetadataFile(testProcessId, TEST_METADATA_FILE);
133+
File metaXmlFile = new File("src/test/resources/metadata/" + testProcessId + "/meta.xml");
119134
Workpiece workpiece = ServiceManager.getMetsService().loadWorkpiece(metaXmlFile.toURI());
120135

121136
int oldNrLogicalDivisions = workpiece.getAllLogicalDivisions().size();
@@ -128,15 +143,16 @@ public void shouldAddMultipleStructuresWithMetadataGroup() throws Exception {
128143
MetadataEditor.addMultipleStructuresWithMetadata(addedDivisions, "Monograph", workpiece,
129144
workpiece.getLogicalStructure(), InsertionPosition.FIRST_CHILD_OF_CURRENT_ELEMENT, mvi, "value");
130145
LogicalDivision newSectionOne = workpiece.getAllLogicalDivisions().get(newNrDivisions - 2);
131-
List<Metadata> metadataListOne = new ArrayList<Metadata>(newSectionOne.getMetadata());
146+
List<Metadata> metadataListOne = new ArrayList<>(newSectionOne.getMetadata());
132147
LogicalDivision newSectionTwo = workpiece.getAllLogicalDivisions().get(newNrDivisions - 1);
133-
List<Metadata> metadataListTwo = new ArrayList<Metadata>(newSectionTwo.getMetadata());
148+
List<Metadata> metadataListTwo = new ArrayList<>(newSectionTwo.getMetadata());
134149
Metadata metadatumOne = metadataListOne.get(0);
135150
Metadata metadatumTwo = metadataListTwo.get(0);
136151

137152
assertTrue("Metadata should be of type MetadataEntry", metadatumOne instanceof MetadataEntry);
138153
assertTrue("Metadata value was incorrectly added", ((MetadataEntry) metadatumOne).getValue().equals("value 1")
139154
&& ((MetadataEntry) metadatumTwo).getValue().equals("value 2"));
155+
ProcessTestUtils.removeTestProcess(testProcessId);
140156
}
141157

142158
@Test
@@ -147,7 +163,9 @@ public void shouldAddMultipleStructuresWithMetadataEntry() throws Exception {
147163
Locale.LanguageRange.parse("en"));
148164
String metadataKey = "Person";
149165

150-
File metaXmlFile = new File("src/test/resources/metadata/2/meta.xml");
166+
int testProcessId = MockDatabase.insertTestProcess(TEST_PROCESS_TITLE, 1, 1, 1);
167+
ProcessTestUtils.copyTestMetadataFile(testProcessId, TEST_METADATA_FILE);
168+
File metaXmlFile = new File("src/test/resources/metadata/" + testProcessId + "/meta.xml");
151169
Workpiece workpiece = ServiceManager.getMetsService().loadWorkpiece(metaXmlFile.toURI());
152170

153171
int oldNrLogicalDivisions = workpiece.getAllLogicalDivisions().size();
@@ -170,6 +188,7 @@ public void shouldAddMultipleStructuresWithMetadataEntry() throws Exception {
170188
metadatumOne instanceof MetadataGroup && metadatumTwo instanceof MetadataGroup);
171189
assertTrue("Metadata value was incorrectly added",
172190
metadatumOne.getKey().equals("Person") && metadatumTwo.getKey().equals("Person"));
191+
ProcessTestUtils.removeTestProcess(testProcessId);
173192
}
174193

175194
private boolean isInternalMetsLink(String lineOfMets, int recordNumber) {

Kitodo/src/test/java/org/kitodo/production/services/command/KitodoScriptServiceIT.java

+2-24
Original file line numberDiff line numberDiff line change
@@ -59,23 +59,13 @@ public class KitodoScriptServiceIT {
5959

6060
private static final String metadataWithDuplicatesTestFile = "testMetaWithDuplicateMetadata.xml";
6161
private static final String directoryForDerivateGeneration = "testFilesForDerivativeGeneration";
62-
private static final String testFileForHierarchyParent = "multivalued_metadata.xml";
63-
private static final String testFileChildProcessToKeep = "testMetadataForChildProcessToKeep.xml";
64-
private static final String testFileChildProcessToRemove = "testMetadataForKitodoScript.xml";
6562
private static int kitodoScriptTestProcessId = -1;
6663
private static final String testProcessTitle = "Second process";
6764
private static final int projectId = 1;
6865
private static final int templateId = 1;
6966
private static final int rulesetId = 1;
7067
private static final int userId = 1;
7168
private static final int clientId = 1;
72-
private static final Map<String, String> hierarchyProcessTitlesAndFiles;
73-
static {
74-
hierarchyProcessTitlesAndFiles = Map.of(
75-
MockDatabase.HIERARCHY_PARENT, testFileForHierarchyParent,
76-
MockDatabase.HIERARCHY_CHILD_TO_KEEP, testFileChildProcessToKeep,
77-
MockDatabase.HIERARCHY_CHILD_TO_REMOVE, testFileChildProcessToRemove);
78-
}
7969

8070
private static final File scriptCreateDirMeta = new File(
8171
ConfigCore.getParameter(ParameterCore.SCRIPT_CREATE_DIR_META));
@@ -358,20 +348,10 @@ public void shouldNotDeleteDataWithWrongType() throws Exception {
358348
Assert.assertEquals("metadata should not have been deleted", 1, metadataOfChapter.size() );
359349
}
360350

361-
private void copyHierarchyTestFiles(Map<String, Integer> processTitlesAndIds) throws IOException, DAOException, DataException {
362-
for (Map.Entry<String, String> hierarchyProcess : hierarchyProcessTitlesAndFiles.entrySet()) {
363-
int processId = processTitlesAndIds.get(hierarchyProcess.getKey());
364-
ProcessTestUtils.copyTestFiles(processId, hierarchyProcess.getValue());
365-
// re-save to index metadata file
366-
Process testProcess = ServiceManager.getProcessService().getById(processId);
367-
ServiceManager.getProcessService().save(testProcess);
368-
}
369-
}
370-
371351
@Test
372352
public void shouldCopyMultipleDataToChildren() throws Exception {
373353
Map<String, Integer> testProcessIds = MockDatabase.insertProcessesForHierarchyTests();
374-
copyHierarchyTestFiles(testProcessIds);
354+
ProcessTestUtils.copyHierarchyTestFiles(testProcessIds);
375355
String metadataKey = "DigitalCollection";
376356
HashMap<String, String> metadataSearchMap = new HashMap<>();
377357
metadataSearchMap.put(metadataKey, "Kollektion2");
@@ -388,9 +368,7 @@ public void shouldCopyMultipleDataToChildren() throws Exception {
388368
final List<ProcessDTO> processByMetadataAfter = ServiceManager.getProcessService()
389369
.findByMetadata(metadataSearchMap);
390370
Assert.assertEquals("does not contain metadata", 3, processByMetadataAfter.size() );
391-
for (int processId : testProcessIds.values().stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList())) {
392-
ProcessTestUtils.removeTestProcess(processId);
393-
}
371+
ProcessTestUtils.removeTestProcess(testProcessIds.get(MockDatabase.HIERARCHY_PARENT));
394372
}
395373

396374
@Test

Kitodo/src/test/java/org/kitodo/utils/ProcessTestUtils.java

+22-3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Collections;
2323
import java.util.LinkedList;
2424
import java.util.List;
25+
import java.util.Map;
2526
import java.util.stream.Collectors;
2627
import java.util.stream.Stream;
2728

@@ -47,6 +48,16 @@ public class ProcessTestUtils {
4748
public static final String META_XML = "/meta.xml";
4849
private static final int TEST_PROJECT_ID = 1;
4950
private static final int TEST_TEMPLATE_ID = 1;
51+
private static final String testFileForHierarchyParent = "multivalued_metadata.xml";
52+
private static final String testFileChildProcessToKeep = "testMetadataForChildProcessToKeep.xml";
53+
private static final String testFileChildProcessToRemove = "testMetadataForKitodoScript.xml";
54+
private static final Map<String, String> hierarchyProcessTitlesAndFiles;
55+
static {
56+
hierarchyProcessTitlesAndFiles = Map.of(
57+
MockDatabase.HIERARCHY_PARENT, testFileForHierarchyParent,
58+
MockDatabase.HIERARCHY_CHILD_TO_KEEP, testFileChildProcessToKeep,
59+
MockDatabase.HIERARCHY_CHILD_TO_REMOVE, testFileChildProcessToRemove);
60+
}
5061
private static final Logger logger = LogManager.getLogger(ProcessTestUtils.class);
5162

5263
/**
@@ -204,10 +215,8 @@ public static void cleanupDummyProcesses(List<Integer> dummyProcessIds) throws D
204215
* Delete test process with given ID including potential parent processes.
205216
* @param testProcessId ID of process to delete
206217
* @throws DAOException when retrieving process from database for deletion fails
207-
* @throws DataException when deleting process fails
208-
* @throws IOException when deleting process resources from the file system fails
209218
*/
210-
public static void removeTestProcess(int testProcessId) throws DAOException, DataException, IOException {
219+
public static void removeTestProcess(int testProcessId) throws DAOException {
211220
if (testProcessId > 0) {
212221
deleteProcessHierarchy(ServiceManager.getProcessService().getById(testProcessId));
213222
}
@@ -224,4 +233,14 @@ private static void deleteProcessHierarchy(Process process){
224233
e.printStackTrace();
225234
}
226235
}
236+
237+
public static void copyHierarchyTestFiles(Map<String, Integer> processTitlesAndIds) throws IOException, DAOException, DataException {
238+
for (Map.Entry<String, String> hierarchyProcess : hierarchyProcessTitlesAndFiles.entrySet()) {
239+
int processId = processTitlesAndIds.get(hierarchyProcess.getKey());
240+
ProcessTestUtils.copyTestFiles(processId, hierarchyProcess.getValue());
241+
// re-save to index metadata file
242+
Process testProcess = ServiceManager.getProcessService().getById(processId);
243+
ServiceManager.getProcessService().save(testProcess);
244+
}
245+
}
227246
}

0 commit comments

Comments
 (0)