package services.export; import helpers.JsonTest; import models.Resource; import models.ResourceList; import org.junit.Test; import java.io.IOException; import java.nio.charset.Charset; import java.util.Arrays; import java.util.List; import java.util.Locale; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** * Created by pvb on 14.10.16. */ public class CalendarExporterTest implements JsonTest { CalendarExporter mExporter = new CalendarExporter(Locale.ENGLISH); @Test public void testSingleEventExport() throws IOException { Resource singleEvent = getResourceFromJsonFile("CalendarExporterTest/testSingleResourceExport.IN.1.json"); List<String> exported = splitLines(mExporter.export(singleEvent)); List<String> expected = splitLines(getStringFromFile("CalendarExporterTest/testSingleResourceExport.OUT.1.iCal", Charset.forName("UTF-8"))); compare(exported, expected); } @Test public void testMultipleEventsExport() throws IOException { Resource multipleEvents1 = getResourceFromJsonFile("CalendarExporterTest/testMultipleResourcesExport.IN.1.json"); Resource multipleEvents2 = getResourceFromJsonFile("CalendarExporterTest/testMultipleResourcesExport.IN.2.json"); Resource multipleEvents3 = getResourceFromJsonFile("CalendarExporterTest/testMultipleResourcesExport.IN.3.json"); Resource multipleEvents4 = getResourceFromJsonFile("CalendarExporterTest/testMultipleResourcesExport.IN.4.json"); ResourceList multipleEvents = new ResourceList(Arrays.asList(multipleEvents1, multipleEvents2, multipleEvents3, multipleEvents4), 0, null, 0, 0, null, null, null); List<String> exported = splitLines(mExporter.export(multipleEvents)); List<String> expected = splitLines(getStringFromFile("CalendarExporterTest/testMultipleResourcesExport.OUT.1.iCal", Charset.forName("UTF-8"))); compare(exported, expected); } @Test public void testFragmentaryResourcesListExport() throws IOException{ ResourceList fragmentaryResources = getResourcesFromPagedCollectionFile("CalendarExporterTest/testFragmentaryResourcesListExport.IN.1.json"); List<String> exported = splitLines(mExporter.export(fragmentaryResources)); List<String> expected = splitLines(getStringFromFile("CalendarExporterTest/testFragmentaryResourcesListExport.OUT.1.iCal", Charset.forName("UTF-8"))); compare(exported, expected); } @Test public void testExportMultiLanguage() throws IOException{ Resource resourceWithGermanDescription = getResourceFromJsonFile("CalendarExporterTest/testExportMultiLanguage.IN.1.json"); List<String> exported = splitLines(mExporter.export(resourceWithGermanDescription)); List<String> expected = splitLines(getStringFromFile("CalendarExporterTest/testExportMultiLanguage.OUT.1.iCal", Charset.forName("UTF-8"))); compare(exported, expected); } @Test public void testExportMissingRequiredFieldStartDate() throws IOException{ Resource resourceMissingDate = getResourceFromJsonFile("CalendarExporterTest/testExportMissingRequiredFieldStartDate.IN.1.json"); List<String> exported = splitLines(mExporter.export(resourceMissingDate)); // Export is expected to contain no events here. List<String> expected = splitLines(getStringFromFile("CalendarExporterTest/testExportMissingRequiredFieldStartDate.OUT.1.iCal", Charset.forName("UTF-8"))); compare(exported, expected); } private void compare(List<String> exported, List<String> expected) { assertFalse("Export is too short.", expected.size() > exported.size()); assertFalse("Export is too long.", expected.size() < exported.size()); compareLines(exported, expected); } private void compareLines(List<String> aExported, List<String> aExpected) { for (String line : aExported){ if (line.startsWith("DTSTAMP:")){ assertTrue("Exported event does not contain proper time stamp: ".concat(line), line.matches("DTSTAMP:[0-9]{8}T[0-9]{6}Z")); } // else { assertTrue("Expected event does not contain following line: ".concat(line), aExpected.contains(line)); } } } }