1 package de.dlr.shepard.integrationtests;
2
3 import static io.restassured.RestAssured.given;
4
5 import de.dlr.shepard.auth.users.entities.User;
6 import de.dlr.shepard.auth.users.entities.UserGroup;
7 import de.dlr.shepard.common.util.Constants;
8 import de.dlr.shepard.context.collection.io.CollectionIO;
9 import de.dlr.shepard.context.collection.io.DataObjectIO;
10 import de.dlr.shepard.context.references.dataobject.io.DataObjectReferenceIO;
11 import de.dlr.shepard.data.file.io.FileContainerIO;
12 import io.restassured.RestAssured;
13 import io.restassured.builder.RequestSpecBuilder;
14 import io.restassured.http.ContentType;
15 import io.restassured.specification.RequestSpecification;
16 import java.util.Map;
17 import org.junit.jupiter.api.BeforeAll;
18
19 public class BaseTestCaseIT {
20
21 protected static String host = "http://127.0.0.1";
22 protected static int port = 8083;
23 protected static String basePath = "/shepard/api";
24
25 protected static UserWithApiKey defaultUser;
26 protected static String nameOfDefaultUser;
27 protected static RequestSpecification requestSpecOfDefaultUser;
28
29 protected static UserWithApiKey otherUser;
30 protected static RequestSpecification requestSpecOfOtherUser;
31
32 protected static RequestSpecification requestSpecNoUser;
33
34 @BeforeAll
35 public static void init() {
36 RestAssured.baseURI = host;
37 RestAssured.port = port;
38 RestAssured.basePath = basePath;
39
40 defaultUser = getNewUserWithApiKey("test_it");
41 nameOfDefaultUser = defaultUser.getUser().getUsername();
42 requestSpecOfDefaultUser = new RequestSpecBuilder()
43 .setContentType(ContentType.JSON)
44 .addHeader("X-API-KEY", defaultUser.getApiKey().getJws())
45 .build();
46
47 otherUser = getNewUserWithApiKey("other_user");
48 requestSpecOfOtherUser = new RequestSpecBuilder()
49 .setContentType(ContentType.JSON)
50 .addHeader("X-API-KEY", otherUser.getApiKey().getJws())
51 .build();
52
53 requestSpecNoUser = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
54 }
55
56 protected static UserWithApiKey getNewUserWithApiKey(String username) {
57 return new UserWithApiKeyBuilder().withUser(username).withApiKey().build();
58 }
59
60 protected static User getNewUser(String username) {
61 return new UserWithApiKeyBuilder().withUser(username).build().getUser();
62 }
63
64 protected static UserGroup getNewUserGroup(String name) {
65 return new UserGroupBuilder().withUserGroup(name).build();
66 }
67
68 protected static CollectionIO createCollection(String name) {
69 return createCollection(name, defaultUser);
70 }
71
72 protected static CollectionIO createCollection(String name, UserWithApiKey user) {
73 var collectionSpecification = new RequestSpecBuilder()
74 .setContentType(ContentType.JSON)
75 .addHeader("X-API-KEY", user.getApiKey().getJws())
76 .build();
77 var collection = given()
78 .spec(collectionSpecification)
79 .body(Map.of("name", name))
80 .when()
81 .post("/" + Constants.COLLECTIONS)
82 .then()
83 .statusCode(201)
84 .extract()
85 .as(CollectionIO.class);
86 return collection;
87 }
88
89 protected static DataObjectIO createDataObject(String name, long collectionId) {
90 return createDataObject(name, collectionId, defaultUser);
91 }
92
93 protected static DataObjectIO createDataObject(String name, long collectionId, UserWithApiKey user) {
94 var dataObjectsURL = String.format("/%s/%d/%s/", Constants.COLLECTIONS, collectionId, Constants.DATA_OBJECTS);
95 var dataObjectSpecification = new RequestSpecBuilder()
96 .setContentType(ContentType.JSON)
97 .addHeader("X-API-KEY", user.getApiKey().getJws())
98 .build();
99 DataObjectIO dataObjectIO = new DataObjectIO();
100 dataObjectIO.setName(name);
101 var dataObjectIOToReturn = given()
102 .spec(dataObjectSpecification)
103 .body(dataObjectIO)
104 .when()
105 .post(dataObjectsURL)
106 .then()
107 .statusCode(201)
108 .extract()
109 .as(DataObjectIO.class);
110 return dataObjectIOToReturn;
111 }
112
113 protected static DataObjectReferenceIO createDataObjectReference(
114 long collectionId,
115 long dataObjectId,
116 long setReferencedDataObjectId
117 ) {
118 var dataObjectReferenceUrl =
119 "/" +
120 Constants.COLLECTIONS +
121 "/" +
122 collectionId +
123 "/" +
124 Constants.DATA_OBJECTS +
125 "/" +
126 dataObjectId +
127 "/" +
128 Constants.DATAOBJECT_REFERENCES +
129 "/";
130 var dataObjectReference = new DataObjectReferenceIO() {
131 {
132 setName("DataObjectReference");
133 setReferencedDataObjectId(setReferencedDataObjectId);
134 setRelationship("self_reference");
135 }
136 };
137 var created = given()
138 .spec(requestSpecOfDefaultUser)
139 .body(dataObjectReference)
140 .when()
141 .post(dataObjectReferenceUrl)
142 .then()
143 .statusCode(201)
144 .extract()
145 .as(DataObjectReferenceIO.class);
146 return created;
147 }
148
149 protected static FileContainerIO createFileContainer(String containerName) {
150 return createFileContainer(containerName, defaultUser);
151 }
152
153 protected static FileContainerIO createFileContainer(String name, UserWithApiKey user) {
154 FileContainerIO fileContainerIO = new FileContainerIO();
155 fileContainerIO.setName(name);
156
157 var fileContainer = given()
158 .spec(requestSpecOfDefaultUser)
159 .body(fileContainerIO)
160 .when()
161 .post("/" + Constants.FILE_CONTAINERS)
162 .then()
163 .statusCode(201)
164 .extract()
165 .as(FileContainerIO.class);
166 return fileContainer;
167 }
168 }