1 package de.dlr.shepard.integrationtests;
2
3 import static io.restassured.RestAssured.given;
4 import static org.junit.jupiter.api.Assertions.assertTrue;
5
6 import de.dlr.shepard.common.util.Constants;
7 import de.dlr.shepard.context.collection.io.CollectionIO;
8 import de.dlr.shepard.context.collection.io.DataObjectIO;
9 import de.dlr.shepard.context.references.timeseriesreference.io.TimeseriesReferenceIO;
10 import de.dlr.shepard.data.timeseries.io.TimeseriesContainerIO;
11 import de.dlr.shepard.data.timeseries.model.Timeseries;
12 import io.quarkus.test.junit.QuarkusIntegrationTest;
13 import io.restassured.http.ContentType;
14 import java.io.File;
15 import java.io.FileNotFoundException;
16 import java.io.IOException;
17 import java.net.URISyntaxException;
18 import java.nio.file.Files;
19 import java.security.NoSuchAlgorithmException;
20 import java.util.Arrays;
21 import java.util.List;
22 import org.junit.jupiter.api.BeforeAll;
23 import org.junit.jupiter.api.MethodOrderer;
24 import org.junit.jupiter.api.Order;
25 import org.junit.jupiter.api.Test;
26 import org.junit.jupiter.api.TestMethodOrder;
27
28 @QuarkusIntegrationTest
29 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
30 public class TimeseriesCsvIT extends BaseTestCaseIT {
31
32 private static CollectionIO collection;
33 private static DataObjectIO dataObject;
34
35 private static String referencesURL;
36 private static String containerURL;
37
38 private static TimeseriesContainerIO container;
39 private static TimeseriesReferenceIO reference;
40
41 @BeforeAll
42 public static void setUp() {
43 collection = createCollection("TimeseriesReferenceTestCollection");
44 dataObject = createDataObject("TimeseriesReferenceTestDataObject", collection.getId());
45
46 referencesURL = "/%s/%d/%s/%d/%s".formatted(
47 Constants.COLLECTIONS,
48 collection.getId(),
49 Constants.DATA_OBJECTS,
50 dataObject.getId(),
51 Constants.TIMESERIES_REFERENCES
52 );
53
54 containerURL = "/" + Constants.TIMESERIES_CONTAINERS;
55
56 var toCreate = new TimeseriesContainerIO();
57 toCreate.setName("TimeseriesContainer");
58 container = given()
59 .spec(requestSpecOfDefaultUser)
60 .body(toCreate)
61 .when()
62 .post(containerURL)
63 .then()
64 .statusCode(201)
65 .extract()
66 .as(TimeseriesContainerIO.class);
67 }
68
69 @Test
70 @Order(1)
71 public void importTimeseriesCsv()
72 throws URISyntaxException, NoSuchAlgorithmException, FileNotFoundException, IOException {
73 var newFile = new File(getClass().getClassLoader().getResource("timeseries_export.csv").toURI());
74 given()
75 .spec(requestSpecOfDefaultUser)
76 .contentType(ContentType.MULTIPART)
77 .multiPart(newFile)
78 .when()
79 .post("%s/%d/%s".formatted(containerURL, container.getId(), Constants.IMPORT))
80 .then()
81 .statusCode(200);
82 }
83
84 @Test
85 @Order(2)
86 public void createReference() {
87 var ts1 = new Timeseries("MyMeas", "MyDev", "MyLoc", "MySymName", "value");
88 var ts2 = new Timeseries("Different", "Just", "For", "Testing", "Purposes");
89 var timeseries = List.of(ts1, ts2);
90
91 var toCreate = new TimeseriesReferenceIO();
92 toCreate.setName("TimeseriesReferenceDummy");
93 toCreate.setStart(1708067683056000000L);
94 toCreate.setEnd(1708068043057000000L);
95 toCreate.setTimeseries(timeseries);
96 toCreate.setTimeseriesContainerId(container.getId());
97 reference = given()
98 .spec(requestSpecOfDefaultUser)
99 .body(toCreate)
100 .when()
101 .post(referencesURL)
102 .then()
103 .statusCode(201)
104 .extract()
105 .as(TimeseriesReferenceIO.class);
106 }
107
108 @Test
109 @Order(3)
110 public void exportTimeseriesCsv() throws URISyntaxException, IOException {
111 var oldFile = new File(getClass().getClassLoader().getResource("timeseries_export.csv").toURI());
112 var expected = Files.readString(oldFile.toPath());
113 var actual = given()
114 .spec(requestSpecOfDefaultUser)
115 .when()
116 .get("%s/%d/%s".formatted(referencesURL, reference.getId(), Constants.EXPORT))
117 .then()
118 .statusCode(200)
119 .extract()
120 .asString();
121
122 List<String> expectedLines = Arrays.stream(expected.split("\\R")).toList();
123 List<String> actualLines = Arrays.stream(actual.split("\\R")).toList();
124
125 assertTrue(expectedLines.containsAll(actualLines));
126 assertTrue(actualLines.containsAll(expectedLines));
127 }
128 }