21700: Install Bundler system-wide in Rails postinst
[arvados.git] / sdk / java-v2 / src / test / java / org / arvados / client / api / client / CollectionsApiClientTest.java
1 /*
2  * Copyright (C) The Arvados Authors. All rights reserved.
3  *
4  * SPDX-License-Identifier: AGPL-3.0 OR Apache-2.0
5  *
6  */
7
8 package org.arvados.client.api.client;
9
10 import java.io.IOException;
11 import java.util.HashMap;
12 import java.util.Map;
13
14 import com.fasterxml.jackson.databind.ObjectMapper;
15 import com.fasterxml.jackson.databind.SerializationFeature;
16 import okhttp3.mockwebserver.RecordedRequest;
17 import org.arvados.client.api.model.Collection;
18 import org.arvados.client.api.model.CollectionList;
19 import org.arvados.client.api.model.CollectionReplaceFiles;
20 import org.arvados.client.test.utils.RequestMethod;
21 import org.arvados.client.test.utils.ArvadosClientMockedWebServerTest;
22 import org.junit.Before;
23 import org.junit.Test;
24
25 import static org.arvados.client.test.utils.ApiClientTestUtils.*;
26 import static org.assertj.core.api.Assertions.assertThat;
27 import static org.junit.Assert.assertEquals;
28
29 public class CollectionsApiClientTest extends ArvadosClientMockedWebServerTest {
30
31     private static final String RESOURCE = "collections";
32     private static final String TEST_COLLECTION_NAME = "Super Collection";
33     private static final String TEST_COLLECTION_UUID = "test-collection-uuid";
34     private ObjectMapper objectMapper;
35     private CollectionsApiClient client;
36
37     @Before
38     public void setUp() {
39         objectMapper = new ObjectMapper();
40         objectMapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
41         client = new CollectionsApiClient(CONFIG);
42     }
43
44     @Test
45     public void listCollections() throws Exception {
46
47         // given
48         server.enqueue(getResponse("collections-list"));
49
50         // when
51         CollectionList actual = client.list();
52
53         // then
54         RecordedRequest request = server.takeRequest();
55         assertAuthorizationHeader(request);
56         assertRequestPath(request, RESOURCE);
57         assertRequestMethod(request, RequestMethod.GET);
58         assertThat(actual.getItemsAvailable()).isEqualTo(41);
59     }
60
61     @Test
62     public void getCollection() throws Exception {
63
64         // given
65         server.enqueue(getResponse("collections-get"));
66
67         String uuid = "112ci-4zz18-p51w7z3fpopo6sm";
68
69         // when
70         Collection actual = client.get(uuid);
71
72         // then
73         RecordedRequest request = server.takeRequest();
74         assertAuthorizationHeader(request);
75         assertRequestPath(request, RESOURCE + "/" + uuid);
76         assertRequestMethod(request, RequestMethod.GET);
77         assertThat(actual.getUuid()).isEqualTo(uuid);
78         assertThat(actual.getPortableDataHash()).isEqualTo("6c4106229b08fe25f48b3a7a8289dd46+143");
79     }
80
81     @Test
82     public void createCollection() throws Exception {
83
84         // given
85         server.enqueue(getResponse("collections-create-simple"));
86
87         String name = TEST_COLLECTION_NAME;
88         
89         Collection collection = new Collection();
90         collection.setName(name);
91
92         // when
93         Collection actual = client.create(collection);
94
95         // then
96         RecordedRequest request = server.takeRequest();
97         assertAuthorizationHeader(request);
98         assertRequestPath(request, RESOURCE);
99         assertRequestMethod(request, RequestMethod.POST);
100         assertThat(actual.getName()).isEqualTo(name);
101         assertThat(actual.getPortableDataHash()).isEqualTo("d41d8cd98f00b204e9800998ecf8427e+0");
102         assertThat(actual.getManifestText()).isEmpty();
103     }
104
105     @Test
106     public void createCollectionWithManifest() throws Exception {
107
108         // given
109         server.enqueue(getResponse("collections-create-manifest"));
110
111         String name = TEST_COLLECTION_NAME;
112         String manifestText = ". 7df44272090cee6c0732382bba415ee9+70+Aa5ece4560e3329315165b36c239b8ab79c888f8a@5a1d5708 0:70:README.md\n";
113         
114         Collection collection = new Collection();
115         collection.setName(name);
116         collection.setManifestText(manifestText);
117
118         // when
119         Collection actual = client.create(collection);
120
121         // then
122         RecordedRequest request = server.takeRequest();
123         assertAuthorizationHeader(request);
124         assertRequestPath(request, RESOURCE);
125         assertRequestMethod(request, RequestMethod.POST);
126         assertThat(actual.getName()).isEqualTo(name);
127         assertThat(actual.getPortableDataHash()).isEqualTo("d41d8cd98f00b204e9800998ecf8427e+0");
128         assertThat(actual.getManifestText()).isEqualTo(manifestText);
129     }
130
131     @Test
132     public void testUpdateWithReplaceFiles() throws IOException, InterruptedException {
133         // given
134         server.enqueue(getResponse("collections-create-manifest"));
135
136         Map<String, String> files = new HashMap<>();
137         files.put("targetPath1", "sourcePath1");
138         files.put("targetPath2", "sourcePath2");
139
140         CollectionReplaceFiles replaceFilesRequest = new CollectionReplaceFiles();
141         replaceFilesRequest.setReplaceFiles(files);
142
143         // when
144         Collection actual = client.update(TEST_COLLECTION_UUID, replaceFilesRequest);
145
146         // then
147         RecordedRequest request = server.takeRequest();
148         assertAuthorizationHeader(request);
149         assertRequestPath(request, "collections/test-collection-uuid");
150         assertRequestMethod(request, RequestMethod.PUT);
151         assertThat(actual.getPortableDataHash()).isEqualTo("d41d8cd98f00b204e9800998ecf8427e+0");
152
153         String actualRequestBody = request.getBody().readUtf8();
154         Map<String, Object> actualRequestMap = objectMapper.readValue(actualRequestBody, Map.class);
155
156         Map<String, Object> expectedRequestMap = new HashMap<>();
157         Map<String, Object> collectionOptionsMap = new HashMap<>();
158         collectionOptionsMap.put("preserve_version", true);
159
160         Map<String, String> replaceFilesMap = new HashMap<>();
161         replaceFilesMap.put("targetPath1", "sourcePath1");
162         replaceFilesMap.put("targetPath2", "sourcePath2");
163
164         expectedRequestMap.put("collection", collectionOptionsMap);
165         expectedRequestMap.put("replace_files", replaceFilesMap);
166
167         String expectedJson = objectMapper.writeValueAsString(expectedRequestMap);
168         String actualJson = objectMapper.writeValueAsString(actualRequestMap);
169         assertEquals(expectedJson, actualJson);
170     }
171 }