View Javadoc
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 }