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 = "/%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 }