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