/** * 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.odatacol; import static org.junit.Assert.assertEquals; import java.util.HashMap; import java.util.Map; import javax.ws.rs.core.MediaType; import org.apache.http.HttpHeaders; import org.apache.http.HttpStatus; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import org.odata4j.edm.EdmSimpleType; import com.fujitsu.dc.core.DcCoreConfig; 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.setup.Setup; import com.fujitsu.dc.test.unit.core.UrlUtils; import com.fujitsu.dc.test.utils.EntityTypeUtils; import com.fujitsu.dc.test.utils.Http; import com.fujitsu.dc.test.utils.UserDataUtils; import com.fujitsu.dc.test.utils.TResponse; /** * UserDataComplexType一覧取得のテスト. */ @RunWith(DcRunner.class) @Category({Unit.class, Integration.class, Regression.class }) public class UserDataComplexTypeListTest extends AbstractUserDataTest { /** * コンストラクタ. */ public UserDataComplexTypeListTest() { super(); } /** EntityType名. */ public static final String ENTITY_TYPE_NAME = "entityType"; /** ComplexType名. */ public static final String COMPLEX_TYPE_NAME = "complexType1st"; /** entityTypeの文字列プロパティ名. */ public static final String ET_STRING_PROP = "etStrProp"; /** entityTypeのComplexTypeプロパティ名. */ public static final String ET_CT1ST_PROP = "etComplexProp"; /** ユーザデータID1. */ public static final String USER_DATA_ID1 = "test001"; /** ユーザデータID2. */ public static final String USER_DATA_ID2 = "test002"; /** ユーザデータURI1. */ public static final String USER_DATA_LOCATION_URL1 = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, ENTITY_TYPE_NAME, USER_DATA_ID1); /** ユーザデータURI2. */ public static final String USER_DATA_LOCATION_URL2 = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, ENTITY_TYPE_NAME, USER_DATA_ID2); /** * ComplexType2階層のデータ一覧が取得できること. */ @SuppressWarnings("unchecked") @Test public final void ComplexType2階層のデータ一覧が取得できること() { try { HashMap<String, Object> reqBody = new HashMap<String, Object>(); // ComplexTypeのプロパティ定義登録 UserDataComplexTypeUtils.createComplexTypeSchema(ENTITY_TYPE_NAME, COMPLEX_TYPE_NAME, ET_STRING_PROP, ET_CT1ST_PROP, "ct1stStrProp"); // ユーザデータ1登録 JSONObject ct1stProp1 = new JSONObject(); ct1stProp1.put("ct1stStrProp", "ct1stStrPropValue1"); reqBody.put("__id", USER_DATA_ID1); reqBody.put(ET_STRING_PROP, "etStrPropValue1"); reqBody.put(ET_CT1ST_PROP, ct1stProp1); DcResponse resPost = createUserDataComplexType(reqBody); assertEquals(HttpStatus.SC_CREATED, resPost.getStatusCode()); // ユーザデータ2登録 JSONObject ct1stProp2 = new JSONObject(); ct1stProp2.put("ct1stStrProp", "ct1stStrPropValue2"); reqBody.put("__id", USER_DATA_ID2); reqBody.put(ET_STRING_PROP, "etStrPropValue2"); reqBody.put(ET_CT1ST_PROP, ct1stProp2); resPost = createUserDataComplexType(reqBody); assertEquals(HttpStatus.SC_CREATED, resPost.getStatusCode()); // ユーザデータの一覧取得 TResponse res = Http.request("box/odatacol/list.txt") .with("cell", Setup.TEST_CELL1) .with("box", Setup.TEST_BOX1) .with("collection", Setup.TEST_ODATA) .with("entityType", ENTITY_TYPE_NAME) .with("query", "?\\$orderby=__id%20desc") .with("accept", MediaType.APPLICATION_JSON) .with("token", DcCoreConfig.getMasterToken()) .returns() .statusCode(HttpStatus.SC_OK) .debug(); // レスポンスボディのチェック Map<String, String> uri = new HashMap<String, String>(); uri.put(USER_DATA_ID1, USER_DATA_LOCATION_URL1); uri.put(USER_DATA_ID2, USER_DATA_LOCATION_URL2); Map<String, Map<String, Object>> additional = new HashMap<String, Map<String, Object>>(); Map<String, Object> additionalprop1 = new HashMap<String, Object>(); Map<String, Object> additionalprop2 = new HashMap<String, Object>(); additional.put(USER_DATA_ID1, additionalprop1); additional.put(USER_DATA_ID2, additionalprop2); additionalprop1.put("__id", USER_DATA_ID1); additionalprop1.put(ET_STRING_PROP, "etStrPropValue1"); additionalprop1.put(ET_CT1ST_PROP, ct1stProp1); additionalprop2.put("__id", USER_DATA_ID2); additionalprop2.put(ET_STRING_PROP, "etStrPropValue2"); additionalprop2.put(ET_CT1ST_PROP, ct1stProp2); String nameSpace = getNameSpace(ENTITY_TYPE_NAME); ODataCommon.checkResponseBodyList(res.bodyAsJson(), uri, nameSpace, additional, "__id"); } finally { ODataCommon.deleteOdataResource(USER_DATA_LOCATION_URL1); ODataCommon.deleteOdataResource(USER_DATA_LOCATION_URL2); deleteComplexTypeSchema(); } } /** * ComplexType4階層のデータ一覧が取得できること. */ @SuppressWarnings("unchecked") @Test public final void ComplexType4階層のデータ一覧が取得できること() { try { // ComplexTypeのプロパティ定義登録 UserDataComplexTypeUtils.createComplexTypeSchema(ENTITY_TYPE_NAME, COMPLEX_TYPE_NAME, ET_STRING_PROP, ET_CT1ST_PROP, "ct1stStrProp"); create4ComplexTypeSchema(); // ユーザデータ1登録 JSONObject ct3rdProp1 = new JSONObject(); ct3rdProp1.put("ct3rdStrProp", "CT3RD_STRING_PROP_VALUE1"); JSONObject ct2ndProp1 = new JSONObject(); ct2ndProp1.put("ct2ndStrProp", "CT2ND_STRING_PROP_VALUE1"); ct2ndProp1.put("ct2ndComplexProp", ct3rdProp1); JSONObject ct1stProp1 = new JSONObject(); ct1stProp1.put("ct1stStrProp", "CT1ST_STRING_PROP_VALUE1"); ct1stProp1.put("ct1stComplexProp", ct2ndProp1); String requestUrl1 = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, ENTITY_TYPE_NAME, null); DcRequest req1 = DcRequest.post(requestUrl1); req1.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req1.addJsonBody("__id", USER_DATA_ID1); req1.addJsonBody(ET_STRING_PROP, "etStrPropValue1"); req1.addJsonBody(ET_CT1ST_PROP, ct1stProp1); DcResponse resPost1 = request(req1); assertEquals(HttpStatus.SC_CREATED, resPost1.getStatusCode()); // ユーザデータ2登録 JSONObject ct3rdProp2 = new JSONObject(); ct3rdProp2.put("ct3rdStrProp", "CT3RD_STRING_PROP_VALUE2"); JSONObject ct2ndProp2 = new JSONObject(); ct2ndProp2.put("ct2ndStrProp", "CT2ND_STRING_PROP_VALUE2"); ct2ndProp2.put("ct2ndComplexProp", ct3rdProp2); JSONObject ct1stProp2 = new JSONObject(); ct1stProp2.put("ct1stStrProp", "CT1ST_STRING_PROP_VALUE2"); ct1stProp2.put("ct1stComplexProp", ct2ndProp2); String requestUrl2 = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, ENTITY_TYPE_NAME, null); DcRequest req2 = DcRequest.post(requestUrl2); req2.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req2.addJsonBody("__id", USER_DATA_ID2); req2.addJsonBody(ET_STRING_PROP, "etStrPropValue2"); req2.addJsonBody(ET_CT1ST_PROP, ct1stProp2); DcResponse resPost2 = request(req2); assertEquals(HttpStatus.SC_CREATED, resPost2.getStatusCode()); // ユーザデータの一覧取得 TResponse res = Http.request("box/odatacol/list.txt") .with("cell", Setup.TEST_CELL1) .with("box", Setup.TEST_BOX1) .with("collection", Setup.TEST_ODATA) .with("entityType", ENTITY_TYPE_NAME) .with("query", "?\\$orderby=__id%20desc") .with("accept", MediaType.APPLICATION_JSON) .with("token", DcCoreConfig.getMasterToken()) .returns() .statusCode(HttpStatus.SC_OK) .debug(); // レスポンスボディのチェック Map<String, String> uri = new HashMap<String, String>(); uri.put(USER_DATA_ID1, USER_DATA_LOCATION_URL1); uri.put(USER_DATA_ID2, USER_DATA_LOCATION_URL2); Map<String, Map<String, Object>> additional = new HashMap<String, Map<String, Object>>(); Map<String, Object> additionalprop1 = new HashMap<String, Object>(); Map<String, Object> additionalprop2 = new HashMap<String, Object>(); additional.put(USER_DATA_ID1, additionalprop1); additional.put(USER_DATA_ID2, additionalprop2); additionalprop1.put("__id", USER_DATA_ID1); additionalprop1.put(ET_STRING_PROP, "etStrPropValue1"); additionalprop1.put(ET_CT1ST_PROP, ct1stProp1); additionalprop2.put("__id", USER_DATA_ID2); additionalprop2.put(ET_STRING_PROP, "etStrPropValue2"); additionalprop2.put(ET_CT1ST_PROP, ct1stProp2); String nameSpace = getNameSpace(ENTITY_TYPE_NAME); ODataCommon.checkResponseBodyList(res.bodyAsJson(), uri, nameSpace, additional, "__id"); } finally { ODataCommon.deleteOdataResource(USER_DATA_LOCATION_URL1); ODataCommon.deleteOdataResource(USER_DATA_LOCATION_URL2); delete5ComplexTypeSchema(); } } /** * ユーザデータのシンプル型配列データ一覧が正常に取得できること. */ @SuppressWarnings("unchecked") @Test public final void ユーザデータのシンプル型配列データ一覧が正常に取得できること() { try { UserDataComplexTypeUtils.createSimpleArraySchema(); // リクエストパラメータ設定 JSONArray etListPropStr = new JSONArray(); etListPropStr.add("xxx"); etListPropStr.add("yyy"); etListPropStr.add("zzz"); JSONArray etListPropInt = new JSONArray(); etListPropInt.add(1); etListPropInt.add(2); etListPropInt.add(3); JSONArray etListPropSingle = new JSONArray(); etListPropSingle.add(1.1); etListPropSingle.add(2.2); etListPropSingle.add(3.3); JSONArray etListPropBoolean = new JSONArray(); etListPropBoolean.add(true); etListPropBoolean.add(false); // ユーザデータ1登録 JSONObject ct1stProp1 = new JSONObject(); ct1stProp1.put(UserDataComplexTypeUtils.CT1ST_STRING_PROP, "CT1ST_STRING_PROP_VALUE1"); String requestUrl1 = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, UserDataComplexTypeUtils.ENTITY_TYPE_NAME, null); DcRequest req1 = DcRequest.post(requestUrl1); req1.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req1.addJsonBody("__id", USER_DATA_ID1); req1.addJsonBody(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue1"); req1.addJsonBody("etListPropStr", etListPropStr); req1.addJsonBody("etListPropInt", etListPropInt); req1.addJsonBody("etListPropSingle", etListPropSingle); req1.addJsonBody("etListPropBoolean", etListPropBoolean); req1.addJsonBody(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp1); // シンプル型配列データの作成 DcResponse response1 = request(req1); assertEquals(HttpStatus.SC_CREATED, response1.getStatusCode()); // ユーザデータ2登録 JSONObject ct1stProp2 = new JSONObject(); ct1stProp2.put(UserDataComplexTypeUtils.CT1ST_STRING_PROP, "CT1ST_STRING_PROP_VALUE2"); String requestUrl2 = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, UserDataComplexTypeUtils.ENTITY_TYPE_NAME, null); DcRequest req2 = DcRequest.post(requestUrl2); req2.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req2.addJsonBody("__id", USER_DATA_ID2); req2.addJsonBody(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue2"); req2.addJsonBody("etListPropStr", etListPropStr); req2.addJsonBody("etListPropInt", etListPropInt); req2.addJsonBody("etListPropSingle", etListPropSingle); req2.addJsonBody("etListPropBoolean", etListPropBoolean); req2.addJsonBody(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp2); // シンプル型配列データの作成 DcResponse response2 = request(req2); assertEquals(HttpStatus.SC_CREATED, response2.getStatusCode()); // ユーザデータの一覧取得 TResponse res = Http.request("box/odatacol/list.txt") .with("cell", Setup.TEST_CELL1) .with("box", Setup.TEST_BOX1) .with("collection", Setup.TEST_ODATA) .with("entityType", ENTITY_TYPE_NAME) .with("query", "?\\$orderby=__id%20desc") .with("accept", MediaType.APPLICATION_JSON) .with("token", DcCoreConfig.getMasterToken()) .returns() .statusCode(HttpStatus.SC_OK) .debug(); // レスポンスボディのチェック Map<String, String> uri = new HashMap<String, String>(); uri.put(USER_DATA_ID1, USER_DATA_LOCATION_URL1); uri.put(USER_DATA_ID2, USER_DATA_LOCATION_URL2); Map<String, Map<String, Object>> additional = new HashMap<String, Map<String, Object>>(); Map<String, Object> additionalprop1 = new HashMap<String, Object>(); Map<String, Object> additionalprop2 = new HashMap<String, Object>(); additional.put(USER_DATA_ID1, additionalprop1); additional.put(USER_DATA_ID2, additionalprop2); additionalprop1.put("__id", USER_DATA_ID1); additionalprop1.put(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue1"); additionalprop1.put("etListPropStr", etListPropStr); additionalprop1.put("etListPropInt", etListPropInt); additionalprop1.put("etListPropSingle", etListPropSingle); additionalprop1.put("etListPropBoolean", etListPropBoolean); additionalprop1.put(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp1); additionalprop2.put("__id", USER_DATA_ID2); additionalprop2.put(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue2"); additionalprop2.put("etListPropStr", etListPropStr); additionalprop2.put("etListPropInt", etListPropInt); additionalprop2.put("etListPropSingle", etListPropSingle); additionalprop2.put("etListPropBoolean", etListPropBoolean); additionalprop2.put(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp2); String nameSpace = getNameSpace(ENTITY_TYPE_NAME); ODataCommon.checkResponseBodyList(res.bodyAsJson(), uri, nameSpace, additional, "__id"); } finally { ODataCommon.deleteOdataResource(USER_DATA_LOCATION_URL1); ODataCommon.deleteOdataResource(USER_DATA_LOCATION_URL2); UserDataComplexTypeUtils.deleteSimpleArraySchema(); } } /** * ユーザデータのComplex型配列データ一覧が正常に取得できること. */ @SuppressWarnings("unchecked") @Test public final void ユーザデータのComplex型配列データ一覧が正常に取得できること() { try { UserDataComplexTypeUtils.createComplexArraySchema(); JSONObject listComplexType1 = new JSONObject(); JSONObject listComplexType2 = new JSONObject(); listComplexType1.put("lctStr", "xxx"); listComplexType2.put("lctStr", "yyy"); JSONArray etListPropStr = new JSONArray(); etListPropStr.add(listComplexType1); etListPropStr.add(listComplexType2); // ユーザデータ1登録 JSONObject ct1stProp1 = new JSONObject(); ct1stProp1.put(UserDataComplexTypeUtils.CT1ST_STRING_PROP, "CT1ST_STRING_PROP_VALUE1"); String requestUrl1 = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, UserDataComplexTypeUtils.ENTITY_TYPE_NAME, null); DcRequest req1 = DcRequest.post(requestUrl1); req1.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req1.addJsonBody("__id", USER_DATA_ID1); req1.addJsonBody(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue1"); req1.addJsonBody(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp1); req1.addJsonBody("listComplexType", etListPropStr); // Complex型配列データの作成 DcResponse response1 = request(req1); assertEquals(HttpStatus.SC_CREATED, response1.getStatusCode()); // ユーザデータ2登録 JSONObject ct1stProp2 = new JSONObject(); ct1stProp2.put(UserDataComplexTypeUtils.CT1ST_STRING_PROP, "CT1ST_STRING_PROP_VALUE2"); String requestUrl2 = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, UserDataComplexTypeUtils.ENTITY_TYPE_NAME, null); DcRequest req2 = DcRequest.post(requestUrl2); req2.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req2.addJsonBody("__id", USER_DATA_ID2); req2.addJsonBody(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue2"); req2.addJsonBody(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp2); req2.addJsonBody("listComplexType", etListPropStr); // Complex型配列データの作成 DcResponse response2 = request(req2); assertEquals(HttpStatus.SC_CREATED, response2.getStatusCode()); // ユーザデータの一覧取得 TResponse res = Http.request("box/odatacol/list.txt") .with("cell", Setup.TEST_CELL1) .with("box", Setup.TEST_BOX1) .with("collection", Setup.TEST_ODATA) .with("entityType", ENTITY_TYPE_NAME) .with("query", "?\\$orderby=__id%20desc") .with("accept", MediaType.APPLICATION_JSON) .with("token", DcCoreConfig.getMasterToken()) .returns() .statusCode(HttpStatus.SC_OK) .debug(); // レスポンスボディのチェック Map<String, String> uri = new HashMap<String, String>(); uri.put(USER_DATA_ID1, USER_DATA_LOCATION_URL1); uri.put(USER_DATA_ID2, USER_DATA_LOCATION_URL2); Map<String, Map<String, Object>> additional = new HashMap<String, Map<String, Object>>(); Map<String, Object> additionalprop1 = new HashMap<String, Object>(); Map<String, Object> additionalprop2 = new HashMap<String, Object>(); additional.put(USER_DATA_ID1, additionalprop1); additional.put(USER_DATA_ID2, additionalprop2); additionalprop1.put("__id", USER_DATA_ID1); additionalprop1.put(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue1"); additionalprop1.put(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp1); additionalprop1.put("listComplexType", etListPropStr); additionalprop2.put("__id", USER_DATA_ID2); additionalprop2.put(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue2"); additionalprop2.put(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp2); additionalprop2.put("listComplexType", etListPropStr); String nameSpace = getNameSpace(ENTITY_TYPE_NAME); ODataCommon.checkResponseBodyList(res.bodyAsJson(), uri, nameSpace, additional, "__id"); } finally { ODataCommon.deleteOdataResource(USER_DATA_LOCATION_URL1); ODataCommon.deleteOdataResource(USER_DATA_LOCATION_URL2); UserDataComplexTypeUtils.deleteComplexArraySchema(); } } /** * ユーザデータのComplexType内のシンプル型配列データ一覧が正常に取得できること. */ @SuppressWarnings("unchecked") @Test public final void ユーザデータのComplexType内のシンプル型配列データ一覧が正常に取得できること() { try { UserDataComplexTypeUtils.createSimpleArraySchemaInComplex(); JSONArray ctListPropStr = new JSONArray(); ctListPropStr.add("xxx"); ctListPropStr.add("yyy"); ctListPropStr.add("zzz"); JSONArray ctListPropInt = new JSONArray(); ctListPropInt.add((long) 1); ctListPropInt.add((long) 2); ctListPropInt.add((long) 3); JSONArray ctListPropSingle = new JSONArray(); ctListPropSingle.add(1.1); ctListPropSingle.add(2.2); ctListPropSingle.add(3.3); JSONArray ctListPropBoolean = new JSONArray(); ctListPropBoolean.add(true); ctListPropBoolean.add(false); // ユーザデータ1登録 JSONObject ct1stProp1 = new JSONObject(); ct1stProp1.put(UserDataComplexTypeUtils.CT1ST_STRING_PROP, "CT1ST_STRING_PROP_VALUE1"); ct1stProp1.put("ctListPropStr", ctListPropStr); ct1stProp1.put("ctListPropInt", ctListPropInt); ct1stProp1.put("ctListPropSingle", ctListPropSingle); ct1stProp1.put("ctListPropBoolean", ctListPropBoolean); String requestUrl1 = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, UserDataComplexTypeUtils.ENTITY_TYPE_NAME, null); DcRequest req1 = DcRequest.post(requestUrl1); req1.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req1.addJsonBody("__id", USER_DATA_ID1); req1.addJsonBody(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue1"); req1.addJsonBody(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp1); // Complex型配列データの作成 DcResponse response1 = request(req1); assertEquals(HttpStatus.SC_CREATED, response1.getStatusCode()); // ユーザデータ2登録 JSONObject ct1stProp2 = new JSONObject(); ct1stProp2.put(UserDataComplexTypeUtils.CT1ST_STRING_PROP, "CT1ST_STRING_PROP_VALUE2"); ct1stProp2.put("ctListPropStr", ctListPropStr); ct1stProp2.put("ctListPropInt", ctListPropInt); ct1stProp2.put("ctListPropSingle", ctListPropSingle); ct1stProp2.put("ctListPropBoolean", ctListPropBoolean); String requestUrl2 = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, UserDataComplexTypeUtils.ENTITY_TYPE_NAME, null); DcRequest req2 = DcRequest.post(requestUrl2); req2.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req2.addJsonBody("__id", USER_DATA_ID2); req2.addJsonBody(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue2"); req2.addJsonBody(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp2); // Complex型配列データの作成 DcResponse response2 = request(req2); assertEquals(HttpStatus.SC_CREATED, response2.getStatusCode()); // ユーザデータの一覧取得 TResponse res = Http.request("box/odatacol/list.txt") .with("cell", Setup.TEST_CELL1) .with("box", Setup.TEST_BOX1) .with("collection", Setup.TEST_ODATA) .with("entityType", ENTITY_TYPE_NAME) .with("query", "?\\$orderby=__id%20desc") .with("accept", MediaType.APPLICATION_JSON) .with("token", DcCoreConfig.getMasterToken()) .returns() .statusCode(HttpStatus.SC_OK) .debug(); // レスポンスボディのチェック Map<String, String> uri = new HashMap<String, String>(); uri.put(USER_DATA_ID1, USER_DATA_LOCATION_URL1); uri.put(USER_DATA_ID2, USER_DATA_LOCATION_URL2); Map<String, Map<String, Object>> additional = new HashMap<String, Map<String, Object>>(); Map<String, Object> additionalprop1 = new HashMap<String, Object>(); Map<String, Object> additionalprop2 = new HashMap<String, Object>(); additional.put(USER_DATA_ID1, additionalprop1); additional.put(USER_DATA_ID2, additionalprop2); additionalprop1.put("__id", USER_DATA_ID1); additionalprop1.put(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue1"); additionalprop1.put(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp1); additionalprop2.put("__id", USER_DATA_ID2); additionalprop2.put(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue2"); additionalprop2.put(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp2); String nameSpace = getNameSpace(ENTITY_TYPE_NAME); ODataCommon.checkResponseBodyList(res.bodyAsJson(), uri, nameSpace, additional, "__id"); } finally { ODataCommon.deleteOdataResource(USER_DATA_LOCATION_URL1); ODataCommon.deleteOdataResource(USER_DATA_LOCATION_URL2); UserDataComplexTypeUtils.deleteSimpleArraySchemaInComplex(); } } /** * ユーザデータのComplexType内のComplexType型配列データ一覧が正常に取得できること. */ @SuppressWarnings("unchecked") @Test public final void ユーザデータのComplexType内のComplexType型配列データ一覧が正常に取得できること() { try { UserDataComplexTypeUtils.createComplexArraySchemaInComplex(); JSONObject listComplexType1 = new JSONObject(); JSONObject listComplexType2 = new JSONObject(); listComplexType1.put("lctStr", "xxx"); listComplexType2.put("lctStr", "yyy"); JSONArray ctListPropStr = new JSONArray(); ctListPropStr.add(listComplexType1); ctListPropStr.add(listComplexType2); // ユーザデータ1登録 JSONObject ct1stProp1 = new JSONObject(); ct1stProp1.put(UserDataComplexTypeUtils.CT1ST_STRING_PROP, "CT1ST_STRING_PROP_VALUE1"); ct1stProp1.put("listComplexType", ctListPropStr); String requestUrl1 = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, UserDataComplexTypeUtils.ENTITY_TYPE_NAME, null); DcRequest req1 = DcRequest.post(requestUrl1); req1.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req1.addJsonBody("__id", USER_DATA_ID1); req1.addJsonBody(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue1"); req1.addJsonBody(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp1); // Complex型配列データの作成 DcResponse response1 = request(req1); assertEquals(HttpStatus.SC_CREATED, response1.getStatusCode()); // ユーザデータ2登録 JSONObject ct1stProp2 = new JSONObject(); ct1stProp2.put(UserDataComplexTypeUtils.CT1ST_STRING_PROP, "CT1ST_STRING_PROP_VALUE2"); ct1stProp2.put("listComplexType", ctListPropStr); String requestUrl2 = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, UserDataComplexTypeUtils.ENTITY_TYPE_NAME, null); DcRequest req2 = DcRequest.post(requestUrl2); req2.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req2.addJsonBody("__id", USER_DATA_ID2); req2.addJsonBody(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue2"); req2.addJsonBody(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp2); // Complex型配列データの作成 DcResponse response2 = request(req2); assertEquals(HttpStatus.SC_CREATED, response2.getStatusCode()); // ユーザデータの一覧取得 TResponse res = Http.request("box/odatacol/list.txt") .with("cell", Setup.TEST_CELL1) .with("box", Setup.TEST_BOX1) .with("collection", Setup.TEST_ODATA) .with("entityType", ENTITY_TYPE_NAME) .with("query", "?\\$orderby=__id%20desc") .with("accept", MediaType.APPLICATION_JSON) .with("token", DcCoreConfig.getMasterToken()) .returns() .statusCode(HttpStatus.SC_OK) .debug(); // レスポンスボディのチェック Map<String, String> uri = new HashMap<String, String>(); uri.put(USER_DATA_ID1, USER_DATA_LOCATION_URL1); uri.put(USER_DATA_ID2, USER_DATA_LOCATION_URL2); Map<String, Map<String, Object>> additional = new HashMap<String, Map<String, Object>>(); Map<String, Object> additionalprop1 = new HashMap<String, Object>(); Map<String, Object> additionalprop2 = new HashMap<String, Object>(); additional.put(USER_DATA_ID1, additionalprop1); additional.put(USER_DATA_ID2, additionalprop2); additionalprop1.put("__id", USER_DATA_ID1); additionalprop1.put(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue1"); additionalprop1.put(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp1); additionalprop2.put("__id", USER_DATA_ID2); additionalprop2.put(UserDataComplexTypeUtils.ET_STRING_PROP, "etStrPropValue2"); additionalprop2.put(UserDataComplexTypeUtils.ET_CT1ST_PROP, ct1stProp2); String nameSpace = getNameSpace(ENTITY_TYPE_NAME); ODataCommon.checkResponseBodyList(res.bodyAsJson(), uri, nameSpace, additional, "__id"); } finally { ODataCommon.deleteOdataResource(USER_DATA_LOCATION_URL1); ODataCommon.deleteOdataResource(USER_DATA_LOCATION_URL2); UserDataComplexTypeUtils.deleteComplexArraySchemaInComplex(); } } /** * ユーザデータにNull値許可設定の配列を定義してデータが正常に登録できること. */ @Test public final void ユーザデータにNull値許可設定の配列を定義してデータが正常に登録できること() { try { // EntityType作成 EntityTypeUtils.create(Setup.TEST_CELL1, AbstractCase.MASTER_TOKEN_NAME, Setup.TEST_ODATA, UserDataComplexTypeUtils.ENTITY_TYPE_NAME, HttpStatus.SC_CREATED); // Property作成 UserDataUtils.createProperty(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, "nullableList", UserDataComplexTypeUtils.ENTITY_TYPE_NAME, EdmSimpleType.STRING.getFullyQualifiedTypeName(), true, null, "List", false, null); // ComplexType作成 UserDataUtils.createComplexType(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, UserDataComplexTypeUtils.COMPLEX_TYPE_NAME); // ComplexTypeProperty作成 UserDataUtils.createComplexTypeProperty(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, "ctNullableListProp", UserDataComplexTypeUtils.COMPLEX_TYPE_NAME, EdmSimpleType.STRING.getFullyQualifiedTypeName(), true, null, "List"); // Property作成 UserDataUtils.createProperty(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, "ctNullableList", UserDataComplexTypeUtils.ENTITY_TYPE_NAME, UserDataComplexTypeUtils.COMPLEX_TYPE_NAME, true, null, "List", false, null); // ユーザデータ登録 String requestUrl = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, UserDataComplexTypeUtils.ENTITY_TYPE_NAME, null); DcRequest req = DcRequest.post(requestUrl); req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req.addJsonBody("__id", USER_DATA_ID1); req.addJsonBody("nullableList", null); req.addJsonBody("ctNullableList", null); DcResponse response = request(req); assertEquals(HttpStatus.SC_CREATED, response.getStatusCode()); JSONObject result = ((JSONObject) (((JSONObject) response.bodyAsJson().get("d")).get("results"))); assertEquals(null, result.get("nullableList")); assertEquals(null, result.get("ctNullableList")); // ユーザデータ取得 req = DcRequest.get(USER_DATA_LOCATION_URL1); req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); req.header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON); response = request(req); assertEquals(HttpStatus.SC_OK, response.getStatusCode()); result = ((JSONObject) (((JSONObject) response.bodyAsJson().get("d")).get("results"))); assertEquals(null, result.get("nullableList")); assertEquals(null, result.get("ctNullableList")); } finally { // 作成したUserDataを削除 ODataCommon.deleteOdataResource(USER_DATA_LOCATION_URL1); // 作成したComplexTypePropertyを削除 ODataCommon.deleteOdataResource(UrlUtils.complexTypeProperty(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, "ctNullableListProp", UserDataComplexTypeUtils.COMPLEX_TYPE_NAME)); // 作成したPropertyを削除 ODataCommon.deleteOdataResource(UrlUtils.property(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, "ctNullableList", UserDataComplexTypeUtils.ENTITY_TYPE_NAME)); // 作成したComplexTypeを削除 ODataCommon.deleteOdataResource(UrlUtils.complexType(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, UserDataComplexTypeUtils.COMPLEX_TYPE_NAME)); // 作成したPropertyを削除 ODataCommon.deleteOdataResource(UrlUtils.property(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, "nullableList", UserDataComplexTypeUtils.ENTITY_TYPE_NAME)); // 作成したEntityTypeを削除 EntityTypeUtils.delete(Setup.TEST_ODATA, AbstractCase.MASTER_TOKEN_NAME, MediaType.APPLICATION_JSON, UserDataComplexTypeUtils.ENTITY_TYPE_NAME, Setup.TEST_CELL1, -1); } } private DcResponse createUserDataComplexType(HashMap<String, Object> reqBody) { // UserData作成 String requestUrl = UrlUtils.userdata(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, ENTITY_TYPE_NAME, null); DcRequest req = DcRequest.post(requestUrl); req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN); for (String key : reqBody.keySet()) { req.addJsonBody(key, reqBody.get(key)); } // 登録 return request(req); } /** * 4階層のComplexTypeスキーマを作成する. */ protected void create4ComplexTypeSchema() { addComplexType(COMPLEX_TYPE_NAME, "ct1stComplexProp", "complexType2nd", "ct2ndStrProp"); addComplexType("complexType2nd", "ct2ndComplexProp", "complexType3rd", "ct3rdStrProp"); } /** * コンプレックスタイプを追加する. * @param parentComplex 親ComplexType * @param parentComplexProperty 親ComplexTypeに追加するComplexTypeProperty * @param addComplex 追加ComplexType * @param addComplexProerty 追加ComplexTypeのプロパティ */ protected void addComplexType(String parentComplex, String parentComplexProperty, String addComplex, String addComplexProerty) { // ComplexType作成 UserDataUtils.createComplexType(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, addComplex); // complexTypeProperty作成 UserDataUtils.createComplexTypeProperty(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, parentComplexProperty, parentComplex, addComplex, false, null, null); UserDataUtils.createComplexTypeProperty(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, addComplexProerty, addComplex, EdmSimpleType.STRING.getFullyQualifiedTypeName(), false, null, null); } /** * ComplexTypeSchemaを削除する. */ protected void deleteComplexTypeSchema() { String ctlocationUrl = UrlUtils.complexType(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, COMPLEX_TYPE_NAME); String propStrlocationUrl = UrlUtils.property(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, ET_STRING_PROP, ENTITY_TYPE_NAME); String propCtlocationUrl = UrlUtils.property(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, ET_CT1ST_PROP, ENTITY_TYPE_NAME); String ctplocationUrl = UrlUtils.complexTypeProperty(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, "ct1stStrProp", COMPLEX_TYPE_NAME); // 作成したPropertyを削除 ODataCommon.deleteOdataResource(propStrlocationUrl); ODataCommon.deleteOdataResource(propCtlocationUrl); // 作成したComplexTypePropertyを削除 ODataCommon.deleteOdataResource(ctplocationUrl); // 作成したComplexTypeを削除 ODataCommon.deleteOdataResource(ctlocationUrl); // 作成したEntityTypeを削除 EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME, MediaType.APPLICATION_JSON, ENTITY_TYPE_NAME, Setup.TEST_CELL1, -1); } /** * 5階層のComplexTypeスキーマを削除する. */ protected void delete5ComplexTypeSchema() { // deleteComplexType("complexType4th", "ct4thComplexProp", "complexType5th", "ct5thStrProp"); deleteComplexType("complexType3rd", "ct3rdComplexProp", "complexType4th", "ct4thStrProp"); deleteComplexType("complexType2nd", "ct2ndComplexProp", "complexType3rd", "ct3rdStrProp"); deleteComplexType(COMPLEX_TYPE_NAME, "ct1stComplexProp", "complexType2nd", "ct2ndStrProp"); deleteComplexTypeSchema(); } /** * コンプレックスタイプを削除する. * @param parentComplex 親ComplexType * @param parentComplexProperty 親ComplexTypeから削除するComplexTypeProperty * @param delComplex 削除ComplexType * @param delComplexProerty 削除ComplexTypeのプロパティ */ protected void deleteComplexType(String parentComplex, String parentComplexProperty, String delComplex, String delComplexProerty) { String ctplocationUrl = UrlUtils.complexTypeProperty(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, delComplexProerty, delComplex); String pctplocationUrl = UrlUtils.complexTypeProperty(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, parentComplexProperty, parentComplex); String ctlocationUrl = UrlUtils.complexType(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, delComplex); // 作成したComplexTypePropertyを削除 ODataCommon.deleteOdataResource(ctplocationUrl); ODataCommon.deleteOdataResource(pctplocationUrl); // 作成したComplexTypeを削除 ODataCommon.deleteOdataResource(ctlocationUrl); } }