/**
* 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.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.core.MediaType;
import org.apache.http.HttpStatus;
import org.json.simple.JSONObject;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import com.fujitsu.dc.core.DcCoreConfig;
import com.fujitsu.dc.core.DcCoreException;
import com.fujitsu.dc.test.categories.Integration;
import com.fujitsu.dc.test.categories.Regression;
import com.fujitsu.dc.test.categories.Unit;
import com.fujitsu.dc.test.jersey.DcRunner;
import com.fujitsu.dc.test.jersey.ODataCommon;
import com.fujitsu.dc.test.unit.core.UrlUtils;
import com.fujitsu.dc.test.utils.Http;
import com.fujitsu.dc.test.utils.TResponse;
/**
* UserDataのNavigationProperty経由一覧のテスト.
*/
@RunWith(DcRunner.class)
@Category({Unit.class, Integration.class, Regression.class })
public class UserDataListWithNPTest extends AbstractUserDataWithNP {
int topMaxNum = DcCoreConfig.getTopQueryMaxSize();
int skipMaxNum = DcCoreConfig.getSkipQueryMaxSize();
/**
* コンストラクタ.
*/
public UserDataListWithNPTest() {
super();
}
/**
* UserDataのNavigationProperty経由でID指定を行い取得を実行して400が取得できること.
*/
@Test
public final void UserDataのNavigationProperty経由でID指定を行い取得を実行して400が取得できること() {
try {
createUserDataParent(ENTITY_TYPE_A);
// ユーザデータの一覧取得
Http.request("box/odatacol/list.txt")
.with("cell", cellName)
.with("box", boxName)
.with("collection", colName + "/" + ENTITY_TYPE_A + "('parent')")
.with("entityType", "_" + ENTITY_TYPE_B + "('xxx')")
.with("query", "")
.with("accept", MediaType.APPLICATION_JSON)
.with("token", DcCoreConfig.getMasterToken())
.returns()
.statusCode(HttpStatus.SC_BAD_REQUEST)
.debug();
} finally {
deleteUserData(cellName, boxName, colName, ENTITY_TYPE_A, "parent", DcCoreConfig.getMasterToken(), -1);
}
}
/**
* 存在しないNavigationPropertyを指定してUserDataのNavigationProperty経由で取得を行い404が取得できること.
*/
@Test
public final void 存在しないNavigationPropertyを指定してUserDataのNavigationProperty経由で取得を行い404が取得できること() {
try {
createUserDataParent(ENTITY_TYPE_A);
// ユーザデータの一覧取得
Http.request("box/odatacol/list.txt")
.with("cell", cellName)
.with("box", boxName)
.with("collection", colName + "/" + ENTITY_TYPE_A + "('parent')")
.with("entityType", "_test")
.with("query", "")
.with("accept", MediaType.APPLICATION_JSON)
.with("token", DcCoreConfig.getMasterToken())
.returns()
.statusCode(HttpStatus.SC_NOT_FOUND)
.debug();
} finally {
deleteUserData(cellName, boxName, colName, ENTITY_TYPE_A, "parent", DcCoreConfig.getMasterToken(), -1);
}
}
/**
* 親データが存在しない状態でUserDataをNavigationProperty経由で取得して404が取得できること.
*/
@Test
public final void 親データが存在しない状態でUserDataをNavigationProperty経由で取得して404が取得できること() {
// ユーザデータの一覧取得
Http.request("box/odatacol/list.txt")
.with("cell", cellName)
.with("box", boxName)
.with("collection", colName + "/" + ENTITY_TYPE_A + "('test')")
.with("entityType", "_" + ENTITY_TYPE_B)
.with("query", "")
.with("accept", MediaType.APPLICATION_JSON)
.with("token", DcCoreConfig.getMasterToken())
.returns()
.statusCode(HttpStatus.SC_NOT_FOUND)
.debug();
}
/**
* データが登録されていない状態でZERO_ONE対ZERO_ONEのUserDataをNavigationProperty経由で取得して空データが取得できること.
*/
@Test
public final void データが登録されていない状態でZERO_ONE対ZERO_ONEのUserDataをNavigationProperty経由で取得して空データが取得できること() {
try {
createUserDataParent(ENTITY_TYPE_A);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_A, "parent", ENTITY_TYPE_B);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
// レスポンスボディーのチェック
String nameSpace = getNameSpace(entityTypeName);
ODataCommon.checkResponseBodyList(response.bodyAsJson(), null, nameSpace, null);
} finally {
deleteUserData(cellName, boxName, colName, ENTITY_TYPE_A, "parent", DcCoreConfig.getMasterToken(), -1);
}
}
/**
* データが登録されていない状態でZERO_ONE対ONEのUserDataをNavigationProperty経由で取得して空データが取得できること.
*/
@Test
public final void データが登録されていない状態でZERO_ONE対ONEのUserDataをNavigationProperty経由で取得して空データが取得できること() {
try {
createUserDataParent(ENTITY_TYPE_A);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_A, "parent", ENTITY_TYPE_C);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
// レスポンスボディーのチェック
String nameSpace = getNameSpace(entityTypeName);
ODataCommon.checkResponseBodyList(response.bodyAsJson(), null, nameSpace, null);
} finally {
deleteUserData(cellName, boxName, colName, ENTITY_TYPE_A, "parent", DcCoreConfig.getMasterToken(), -1);
}
}
/**
* データが登録されていない状態でZERO_ONE対ASTのUserDataをNavigationProperty経由で取得して空データが取得できること.
*/
@Test
public final void データが登録されていない状態でZERO_ONE対ASTのUserDataをNavigationProperty経由で取得して空データが取得できること() {
try {
createUserDataParent(ENTITY_TYPE_A);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_A, "parent", ENTITY_TYPE_D);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
// レスポンスボディーのチェック
String nameSpace = getNameSpace(entityTypeName);
ODataCommon.checkResponseBodyList(response.bodyAsJson(), null, nameSpace, null);
} finally {
deleteUserData(cellName, boxName, colName, ENTITY_TYPE_A, "parent", DcCoreConfig.getMasterToken(), -1);
}
}
/**
* データが登録されていない状態でONE対ZERO_ONEのUserDataをNavigationProperty経由で取得して空データが取得できること.
*/
@Test
public final void データが登録されていない状態でONE対ZERO_ONEのUserDataをNavigationProperty経由で取得して空データが取得できること() {
try {
createUserDataParent(ENTITY_TYPE_C);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_C, "parent", ENTITY_TYPE_A);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
// レスポンスボディーのチェック
String nameSpace = getNameSpace(entityTypeName);
ODataCommon.checkResponseBodyList(response.bodyAsJson(), null, nameSpace, null);
} finally {
deleteUserData(cellName, boxName, colName, ENTITY_TYPE_C, "parent", DcCoreConfig.getMasterToken(), -1);
}
}
/**
* データが登録されていない状態でONE対ASTのUserDataをNavigationProperty経由で取得して空データが取得できること.
*/
@Test
public final void データが登録されていない状態でONE対ASTのUserDataをNavigationProperty経由で取得して空データが取得できること() {
try {
createUserDataParent(ENTITY_TYPE_B);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_B, "parent", ENTITY_TYPE_D);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
// レスポンスボディーのチェック
String nameSpace = getNameSpace(entityTypeName);
ODataCommon.checkResponseBodyList(response.bodyAsJson(), null, nameSpace, null);
} finally {
deleteUserData(cellName, boxName, colName, ENTITY_TYPE_B, "parent", DcCoreConfig.getMasterToken(), -1);
}
}
/**
* データが登録されていない状態でAST対ZERO_ONEのUserDataをNavigationProperty経由で取得して空データが取得できること.
*/
@Test
public final void データが登録されていない状態でAST対ZERO_ONEのUserDataをNavigationProperty経由で取得して空データが取得できること() {
try {
createUserDataParent(ENTITY_TYPE_D);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_D, "parent", ENTITY_TYPE_A);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
// レスポンスボディーのチェック
String nameSpace = getNameSpace(entityTypeName);
ODataCommon.checkResponseBodyList(response.bodyAsJson(), null, nameSpace, null);
} finally {
deleteUserData(cellName, boxName, colName, ENTITY_TYPE_D, "parent", DcCoreConfig.getMasterToken(), -1);
}
}
/**
* データが登録されていない状態でAST対ONEのUserDataをNavigationProperty経由で取得して空データが取得できること.
*/
@Test
public final void データが登録されていない状態でAST対ONEのUserDataをNavigationProperty経由で取得して空データが取得できること() {
try {
createUserDataParent(ENTITY_TYPE_D);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_D, "parent", ENTITY_TYPE_B);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
// レスポンスボディーのチェック
String nameSpace = getNameSpace(entityTypeName);
ODataCommon.checkResponseBodyList(response.bodyAsJson(), null, nameSpace, null);
} finally {
deleteUserData(cellName, boxName, colName, ENTITY_TYPE_D, "parent", DcCoreConfig.getMasterToken(), -1);
}
}
/**
* データが登録されていない状態でAST対ASTのUserDataをNavigationProperty経由で取得して空データが取得できること.
*/
@Test
public final void データが登録されていない状態でAST対ASTのUserDataをNavigationProperty経由で取得して空データが取得できること() {
try {
createUserDataParent(ENTITY_TYPE_C);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_C, "parent", ENTITY_TYPE_D);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
// レスポンスボディーのチェック
String nameSpace = getNameSpace(entityTypeName);
ODataCommon.checkResponseBodyList(response.bodyAsJson(), null, nameSpace, null);
} finally {
deleteUserData(cellName, boxName, colName, ENTITY_TYPE_C, "parent", DcCoreConfig.getMasterToken(), -1);
}
}
/**
* ZERO_ONE対ZERO_ONEのUserDataをNavigationProperty経由で取得して対象データが取得できること.
*/
@Test
public final void ZERO_ONE対ZERO_ONEのUserDataをNavigationProperty経由で取得して対象データが取得できること() {
try {
Map<String, String> etags = new HashMap<String, String>();
// 事前にデータを登録する
createUserDataForONE(ENTITY_TYPE_A, ENTITY_TYPE_B, etags);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_A, "parent", ENTITY_TYPE_B);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
// レスポンスボディーのチェック
Map<String, String> navigationProp = new HashMap<String, String>();
String baseUrl = UrlUtils.userData(cellName, boxName, colName, ENTITY_TYPE_B + "('userdataNP')/_");
navigationProp.put("_" + ENTITY_TYPE_A, baseUrl + ENTITY_TYPE_A);
navigationProp.put("_" + ENTITY_TYPE_D, baseUrl + ENTITY_TYPE_D);
checkResponseForONE(response, ENTITY_TYPE_A, "parent", ENTITY_TYPE_B, etags, navigationProp);
} finally {
deleteUserDataForONE(ENTITY_TYPE_A, ENTITY_TYPE_B);
}
}
/**
* ZERO_ONE対ONEのUserDataをNavigationProperty経由で取得して対象データが取得できること.
*/
@Test
public final void ZERO_ONE対ONEのUserDataをNavigationProperty経由で取得して対象データが取得できること() {
Map<String, String> etags = new HashMap<String, String>();
try {
// 事前にデータを登録する
createUserDataForONE(ENTITY_TYPE_A, ENTITY_TYPE_C, etags);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_A, "parent", ENTITY_TYPE_C);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
// レスポンスボディーのチェック
Map<String, String> navigationProp = new HashMap<String, String>();
String baseUrl = UrlUtils.userData(cellName, boxName, colName, ENTITY_TYPE_C + "('userdataNP')/_");
navigationProp.put("_" + ENTITY_TYPE_A, baseUrl + ENTITY_TYPE_A);
navigationProp.put("_" + ENTITY_TYPE_D, baseUrl + ENTITY_TYPE_D);
checkResponseForONE(response, ENTITY_TYPE_A, "parent", ENTITY_TYPE_C, etags, navigationProp);
} finally {
deleteUserDataForONE(ENTITY_TYPE_A, ENTITY_TYPE_C);
}
}
/**
* ZERO_ONE対ASTのUserDataをNavigationProperty経由で取得して対象データが取得できること.
*/
@Test
public final void ZERO_ONE対ASTのUserDataをNavigationProperty経由で取得して対象データが取得できること() {
try {
Map<String, String> etags = new HashMap<String, String>();
// 事前にデータを登録する
createUserDataForAST(ENTITY_TYPE_A, ENTITY_TYPE_D, etags);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_A, "parent", ENTITY_TYPE_D);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
checkResponseForAST(response, ENTITY_TYPE_A, "parent", ENTITY_TYPE_D, ODataCommon.COUNT_NONE, etags);
} finally {
deleteUserDataForAST(ENTITY_TYPE_A, ENTITY_TYPE_D);
}
}
/**
* ONE対ZERO_ONEのUserDataをNavigationProperty経由で取得して対象データが取得できること.
*/
@Test
public final void ONE対ZERO_ONEのUserDataをNavigationProperty経由で取得して対象データが取得できること() {
try {
// 事前にデータを登録する
createUserDataForONE(ENTITY_TYPE_C, ENTITY_TYPE_A);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_C, "parent", ENTITY_TYPE_A);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
checkResponseForONE(response, ENTITY_TYPE_C, "parent", ENTITY_TYPE_A);
} finally {
deleteUserDataForONE(ENTITY_TYPE_C, ENTITY_TYPE_A);
}
}
/**
* ONE対ASTのUserDataをNavigationProperty経由で取得して対象データが取得できること.
*/
@Test
public final void ONE対ASTのUserDataをNavigationProperty経由で取得して対象データが取得できること() {
try {
Map<String, String> etags = new HashMap<String, String>();
// 事前にデータを登録する
createUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D, etags);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_B, "parent", ENTITY_TYPE_D);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
checkResponseForAST(response, ENTITY_TYPE_B, "parent", ENTITY_TYPE_D, ODataCommon.COUNT_NONE, etags);
} finally {
deleteUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
}
}
/**
* AST対ZERO_ONEのUserDataをNavigationProperty経由で取得して対象データが取得できること.
*/
@Test
public final void AST対ZERO_ONEのUserDataをNavigationProperty経由で取得して対象データが取得できること() {
try {
Map<String, String> etags = new HashMap<String, String>();
// 事前にデータを登録する
createUserDataForAST(ENTITY_TYPE_A, ENTITY_TYPE_D, etags);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_D, "userdataNP", ENTITY_TYPE_A);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
// レスポンスボディのチェック
Map<String, String> uri = new HashMap<String, String>();
uri.put("userdataNP", UrlUtils.userData(cellName, boxName,
colName, ENTITY_TYPE_A + "('parent')"));
Map<String, Map<String, Object>> additional = new HashMap<String, Map<String, Object>>();
Map<String, Object> additionalprop = new HashMap<String, Object>();
additional.put("parent", additionalprop);
additionalprop.put("dynamicProperty", "dynamicPropertyPatent");
String nameSpace = getNameSpace(ENTITY_TYPE_A);
ODataCommon.checkResponseBodyList(response.bodyAsJson(), uri, nameSpace, additional, "__id", null, etags);
} finally {
deleteUserDataForAST(ENTITY_TYPE_A, ENTITY_TYPE_D);
}
}
/**
* AST対ONEのUserDataをNavigationProperty経由で取得して対象データが取得できること.
*/
@Test
public final void AST対ONEのUserDataをNavigationProperty経由で取得して対象データが取得できること() {
try {
// 事前にデータを登録する
createUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_D, "userdataNP", ENTITY_TYPE_B);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
// レスポンスボディのチェック
Map<String, String> uri = new HashMap<String, String>();
uri.put("userdataNP", UrlUtils.userData(cellName, boxName,
colName, ENTITY_TYPE_B + "('parent')"));
Map<String, Map<String, Object>> additional = new HashMap<String, Map<String, Object>>();
Map<String, Object> additionalprop = new HashMap<String, Object>();
additional.put("parent", additionalprop);
additionalprop.put("dynamicProperty", "dynamicPropertyPatent");
String nameSpace = getNameSpace(ENTITY_TYPE_B);
ODataCommon.checkResponseBodyList(response.bodyAsJson(), uri, nameSpace, additional, "__id");
} finally {
deleteUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
}
}
/**
* AST対ASTのUserDataをNavigationProperty経由で取得して対象データが取得できること.
*/
@Test
public final void AST対ASTのUserDataをNavigationProperty経由で取得して対象データが取得できること() {
try {
Map<String, String> etags = new HashMap<String, String>();
// 事前にデータを登録する
createUserDataForAST(ENTITY_TYPE_C, ENTITY_TYPE_D, etags);
// ユーザデータの一覧取得
TResponse response = execNpList(ENTITY_TYPE_C, "parent", ENTITY_TYPE_D);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
checkResponseForAST(response, ENTITY_TYPE_C, "parent", ENTITY_TYPE_D, ODataCommon.COUNT_NONE, etags);
} finally {
deleteUserDataForAST(ENTITY_TYPE_C, ENTITY_TYPE_D);
}
}
/**
* データが存在しない場合にUserDataをNavigationProperty経由で取得時にinlinecountを指定して件数が取得できること.
*/
@Test
public final void データが存在しない場合にUserDataをNavigationProperty経由で取得時にinlinecountを指定して件数が取得できること() {
try {
createUserDataParent(ENTITY_TYPE_C);
// ユーザデータの一覧取得
TResponse response = Http.request("box/odatacol/list.txt")
.with("cell", cellName)
.with("box", boxName)
.with("collection", colName + "/" + ENTITY_TYPE_C + "('parent')")
.with("entityType", "_" + ENTITY_TYPE_D)
.with("query", "?\\$inlinecount=allpages")
.with("accept", MediaType.APPLICATION_JSON)
.with("token", DcCoreConfig.getMasterToken())
.returns()
.statusCode(HttpStatus.SC_OK)
.debug();
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
// レスポンスボディーのチェック
String nameSpace = getNameSpace(entityTypeName);
ODataCommon.checkResponseBodyList(response.bodyAsJson(), null, nameSpace, null, 0);
} finally {
deleteUserData(cellName, boxName, colName, ENTITY_TYPE_C, "parent", DcCoreConfig.getMasterToken(), -1);
}
}
/**
* ONE対ASTのUserDataをNavigationProperty経由でfilterを指定して対象データが取得できること.
*/
@Test
public final void ONE対ASTのUserDataをNavigationProperty経由でfilterを指定して対象データが取得できること() {
try {
// 事前にデータを登録する
createUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
// ユーザデータの一覧取得
String query = "?\\$filter=dynamicProperty%20eq%20%27dynamicPropertyValueNp%27";
TResponse response = execNpListWithQuery(ENTITY_TYPE_B, "parent", ENTITY_TYPE_D, query);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
checkResponseForONE(response, ENTITY_TYPE_B, "parent", ENTITY_TYPE_D);
} finally {
deleteUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
}
}
/**
* ONE対ASTのUserDataをNavigationProperty経由でorderbyを指定して対象データがソートされて取得できること.
*/
@Test
public final void ONE対ASTのUserDataをNavigationProperty経由でorderbyを指定して対象データがソートされて取得できること() {
try {
// 事前にデータを登録する
createUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
// ユーザデータの一覧取得
String query = "?\\$orderby=dynamicProperty%20desc";
TResponse response = execNpListWithQuery(ENTITY_TYPE_B, "parent", ENTITY_TYPE_D, query);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
ArrayList<String> uri = new ArrayList<String>();
uri.add(UrlUtils.userData(cellName, boxName,
colName, ENTITY_TYPE_D + "('userdataNP2')"));
uri.add(UrlUtils.userData(cellName, boxName,
colName, ENTITY_TYPE_D + "('userdataNP')"));
ODataCommon.checkCommonResponseUri(response.bodyAsJson(), uri);
} finally {
deleteUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
}
}
/**
* ONE対ASTのUserDataをNavigationProperty経由でinlinecountを指定して取得件数が取得できること.
*/
@Test
public final void ONE対ASTのUserDataをNavigationProperty経由でinlinecountを指定して取得件数が取得できること() {
try {
// 事前にデータを登録する
createUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
// ユーザデータの一覧取得
String query = "?\\$inlinecount=allpages";
TResponse response = execNpListWithQuery(ENTITY_TYPE_B, "parent", ENTITY_TYPE_D, query);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
checkResponseForAST(response, ENTITY_TYPE_B, "parent", ENTITY_TYPE_D, 2, null);
} finally {
deleteUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
}
}
/**
* ONE対ASTのUserDataをNavigationProperty経由でtopを指定して指定した件数分データが取得できること.
*/
@Test
public final void ONE対ASTのUserDataをNavigationProperty経由でtopを指定して指定した件数分データが取得できること() {
try {
// 事前にデータを登録する
createUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
// ユーザデータの一覧取得
String query = "?\\$top=1&\\$orderby=dynamicProperty";
TResponse response = execNpListWithQuery(ENTITY_TYPE_B, "parent", ENTITY_TYPE_D, query);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
checkResponseForONE(response, ENTITY_TYPE_B, "parent", ENTITY_TYPE_D);
} finally {
deleteUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
}
}
/**
* ONE対ASTのUserDataをNavigationProperty経由でtopに最大値を指定した場合正常終了すること.
*/
@Test
public final void ONE対ASTのUserDataをNavigationProperty経由でtopに最大値を指定した場合正常終了すること() {
String top = Integer.toString(topMaxNum);
try {
// 事前にデータを登録する
createUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
// ユーザデータの一覧取得
String query = "?\\$top=" + top;
execNpListWithQuery(ENTITY_TYPE_B, "parent", ENTITY_TYPE_D, query);
} finally {
deleteUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
}
}
/**
* UserDataをNavigationProperty経由でtopに最大値プラス1を指定した場合400エラーが発生すること.
*/
@Test
public final void UserDataをNavigationProperty経由でtopに最大値プラス1を指定した場合400エラーが発生すること() {
String top = Integer.toString(topMaxNum + 1);
// ユーザデータの一覧取得
String query = "?\\$top=" + top;
TResponse res = Http.request("box/odatacol/list.txt")
.with("cell", cellName)
.with("box", boxName)
.with("collection", colName + "/" + ENTITY_TYPE_B + "('parent')")
.with("entityType", "_" + ENTITY_TYPE_D)
.with("query", query)
.with("accept", MediaType.APPLICATION_JSON)
.with("token", DcCoreConfig.getMasterToken())
.returns()
.statusCode(HttpStatus.SC_BAD_REQUEST)
.debug();
ODataCommon.checkErrorResponseBody(res, DcCoreException.OData.QUERY_INVALID_ERROR.getCode(),
DcCoreException.OData.QUERY_INVALID_ERROR.params("$top", top).getMessage());
}
/**
* UserDataをNavigationProperty経由でtopにマイナス1を指定した場合400エラーが発生すること.
*/
@Test
public final void UserDataをNavigationProperty経由でtopにマイナス1を指定した場合400エラーが発生すること() {
// ユーザデータの一覧取得
String query = "?\\$top=-1";
TResponse res = Http.request("box/odatacol/list.txt")
.with("cell", cellName)
.with("box", boxName)
.with("collection", colName + "/" + ENTITY_TYPE_B + "('parent')")
.with("entityType", "_" + ENTITY_TYPE_D)
.with("query", query)
.with("accept", MediaType.APPLICATION_JSON)
.with("token", DcCoreConfig.getMasterToken())
.returns()
.statusCode(HttpStatus.SC_BAD_REQUEST)
.debug();
ODataCommon.checkErrorResponseBody(res, DcCoreException.OData.QUERY_INVALID_ERROR.getCode(),
DcCoreException.OData.QUERY_INVALID_ERROR.params("$top", "-1").getMessage());
}
/**
* ONE対ASTのUserDataをNavigationProperty経由でskipを指定して指定した件数分飛ばしてデータが取得できること.
*/
@Test
public final void ONE対ASTのUserDataをNavigationProperty経由でskipを指定して指定した件数分飛ばしてデータが取得できること() {
try {
// 事前にデータを登録する
createUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
// ユーザデータの一覧取得
String query = "?\\$skip=1&\\$orderby=dynamicProperty";
TResponse response = execNpListWithQuery(ENTITY_TYPE_B, "parent", ENTITY_TYPE_D, query);
// レスポンスヘッダーのチェック
ODataCommon.checkCommonResponseHeader(response);
Map<String, String> uri = new HashMap<String, String>();
uri.put("userdataNP", UrlUtils.userData(cellName, boxName,
colName, ENTITY_TYPE_D + "('userdataNP2')"));
Map<String, Map<String, Object>> additional = new HashMap<String, Map<String, Object>>();
Map<String, Object> additionalprop = new HashMap<String, Object>();
additional.put("userdataNP2", additionalprop);
additionalprop.put("dynamicProperty", "dynamicPropertyValueNp2");
String nameSpace = getNameSpace(ENTITY_TYPE_D);
ODataCommon.checkResponseBodyList(response.bodyAsJson(), uri, nameSpace, additional, "__id");
} finally {
deleteUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
}
}
/**
* ONE対ASTのUserDataをNavigationProperty経由でskipに最大値を指定した場合正常取得できること.
*/
@Test
public final void ONE対ASTのUserDataをNavigationProperty経由でskipに最大値を指定した場合正常取得できること() {
String skip = Integer.toString(skipMaxNum);
try {
// 事前にデータを登録する
createUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
// ユーザデータの一覧取得
String query = "?\\$skip=" + skip;
execNpListWithQuery(ENTITY_TYPE_B, "parent", ENTITY_TYPE_D, query);
} finally {
deleteUserDataForAST(ENTITY_TYPE_B, ENTITY_TYPE_D);
}
}
/**
* UserDataをNavigationProperty経由でskipにマイナス1を指定した場合400エラーが発生すること.
*/
@Test
public final void UserDataをNavigationProperty経由でskipにマイナス1を指定した場合400エラーが発生すること() {
// ユーザデータの一覧取得
String query = "?\\$skip=-1";
TResponse res = Http.request("box/odatacol/list.txt")
.with("cell", cellName)
.with("box", boxName)
.with("collection", colName + "/" + ENTITY_TYPE_B + "('parent')")
.with("entityType", "_" + ENTITY_TYPE_D)
.with("query", query)
.with("accept", MediaType.APPLICATION_JSON)
.with("token", DcCoreConfig.getMasterToken())
.returns()
.statusCode(HttpStatus.SC_BAD_REQUEST)
.debug();
ODataCommon.checkErrorResponseBody(res, DcCoreException.OData.QUERY_INVALID_ERROR.getCode(),
DcCoreException.OData.QUERY_INVALID_ERROR.params("$skip", "-1").getMessage());
}
/**
* UserDataをNavigationProperty経由でskipに最大値プラス1を指定した場合400エラーが発生すること.
*/
@Test
public final void UserDataをNavigationProperty経由でskipに最大値プラス1を指定した場合400エラーが発生すること() {
String skip = Integer.toString(skipMaxNum + 1);
// ユーザデータの一覧取得
String query = "?\\$skip=" + skip;
TResponse res = Http.request("box/odatacol/list.txt")
.with("cell", cellName)
.with("box", boxName)
.with("collection", colName + "/" + ENTITY_TYPE_B + "('parent')")
.with("entityType", "_" + ENTITY_TYPE_D)
.with("query", query)
.with("accept", MediaType.APPLICATION_JSON)
.with("token", DcCoreConfig.getMasterToken())
.returns()
.statusCode(HttpStatus.SC_BAD_REQUEST)
.debug();
ODataCommon.checkErrorResponseBody(res, DcCoreException.OData.QUERY_INVALID_ERROR.getCode(),
DcCoreException.OData.QUERY_INVALID_ERROR.params("$skip", skip).getMessage());
}
/**
* 制御コードを含むUserDataのNP経由一覧取得時に制御コードがエスケープされて取得できること.
*/
@SuppressWarnings("unchecked")
@Test
public final void 制御コードを含むUserDataのNP経由一覧取得時に制御コードがエスケープされて取得できること() {
try {
Map<String, String> etags = new HashMap<String, String>();
// 事前にデータを登録する
JSONObject body;
createUserDataParent(ENTITY_TYPE_A, etags);
entityTypeName = ENTITY_TYPE_A;
navPropName = ENTITY_TYPE_B;
body = new JSONObject();
body.put("__id", "userdataNP");
body.put("testField", "value_\\u0001_value");
createUserDataWithNP("parent", body, HttpStatus.SC_CREATED);
// ユーザデータのNP経由一覧取得
TResponse response = execNpList(ENTITY_TYPE_A, "parent", ENTITY_TYPE_B);
// レスポンスボディーのチェック
String resBody = response.getBody();
assertTrue(resBody.contains("\\u0001"));
assertFalse(resBody.contains("\u0001"));
} finally {
deleteUserDataForONE(ENTITY_TYPE_A, ENTITY_TYPE_B);
}
}
/**
* Double型のプロパティを含むUserDataのNP経由一覧取得時にDouble型のプロパティの値が丸められないこと.
*/
@SuppressWarnings("unchecked")
@Test
public final void Double型のプロパティを含むUserDataのNP経由一覧取得時にDouble型のプロパティの値が丸められないこと() {
try {
Map<String, String> etags = new HashMap<String, String>();
// 事前にデータを登録する
JSONObject body;
createUserDataParent(ENTITY_TYPE_A, etags);
entityTypeName = ENTITY_TYPE_A;
navPropName = ENTITY_TYPE_B;
body = new JSONObject();
body.put("__id", "userdataNP");
body.put("testFieldDouble", 1234567890.12345d);
createUserDataWithNP("parent", body, HttpStatus.SC_CREATED);
// ユーザデータのNP経由一覧取得
TResponse response = execNpList(ENTITY_TYPE_A, "parent", ENTITY_TYPE_B);
// レスポンスボディーのチェック
String resBody = response.getBody();
assertTrue(resBody.contains("1234567890.12345"));
assertFalse(resBody.contains("1.23456789012345E9"));
} finally {
deleteUserDataForONE(ENTITY_TYPE_A, ENTITY_TYPE_B);
}
}
}