/** * personium.io * Copyright 2014 FUJITSU LIMITED * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.fujitsu.dc.test.jersey.box.dav.file; import javax.ws.rs.core.MediaType; import org.apache.http.HttpHeaders; import org.apache.http.HttpStatus; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Text; import com.fujitsu.dc.core.DcCoreConfig; import com.fujitsu.dc.core.DcCoreException; import com.fujitsu.dc.test.categories.Integration; import com.fujitsu.dc.test.categories.Regression; import com.fujitsu.dc.test.categories.Unit; import com.fujitsu.dc.test.jersey.AbstractCase; import com.fujitsu.dc.test.jersey.DcRequest; import com.fujitsu.dc.test.jersey.DcResponse; import com.fujitsu.dc.test.jersey.DcRunner; import com.fujitsu.dc.test.jersey.ODataCommon; import com.fujitsu.dc.test.unit.core.UrlUtils; import com.fujitsu.dc.test.utils.DavResourceUtils; import com.fujitsu.dc.test.utils.TResponse; import com.sun.jersey.test.framework.JerseyTest; import static org.fest.assertions.Assertions.assertThat; import static org.junit.Assert.assertEquals; /** * ServiceSourceのMOVEのテスト. */ @RunWith(DcRunner.class) @Category({Unit.class, Integration.class, Regression.class }) public class MoveServiceSourceTest extends JerseyTest { private static final String TOKEN = AbstractCase.MASTER_TOKEN_NAME; private static final String CELL_NAME = "testcell1"; private static final String BOX_NAME = "box1"; private static final String FILE_NAME = "file1.txt"; private static final String FILE_BODY = "testFileBody"; /** * コンストラクタ. */ public MoveServiceSourceTest() { super("com.fujitsu.dc.core.rs"); } private void checkPropfindResponse(final String expectedUrl, TResponse res, boolean isExists) { Document propfind = res.bodyAsXml(); NodeList list = propfind.getElementsByTagName("href"); int index = 0; boolean isMatch = false; for (index = 0; index < list.getLength(); index++) { org.w3c.dom.Node node = list.item(index); NodeList children = node.getChildNodes(); assertEquals(1, children.getLength()); Text href = (Text) children.item(0); if (expectedUrl.equals(href.getNodeValue())) { isMatch = true; } } assertEquals(isExists, isMatch); } /** * ServiceSourceのMOVEで移動先が存在しないリソースの場合に移動できること. */ @Test public final void ServiceSourceのMOVEで移動先が存在しないリソースの場合に移動できること() { final String colName = "serviceColforMOVE"; final String destPath = "destResource"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, destPath); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, colName); String sourcePath = BOX_NAME + "/" + colName + "/__src/" + FILE_NAME; DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, sourcePath, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, colName, "__src", FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "F"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_CREATED); String etag = response.getFirstHeader(HttpHeaders.ETAG); // 移動元のファイルが存在しないこと DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, colName + "/__src/" + FILE_NAME, HttpStatus.SC_NOT_FOUND); // 移動先のファイルが存在すること TResponse res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destPath, HttpStatus.SC_OK); assertThat(res.getBody()).isEqualTo(FILE_BODY); assertThat(res.getHeader(HttpHeaders.ETAG)).isEqualTo(etag); // PROPFINDができること res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME, "1", HttpStatus.SC_MULTI_STATUS); checkPropfindResponse(destination, res, true); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, destPath); DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, colName + "/__src/" + FILE_NAME); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, colName, TOKEN, -1); } } /** * ServiceSourceのMOVEで移動元のファイルが存在しない場合に404エラーとなること. */ @Test public final void ServiceSourceのMOVEで移動元のファイルが存在しない場合に404エラーとなること() { final String colName = "serviceColforMOVE"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, FILE_NAME); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, colName); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, colName, "__src", FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_NOT_FOUND); DcCoreException expectedException = DcCoreException.Dav.RESOURCE_NOT_FOUND; ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, colName, TOKEN, -1); } } /** * ServiceSourceのMOVEでDestinationヘッダの値がリクエストURLと同じ場合に403エラーとなること. */ @Test public final void ServiceSourceのMOVEでDestinationヘッダの値がリクエストURLと同じ場合に403エラーとなること() { final String colName = "serviceColforMOVE"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, colName, "__src", FILE_NAME); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, colName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + colName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, colName, "__src", FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_FORBIDDEN); DcCoreException expectedException = DcCoreException.Dav.DESTINATION_EQUALS_SOURCE_URL.params(destination); ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, colName + "/__src/" + FILE_NAME); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, colName, TOKEN, -1); } } /** * ServiceSourceのMOVEでDestinationヘッダに移動元とホスト名が異なる文字列を指定した場合に400エラーとなること. */ @Test public final void ServiceSourceのMOVEでDestinationヘッダに移動元とホスト名が異なる文字列を指定した場合に400エラーとなること() { final String colName = "serviceColforMOVE"; final String destFileName = "destFile.txt"; final String destination = String.format("%s://%s/%s/%s/%s", DcCoreConfig.getUnitScheme(), "fqdn", CELL_NAME, BOX_NAME, destFileName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, colName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + colName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, colName + "/__src/" + FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST); DcCoreException expectedException = DcCoreException.Dav.INVALID_REQUEST_HEADER.params( HttpHeaders.DESTINATION, destination); ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, colName + "/__src/" + FILE_NAME); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, colName, TOKEN, -1); } } /** * ServiceSourceのMOVEでDestinationヘッダに移動元とBox名が異なる文字列を指定した場合に400エラーとなること. */ @Test public final void ServiceSourceのMOVEでDestinationヘッダに移動元とBox名が異なる文字列を指定した場合に400エラーとなること() { final String colName = "serviceColforMOVE"; final String destFileName = "destFile.txt"; final String destination = UrlUtils.box(CELL_NAME, "another_box", destFileName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, colName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + colName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, colName + "/__src/" + FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST); DcCoreException expectedException = DcCoreException.Dav.INVALID_REQUEST_HEADER.params( HttpHeaders.DESTINATION, destination); ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, colName + "/__src/" + FILE_NAME); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, colName, TOKEN, -1); } } /** * ServiceSourceのMOVEで移動先の1階層目の親リソースが存在しない場合409エラーとなること. */ @Test public final void ServiceSourceのMOVEで移動先の1階層目の親リソースが存在しない場合409エラーとなること() { final String colName = "serviceColforMOVE"; final String invalidColName = "invalidCol"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, invalidColName, FILE_NAME); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, colName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + colName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, colName + "/__src/" + FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "T"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_CONFLICT); DcCoreException expectedException = DcCoreException.Dav.HAS_NOT_PARENT.params(invalidColName); ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, colName + "/__src/" + FILE_NAME); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, colName, TOKEN, -1); } } /** * ServiceSourceのMOVEでDestinationヘッダに存在しないBoxのURLを指定した場合に400エラーとなること. */ @Test public final void ServiceSourceのMOVEでDestinationヘッダに存在しないBoxのURLを指定した場合に400エラーとなること() { final String colName = "serviceColforMOVE"; final String destination = UrlUtils.boxRoot(CELL_NAME, "dummyTestBoxForMove"); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, colName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + colName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, colName + "/__src/" + FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST); DcCoreException expectedException = DcCoreException.Dav.INVALID_REQUEST_HEADER.params( HttpHeaders.DESTINATION, destination); ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, colName + "/__src/" + FILE_NAME); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, colName, TOKEN, -1); } } /** * ServiceSourceのMOVEでDestinationヘッダに存在するBoxのURLを指定した場合に400エラーとなること. */ @Test public final void ServiceSourceのMOVEでDestinationヘッダに存在するBoxのURLを指定した場合に400エラーとなること() { final String colName = "serviceColforMOVE"; final String destination = UrlUtils.boxRoot(CELL_NAME, BOX_NAME); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, colName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + colName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, colName + "/__src/" + FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST); DcCoreException expectedException = DcCoreException.Dav.INVALID_REQUEST_HEADER.params( HttpHeaders.DESTINATION, destination); ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, colName + "/__src/" + FILE_NAME); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, colName, TOKEN, -1); } } /** * ServiceSourceのMOVEで移動先が存在するWebDavコレクションに対して上書きモードで移動する場合400エラーとなること. * TODO コレクションの移動を実装した場合は、正常終了(204)となる。 */ @Test public final void ServiceSourceのMOVEで移動先が存在するWebDavコレクションに対して上書きモードで移動する場合400エラーとなること() { final String svcColName = "serviceColforMOVE"; final String davColName = "davColforMOVE"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, davColName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, svcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, davColName); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, svcColName + "/__src/" + FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "T"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST); DcCoreException expectedException = DcCoreException.Dav.RESOURCE_PROHIBITED_TO_OVERWRITE; ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + FILE_NAME); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, svcColName, TOKEN, -1); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, davColName, TOKEN, -1); } } /** * ServiceSourceのMOVEで移動先が存在するWebDavコレクションに対して上書き禁止モードで移動する場合412エラーとなること. */ @Test public final void ServiceSourceのMOVEで移動先が存在するWebDavコレクションに対して上書き禁止モードで移動する場合412エラーとなること() { final String svcColName = "serviceColforMOVE"; final String davColName = "davColforMOVE"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, davColName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, svcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, davColName); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, svcColName + "/__src/" + FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "F"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_PRECONDITION_FAILED); DcCoreException expectedException = DcCoreException.Dav.DESTINATION_ALREADY_EXISTS; ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + FILE_NAME); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, svcColName, TOKEN, -1); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, davColName, TOKEN, -1); } } /** * ServiceSourceのMOVEで移動先が存在するファイル配下のファイルの場合400エラーとなること. */ @Test public final void ServiceSourceのMOVEで移動先が存在するファイル配下のファイルの場合400エラーとなること() { final String svcColName = "serviceColforMOVE"; final String parentFileName = "parent_file"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, parentFileName, FILE_NAME); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, svcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + parentFileName, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, svcColName + "/__src/" + FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "T"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST); DcCoreException expectedException = DcCoreException.Dav.RESOURCE_PROHIBITED_TO_MOVE_FILE; ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, parentFileName); DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + FILE_NAME); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, svcColName, TOKEN, -1); } } /** * ServiceSourceのMOVEで同一ServiceSourceコレクション直下の存在しないファイルに上書き禁止モードで移動できること. */ @Test public final void ServiceSourceのMOVEで同一ServiceSourceコレクション直下の存在しないファイルに上書き禁止モードで移動できること() { final String svcColName = "serviceColforMOVE"; final String destFileName = "destFile.txt"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, svcColName, "__src", destFileName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, svcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, svcColName, "__src", FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "F"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_CREATED); String etag = response.getFirstHeader(HttpHeaders.ETAG); // 移動元ファイルを取得できない TResponse res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + FILE_NAME, HttpStatus.SC_NOT_FOUND); // 移動先ファイルを取得できること res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + destFileName, HttpStatus.SC_OK); assertThat(res.getBody()).isEqualTo(FILE_BODY); assertThat(res.getHeader(HttpHeaders.ETAG)).isEqualTo(etag); // PROPFINDができること res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/", "1", HttpStatus.SC_MULTI_STATUS); checkPropfindResponse(destination, res, true); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + destFileName); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, svcColName, TOKEN, -1); } } /** * ServiceSourceのMOVEで同一ServiceSourceコレクション直下の存在しないファイルに上書きモードで移動できること. */ @Test public final void ServiceSourceのMOVEで同一ServiceSourceコレクション直下の存在しないファイルに上書きモードで移動できること() { final String svcColName = "serviceColforMOVE"; final String destFileName = "destFile.txt"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, svcColName, "__src", destFileName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, svcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, svcColName, "__src", FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "T"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_CREATED); String etag = response.getFirstHeader(HttpHeaders.ETAG); // 移動元ファイルを取得できない TResponse res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + FILE_NAME, HttpStatus.SC_NOT_FOUND); // 移動先ファイルを取得できること res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + destFileName, HttpStatus.SC_OK); assertThat(res.getBody()).isEqualTo(FILE_BODY); assertThat(res.getHeader(HttpHeaders.ETAG)).isEqualTo(etag); // PROPFINDができること res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/", "1", HttpStatus.SC_MULTI_STATUS); checkPropfindResponse(destination, res, true); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + destFileName); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, svcColName, TOKEN, -1); } } /** * ServiceSourceのMOVEで同一ServiceSourceコレクション直下の存在するファイルに上書き禁止モードで412エラーとなること. */ @Test public final void ServiceSourceのMOVEで同一ServiceSourceコレクション直下の存在するファイルに上書き禁止モードで412エラーとなること() { final String svcColName = "serviceColforMOVE"; final String destFileName = "destFile.txt"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, svcColName, "__src", destFileName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, svcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/" + destFileName, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, svcColName, "__src", FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "F"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_PRECONDITION_FAILED); DcCoreException expectedException = DcCoreException.Dav.DESTINATION_ALREADY_EXISTS; ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); // 移動元ファイルを取得できること TResponse res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + FILE_NAME, HttpStatus.SC_OK); assertThat(res.getBody()).isEqualTo(FILE_BODY); // 移動先ファイルを取得できること res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + destFileName, HttpStatus.SC_OK); assertThat(res.getBody()).isEqualTo(FILE_BODY); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + FILE_NAME); DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + destFileName); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, svcColName, TOKEN, -1); } } /** * ServiceSourceのMOVEで同一ServiceSourceコレクション直下の存在するファイルに上書きモードで移動できること. */ @Test public final void ServiceSourceのMOVEで同一ServiceSourceコレクション直下の存在するファイルに上書きモードで移動できること() { final String svcColName = "serviceColforMOVE"; final String destFileName = "destFile.txt"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, svcColName, "__src", destFileName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, svcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/" + destFileName, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, svcColName, "__src", FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "T"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); String etag = response.getFirstHeader(HttpHeaders.ETAG); // 移動元ファイルが取得できないこと TResponse res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + FILE_NAME, HttpStatus.SC_NOT_FOUND); // 移動先ファイルが取得できること res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + destFileName, HttpStatus.SC_OK); assertThat(res.getBody()).isEqualTo(FILE_BODY); assertThat(res.getHeader(HttpHeaders.ETAG)).isEqualTo(etag); // PROPFINDができること res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/", "1", HttpStatus.SC_MULTI_STATUS); checkPropfindResponse(destination, res, true); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + destFileName); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, svcColName, TOKEN, -1); } } /** * ServiceSourceのMOVEで別のServiceSourceコレクション直下の存在しないファイルに上書き禁止モードで移動できること. */ @Test public final void ServiceSourceのMOVEで別のServiceSourceコレクション直下の存在しないファイルに上書き禁止モードで移動できること() { final String srcSvcColName = "sourceServiceColforMOVE"; final String dstSvcColName = "destServiceColforMOVE"; final String destFileName = "destFile.txt"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, dstSvcColName, "__src", destFileName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcSvcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + srcSvcColName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, dstSvcColName); // Fileの移動(上書き禁止モード) String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcSvcColName, "__src", FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "F"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_CREATED); String etag = response.getFirstHeader(HttpHeaders.ETAG); // 移動元ファイルを取得できない TResponse res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcSvcColName + "/__src/" + FILE_NAME, HttpStatus.SC_NOT_FOUND); // 移動先ファイルを取得できること res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, dstSvcColName + "/__src/" + destFileName, HttpStatus.SC_OK); assertThat(res.getBody()).isEqualTo(FILE_BODY); assertThat(res.getHeader(HttpHeaders.ETAG)).isEqualTo(etag); // PROPFINDができること res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME + "/" + srcSvcColName + "/__src/", "1", HttpStatus.SC_MULTI_STATUS); String href = UrlUtils.box(CELL_NAME, BOX_NAME, srcSvcColName, FILE_NAME); checkPropfindResponse(href, res, false); // PROPFIND(移動先)ができること res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME + "/" + dstSvcColName + "/__src/", "1", HttpStatus.SC_MULTI_STATUS); href = UrlUtils.box(CELL_NAME, BOX_NAME, dstSvcColName, "__src", destFileName); checkPropfindResponse(href, res, true); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, dstSvcColName + "/__src/" + destFileName); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcSvcColName, TOKEN, -1); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, dstSvcColName, TOKEN, -1); } } /** * ServiceSourceのMOVEで別のServiceSourceコレクション直下の存在しないファイルが上書きモードで移動できること. */ @Test public final void ServiceSourceのMOVEで別のServiceSourceコレクション直下の存在しないファイルが上書きモードで移動できること() { final String srcSvcColName = "sourceServiceColforMOVE"; final String dstSvcColName = "destServiceColforMOVE"; final String destFileName = "destFile.txt"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, dstSvcColName, "__src", destFileName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcSvcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + srcSvcColName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, dstSvcColName); // Fileの移動(上書きモード) String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcSvcColName, "__src", FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "T"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_CREATED); String etag = response.getFirstHeader(HttpHeaders.ETAG); // 移動元ファイルを取得できない TResponse res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcSvcColName + "/__src/" + FILE_NAME, HttpStatus.SC_NOT_FOUND); // 移動先ファイルを取得できること res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, dstSvcColName + "/__src/" + destFileName, HttpStatus.SC_OK); assertThat(res.getBody()).isEqualTo(FILE_BODY); assertThat(res.getHeader(HttpHeaders.ETAG)).isEqualTo(etag); // PROPFINDができること res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME + "/" + srcSvcColName + "/__src/", "1", HttpStatus.SC_MULTI_STATUS); String href = UrlUtils.box(CELL_NAME, BOX_NAME, srcSvcColName, "__src", FILE_NAME); checkPropfindResponse(href, res, false); // PROPFIND(移動先)ができること res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME + "/" + dstSvcColName + "/__src/", "1", HttpStatus.SC_MULTI_STATUS); href = UrlUtils.box(CELL_NAME, BOX_NAME, dstSvcColName, "__src", destFileName); checkPropfindResponse(href, res, true); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, dstSvcColName + "/__src/" + destFileName); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcSvcColName, TOKEN, -1); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, dstSvcColName, TOKEN, -1); } } /** * ServiceSourceのMOVEで別のServiceSourceコレクション直下の存在するファイルが上書き禁止モードで412エラーとなること. */ @Test public final void ServiceSourceのMOVEで別のServiceSourceコレクション直下の存在するファイルが上書き禁止モードで412エラーとなること() { final String srcSvcColName = "sourceServiceColforMOVE"; final String dstSvcColName = "destServiceColforMOVE"; final String destFileName = "destFile.txt"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, dstSvcColName, "__src", destFileName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcSvcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + srcSvcColName + "/__src/" + FILE_NAME, FILE_BODY + "1", MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, dstSvcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + dstSvcColName + "/__src/" + destFileName, FILE_BODY + "2", MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動(上書き禁止モード) String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcSvcColName, "__src", FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "F"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_PRECONDITION_FAILED); DcCoreException expectedException = DcCoreException.Dav.DESTINATION_ALREADY_EXISTS; ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage()); // 移動元ファイルを取得できること TResponse res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcSvcColName + "/__src/" + FILE_NAME, HttpStatus.SC_OK); assertThat(res.getBody()).isEqualTo(FILE_BODY + "1"); // 移動先ファイルを取得できること res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, dstSvcColName + "/__src/" + destFileName, HttpStatus.SC_OK); assertThat(res.getBody()).isEqualTo(FILE_BODY + "2"); // PROPFIND(移動元)ができること res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME + "/" + srcSvcColName + "/__src/", "1", HttpStatus.SC_MULTI_STATUS); String href = UrlUtils.box(CELL_NAME, BOX_NAME, srcSvcColName, "__src", FILE_NAME); checkPropfindResponse(href, res, true); // PROPFIND(移動先)ができること res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME + "/" + dstSvcColName + "/__src/", "1", HttpStatus.SC_MULTI_STATUS); href = UrlUtils.box(CELL_NAME, BOX_NAME, dstSvcColName, "__src", destFileName); checkPropfindResponse(href, res, true); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, dstSvcColName + "/__src/" + destFileName); DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, srcSvcColName + "/__src/" + FILE_NAME); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcSvcColName, TOKEN, -1); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, dstSvcColName, TOKEN, -1); } } /** * ServiceSourceのMOVEで別のServiceSourceコレクション直下の存在するファイルが上書きモードで移動できること. */ @Test public final void ServiceSourceのMOVEで別のServiceSourceコレクション直下の存在するファイルが上書きモードで移動できること() { final String srcSvcColName = "sourceServiceColforMOVE"; final String dstSvcColName = "destServiceColforMOVE"; final String destFileName = "destFile.txt"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, dstSvcColName, "__src", destFileName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcSvcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + srcSvcColName + "/__src/" + FILE_NAME, FILE_BODY + "1", MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, dstSvcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + dstSvcColName + "/__src/" + destFileName, FILE_BODY + "2", MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動(上書きモード) String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcSvcColName, "__src", FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "T"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); String etag = response.getFirstHeader(HttpHeaders.ETAG); // 移動元ファイルが取得できないこと TResponse res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcSvcColName + "/__src/" + FILE_NAME, HttpStatus.SC_NOT_FOUND); // 移動先ファイルが取得できること res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, dstSvcColName + "/__src/" + destFileName, HttpStatus.SC_OK); assertThat(res.getBody()).isEqualTo(FILE_BODY + "1"); assertThat(res.getHeader(HttpHeaders.ETAG)).isEqualTo(etag); // PROPFIND(移動元)ができること res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME + "/" + srcSvcColName + "/__src/", "1", HttpStatus.SC_MULTI_STATUS); String href = UrlUtils.box(CELL_NAME, BOX_NAME, srcSvcColName, "__src", FILE_NAME); checkPropfindResponse(href, res, false); // PROPFIND(移動先)ができること res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME + "/" + dstSvcColName + "/__src/", "1", HttpStatus.SC_MULTI_STATUS); href = UrlUtils.box(CELL_NAME, BOX_NAME, dstSvcColName, "__src", destFileName); checkPropfindResponse(href, res, true); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, dstSvcColName + "/__src/" + destFileName); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcSvcColName, TOKEN, -1); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, dstSvcColName, TOKEN, -1); } } /** * ServiceSourceのMOVEでWebDavコレクション直下の存在するファイルに上書きモードで移動できること. */ @Test public final void ServiceSourceのMOVEでWebDavコレクション直下の存在するファイルに上書きモードで移動できること() { final String svcColName = "serviceColforMOVE"; final String davColName = "davColforMOVE"; final String destFileName = "destFile.txt"; final String destination = UrlUtils.box(CELL_NAME, BOX_NAME, davColName, destFileName); try { // 事前準備 DavResourceUtils.createServiceCollection(AbstractCase.BEARER_MASTER_TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, svcColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/" + FILE_NAME, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, davColName); DavResourceUtils.createWebDavFile(TOKEN, CELL_NAME, BOX_NAME + "/" + davColName + "/" + destFileName, FILE_BODY, MediaType.TEXT_PLAIN, HttpStatus.SC_CREATED); // Fileの移動 String url = UrlUtils.box(CELL_NAME, BOX_NAME, svcColName, "__src", FILE_NAME); DcRequest req = DcRequest.move(url); req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN); req.header(HttpHeaders.DESTINATION, destination); req.header(HttpHeaders.OVERWRITE, "T"); // リクエスト実行 DcResponse response = AbstractCase.request(req); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_NO_CONTENT); String etag = response.getFirstHeader(HttpHeaders.ETAG); // 移動元ファイルが取得できないこと TResponse res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, svcColName + "/__src/" + FILE_NAME, HttpStatus.SC_NOT_FOUND); // 移動先ファイルが取得できること res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, davColName + "/" + destFileName, HttpStatus.SC_OK); assertThat(res.getBody()).isEqualTo(FILE_BODY); assertThat(res.getHeader(HttpHeaders.ETAG)).isEqualTo(etag); // PROPFINDができること res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME + "/" + svcColName + "/__src/", "1", HttpStatus.SC_MULTI_STATUS); checkPropfindResponse(destination, res, false); res = DavResourceUtils.propfind(TOKEN, CELL_NAME, BOX_NAME + "/" + davColName, "1", HttpStatus.SC_MULTI_STATUS); checkPropfindResponse(destination, res, true); } finally { DavResourceUtils.deleteWebDavFile(CELL_NAME, TOKEN, BOX_NAME, davColName + "/" + destFileName); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, davColName, TOKEN, -1); DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, svcColName, TOKEN, -1); } } }