/** * 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.cell; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.Calendar; import java.util.HashMap; import javax.ws.rs.core.MediaType; import org.apache.http.Header; import org.apache.http.HttpHeaders; import org.apache.http.HttpStatus; import org.json.simple.JSONObject; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; import org.w3c.dom.NodeList; import com.fujitsu.dc.core.DcCoreException; import com.fujitsu.dc.core.model.Cell; 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.DcResponse; import com.fujitsu.dc.test.jersey.DcRestAdapter; import com.fujitsu.dc.test.jersey.ODataCommon; import com.fujitsu.dc.test.setup.Setup; import com.fujitsu.dc.test.unit.core.UrlUtils; import com.fujitsu.dc.test.utils.Http; import com.fujitsu.dc.test.utils.TResponse; /** * Cellの更新のIT. */ @Category({Unit.class, Integration.class, Regression.class }) public class UpdateTest extends AbstractCase { private String cellName; private String cellNameToDelete; private DcResponse res; private static String eTag = ""; private static String published = ""; /** * ETagの値. */ public static final String ETAG_ASTA = "*"; /** * コンストラクタ. テスト対象のパッケージをsuperに渡す必要がある */ public UpdateTest() { super("com.fujitsu.dc.core.rs"); } /** * テスト全体の実行前で必ず1度実行される処理. */ @BeforeClass public static void beforeClass() { } /** * 各テストの実行前で必ず1度実行される処理. */ @SuppressWarnings("unchecked") @Before public void before() { // Cellを作成 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); // DBサーバーを共有した際、同時にテストを行うと、同じCell名では409となってしまうため、一意にするため、Cell名に時間をセット this.cellName = "cellname" + Long.toString(Calendar.getInstance().getTimeInMillis()); this.cellNameToDelete = cellName; // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); DcResponse beforeres = createCell(headers, requestBody); // 更新したCellのIDを保持する // Header[] resHeadersLocate = beforeres.getResponseHeaders(HttpHeaders.LOCATION); // cellName = resHeadersLocate[0].getValue().split("'")[1]; // ETagが正式実装された場合は、レスポンスのEtagを使用するため保持する必要がある Header[] resHeadersEtag = beforeres.getResponseHeaders(HttpHeaders.ETAG); if (resHeadersEtag != null && resHeadersEtag.length == 1) { eTag = resHeadersEtag[0].getValue(); } // eTag = ETAG_ASTA; // __publishedを取得 published = ODataCommon.getPublished(beforeres); } /** * 各テストの実行後で必ず1度実行される処理. */ @After public void after() { deleteCell(); } /** * Cell更新の正常リクエストで204が返却されること. */ @SuppressWarnings("unchecked") @Test public final void Cell更新の正常リクエストで204が返却されること() { // リクエストヘッダを設定する HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, eTag); // リクエストボディを設定する JSONObject requestBody = new JSONObject(); String updateCellName = "cellname" + Long.toString(Calendar.getInstance().getTimeInMillis()); requestBody.put("Name", updateCellName); // リクエストを実行する res = updateCell(headers, requestBody); cellNameToDelete = updateCellName; // __publishedを取得する DcResponse getResp = restGet(getUrl(updateCellName)); String resPublished = ODataCommon.getPublished(getResp); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); assertEquals(published, resPublished); } /** * ACL設定済みのCell更新の正常リクエストで204が返却されること. */ @SuppressWarnings("unchecked") @Test public final void ACL設定済みのCell更新の正常リクエストで204が返却されること() { // ACL(all/all)をCellに設定 Http.request("cell/acl-setting-all.txt") .with("url", cellName) .with("token", Setup.BEARER_MASTER_TOKEN) .with("roleBaseUrl", UrlUtils.roleResource(cellName, null, "")) .returns() .statusCode(HttpStatus.SC_OK); // PROPFINDでCellのACLを取得 TResponse tresponse = Http.request("cell/propfind-cell-allprop.txt") .with("url", cellName) .with("depth", "0") .with("token", Setup.MASTER_TOKEN_NAME) .returns(); tresponse.statusCode(HttpStatus.SC_MULTI_STATUS); // principalにallが設定されていることの確認 NodeList nodeListPrincipal = tresponse.bodyAsXml().getElementsByTagName("principal").item(0).getChildNodes(); boolean existsPrincipalAll = false; for (int i = 0; i < nodeListPrincipal.getLength(); i++) { String nodename = nodeListPrincipal.item(i).getNodeName(); if ("all".equals(nodename)) { existsPrincipalAll = true; } } assertTrue(existsPrincipalAll); // privilegeにallが設定されていることの確認 NodeList nodeListPrivilege = tresponse.bodyAsXml().getElementsByTagName("privilege").item(0).getChildNodes(); boolean existsPrivilegeAll = false; for (int i = 0; i < nodeListPrivilege.getLength(); i++) { String nodename = nodeListPrivilege.item(i).getNodeName(); if ("all".equals(nodename)) { existsPrivilegeAll = true; } } assertTrue(existsPrivilegeAll); // 更新用のリクエストヘッダを設定する HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // 更新用リクエストボディを設定する JSONObject requestBody = new JSONObject(); String updateCellName = "cellname" + Long.toString(Calendar.getInstance().getTimeInMillis()); requestBody.put("Name", updateCellName); // 更新リクエストを実行する res = updateCell(headers, requestBody); cellNameToDelete = updateCellName; // __publishedを取得する DcResponse getResp = restGet(getUrl(updateCellName)); String resPublished = ODataCommon.getPublished(getResp); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); assertEquals(published, resPublished); // PROPFINDでCellのACLを取得 TResponse tresponsePut = Http.request("cell/propfind-cell-allprop.txt").with("url", updateCellName) .with("depth", "0") .with("token", Setup.MASTER_TOKEN_NAME).returns(); tresponse.statusCode(HttpStatus.SC_MULTI_STATUS); // principalにallが設定されていることの確認 assertNotNull(tresponsePut.bodyAsXml().getElementsByTagName("principal").item(0)); nodeListPrincipal = tresponsePut.bodyAsXml().getElementsByTagName("principal").item(0).getChildNodes(); existsPrincipalAll = false; for (int i = 0; i < nodeListPrincipal.getLength(); i++) { String nodename = nodeListPrincipal.item(i).getNodeName(); if ("all".equals(nodename)) { existsPrincipalAll = true; } } assertTrue(existsPrincipalAll); // privilegeにallが設定されていることの確認 assertNotNull(tresponsePut.bodyAsXml().getElementsByTagName("privilege").item(0)); nodeListPrivilege = tresponsePut.bodyAsXml().getElementsByTagName("privilege").item(0).getChildNodes(); existsPrivilegeAll = false; for (int i = 0; i < nodeListPrivilege.getLength(); i++) { String nodename = nodeListPrivilege.item(i).getNodeName(); if ("all".equals(nodename)) { existsPrivilegeAll = true; } } assertTrue(existsPrivilegeAll); } /** * Cell名にクオート無しの数値型式名を指定した場合400エラーとなること. */ @Test public final void Cell名にクオート無しの数値型式名を指定した場合400エラーとなること() { // $format なし // Acceptヘッダ なし String cellNameAsInteger = "123456"; String url = getUrlWithOutQuote(cellNameAsInteger, null); DcResponse response = this.restPut(url, ""); assertEquals(HttpStatus.SC_BAD_REQUEST, response.getStatusCode()); checkErrorResponse(response.bodyAsJson(), DcCoreException.OData.ENTITY_KEY_PARSE_ERROR.getCode(), DcCoreException.OData.ENTITY_KEY_PARSE_ERROR.getMessage()); } /** * Cellの更新のNameが無い アクセプトヘッダ無しのパターンのテスト. */ @Test public final void Cellの更新のNameが無いアクセプトヘッダ無しのパターンのテスト() { cellNameNull(null); } /** * Cellの更新のNameが無い アクセプトヘッダJSONのパターンのテスト. */ @Test public final void Cellの更新のNameが無いアクセプトヘッダJSONのパターンのテスト() { cellNameNull(MediaType.APPLICATION_JSON); } /** * Cellの更新のNameが無い アクセプトヘッダATOMのパターンのテスト. */ @Test public final void Cellの更新のNameが無いアクセプトヘッダATOMのパターンのテスト() { cellNameNull(MediaType.APPLICATION_ATOM_XML); } /** * Cellの更新のNameが無いパターンのテスト. * @param accept アクセプトヘッダの値 */ private void cellNameNull(String accept) { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); if (accept != null) { headers.put(HttpHeaders.ACCEPT, accept); } else { accept = MediaType.APPLICATION_ATOM_XML; } // リクエストボディを生成 JSONObject requestBody = new JSONObject(); res = updateCell(headers, requestBody); assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); // ボディのチェック checkErrorResponse(this.res.bodyAsJson(), "PR400-OD-0009"); } /** * Cellの更新のNameが空のパターンのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新のNameが空のパターンのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", ""); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR400-OD-0006"); } /** * Cellの更新のNameが1文字のパターンのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新のNameが1文字のパターンのテスト() { HashMap<String, String> headers = new HashMap<String, String>(); try { // Cellを更新 // リクエストヘッダをセット headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", "0"); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } finally { // セル名を元に戻す(削除はafterで実行する) JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); this.updateCellName(headers, requestBody, "0"); } } /** * Cellの更新のNameが128文字のパターンのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新のNameが128文字のパターンのテスト() { String id = "01234567890123456789012345678901234567890123456789" + "012345678901234567890123456789012345678901234567890123456789012345678901234567"; HashMap<String, String> headers = new HashMap<String, String>(); try { // Cellを更新 // リクエストヘッダをセット headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", id); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } finally { // セル名を元に戻す(削除はafterで実行する) JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); this.updateCellName(headers, requestBody, id); } } /** * Cellの更新のNameが129文字のパターンのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新のNameが129文字のパターンのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); String name = "01234567890123456789012345678901234567890123456789" + "0123456789012345678901234567890123456789012345678901234567890123456789012345678"; requestBody.put("Name", name); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR400-OD-0006"); } /** * Cellの更新のNameが半角英数と"-","_"のパターンのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新のNameが半角英数と使用可能な記号のパターンのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); this.cellNameToDelete = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"; requestBody.put("Name", this.cellNameToDelete); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } /** * Cellの更新のNameが半角英数と"-","_"以外のパターンのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新のNameが半角英数と使用可能な記号以外のパターンのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", "あ"); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR400-OD-0006"); } /** * Cellの更新のNameが__の場合に400が返却されること. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新のNameが__の場合に400が返却されること() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", "__"); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR400-OD-0006"); } /** * Cellの更新のNameが__ctlの場合に400が返却されること. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新のNameが__ctlの場合に400が返却されること() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", "__ctl"); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR400-OD-0006"); } /** * Cell更新のリクエストボディに__publishedを指定した場合に400が返却されること. */ @SuppressWarnings("unchecked") @Test public final void Cell更新のリクエストボディに__publishedを指定した場合に400が返却されること() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); String updateCellName = "cellname" + Long.toString(Calendar.getInstance().getTimeInMillis()); requestBody.put("Name", updateCellName); requestBody.put(PUBLISHED, "/Date(0)/"); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); } /** * Cell更新のリクエストボディに__updatedを指定した場合に400が返却されること. */ @SuppressWarnings("unchecked") @Test public final void Cell更新のリクエストボディに__updatedを指定した場合に400が返却されること() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); String updateCellName = "cellname" + Long.toString(Calendar.getInstance().getTimeInMillis()); requestBody.put("Name", updateCellName); requestBody.put(UPDATED, "/Date(0)/"); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); } /** * Cell更新のリクエストボディに__metadataを指定した場合に400が返却されること. */ @SuppressWarnings("unchecked") @Test public final void Cell更新のリクエストボディに__metadataを指定した場合に400が返却されること() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); String updateCellName = "cellname" + Long.toString(Calendar.getInstance().getTimeInMillis()); requestBody.put("Name", updateCellName); requestBody.put(METADATA, "test"); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); } /** * Cellの更新のJSONフォーマットエラー アクセプトヘッダ無しのテスト. */ @Test public final void Cellの更新のJSONフォーマットエラーでアクセプトヘッダ無しのテスト() { cellJsonFormatErr(null); } /** * Cellの更新のJSONフォーマットエラー アクセプトヘッダJSONのテスト. */ @Test public final void Cellの更新のJSONフォーマットエラーでアクセプトヘッダJSONのテスト() { cellJsonFormatErr(MediaType.APPLICATION_JSON); } /** * Cellの更新のJSONフォーマットエラー アクセプトヘッダATOMのテスト. */ @Test public final void Cellの更新のJSONフォーマットエラーでアクセプトヘッダATOMのテスト() { cellJsonFormatErr(MediaType.APPLICATION_ATOM_XML); } /** * Cellの更新のJSONフォーマットエラー. * @param accept アクセプトヘッダの値 */ private void cellJsonFormatErr(String accept) { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); if (accept != null) { headers.put(HttpHeaders.ACCEPT, accept); } else { accept = MediaType.APPLICATION_ATOM_XML; } // リクエストボディを生成 DcRestAdapter rest = new DcRestAdapter(); String data = "\"test\""; try { // リクエスト res = rest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME), data, headers); } catch (Exception e) { fail(e.getMessage()); } // Cell更新のレスポンスチェック // 400になることを確認 assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR400-OD-0001"); } /** * Cellの更新のXMLフォーマットエラー アクセプトヘッダ無しのテスト. */ @Test public final void Cellの更新のXMLフォーマットエラーでアクセプトヘッダ無しのテスト() { cellXmlFormatErr(null); } /** * Cellの更新のXMLフォーマットエラー アクセプトヘッダJSONのテスト. */ @Test public final void Cellの更新のXMLフォーマットエラーでアクセプトヘッダJSONのテスト() { cellXmlFormatErr(MediaType.APPLICATION_JSON); } /** * Cellの更新のXMLフォーマットエラー アクセプトヘッダATOMのテスト. */ @Test public final void Cellの更新のXMLフォーマットエラーでアクセプトヘッダATOMのテスト() { cellXmlFormatErr(MediaType.APPLICATION_ATOM_XML); } /** * Cellの更新のXMLフォーマットエラー. * @param accept アクセプトヘッダの値 */ private void cellXmlFormatErr(String accept) { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_ATOM_XML); if (accept != null) { headers.put(HttpHeaders.ACCEPT, accept); } else { accept = MediaType.APPLICATION_ATOM_XML; } // リクエストボディを生成 DcRestAdapter rest = new DcRestAdapter(); String data = "\"test\""; try { // リクエスト res = rest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME), data, headers); } catch (Exception e) { fail(e.getMessage()); } // Cell更新のレスポンスチェック // 400になることを確認 assertEquals(HttpStatus.SC_BAD_REQUEST, res.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, res.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); this.checkErrorResponse(res.bodyAsJson(), "PR400-OD-0001"); } /** * Cellの更新の認証ヘッダ無し アクセプトヘッダ無しのテスト. */ @Test public final void Cellの更新の認証ヘッダ無しアクセプトヘッダ無しのテスト() { cellAuthHeaderNone(null); } /** * Cellの更新の認証ヘッダ無し アクセプトヘッダJSONのテスト. */ @Test public final void Cellの更新の認証ヘッダ無しアクセプトヘッダJSONのテスト() { cellAuthHeaderNone(MediaType.APPLICATION_JSON); } /** * Cellの更新の認証ヘッダ無し アクセプトヘッダATOMのテスト. */ @Test public final void Cellの更新の認証ヘッダ無しアクセプトヘッダATOMのテスト() { cellAuthHeaderNone(MediaType.APPLICATION_ATOM_XML); } /** * Cellの更新の認証ヘッダ無しのテスト. * @param accept アクセプトヘッダの値 */ @SuppressWarnings("unchecked") private void cellAuthHeaderNone(String accept) { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); if (accept != null) { headers.put(HttpHeaders.ACCEPT, accept); } else { accept = MediaType.APPLICATION_ATOM_XML; } // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); this.res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック // 401になることを確認 assertEquals(HttpStatus.SC_UNAUTHORIZED, res.getStatusCode()); // ContentTypeのチェック Header[] resContentTypeHeaders = res.getResponseHeaders(HttpHeaders.CONTENT_TYPE); assertEquals(1, resContentTypeHeaders.length); assertEquals(resContentTypeHeaders[0].getValue(), MediaType.APPLICATION_JSON); // ボディのチェック checkErrorResponse(this.res.bodyAsJson(), "PR401-AU-0001"); } /** * Cellの更新の不正な認証ヘッダのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新の認証ヘッダ不正なテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, "test"); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック // 401になることを確認 assertEquals(HttpStatus.SC_UNAUTHORIZED, res.getStatusCode()); // ContentTypeのチェック Header[] resContentTypeHeaders = res.getResponseHeaders(HttpHeaders.CONTENT_TYPE); assertEquals(1, resContentTypeHeaders.length); assertEquals(MediaType.APPLICATION_JSON, resContentTypeHeaders[0].getValue()); // ボディのチェック checkErrorResponse(this.res.bodyAsJson(), "PR401-AU-0003"); } /** * Cellの更新の認証ヘッダが空文字でのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新の認証ヘッダが空文字でのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, ""); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック // 401になることを確認 assertEquals(HttpStatus.SC_UNAUTHORIZED, res.getStatusCode()); // ContentTypeのチェック Header[] resContentTypeHeaders = res.getResponseHeaders(HttpHeaders.CONTENT_TYPE); assertEquals(1, resContentTypeHeaders.length); assertEquals(MediaType.APPLICATION_JSON, resContentTypeHeaders[0].getValue()); // ボディのチェック checkErrorResponse(this.res.bodyAsJson(), "PR401-AU-0003"); } /** * Cellの更新のpostメソッド指定のテストAcceptヘッダが無し. */ @Test public final void Cellの更新のpostメソッド指定のテストAcceptヘッダが無し() { cellPost(null); } /** * Cellの更新のpostメソッド指定AcceptヘッダがJSONのテスト. */ @Test public final void Cellの更新のpostメソッド指定AcceptヘッダがJSONのテスト() { cellPost(MediaType.APPLICATION_JSON); } /** * Cellの更新のpostメソッド指定AcceptヘッダがATOMのテスト. */ @Test public final void Cellの更新のpostメソッド指定AcceptヘッダがATOMのテスト() { cellPost(MediaType.APPLICATION_ATOM_XML); } /** * Cellの更新のPOSTメソッドのテスト. * @param accept アクセプトヘッダの値 */ @SuppressWarnings("unchecked") private void cellPost(String accept) { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); if (accept != null) { headers.put(HttpHeaders.ACCEPT, accept); } else { accept = MediaType.APPLICATION_ATOM_XML; } DcRestAdapter rest = new DcRestAdapter(); try { // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); // リクエスト res = rest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME, cellName), requestBody.toJSONString(), headers); // Cell更新のレスポンスチェック // 405になることを確認 assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, res.getStatusCode()); // ContentTypeのチェック Header[] resContentTypeHeaders = res.getResponseHeaders(HttpHeaders.CONTENT_TYPE); assertEquals(1, resContentTypeHeaders.length); // 制限にてJSON固定 assertEquals(MediaType.APPLICATION_JSON, resContentTypeHeaders[0].getValue()); // ボディのチェック checkErrorResponse(this.res.bodyAsJson(), "PR405-MC-0001"); } catch (Exception e) { fail(e.getMessage()); } } /** * Cellの更新の不正なContentTypeのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新の不正なContentTypeのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, "image/jpeg"); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック // TODO Acceptヘッダのチェック処理実装後に修正する必要がある assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } /** * Cellの更新のconflictのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新のconflictのテスト() { // Cellを新規で作成する // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, "image/jpeg"); // DBサーバーを共有した際、同時にテストを行うと、同じCell名では409となってしまうため、一意にするため、Cell名に時間をセット String conflictName = "conflictName" + Long.toString(Calendar.getInstance().getTimeInMillis()); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", conflictName); // Cellを作成 DcResponse beforeres = createCell(headers, requestBody); // 201になることを確認 assertEquals(HttpStatus.SC_CREATED, beforeres.getStatusCode()); // 新規作成したCellと同一のNameを指定して更新を実行する DcResponse resConflict; headers.put(HttpHeaders.IF_MATCH, "*"); resConflict = updateCell(headers, requestBody); this.cellNameToDelete = conflictName; // 競合チェックが実装されたら409のチェックを行う必要がある assertEquals(HttpStatus.SC_CONFLICT, resConflict.getStatusCode()); assertEquals(MediaType.APPLICATION_JSON, resConflict.getResponseHeaders(HttpHeaders.CONTENT_TYPE)[0].getValue()); assertEquals(0, resConflict.getResponseHeaders(HttpHeaders.ETAG).length); this.checkErrorResponse(resConflict.bodyAsJson(), "PR409-OD-0003"); } /** * Cellの更新の$formatがjsonのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新の$formatがjsonのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); res = updateCellQuery(headers, requestBody, QUERY_FORMAT_JSON); // Cell更新のレスポンスチェック // TODO $formatのチェックが実装されたら変更する必要がある assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } /** * Cellの更新の$formatがatomのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新の$formatがatomのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_ATOM_XML); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); res = updateCellQuery(headers, requestBody, QUERY_FORMAT_ATOM); // Cell更新のレスポンスチェック // TODO $formatのチェックが実装されたら変更する必要がある assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } /** * Cellの更新の$formatがjson, atom以外のテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新の$formatがjsonとatom以外のテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); res = updateCellQuery(headers, requestBody, "$format=test"); // Cell更新のレスポンスチェック // TODO $formatのチェックが実装されたら変更する必要がある assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } /** * Cellの更新の$format指定なし、Acceptがjsonのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新の$format指定なしでAcceptがjsonのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); // リクエストを実行する res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } /** * Cellの更新の$format指定なし、Acceptがatomのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新の$format指定なしでAcceptがatomのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_ATOM_XML); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_ATOM_XML); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); // リクエストを実行する res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } /** * Cellの更新の$formatがjson, Acceptがjsonのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新の$formatがjsonでAcceptがjsonのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); // リクエストを実行する res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } /** * Cellの更新の$formatがjson, Acceptがatomのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新の$formatがjsonでAcceptがatomのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_ATOM_XML); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); // リクエストを実行する res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } /** * Cellの更新の$formatがatom, Acceptがjsonのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新の$formatがatomでAcceptがjsonのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); // リクエストを実行する res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } /** * Cellの更新の$formatがatom, Acceptがatomのテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新の$formatがatomでAcceptがatomのテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.ACCEPT, MediaType.APPLICATION_ATOM_XML); headers.put(HttpHeaders.IF_MATCH, "*"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); // リクエストを実行する res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } /** * Cellの更新の存在しないID指定. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新の存在しないID指定() { // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "*"); DcRestAdapter rest = new DcRestAdapter(); // リクエスト先のURL文字列を生成 String cellNameHoge = "hoge" + Long.toString(Calendar.getInstance().getTimeInMillis()); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); String data = requestBody.toJSONString(); try { // リクエスト res = rest.put(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME, cellNameHoge), data, headers); } catch (Exception e) { fail(e.getMessage()); } // Cell更新のレスポンスチェック // TODO Cell更新時に指定された主キーが存在しなかった場合はリソース作成するべき? assertEquals(HttpStatus.SC_NOT_FOUND, res.getStatusCode()); } /** * Cellの更新のIf-Matchが有効値のテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新のIfMatchが有効値のテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, eTag); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); // リクエストを実行する res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); // リクエストをもう一度実行する res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_PRECONDITION_FAILED, res.getStatusCode()); } /** * Cellの更新のIf-Matchが未指定のテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新のIfMatchが未指定のテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); res = updateCell(headers, requestBody); // リクエストを実行する res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_NO_CONTENT, res.getStatusCode()); } /** * Cellの更新のIf-Matchが不正な値のテスト. */ @SuppressWarnings("unchecked") @Test public final void Cellの更新のIfMatchが不正な値のテスト() { // Cellを更新 // リクエストヘッダをセット HashMap<String, String> headers = new HashMap<String, String>(); headers.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); headers.put(HttpHeaders.IF_MATCH, "hoge"); // リクエストボディを生成 JSONObject requestBody = new JSONObject(); requestBody.put("Name", cellName); res = updateCell(headers, requestBody); // リクエストを実行する res = updateCell(headers, requestBody); // Cell更新のレスポンスチェック assertEquals(HttpStatus.SC_PRECONDITION_FAILED, res.getStatusCode()); } /** * セル更新のリクエスト実行. * @param headers リクエストヘッダ * @param requestBody リクエストボディ * @return Cell更新時のレスポンスオブジェクト */ private static DcResponse createCell(final HashMap<String, String> headers, final JSONObject requestBody) { return createCellQuery(headers, requestBody, null); } /** * セル更新のリクエスト実行. * @param headers リクエストヘッダ * @param requestBody リクエストボディ * @param query クエリ文字列 * @return Cell更新時のレスポンスオブジェクト */ private static DcResponse createCellQuery(final HashMap<String, String> headers, final JSONObject requestBody, final String query) { DcResponse ret = null; DcRestAdapter rest = new DcRestAdapter(); String data = requestBody.toJSONString(); // リクエスト先のURL文字列を生成 StringBuilder url = new StringBuilder(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME)); if (query != null) { url.append("?" + query); } try { // リクエスト ret = rest.post(url.toString(), data, headers); } catch (Exception e) { fail(e.getMessage()); } return ret; } /** * セル更新のリクエスト実行. * @param headers リクエストヘッダ * @param requestBody リクエストボディ * @return Cell更新時のレスポンスオブジェクト */ private DcResponse updateCell(final HashMap<String, String> headers, final JSONObject requestBody) { return updateCellQuery(headers, requestBody, null); } /** * セル更新のリクエスト実行. * @param headers リクエストヘッダ * @param requestBody リクエストボディ * @param query クエリ文字列 * @return Cell更新時のレスポンスオブジェクト */ private DcResponse updateCellQuery(final HashMap<String, String> headers, final JSONObject requestBody, final String query) { DcResponse ret = null; DcRestAdapter rest = new DcRestAdapter(); String data = requestBody.toJSONString(); // リクエスト先のURL文字列を生成 StringBuilder url = new StringBuilder(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME, cellName)); if (query != null) { url.append("?" + query); } try { // リクエスト ret = rest.put(url.toString(), data, headers); } catch (Exception e) { fail(e.getMessage()); } return ret; } /** * セル名指定のセル更新のリクエスト実行. * @param headers リクエストヘッダ * @param requestBody リクエストボディ * @param cellNameStr 更新前セル名 * @return Cell更新時のレスポンスオブジェクト */ private DcResponse updateCellName(final HashMap<String, String> headers, final JSONObject requestBody, final String cellNameStr) { DcResponse ret = null; DcRestAdapter rest = new DcRestAdapter(); String data = requestBody.toJSONString(); // リクエスト先のURL文字列を生成 StringBuilder url = new StringBuilder(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME, cellNameStr)); try { // リクエスト ret = rest.put(url.toString(), data, headers); } catch (Exception e) { fail(e.getMessage()); } return ret; } /** * IDを指定してセルを削除. * @param id セルID */ private void deleteCell(String id) { this.deleteCell(id, true); } /** * IDを指定してセルを削除. * @param id セルID * @param checkStatusCode ステータスコードをチェック */ private void deleteCell(String id, Boolean checkStatusCode) { // Cellを削除 DcRestAdapter rest = new DcRestAdapter(); DcResponse delresponse = null; // リクエストヘッダをセット HashMap<String, String> requestheaders = new HashMap<String, String>(); requestheaders.put(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); requestheaders.put(HttpHeaders.IF_MATCH, "*"); try { // リクエスト // 本来は、LOCATIONヘッダにURLが格納されているが、jerseyTestFrameworkに向け直すため、再構築する delresponse = rest.del(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME, id), requestheaders); } catch (Exception e) { fail(e.getMessage()); } if (checkStatusCode) { assertEquals(HttpStatus.SC_NO_CONTENT, delresponse.getStatusCode()); } } /** * セル削除. */ private void deleteCell() { deleteCell(cellNameToDelete); } }