diff --git a/api/src/test/java/edu/cornell/mannlib/vitro/webapp/servlet/setup/RDFFilesLoaderTest.java b/api/src/test/java/edu/cornell/mannlib/vitro/webapp/servlet/setup/RDFFilesLoaderTest.java index 3ccf9b4b9..8476aaad8 100644 --- a/api/src/test/java/edu/cornell/mannlib/vitro/webapp/servlet/setup/RDFFilesLoaderTest.java +++ b/api/src/test/java/edu/cornell/mannlib/vitro/webapp/servlet/setup/RDFFilesLoaderTest.java @@ -1,6 +1,5 @@ package edu.cornell.mannlib.vitro.webapp.servlet.setup; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.StringReader; @@ -22,21 +21,23 @@ public class RDFFilesLoaderTest extends AbstractTestClass { + ":n1 rdfs:label \"fish 'n' chips\"@en-GB . \n" + ":n1 rdfs:label \"fish and fries\"@en-US . \n" + ":n2 rdfs:label \"tube\"@en-GB . \n" - + ":n2 rdfs:label \"subway; eat fresh\"@en-US . \n" - + ":n2 rdfs:label \"metrou\"@ro-RO . \n"; + + ":n2 rdfs:label \"Subway!\"@en-US . \n" + + ":n2 rdfs:label \"metrou\"@ro-RO . \n"; // the backup of the previous state of the firsttime file String backupModelRdf = "@prefix rdfs: <" + RDFS.getURI() + "> .\n" + "@prefix : .\n" + ":n1 rdfs:label \"fish 'n' chips\"@en-GB . \n" - + ":n2 rdfs:label \"tube\"@en-GB . \n"; + + ":n2 rdfs:label \"tube\"@en-GB . \n" + + ":n2 rdfs:label \"nooo\"@no-NO . \n"; // the current state of the user-editable model String userModelRdf = "@prefix rdfs: <" + RDFS.getURI() + "> .\n" + "@prefix : .\n" + ":n1 rdfs:label \"fish and chips\"@en-GB . \n" + ":n2 rdfs:label \"tube\"@en-GB . \n" - + ":n2 rdfs:label \"subway\"@en-US . \n"; + + ":n2 rdfs:label \"subway\"@en-US . \n" + + ":n2 rdfs:label \"nooo\"@no-NO . \n"; // the expected state of the user-editable model after firsttime // updates have been applied @@ -65,10 +66,70 @@ public class RDFFilesLoaderTest extends AbstractTestClass { userModel.remove(retractionsModel); userModel.add(additionsModel); - + + // For any given triple (S, P, O) changed in the fileModel, it + // should only be propagated to the user model if the user model + // doesn't already have a conflicting triple (S, P, X) where O and X + // have the same language tag. assertTrue("expected: " + userModelExpected + " but was: " + userModel, userModelExpected.isIsomorphicWith(userModel)); } + + @org.junit.Test + public void testFirsttimeUpdateEmptyBackup() { + + // the current state of the firsttime file on the filesystem + String fileModelRdf = "@prefix rdfs: <" + RDFS.getURI() + "> .\n" + + "@prefix : .\n" + + ":n1 rdfs:label \"fish 'n' chips\"@en-GB . \n" + + ":n1 rdfs:label \"fish and fries\"@en-US . \n" + + ":n2 rdfs:label \"tube\"@en-GB . \n" + + ":n2 rdfs:label \"Subway!\"@en-US . \n" + + ":n2 rdfs:label \"metrou\"@ro-RO . \n"; + + // the current state of the user-editable model + String userModelRdf = "@prefix rdfs: <" + RDFS.getURI() + "> .\n" + + "@prefix : .\n" + + ":n1 rdfs:label \"fish and chips\"@en-GB . \n" + + ":n2 rdfs:label \"tube\"@en-GB . \n" + + ":n2 rdfs:label \"subway\"@en-US . \n" + + ":n2 rdfs:label \"nooo\"@no-NO . \n"; + + // the expected state of the user-editable model after firsttime + // updates have been applied + String userModelExpectedRdf = "@prefix rdfs: <" + RDFS.getURI() + "> .\n" + + "@prefix : .\n" + + ":n1 rdfs:label \"fish and chips\"@en-GB . \n" + + ":n1 rdfs:label \"fish and fries\"@en-US . \n" + + ":n2 rdfs:label \"tube\"@en-GB . \n" + + ":n2 rdfs:label \"subway\"@en-US . \n" + + ":n2 rdfs:label \"metrou\"@ro-RO . \n" + + ":n2 rdfs:label \"nooo\"@no-NO . \n"; + + Model fileModel = ModelFactory.createDefaultModel(); + fileModel.read(new StringReader(fileModelRdf), null, "N3"); + Model backupModel = ModelFactory.createDefaultModel(); + Model userModel = ModelFactory.createDefaultModel(); + userModel.read(new StringReader(userModelRdf), null, "N3"); + Model userModelExpected = ModelFactory.createDefaultModel(); + userModelExpected.read(new StringReader(userModelExpectedRdf), null, "N3"); + + Model additionsModel = fileModel.difference(backupModel); + Model retractionsModel = backupModel.difference(fileModel); + + RDFFilesLoader.checkUiChangesOverlapWithFileChanges(backupModel, userModel, additionsModel); + RDFFilesLoader.checkUiChangesOverlapWithFileChanges(backupModel, userModel, retractionsModel); + + userModel.remove(retractionsModel); + userModel.add(additionsModel); + + // For any given triple (S, P, O) found in the fileModel, it + // should only be propagated to the user model if the user model + // doesn't already have a conflicting triple (S, P, X) where O and X + // have the same language tag. + assertTrue("expected: " + userModelExpected + " but was: " + userModel, + userModelExpected.isIsomorphicWith(userModel)); + } }