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 }