package eu.dnetlib.dhp.schema.oaf; import static org.junit.jupiter.api.Assertions.*; import java.time.format.DateTimeParseException; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class MergeTest { OafEntity oaf; @BeforeEach public void setUp() { oaf = new Publication(); } @Test public void mergeListsTest() { // string list merge test List a = Arrays.asList("a", "b", "c", "e"); List b = Arrays.asList("a", "b", "c", "d"); List c = null; System.out.println("merge result 1 = " + oaf.mergeLists(a, b)); System.out.println("merge result 2 = " + oaf.mergeLists(a, c)); System.out.println("merge result 3 = " + oaf.mergeLists(c, c)); } @Test public void mergePublicationCollectedFromTest() { Publication a = publication(); Publication b = publication(); a.setCollectedfrom(Arrays.asList(setKV("a", "open"), setKV("b", "closed"))); b.setCollectedfrom(Arrays.asList(setKV("A", "open"), setKV("b", "Open"))); a.mergeFrom(b); assertNotNull(a.getCollectedfrom()); assertEquals(3, a.getCollectedfrom().size()); } @Test public void mergePublicationDateOfAcceptanceTest_bothPresent() { Publication a = publication(); Publication b = publication(); a.setDateofacceptance(field("2021-06-18")); b.setDateofacceptance(field("2021-06-19")); a.mergeFrom(b); assertNotNull(a.getDateofacceptance()); assertEquals("2021-06-18", a.getDateofacceptance().getValue()); } @Test public void mergePublicationDateOfAcceptanceTest_bothPresent_1() { Publication a = publication("0.8"); Publication b = publication("0.9"); a.setDateofacceptance(field("2021-06-18")); b.setDateofacceptance(field("2021-06-19")); a.mergeFrom(b); assertNotNull(a.getDateofacceptance()); assertEquals("2021-06-19", a.getDateofacceptance().getValue()); } @Test public void mergePublicationDateOfAcceptanceTest_bothPresent_2() { Publication a = publication("0.9"); Publication b = publication("0.8"); a.setDateofacceptance(field("2021-06-18")); b.setDateofacceptance(field("2021-06-19")); a.mergeFrom(b); assertNotNull(a.getDateofacceptance()); assertEquals("2021-06-18", a.getDateofacceptance().getValue()); } @Test public void mergePublicationDateOfAcceptanceTest_leftMissing() { Publication a = publication(); Publication b = publication(); b.setDateofacceptance(field("2021-06-19")); a.mergeFrom(b); assertNotNull(a.getDateofacceptance()); assertEquals("2021-06-19", a.getDateofacceptance().getValue()); } @Test public void mergePublicationDateOfAcceptanceTest_leftMissing_1() { Publication a = publication("0.9"); Publication b = publication("0.8"); b.setDateofacceptance(field("2021-06-19")); a.mergeFrom(b); assertNotNull(a.getDateofacceptance()); assertEquals("2021-06-19", a.getDateofacceptance().getValue()); } @Test public void mergePublicationDateOfAcceptanceTest_leftMissing_2() { Publication a = publication("0.8"); Publication b = publication("0.9"); b.setDateofacceptance(field("2021-06-19")); a.mergeFrom(b); assertNotNull(a.getDateofacceptance()); assertEquals("2021-06-19", a.getDateofacceptance().getValue()); } @Test public void mergePublicationDateOfAcceptanceTest_rightMissing() { Publication a = publication(); Publication b = publication(); a.setDateofacceptance(field("2021-06-19")); a.mergeFrom(b); assertNotNull(a.getDateofacceptance()); assertEquals("2021-06-19", a.getDateofacceptance().getValue()); } @Test public void mergePublicationDateOfAcceptanceTest_rightMissing_1() { Publication a = publication("0.8"); Publication b = publication("0.9"); a.setDateofacceptance(field("2021-06-19")); a.mergeFrom(b); assertNotNull(a.getDateofacceptance()); assertEquals("2021-06-19", a.getDateofacceptance().getValue()); } @Test public void mergePublicationDateOfAcceptanceTest_rightMissing_2() { Publication a = publication("0.9"); Publication b = publication("0.8"); a.setDateofacceptance(field("2021-06-19")); a.mergeFrom(b); assertNotNull(a.getDateofacceptance()); assertEquals("2021-06-19", a.getDateofacceptance().getValue()); } @Test public void mergePublicationSubjectTest() { Publication a = publication(); Publication b = publication(); a.setSubject(Arrays.asList(setSP("a", "open", "classe"), setSP("b", "open", "classe"))); b.setSubject(Arrays.asList(setSP("A", "open", "classe"), setSP("c", "open", "classe"))); a.mergeFrom(b); assertNotNull(a.getSubject()); assertEquals(3, a.getSubject().size()); } @Test public void mergeRelationTest() { Relation a = createRel(null, null); Relation b = createRel(null, null); a.mergeFrom(b); assertEquals(a, b); a = createRel(true, null); b = createRel(null, null); a.mergeFrom(b); assertEquals(true, a.getValidated()); a = createRel(true, null); b = createRel(false, null); a.mergeFrom(b); assertEquals(true, a.getValidated()); a = createRel(true, null); b = createRel(true, "2016-04-05T12:41:19.202Z"); a.mergeFrom(b); assertEquals("2016-04-05T12:41:19.202Z", a.getValidationDate()); a = createRel(true, "2016-05-07T12:41:19.202Z"); b = createRel(true, "2016-04-05T12:41:19.202Z"); a.mergeFrom(b); assertEquals("2016-04-05T12:41:19.202Z", a.getValidationDate()); } @Test public void mergeRelationTestParseException() { assertThrows(DateTimeParseException.class, () -> { Relation a = createRel(true, "2016-04-05"); Relation b = createRel(true, "2016-04-05"); a.mergeFrom(b); }); } private Relation createRel(Boolean validated, String validationDate) { Relation rel = new Relation(); rel.setSource("1"); rel.setTarget("2"); rel.setRelType("reltype"); rel.setSubRelType("subreltype"); rel.setRelClass("relclass"); rel.setValidated(validated); rel.setValidationDate(validationDate); return rel; } private KeyValue setKV(final String key, final String value) { KeyValue k = new KeyValue(); k.setKey(key); k.setValue(value); return k; } private StructuredProperty setSP( final String value, final String schema, final String classname) { StructuredProperty s = new StructuredProperty(); s.setValue(value); Qualifier q = new Qualifier(); q.setClassname(classname); q.setClassid(classname); q.setSchemename(schema); q.setSchemeid(schema); s.setQualifier(q); return s; } private Field field(T value) { Field f = new Field(); f.setValue(value); return f; } private Publication publication() { Publication p = new Publication(); p.setDataInfo(df("0.9")); return p; } private Publication publication(String trust) { Publication p = new Publication(); p.setDataInfo(df(trust)); return p; } private DataInfo df(String trust) { DataInfo d = new DataInfo(); d.setTrust(trust); return d; } }