/**
* 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.col;
import static org.fest.assertions.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
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 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;
/**
* コレクションに対するMOVEメソッドのヘッダー指定に関する妥当性検証を実装するクラス. <br />
* 本クラスでは、ヘッダーの指定内容に関する検証を実施するため、エラーレスポンスに対しては以下のチェックを実施する。
* <ul>
* <li>ステータスコード</li>
* <li>エラー時:エラーコード</li>
* <li>エラー時:エラーメッセージ</li>
* </ul>
* @see com.fujitsu.dc.test.jersey.box.dav.file.MoveFileTest
*/
@RunWith(DcRunner.class)
@Category({Unit.class, Integration.class, Regression.class })
public class MoveCollectionHeaderValidateTest 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";
/**
* コンストラクタ.
*/
public MoveCollectionHeaderValidateTest() {
super("com.fujitsu.dc.core.rs");
}
/**
* コレクションのMOVEでDestinationヘッダを省略した場合に400エラーとなること.
*/
@Test
public final void コレクションのMOVEでDestinationヘッダを省略した場合に400エラーとなること() {
final String srcCol = "davColforMOVE";
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
DcResponse response = AbstractCase.request(req);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST);
DcCoreException expectedException = DcCoreException.Dav.REQUIRED_REQUEST_HEADER_NOT_EXIST.params(
HttpHeaders.DESTINATION);
ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage());
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでDestinationヘッダに空文字を指定した場合に400エラーとなること.
*/
@Test
public final void コレクションのMOVEでDestinationヘッダに空文字を指定した場合に400エラーとなること() {
final String srcCol = "davColforMOVE";
final String destUrl = "";
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
DcResponse response = AbstractCase.request(req);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST);
DcCoreException expectedException = DcCoreException.Dav.REQUIRED_REQUEST_HEADER_NOT_EXIST.params(
HttpHeaders.DESTINATION, destUrl);
ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage());
// 移動元のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_OK);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでDestinationヘッダにURI形式でない文字列を指定した場合に400エラーとなること.
*/
@Test
public final void コレクションのMOVEでDestinationヘッダにURI形式でない文字列を指定した場合に400エラーとなること() {
final String srcCol = "davColforMOVE";
final String destUrl = "http/?#/dest#?#://destCol";
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
DcResponse response = AbstractCase.request(req);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST);
DcCoreException expectedException = DcCoreException.Dav.INVALID_REQUEST_HEADER.params(
HttpHeaders.DESTINATION, destUrl);
ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage());
// 移動元のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_OK);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでDestinationヘッダにスキームがFTPとなるURIを指定した場合に400エラーとなること.
*/
@Test
public final void コレクションのMOVEでDestinationヘッダにスキームがFTPとなるURIを指定した場合に400エラーとなること() {
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol).replaceAll("http[s]{0,1}", "ftp");
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
DcResponse response = AbstractCase.request(req);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST);
DcCoreException expectedException = DcCoreException.Dav.INVALID_REQUEST_HEADER.params(
HttpHeaders.DESTINATION, destUrl);
ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage());
// 移動元のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_OK);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでOverwriteヘッダを省略した場合に移動先が存在しないリソースへの移動ができること.
*/
@Test
public final void コレクションのMOVEでOverwriteヘッダを省略した場合に移動先が存在しないリソースへの移動ができること() {
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol);
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
DcResponse response = AbstractCase.request(req);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_CREATED);
// 移動元のコレクションが存在しないこと
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_NOT_FOUND);
// 移動先のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destCol, HttpStatus.SC_OK);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, destCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでOverwriteヘッダが空文字の場合に400エラーになること.
*/
@Test
public final void コレクションのMOVEでOverwriteヘッダが空文字の場合に400エラーになること() {
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol);
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
req.header(HttpHeaders.OVERWRITE, "");
DcResponse response = AbstractCase.request(req);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST);
DcCoreException expectedException = DcCoreException.Dav.INVALID_REQUEST_HEADER.params(
HttpHeaders.OVERWRITE, "");
ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage());
// 移動元のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_OK);
// 移動先のコレクションが存在しないこと
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destCol, HttpStatus.SC_NOT_FOUND);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, destCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでOverwriteヘッダに許可しない文字列を指定し移動先にリソースが存在しない場合に400エラーとなること.
*/
@Test
public final void コレクションのMOVEでOverwriteヘッダに許可しない文字列を指定し移動先にリソースが存在しない場合に400エラーとなること() {
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol);
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
req.header(HttpHeaders.OVERWRITE, "Y");
DcResponse response = AbstractCase.request(req);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_BAD_REQUEST);
DcCoreException expectedException = DcCoreException.Dav.INVALID_REQUEST_HEADER.params(
HttpHeaders.OVERWRITE, "Y");
ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage());
// 移動元のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_OK);
// 移動先のコレクションが存在しないこと
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destCol, HttpStatus.SC_NOT_FOUND);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, destCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでDepthヘッダを省略した場合に移動ができること.
*/
@Test
public final void コレクションのMOVEでDepthヘッダを省略した場合に移動ができること() {
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol);
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
req.header(HttpHeaders.OVERWRITE, "T");
DcResponse response = AbstractCase.request(req);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SC_CREATED);
// 移動元のコレクションが存在しないこと
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_NOT_FOUND);
// 移動先のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destCol, HttpStatus.SC_OK);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, destCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでDepthヘッダに空文字を指定した場合に400エラーとなること.
*/
@Test
public final void コレクションのMOVEでDepthヘッダに空文字を指定した場合に400エラーとなること() {
final String depth = "";
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol);
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
req.header(HttpHeaders.DEPTH, depth);
DcResponse response = AbstractCase.request(req);
assertEquals(HttpStatus.SC_BAD_REQUEST, response.getStatusCode());
DcCoreException expectedException = DcCoreException.Dav.INVALID_DEPTH_HEADER.params(depth);
ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage());
// 移動元のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_OK);
// 移動先のコレクションが存在しないこと
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destCol, HttpStatus.SC_NOT_FOUND);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, destCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでDepthヘッダにinfinityを指定した場合に正常に移動できること.
*/
@Test
public final void コレクションのMOVEでDepthヘッダにinfinityを指定した場合に正常に移動できること() {
final String depth = "infinity";
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol);
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
req.header(HttpHeaders.DEPTH, depth);
DcResponse response = AbstractCase.request(req);
assertEquals(HttpStatus.SC_CREATED, response.getStatusCode());
// 移動元のコレクションが存在しないこと
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_NOT_FOUND);
// 移動先のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destCol, HttpStatus.SC_OK);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, destCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでDepthヘッダにINFInITYを指定した場合に正常に移動できること.
*/
@Test
public final void コレクションのMOVEでDepthヘッダにINFInITYを指定した場合に正常に移動できること() {
final String depth = "INFInITY";
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol);
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
req.header(HttpHeaders.DEPTH, depth);
DcResponse response = AbstractCase.request(req);
assertEquals(HttpStatus.SC_CREATED, response.getStatusCode());
// 移動元のコレクションが存在しないこと
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_NOT_FOUND);
// 移動先のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destCol, HttpStatus.SC_OK);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, destCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでDepthヘッダにinfinity以外の文字列を指定した場合に400エラーとなること.
*/
@Test
public final void コレクションのMOVEでDepthヘッダにinfinity以外の文字列を指定した場合に400エラーとなること() {
final String depth = "1";
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol);
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
req.header(HttpHeaders.DEPTH, depth);
DcResponse response = AbstractCase.request(req);
assertEquals(HttpStatus.SC_BAD_REQUEST, response.getStatusCode());
DcCoreException expectedException = DcCoreException.Dav.INVALID_DEPTH_HEADER.params(depth);
ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage());
// 移動元のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_OK);
// 移動先のコレクションが存在しないこと
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destCol, HttpStatus.SC_NOT_FOUND);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, destCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでIf_Matchヘッダを省略した場合に移動できること.
*/
@Test
public final void コレクションのMOVEでIf_Matchヘッダを省略した場合に移動できること() {
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol);
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
req.header(HttpHeaders.OVERWRITE, "T");
req.header(HttpHeaders.DEPTH, "infinity");
DcResponse response = AbstractCase.request(req);
assertEquals(HttpStatus.SC_CREATED, response.getStatusCode());
// 移動元のコレクションが存在しないこと
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_NOT_FOUND);
// 移動先のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destCol, HttpStatus.SC_OK);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, destCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでIf_Matchヘッダに空文字を指定した場合に400エラーになること.
*/
@Test
public final void コレクションのMOVEでIf_Matchヘッダに空文字を指定した場合に400エラーになること() {
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol);
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
req.header(HttpHeaders.DEPTH, "infinity");
req.header(HttpHeaders.OVERWRITE, "T");
req.header(HttpHeaders.IF_MATCH, "");
DcResponse response = AbstractCase.request(req);
assertEquals(HttpStatus.SC_PRECONDITION_FAILED, response.getStatusCode());
DcCoreException expectedException = DcCoreException.Dav.ETAG_NOT_MATCH;
ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage());
// 移動元のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_OK);
// 移動先のコレクションが存在しないこと
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destCol, HttpStatus.SC_NOT_FOUND);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, destCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでIf_Matchヘッダにアスタリスクを指定した場合に移動できること.
*/
@Test
public final void コレクションのMOVEでIf_Matchヘッダにアスタリスクを指定した場合に移動できること() {
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol);
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
req.header(HttpHeaders.OVERWRITE, "T");
req.header(HttpHeaders.DEPTH, "infinity");
req.header(HttpHeaders.IF_MATCH, "*");
DcResponse response = AbstractCase.request(req);
assertEquals(HttpStatus.SC_CREATED, response.getStatusCode());
// 移動元のコレクションが存在しないこと
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_NOT_FOUND);
// 移動先のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destCol, HttpStatus.SC_OK);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, destCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでIf_Matchヘッダに存在しないドキュメントバージョンを指定した場合に412エラーになること.
*/
@Test
public final void コレクションのMOVEでIf_Matchヘッダに存在しないドキュメントバージョンを指定した場合に412エラーになること() {
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol);
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
TResponse res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_OK);
String etag = res.getHeader(HttpHeaders.ETAG);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
req.header(HttpHeaders.DEPTH, "infinity");
req.header(HttpHeaders.OVERWRITE, "T");
req.header(HttpHeaders.IF_MATCH, etag + "dummy");
DcResponse response = AbstractCase.request(req);
assertEquals(HttpStatus.SC_PRECONDITION_FAILED, response.getStatusCode());
DcCoreException expectedException = DcCoreException.Dav.ETAG_NOT_MATCH;
ODataCommon.checkErrorResponseBody(response, expectedException.getCode(), expectedException.getMessage());
// 移動元のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_OK);
// 移動先のコレクションが存在しないこと
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destCol, HttpStatus.SC_NOT_FOUND);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, destCol, TOKEN, -1);
}
}
/**
* コレクションのMOVEでIf_Matchヘッダに存在するドキュメントバージョンを指定すると移動できること.
*/
@Test
public final void コレクションのMOVEでIf_Matchヘッダに存在するドキュメントバージョンを指定すると移動できること() {
final String srcCol = "davColforMOVE";
final String destCol = "destCol";
final String destUrl = UrlUtils.box(CELL_NAME, BOX_NAME, destCol);
try {
// 事前準備
DavResourceUtils.createWebDavCollection(TOKEN, HttpStatus.SC_CREATED, CELL_NAME, BOX_NAME, srcCol);
TResponse res = DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_OK);
String etag = res.getHeader(HttpHeaders.ETAG);
// 移動
String url = UrlUtils.box(CELL_NAME, BOX_NAME, srcCol);
DcRequest req = DcRequest.move(url);
req.header(HttpHeaders.AUTHORIZATION, AbstractCase.BEARER_MASTER_TOKEN);
req.header(HttpHeaders.DESTINATION, destUrl);
req.header(HttpHeaders.DEPTH, "infinity");
req.header(HttpHeaders.OVERWRITE, "T");
req.header(HttpHeaders.IF_MATCH, etag);
DcResponse response = AbstractCase.request(req);
assertEquals(HttpStatus.SC_CREATED, response.getStatusCode());
// 移動元のコレクションが存在しないこと
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, srcCol, HttpStatus.SC_NOT_FOUND);
// 移動先のコレクションが存在すること
DavResourceUtils.getWebDav(CELL_NAME, TOKEN, BOX_NAME, destCol, HttpStatus.SC_OK);
} finally {
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, srcCol, TOKEN, -1);
DavResourceUtils.deleteCollection(CELL_NAME, BOX_NAME, destCol, TOKEN, -1);
}
}
}