/**
* 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.schema.entitytype;
import static org.junit.Assert.assertEquals;
import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.core.MediaType;
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 com.fujitsu.dc.core.DcCoreConfig;
import com.fujitsu.dc.core.DcCoreException;
import com.fujitsu.dc.test.categories.Integration;
import com.fujitsu.dc.test.categories.Regression;
import com.fujitsu.dc.test.categories.Unit;
import com.fujitsu.dc.test.jersey.AbstractCase;
import com.fujitsu.dc.test.jersey.DcRunner;
import com.fujitsu.dc.test.jersey.ODataCommon;
import com.fujitsu.dc.test.jersey.box.odatacol.schema.property.PropertyUtils;
import com.fujitsu.dc.test.setup.Setup;
import com.fujitsu.dc.test.utils.AssociationEndUtils;
import com.fujitsu.dc.test.utils.DavResourceUtils;
import com.fujitsu.dc.test.utils.EntityTypeUtils;
import com.fujitsu.dc.test.utils.Http;
import com.fujitsu.dc.test.utils.TResponse;
import com.fujitsu.dc.test.utils.UserDataUtils;
/**
* EntityTypeCRUDのテスト.
*/
@RunWith(DcRunner.class)
@Category({Unit.class, Integration.class, Regression.class })
public class EntityTypeCrudTest extends ODataCommon {
static final String ACCEPT = "application/xml";
/**
* コンストラクタ.
*/
public EntityTypeCrudTest() {
super("com.fujitsu.dc.core.rs");
}
/**
* EntityTypeの新規作成し201になること.
*/
@Test
public final void EntityTypeの新規作成し201になること() {
String entityTypeName = "testEntity";
String locationHeader = null;
try {
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
locationHeader = res.getLocationHeader();
res.statusCode(HttpStatus.SC_CREATED);
} finally {
if (locationHeader != null) {
deleteOdataResource(locationHeader);
}
}
}
/**
* EntityTypeの新規作成時Nameに空文字を指定した場合400になること.
*/
@Test
public final void EntityTypeの新規作成時Nameに空文字を指定した場合400になること() {
String entityTypeName = "";
String locationHeader = null;
try {
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
locationHeader = res.getLocationHeader();
res.statusCode(HttpStatus.SC_BAD_REQUEST);
} finally {
if (locationHeader != null) {
deleteOdataResource(locationHeader);
}
}
}
/**
* EntityTypeの新規作成時Nameにアンダーバー始まりの文字列を指定した場合400になること.
*/
@Test
public final void EntityTypeの新規作成時Nameにアンダーバー始まりの文字列を指定した場合400になること() {
String entityTypeName = "_testEntity";
String locationHeader = null;
try {
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
locationHeader = res.getLocationHeader();
res.statusCode(HttpStatus.SC_BAD_REQUEST);
} finally {
if (locationHeader != null) {
deleteOdataResource(locationHeader);
}
}
}
/**
* EntityTypeの新規作成時Nameにハイフン始まりの文字列を指定した場合400になること.
*/
@Test
public final void EntityTypeの新規作成時Nameにハイフン始まりの文字列を指定した場合400になること() {
String entityTypeName = "-testEntity";
String locationHeader = null;
try {
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
locationHeader = res.getLocationHeader();
res.statusCode(HttpStatus.SC_BAD_REQUEST);
} finally {
if (locationHeader != null) {
deleteOdataResource(locationHeader);
}
}
}
/**
* EntityTypeの新規作成時Nameにスラッシュを含む文字列を指定した場合400になること.
*/
@Test
public final void EntityTypeの新規作成時Nameにスラッシュを含む文字列を指定した場合400になること() {
String entityTypeName = "test/Entity";
String locationHeader = null;
try {
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
locationHeader = res.getLocationHeader();
res.statusCode(HttpStatus.SC_BAD_REQUEST);
} finally {
if (locationHeader != null) {
deleteOdataResource(locationHeader);
}
}
}
/**
* EntityTypeの新規作成時Nameに指定可能な文字数の最小値を指定した場合201になること.
*/
@Test
public final void EntityTypeの新規作成時Nameに指定可能な文字数の最小値を指定した場合201になること() {
String entityTypeName = "1";
String locationHeader = null;
try {
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
locationHeader = res.getLocationHeader();
res.statusCode(HttpStatus.SC_CREATED);
} finally {
if (locationHeader != null) {
deleteOdataResource(locationHeader);
}
}
}
/**
* EntityTypeの新規作成時Nameに指定可能な文字数の最大値を指定した場合201になること.
*/
@Test
public final void EntityTypeの新規作成時Nameに指定可能な文字数の最大値を指定した場合201になること() {
String entityTypeName = "1234567890123456789012345678901234567890123456789012345678901234567890"
+ "123456789012345678901234567890123456789012345678901234567x";
String locationHeader = null;
try {
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
locationHeader = res.getLocationHeader();
res.statusCode(HttpStatus.SC_CREATED);
} finally {
if (locationHeader != null) {
deleteOdataResource(locationHeader);
}
}
}
/**
* EntityTypeの新規作成時Nameに指定可能な文字数の最大値をオーバー指定した場合400になること.
*/
@Test
public final void EntityTypeの新規作成時Nameに指定可能な文字数の最大値をオーバー指定した場合400になること() {
String entityTypeName = "1234567890123456789012345678901234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890123456789012345678x";
String locationHeader = null;
try {
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
locationHeader = res.getLocationHeader();
res.statusCode(HttpStatus.SC_BAD_REQUEST);
} finally {
if (locationHeader != null) {
deleteOdataResource(locationHeader);
}
}
}
/**
* EntityTypeの新規作成時Nameに日本語を指定した場合400になること.
*/
@Test
public final void EntityTypeの新規作成時Nameに日本語を指定した場合400になること() {
String entityTypeName = "日本語";
String locationHeader = null;
try {
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
locationHeader = res.getLocationHeader();
res.statusCode(HttpStatus.SC_BAD_REQUEST);
} finally {
if (locationHeader != null) {
deleteOdataResource(locationHeader);
}
}
}
/**
* EntityTypeの削除時にユーザデータがあると409になること.
*/
@SuppressWarnings("unchecked")
@Test
public final void EntityTypeの削除時にユーザデータがあると409になること() {
String entityTypeName = "testDataEntity";
String useDataId = "entityTypeDel";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// userDataの作成
JSONObject body = new JSONObject();
body.put("__id", useDataId);
UserDataUtils.create(MASTER_TOKEN_NAME, HttpStatus.SC_CREATED, body,
Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, entityTypeName);
// EntityTypeの削除(409になること)
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME, ACCEPT, entityTypeName,
Setup.TEST_CELL1, HttpStatus.SC_CONFLICT);
// userDataの削除
UserDataUtils.delete(MASTER_TOKEN_NAME, HttpStatus.SC_NO_CONTENT, entityTypeName,
useDataId, Setup.TEST_ODATA);
// EntityTypeの削除(削除可能なこと)
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME, ACCEPT, entityTypeName,
Setup.TEST_CELL1, HttpStatus.SC_NO_CONTENT);
} finally {
UserDataUtils.delete(MASTER_TOKEN_NAME, -1, entityTypeName, useDataId, Setup.TEST_ODATA);
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME, ACCEPT, entityTypeName,
Setup.TEST_CELL1, -1);
}
}
/**
* EntityTypeにユーザデータがある場合に更新可能であること.
*/
@SuppressWarnings("unchecked")
@Test
public final void EntityTypeにユーザデータがある場合に更新可能であること() {
String entityTypeName = "testDataEntity";
String entityTypeReName = "testDataEntityReName";
String userDataId = "entityTypeDel";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// userDataの作成
JSONObject body = new JSONObject();
body.put("__id", userDataId);
UserDataUtils.create(MASTER_TOKEN_NAME, HttpStatus.SC_CREATED, body,
Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA, entityTypeName);
// EntityTypeの更新
String entityTypeBody = "{\"Name\": \"" + entityTypeReName + "\"}";
EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, entityTypeBody, HttpStatus.SC_NO_CONTENT);
// 変名後のEntityTypeを取得できること
res = EntityTypeUtils.get(Setup.TEST_CELL1, MASTER_TOKEN_NAME, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeReName, HttpStatus.SC_OK);
Map<String, Object> additional = new HashMap<String, Object>();
additional.put("Name", entityTypeReName);
ODataCommon.checkResponseBody(res.bodyAsJson(), null, EntityTypeUtils.NAMESPACE, additional);
// 変名前のEntityTypeを取得できないこと
EntityTypeUtils.get(Setup.TEST_CELL1, MASTER_TOKEN_NAME, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, HttpStatus.SC_NOT_FOUND);
// 変名後のEntityTypeでuserDataが取得できること
res = UserDataUtils.get(Setup.TEST_CELL1, MASTER_TOKEN_NAME, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeReName, userDataId, HttpStatus.SC_OK);
additional = new HashMap<String, Object>();
additional.put("__id", userDataId);
String namespace = "UserData." + entityTypeReName;
ODataCommon.checkResponseBody(res.bodyAsJson(), null, namespace, additional);
// userDataの削除
UserDataUtils.delete(MASTER_TOKEN_NAME, HttpStatus.SC_NO_CONTENT, entityTypeReName,
userDataId, Setup.TEST_ODATA);
// EntityTypeの更新
entityTypeBody = "{\"Name\": \"" + entityTypeName + "\"}";
EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeReName, entityTypeBody, HttpStatus.SC_NO_CONTENT);
// 変名後のEntityTypeを取得できること
res = EntityTypeUtils.get(Setup.TEST_CELL1, MASTER_TOKEN_NAME, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, HttpStatus.SC_OK);
additional = new HashMap<String, Object>();
additional.put("Name", entityTypeName);
ODataCommon.checkResponseBody(res.bodyAsJson(), null, EntityTypeUtils.NAMESPACE, additional);
} finally {
UserDataUtils.delete(MASTER_TOKEN_NAME, -1, entityTypeReName, userDataId, Setup.TEST_ODATA);
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName, Setup.TEST_CELL1, -1);
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeReName, Setup.TEST_CELL1, -1);
}
}
/**
* 同一のEntityTypeを複数回更新可能であること.
*/
@Test
public final void 同一のEntityTypeを複数回更新可能であること() {
String entityTypeName = "testDataEntity";
String entityTypeReName = "testDataEntityReName";
String entityTypeReName2 = "testDataEntityReName2";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeの更新(1回目)
String entityTypeBody = "{\"Name\": \"" + entityTypeReName + "\"}";
EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, entityTypeBody, HttpStatus.SC_NO_CONTENT);
// EntityTypeの更新(2回目)
entityTypeBody = "{\"Name\": \"" + entityTypeReName2 + "\"}";
EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeReName, entityTypeBody, HttpStatus.SC_NO_CONTENT);
// 変名後のEntityTypeを取得できること
EntityTypeUtils.get(Setup.TEST_CELL1, MASTER_TOKEN_NAME, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeReName2, HttpStatus.SC_OK);
// 変名前のEntityTypeを取得できないこと
EntityTypeUtils.get(Setup.TEST_CELL1, MASTER_TOKEN_NAME, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, HttpStatus.SC_NOT_FOUND);
EntityTypeUtils.get(Setup.TEST_CELL1, MASTER_TOKEN_NAME, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeReName, HttpStatus.SC_NOT_FOUND);
// EntityTypeの一覧取得で変名後のEntityTypeが取得できること
res = EntityTypeUtils.list(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1,
Setup.TEST_ODATA, "?\\$filter=Name+eq+'" + entityTypeReName2 + "'", HttpStatus.SC_OK);
Map<String, Object> additional = new HashMap<String, Object>();
additional.put("Name", entityTypeReName2);
ODataCommon.checkResponseBodyList(res.bodyAsJson(), null, EntityTypeUtils.NAMESPACE, additional);
// 最初の名前でEntityTypeを作成できること
res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeを取得できること
res = EntityTypeUtils.get(Setup.TEST_CELL1, MASTER_TOKEN_NAME, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, HttpStatus.SC_OK);
additional = new HashMap<String, Object>();
additional.put("Name", entityTypeName);
ODataCommon.checkResponseBody(res.bodyAsJson(), null, EntityTypeUtils.NAMESPACE, additional);
} finally {
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName, Setup.TEST_CELL1, -1);
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeReName, Setup.TEST_CELL1, -1);
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeReName2, Setup.TEST_CELL1, -1);
}
}
/**
* EntityTypeの更新時Nameに空文字を指定した場合400になること.
*/
@Test
public final void EntityTypeの更新時Nameに空文字を指定した場合400になること() {
String entityTypeName = "testDataEntityName";
String entityTypeReName = "";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeの更新(400になること)
String entityTypeBody = "{\"Name\": \"" + entityTypeReName + "\"}";
res = EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, entityTypeBody, HttpStatus.SC_BAD_REQUEST);
res.checkErrorResponse(DcCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.getCode(),
DcCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.params("Name").getMessage());
} finally {
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName, Setup.TEST_CELL1, -1);
}
}
/**
* EntityTypeの更新時Nameにアンダーバー始まりの文字列を指定した場合400になること.
*/
@Test
public final void EntityTypeの更新時Nameにアンダーバー始まりの文字列を指定した場合400になること() {
String entityTypeName = "testDataEntityName";
String entityTypeReName = "_testEntity";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeの更新(400になること)
String entityTypeBody = "{\"Name\": \"" + entityTypeReName + "\"}";
res = EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, entityTypeBody, HttpStatus.SC_BAD_REQUEST);
res.checkErrorResponse(DcCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.getCode(),
DcCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.params("Name").getMessage());
} finally {
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName, Setup.TEST_CELL1, -1);
}
}
/**
* EntityTypeの更新時Nameにハイフン始まりの文字列を指定した場合400になること.
*/
@Test
public final void EntityTypeの更新時Nameにハイフン始まりの文字列を指定した場合400になること() {
String entityTypeName = "testDataEntityName";
String entityTypeReName = "-testEntity";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeの更新(400になること)
String entityTypeBody = "{\"Name\": \"" + entityTypeReName + "\"}";
res = EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, entityTypeBody, HttpStatus.SC_BAD_REQUEST);
res.checkErrorResponse(DcCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.getCode(),
DcCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.params("Name").getMessage());
} finally {
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName, Setup.TEST_CELL1, -1);
}
}
/**
* EntityTypeの更新時Nameにスラッシュを含む文字列を指定した場合400になること.
*/
@Test
public final void EntityTypeの更新時Nameにスラッシュを含む文字列を指定した場合400になること() {
String entityTypeName = "testDataEntityName";
String entityTypeReName = "test/Entity";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeの更新(400になること)
String entityTypeBody = "{\"Name\": \"" + entityTypeReName + "\"}";
res = EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, entityTypeBody, HttpStatus.SC_BAD_REQUEST);
res.checkErrorResponse(DcCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.getCode(),
DcCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.params("Name").getMessage());
} finally {
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName, Setup.TEST_CELL1, -1);
}
}
/**
* EntityTypeの更新時Nameに指定可能な文字数の最小値を指定した場合204になること.
*/
@Test
public final void EntityTypeの更新時Nameに指定可能な文字数の最小値を指定した場合204になること() {
String entityTypeName = "testDataEntityName";
String entityTypeReName = "1";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeの更新(更新可能であること)
String entityTypeBody = "{\"Name\": \"" + entityTypeReName + "\"}";
res = EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, entityTypeBody, HttpStatus.SC_NO_CONTENT);
// 変名後のEntityTypeを取得できること
EntityTypeUtils.get(Setup.TEST_CELL1, MASTER_TOKEN_NAME, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeReName, HttpStatus.SC_OK);
// 変名前のEntityTypeを取得できないこと
EntityTypeUtils.get(Setup.TEST_CELL1, MASTER_TOKEN_NAME, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, HttpStatus.SC_NOT_FOUND);
} finally {
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeReName, Setup.TEST_CELL1, -1);
}
}
/**
* EntityTypeの更新時Nameに指定可能な文字数の最大値を指定した場合204になること.
*/
@Test
public final void EntityTypeの更新時Nameに指定可能な文字数の最大値を指定した場合204になること() {
String entityTypeName = "testDataEntityName";
String entityTypeReName = "1234567890123456789012345678901234567890123456789012345678901234567890"
+ "123456789012345678901234567890123456789012345678901234567x";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeの更新(更新可能であること)
String entityTypeBody = "{\"Name\": \"" + entityTypeReName + "\"}";
res = EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, entityTypeBody, HttpStatus.SC_NO_CONTENT);
// 変名後のEntityTypeを取得できること
EntityTypeUtils.get(Setup.TEST_CELL1, MASTER_TOKEN_NAME, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeReName, HttpStatus.SC_OK);
// 変名前のEntityTypeを取得できないこと
EntityTypeUtils.get(Setup.TEST_CELL1, MASTER_TOKEN_NAME, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, HttpStatus.SC_NOT_FOUND);
} finally {
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeReName, Setup.TEST_CELL1, -1);
}
}
/**
* EntityTypeの更新時Nameに指定可能な文字数の最大値をオーバーした場合400になること.
*/
@Test
public final void EntityTypeの更新時Nameに指定可能な文字数の最大値をオーバーした場合400になること() {
String entityTypeName = "testDataEntityName";
String entityTypeReName = "1234567890123456789012345678901234567890123456789012345678901234567890"
+ "1234567890123456789012345678901234567890123456789012345678x";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeの更新(400になること)
String entityTypeBody = "{\"Name\": \"" + entityTypeReName + "\"}";
res = EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, entityTypeBody, HttpStatus.SC_BAD_REQUEST);
res.checkErrorResponse(DcCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.getCode(),
DcCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.params("Name").getMessage());
} finally {
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName, Setup.TEST_CELL1, -1);
}
}
/**
* EntityTypeの更新時Nameに日本語を指定した場合400になること.
*/
@Test
public final void EntityTypeの更新時Nameに日本語を指定した場合400になること() {
String entityTypeName = "testDataEntityName";
String entityTypeReName = "日本語";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeの更新(400になること)
String entityTypeBody = "{\"Name\": \"" + entityTypeReName + "\"}";
res = EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, entityTypeBody, HttpStatus.SC_BAD_REQUEST);
res.checkErrorResponse(DcCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.getCode(),
DcCoreException.OData.REQUEST_FIELD_FORMAT_ERROR.params("Name").getMessage());
} finally {
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName, Setup.TEST_CELL1, -1);
}
}
/**
* EntityTypeの更新時Nameが指定されていない場合400になること.
*/
@Test
public final void EntityTypeの更新時Nameが指定されていない場合400になること() {
String entityTypeName = "testDataEntityName";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeの更新(400になること)
String entityTypeBody = "{}";
res = EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, entityTypeBody, HttpStatus.SC_BAD_REQUEST);
res.checkErrorResponse(DcCoreException.OData.INPUT_REQUIRED_FIELD_MISSING.getCode(),
DcCoreException.OData.INPUT_REQUIRED_FIELD_MISSING.params("Name").getMessage());
} finally {
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName, Setup.TEST_CELL1, -1);
}
}
/**
* 存在しないEntityTypeを指定して更新した場合404になること.
*/
@Test
public final void 存在しないEntityTypeを指定して更新した場合404になること() {
String entityTypeName = "testDataEntityName";
String entityTypeReName = "testDataEntityName";
try {
// EntityTypeの更新(404になること)
String entityTypeBody = "{\"Name\": \"" + entityTypeReName + "\"}";
TResponse res = EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1,
Setup.TEST_ODATA,
entityTypeName, entityTypeBody, HttpStatus.SC_NOT_FOUND);
res.checkErrorResponse(DcCoreException.OData.NO_SUCH_ENTITY.getCode(),
DcCoreException.OData.NO_SUCH_ENTITY.getMessage());
} finally {
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName, Setup.TEST_CELL1, -1);
}
}
/**
* 変名後のEntityTypeが存在する場合409になること.
*/
@Test
public final void 変名後のEntityTypeが存在する場合409になること() {
String entityTypeName1 = "testDataEntityName1";
String entityTypeName2 = "testDataEntityName2";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName1, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeの作成
res = createEntityType(entityTypeName2, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeの更新(409になること)
String entityTypeBody = "{\"Name\": \"" + entityTypeName1 + "\"}";
res = EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1,
Setup.TEST_ODATA,
entityTypeName2, entityTypeBody, HttpStatus.SC_CONFLICT);
res.checkErrorResponse(DcCoreException.OData.ENTITY_ALREADY_EXISTS.getCode(),
DcCoreException.OData.ENTITY_ALREADY_EXISTS.getMessage());
} finally {
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName1, Setup.TEST_CELL1, -1);
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName2, Setup.TEST_CELL1, -1);
}
}
/**
* 同じ名前でEntityTypeを更新できること.
*/
@Test
public final void 同じ名前でEntityTypeを更新できること() {
String entityTypeName = "testDataEntityName";
String entityTypeReName = "testDataEntityName";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// EntityTypeの更新(204になること)
String entityTypeBody = "{\"Name\": \"" + entityTypeReName + "\"}";
res = EntityTypeUtils.update(MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_BOX1,
Setup.TEST_ODATA,
entityTypeName, entityTypeBody, HttpStatus.SC_NO_CONTENT);
// EntityTypeを取得できること
EntityTypeUtils.get(Setup.TEST_CELL1, MASTER_TOKEN_NAME, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeReName, HttpStatus.SC_OK);
} finally {
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName, Setup.TEST_CELL1, -1);
}
}
/**
* EntityTypeの削除時にAssociationEndがあると409になること.
*/
@Test
public final void EntityTypeの削除時にAssociationEndがあると409になること() {
String entityTypeName = "testDataEntity";
String associationEndName = "deleteAssociationEnd";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// AssociationEndの作成
AssociationEndUtils.create(MASTER_TOKEN_NAME, "*", Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
HttpStatus.SC_CREATED, associationEndName, entityTypeName);
// EntityTypeの削除(409になること)
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME, ACCEPT, entityTypeName,
Setup.TEST_CELL1, HttpStatus.SC_CONFLICT);
// AssociationEndの削除
AssociationEndUtils.delete(AbstractCase.MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_ODATA,
entityTypeName,
Setup.TEST_BOX1, associationEndName, HttpStatus.SC_NO_CONTENT);
// EntityTypeの削除(削除可能なこと)
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME, ACCEPT, entityTypeName,
Setup.TEST_CELL1, HttpStatus.SC_NO_CONTENT);
} finally {
// AssociationEndの削除
AssociationEndUtils.delete(AbstractCase.MASTER_TOKEN_NAME, Setup.TEST_CELL1, Setup.TEST_ODATA,
entityTypeName,
Setup.TEST_BOX1, associationEndName, -1);
// EntityTypeの削除
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME, ACCEPT, entityTypeName,
Setup.TEST_CELL1, -1);
}
}
/**
* EntityTypeの削除時にPropertyがあると409になること.
*/
@Test
public final void EntityTypeの削除時にPropertyがあると409になること() {
String entityTypeName = "testDataEntity";
String propertyName = "deleteProperty";
try {
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_CREATED);
// Propertyの作成
PropertyUtils.create(BEARER_MASTER_TOKEN, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName,
propertyName, "Edm.String", true, null, "None", false, null, HttpStatus.SC_CREATED);
// EntityTypeの削除(409になること)
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME, ACCEPT, entityTypeName,
Setup.TEST_CELL1, HttpStatus.SC_CONFLICT);
// Propertyの削除
PropertyUtils.delete(BEARER_MASTER_TOKEN, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName,
propertyName, HttpStatus.SC_NO_CONTENT);
// EntityTypeの削除(削除可能なこと)
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME, ACCEPT, entityTypeName,
Setup.TEST_CELL1, HttpStatus.SC_NO_CONTENT);
} finally {
// Propertyの削除
PropertyUtils.delete(BEARER_MASTER_TOKEN, Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName,
propertyName, -1);
// EntityTypeの削除
EntityTypeUtils.delete(Setup.TEST_ODATA, MASTER_TOKEN_NAME, ACCEPT, entityTypeName,
Setup.TEST_CELL1, -1);
}
}
/**
* DateフィールドOFFの確認. 日付型でユーザデータを登録し、文字列で完全一致検索を行い、ヒットすること
*/
@SuppressWarnings("unchecked")
@Test
public final void DateフィールドOFFの確認() {
String odataName = "dateOdata";
String entityTypeName = "testDateEntity";
String useDataId = "entityTypeDel";
try {
// odataコレクションの作成
DavResourceUtils.createODataCollection(MASTER_TOKEN_NAME, HttpStatus.SC_CREATED, Setup.TEST_CELL1,
Setup.TEST_BOX1, odataName);
// EntityTypeの作成
TResponse res = createEntityType(entityTypeName, odataName);
res.statusCode(HttpStatus.SC_CREATED);
// userDataの作成
JSONObject body = new JSONObject();
// 日付型のデータ登録
body.put("__id", useDataId);
body.put("date", "2012/09/21");
UserDataUtils.create(MASTER_TOKEN_NAME, HttpStatus.SC_CREATED, body,
Setup.TEST_CELL1, Setup.TEST_BOX1, odataName, entityTypeName);
// $filterで完全一致検索ができること
TResponse response = Http.request("box/odatacol/list.txt")
.with("cell", Setup.TEST_CELL1)
.with("box", Setup.TEST_BOX1)
.with("collection", odataName)
.with("entityType", entityTypeName)
.with("query", "?\\$filter=date+eq+'2012/09/21'")
.with("accept", MediaType.APPLICATION_JSON)
.with("token", DcCoreConfig.getMasterToken())
.returns()
.statusCode(HttpStatus.SC_OK)
.debug();
// 取得件数のチェック
JSONArray results = (JSONArray) ((JSONObject) response.bodyAsJson().get("d")).get("results");
assertEquals(1, results.size());
} finally {
UserDataUtils.delete(MASTER_TOKEN_NAME, -1, entityTypeName, useDataId, odataName);
EntityTypeUtils.delete(odataName, MASTER_TOKEN_NAME,
ACCEPT, entityTypeName, Setup.TEST_CELL1, -1);
DavResourceUtils.deleteCollection(Setup.TEST_CELL1, Setup.TEST_BOX1, odataName, MASTER_TOKEN_NAME, -1);
}
}
/**
* EntityTypeを上限値を超える数作成した場合にエラーが返却される.
*/
@Test
public final void EntityTypeを上限値を超える数作成した場合にエラーが返却される() {
try {
for (int i = 0; i < DcCoreConfig.getUserdataMaxEntityCount(); i++) {
String entityTypeName = String.format("testEntity%03d", i);
createEntityType(entityTypeName, Setup.TEST_ODATA);
}
String entityTypeName = "testEntityExceedsTheLimit";
TResponse res = createEntityType(entityTypeName, Setup.TEST_ODATA);
res.statusCode(HttpStatus.SC_BAD_REQUEST);
} finally {
for (int i = 0; i < DcCoreConfig.getUserdataMaxEntityCount(); i++) {
String entityTypeName = String.format("testEntity%03d", i);
EntityTypeUtils.delete(Setup.TEST_ODATA,
MASTER_TOKEN_NAME, "application/json", entityTypeName, Setup.TEST_BOX1, Setup.TEST_CELL1, -1);
}
String entityTypeName = "testEntityExceedsTheLimit";
EntityTypeUtils.delete(Setup.TEST_ODATA,
MASTER_TOKEN_NAME, "application/json", entityTypeName, Setup.TEST_BOX1, Setup.TEST_CELL1, -1);
}
}
/**
* EntityTypeを作成する.
* @param name EntityTypeのName
* @param odataName oadataコレクション名
* @return レスポンス
*/
private TResponse createEntityType(String name, String odataName) {
return Http.request("box/entitySet-post.txt")
.with("cellPath", "testcell1")
.with("boxPath", "box1")
.with("odataSvcPath", odataName)
.with("accept", MediaType.APPLICATION_JSON)
.with("token", "Bearer " + DcCoreConfig.getMasterToken())
.with("Name", name)
.returns()
.debug();
}
}