2 * Copyright (C) The Arvados Authors. All rights reserved.
4 * SPDX-License-Identifier: AGPL-3.0 OR Apache-2.0
8 package org.arvados.client.api.client;
10 import java.io.IOException;
11 import java.util.HashMap;
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;
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;
29 public class CollectionsApiClientTest extends ArvadosClientMockedWebServerTest {
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;
39 objectMapper = new ObjectMapper();
40 objectMapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
41 client = new CollectionsApiClient(CONFIG);
45 public void listCollections() throws Exception {
48 server.enqueue(getResponse("collections-list"));
51 CollectionList actual = client.list();
54 RecordedRequest request = server.takeRequest();
55 assertAuthorizationHeader(request);
56 assertRequestPath(request, RESOURCE);
57 assertRequestMethod(request, RequestMethod.GET);
58 assertThat(actual.getItemsAvailable()).isEqualTo(41);
62 public void getCollection() throws Exception {
65 server.enqueue(getResponse("collections-get"));
67 String uuid = "112ci-4zz18-p51w7z3fpopo6sm";
70 Collection actual = client.get(uuid);
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");
82 public void createCollection() throws Exception {
85 server.enqueue(getResponse("collections-create-simple"));
87 String name = TEST_COLLECTION_NAME;
89 Collection collection = new Collection();
90 collection.setName(name);
93 Collection actual = client.create(collection);
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();
106 public void createCollectionWithManifest() throws Exception {
109 server.enqueue(getResponse("collections-create-manifest"));
111 String name = TEST_COLLECTION_NAME;
112 String manifestText = ". 7df44272090cee6c0732382bba415ee9+70+Aa5ece4560e3329315165b36c239b8ab79c888f8a@5a1d5708 0:70:README.md\n";
114 Collection collection = new Collection();
115 collection.setName(name);
116 collection.setManifestText(manifestText);
119 Collection actual = client.create(collection);
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);
132 public void testUpdateWithReplaceFiles() throws IOException, InterruptedException {
134 server.enqueue(getResponse("collections-create-manifest"));
136 Map<String, String> files = new HashMap<>();
137 files.put("targetPath1", "sourcePath1");
138 files.put("targetPath2", "sourcePath2");
140 CollectionReplaceFiles replaceFilesRequest = new CollectionReplaceFiles();
141 replaceFilesRequest.setReplaceFiles(files);
144 Collection actual = client.update(TEST_COLLECTION_UUID, replaceFilesRequest);
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");
153 String actualRequestBody = request.getBody().readUtf8();
154 Map<String, Object> actualRequestMap = objectMapper.readValue(actualRequestBody, Map.class);
156 Map<String, Object> expectedRequestMap = new HashMap<>();
157 Map<String, Object> collectionOptionsMap = new HashMap<>();
158 collectionOptionsMap.put("preserve_version", true);
160 Map<String, String> replaceFilesMap = new HashMap<>();
161 replaceFilesMap.put("targetPath1", "sourcePath1");
162 replaceFilesMap.put("targetPath2", "sourcePath2");
164 expectedRequestMap.put("collection", collectionOptionsMap);
165 expectedRequestMap.put("replace_files", replaceFilesMap);
167 String expectedJson = objectMapper.writeValueAsString(expectedRequestMap);
168 String actualJson = objectMapper.writeValueAsString(actualRequestMap);
169 assertEquals(expectedJson, actualJson);