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 = String.format(
47 "/%s/%d/%s/%d/%s",
48 Constants.COLLECTIONS,
49 collection.getId(),
50 Constants.DATA_OBJECTS,
51 dataObject.getId(),
52 Constants.TIMESERIES_REFERENCES
53 );
54
55 containerURL = "/" + Constants.TIMESERIES_CONTAINERS;
56
57 var toCreate = new TimeseriesContainerIO();
58 toCreate.setName("TimeseriesContainer");
59 container = given()
60 .spec(requestSpecOfDefaultUser)
61 .body(toCreate)
62 .when()
63 .post(containerURL)
64 .then()
65 .statusCode(201)
66 .extract()
67 .as(TimeseriesContainerIO.class);
68 }
69
70 @Test
71 @Order(1)
72 public void importTimeseriesCsv()
73 throws URISyntaxException, NoSuchAlgorithmException, FileNotFoundException, IOException {
74 var newFile = new File(getClass().getClassLoader().getResource("timeseries_export.csv").toURI());
75 given()
76 .spec(requestSpecOfDefaultUser)
77 .contentType(ContentType.MULTIPART)
78 .multiPart(newFile)
79 .when()
80 .post(String.format("%s/%d/%s", containerURL, container.getId(), Constants.IMPORT))
81 .then()
82 .statusCode(200);
83 }
84
85 @Test
86 @Order(2)
87 public void createReference() {
88 var ts1 = new Timeseries("MyMeas", "MyDev", "MyLoc", "MySymName", "value");
89 var ts2 = new Timeseries("Different", "Just", "For", "Testing", "Purposes");
90 var timeseries = List.of(ts1, ts2);
91
92 var toCreate = new TimeseriesReferenceIO();
93 toCreate.setName("TimeseriesReferenceDummy");
94 toCreate.setStart(1708067683056000000L);
95 toCreate.setEnd(1708068043057000000L);
96 toCreate.setTimeseries(timeseries);
97 toCreate.setTimeseriesContainerId(container.getId());
98 reference = given()
99 .spec(requestSpecOfDefaultUser)
100 .body(toCreate)
101 .when()
102 .post(referencesURL)
103 .then()
104 .statusCode(201)
105 .extract()
106 .as(TimeseriesReferenceIO.class);
107 }
108
109 @Test
110 @Order(3)
111 public void exportTimeseriesCsv() throws URISyntaxException, IOException {
112 var oldFile = new File(getClass().getClassLoader().getResource("timeseries_export.csv").toURI());
113 var expected = Files.readString(oldFile.toPath());
114 var actual = given()
115 .spec(requestSpecOfDefaultUser)
116 .when()
117 .get(String.format("%s/%d/%s", referencesURL, reference.getId(), Constants.EXPORT))
118 .then()
119 .statusCode(200)
120 .extract()
121 .asString();
122
123 List<String> expectedLines = Arrays.stream(expected.split("\\R")).toList();
124 List<String> actualLines = Arrays.stream(actual.split("\\R")).toList();
125
126 assertTrue(expectedLines.containsAll(actualLines));
127 assertTrue(actualLines.containsAll(expectedLines));
128 }
129 }