package com.constellio.app.modules.rm.exports; import static com.constellio.app.modules.rm.exports.RetentionRuleXMLExporter.forAllApprovedRulesInCollection; import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.exports.RetentionRuleXMLExporterRuntimeException.RetentionRuleXMLExporterRuntimeException_InvalidFile; import com.constellio.app.modules.rm.wrappers.RetentionRule; import com.constellio.model.entities.records.Transaction; import com.constellio.sdk.tests.ConstellioTest; public class RetentionRuleXMLExporterAcceptanceTest extends ConstellioTest { File builtXML; RMTestRecords records = new RMTestRecords(zeCollection); @Before public void setUp() throws Exception { prepareSystem(withZeCollection().withConstellioRMModule().withRMTest(records)); builtXML = new File(newTempFolder(), "test.xml"); Transaction transaction = new Transaction(); transaction.add(records.getCategory_X100().setTitle("Ze X100")); transaction.add(records.getCategory_X110().setTitle("Ze X110")); transaction.add(records.getUnit10().setTitle("Ze 10")); transaction.add(records.getUnit20().setTitle("Ze 20")); RetentionRule rule1 = records.getRule1(); rule1.getCopyRetentionRules().get(0).setCode("42"); rule1.getCopyRetentionRules().get(1).setCode("666"); rule1.setEssentialDocuments(true); rule1.setConfidentialDocuments(true); transaction.add(rule1); getModelLayerFactory().newRecordServices().execute(transaction); } @Test public void whenExportingRetentionRulesThenValidXMLIsProduced() throws Exception { RetentionRuleXMLExporter exporter = forAllApprovedRulesInCollection(zeCollection, builtXML, getModelLayerFactory()); exporter.run(); assertThat(readWithoutIndent(builtXML)).isEqualTo(readWithoutIndent(getTestResourceFile("expected.xml"))); } private String readWithoutIndent(File file) throws IOException { StringBuilder sb = new StringBuilder(); for (String line : FileUtils.readLines(file)) { if (sb.length() > 0) { sb.append("\n"); } sb.append(line.replace(" />", "/>").trim()); } return sb.toString(); } @Test public void whenValidatingValidFileThenOK() { RetentionRuleXMLExporter.validate(getTestResourceFile("expected.xml")); } @Test(expected = RetentionRuleXMLExporterRuntimeException_InvalidFile.class) public void whenValidatingInvalidFileThenException() { RetentionRuleXMLExporter.validate(getTestResourceFile("invalid.xml")); } }