View Javadoc
1   package de.dlr.shepard.migrations.neo4j;
2   
3   import static org.junit.jupiter.api.Assertions.assertEquals;
4   import static org.neo4j.cypherdsl.core.Cypher.node;
5   
6   import org.apache.commons.lang3.NotImplementedException;
7   import org.neo4j.cypherdsl.core.Cypher;
8   
9   public class TestV14 extends MigrationTest {
10  
11    private static final String TIMESERIES = "Timeseries";
12  
13    private void createTimeseriesWithNoAnnotations() {
14      q.create(node(TIMESERIES).withProperties("timeseriesId", Cypher.literalOf(900)));
15    }
16  
17    private void createTimeseriesWithOneAnnotation() {
18      var ts = node(TIMESERIES).withProperties("timeseriesId", Cypher.literalOf(999));
19      var annotatedTs = node("AnnotatableTimeseries").withProperties("timeseriesId", Cypher.literalOf(999));
20      var annotation = sample.annotation();
21  
22      q.create(annotatedTs.relationshipTo(annotation, "has_annotation"));
23      q.create(ts);
24    }
25  
26    private void createTimeseriesWithTwoAnnotations() {
27      var ts = node(TIMESERIES).withProperties("timeseriesId", Cypher.literalOf(998));
28      var annotatedTs = node("AnnotatableTimeseries").withProperties("timeseriesId", Cypher.literalOf(998));
29      var annotation1 = sample.annotation(1);
30      var annotation2 = sample.annotation(2);
31      q.create(annotatedTs.relationshipTo(annotation1, "has_annotation"));
32      q.create(annotatedTs.relationshipTo(annotation2, "has_annotation"));
33      q.create(ts);
34    }
35  
36    @Override
37    void setupPreMigrationData() {
38      createTimeseriesWithNoAnnotations();
39      createTimeseriesWithOneAnnotation();
40      createTimeseriesWithTwoAnnotations();
41    }
42  
43    @Override
44    String getTargetVersion() {
45      return "V14";
46    }
47  
48    public void assertSinglyAnnotatedTimeseriesMigrated() {
49      var ts = node(TIMESERIES).withProperties("timeseriesId", Cypher.literalOf(999));
50      var annotation = sample.annotation();
51      var query = Cypher.match(ts.relationshipTo(annotation, "has_annotation")).returning(ts).build();
52      assertEquals(1, q.queryResults(query).size());
53    }
54  
55    public void assertDoublyAnnotatedTimeseriesMigrated() {
56      var ts = node(TIMESERIES).withProperties("timeseriesId", Cypher.literalOf(998));
57      var annotation1 = sample.annotation(1);
58      var annotation2 = sample.annotation(2);
59  
60      var query1 = Cypher.match(ts.relationshipTo(annotation1, "has_annotation")).returning(ts).build();
61      assertEquals(1, q.queryResults(query1).size());
62  
63      var query2 = Cypher.match(ts.relationshipTo(annotation2, "has_annotation")).returning(ts).build();
64      assertEquals(1, q.queryResults(query2).size());
65    }
66  
67    public void assertLegacyAnnotatedTimeseriesDeleted() {
68      var ts = node("AnnotatableTimeseries");
69      assertEquals(0, q.match(ts).size());
70    }
71  
72    public void cleanup() {
73      throw new NotImplementedException();
74    }
75  }