/**
* 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 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.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.setup.Setup;
import com.fujitsu.dc.test.unit.core.UrlUtils;
import com.fujitsu.dc.test.utils.AssociationEndUtils;
import com.fujitsu.dc.test.utils.EntityTypeUtils;
import com.fujitsu.dc.test.utils.Http;
/**
* UserData登録のテスト.
*/
@RunWith(DcRunner.class)
@Category({Unit.class, Integration.class, Regression.class })
public class UserDataCreateLinkTest extends AbstractUserDataTest {
/**
* コンストラクタ.
*/
public UserDataCreateLinkTest() {
super();
}
/**
* 長さ128文字のEntityTypeでユーザーデータの関連付けが作成できること.
*/
@SuppressWarnings("unchecked")
@Test
public final void 長さ128文字のEntityTypeでユーザーデータの関連付けが作成できること() {
String entityTypeName127 = "1234567890123456789012345678901234567890123456789012345678901234567890"
+ "123456789012345678901234567890123456789012345678901234567";
entityTypeName = "a" + entityTypeName127;
navPropName = "b" + entityTypeName127;
String userDataId = "128EntityType";
String linkUserDataId = "128LinkEntityType";
JSONObject body = new JSONObject();
body.put("__id", userDataId);
JSONObject linkBody = new JSONObject();
linkBody.put("__id", linkUserDataId);
try {
// 128文字のエンティティタイプを作成
EntityTypeUtils.create(Setup.TEST_CELL1, DcCoreConfig.getMasterToken(),
Setup.TEST_ODATA, entityTypeName, HttpStatus.SC_CREATED);
EntityTypeUtils.create(Setup.TEST_CELL1, DcCoreConfig.getMasterToken(),
Setup.TEST_ODATA, navPropName, HttpStatus.SC_CREATED);
// AssociationEndを作成
AssociationEndUtils.create(DcCoreConfig.getMasterToken(), "*", Setup.TEST_CELL1,
Setup.TEST_BOX1, Setup.TEST_ODATA, HttpStatus.SC_CREATED,
"AssociationEnd", entityTypeName);
AssociationEndUtils.create(DcCoreConfig.getMasterToken(), "*", Setup.TEST_CELL1,
Setup.TEST_BOX1, Setup.TEST_ODATA, HttpStatus.SC_CREATED,
"LinkAssociationEnd", navPropName);
// AssociationEndを関連付け
AssociationEndUtils.createLink(AbstractCase.MASTER_TOKEN_NAME,
Setup.TEST_CELL1,
Setup.TEST_BOX1,
Setup.TEST_ODATA,
entityTypeName,
navPropName,
"AssociationEnd",
"LinkAssociationEnd", HttpStatus.SC_NO_CONTENT);
// ユーザーデータを作成
createUserData(body, HttpStatus.SC_CREATED, Setup.TEST_CELL1,
Setup.TEST_BOX1, Setup.TEST_ODATA, entityTypeName);
createUserData(linkBody, HttpStatus.SC_CREATED, Setup.TEST_CELL1,
Setup.TEST_BOX1, Setup.TEST_ODATA, navPropName);
// $links登録が成功することを確認する
String targetUri = UrlUtils.cellRoot(Setup.TEST_CELL1) + Setup.TEST_BOX1 + "/"
+ Setup.TEST_ODATA + "/" + navPropName + "('" + linkUserDataId + "')";
Http.request("link-userdata-userdata.txt")
.with("cellPath", Setup.TEST_CELL1)
.with("boxPath", Setup.TEST_BOX1)
.with("colPath", Setup.TEST_ODATA)
.with("srcPath", entityTypeName + "('" + userDataId + "')")
.with("trgPath", navPropName)
.with("token", DcCoreConfig.getMasterToken())
.with("trgUserdataUrl", targetUri)
.returns()
.debug()
.statusCode(HttpStatus.SC_NO_CONTENT);
} finally {
// ユーザーデータLinkを削除
deleteUserDataLinks(userDataId, linkUserDataId);
// ユーザーデータを削除
deleteUserData(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, userDataId, DcCoreConfig.getMasterToken(), HttpStatus.SC_NO_CONTENT);
deleteUserData(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
navPropName, linkUserDataId, DcCoreConfig.getMasterToken(), HttpStatus.SC_NO_CONTENT);
// AssociationEndLinkを削除
AssociationEndUtils
.deleteLink(Setup.TEST_CELL1, Setup.TEST_ODATA,
Setup.TEST_BOX1, "Name='AssociationEnd',_EntityType.Name='" + entityTypeName + "'",
"Name='LinkAssociationEnd',_EntityType.Name='" + navPropName + "'",
HttpStatus.SC_NO_CONTENT);
// AssociationEndを削除
AssociationEndUtils.delete(AbstractCase.MASTER_TOKEN_NAME, Setup.TEST_CELL1,
Setup.TEST_ODATA, entityTypeName, Setup.TEST_BOX1, "AssociationEnd", HttpStatus.SC_NO_CONTENT);
AssociationEndUtils.delete(AbstractCase.MASTER_TOKEN_NAME, Setup.TEST_CELL1,
Setup.TEST_ODATA, navPropName, Setup.TEST_BOX1, "LinkAssociationEnd", HttpStatus.SC_NO_CONTENT);
// エンティティタイプを削除
EntityTypeUtils.delete(Setup.TEST_ODATA, DcCoreConfig.getMasterToken(),
"application/json", entityTypeName, Setup.TEST_CELL1, -1);
EntityTypeUtils.delete(Setup.TEST_ODATA, DcCoreConfig.getMasterToken(),
"application/json", navPropName, Setup.TEST_CELL1, -1);
}
}
/**
* ユーザデータ$link登録のテスト_uriに前括弧がない場合400エラーとなること.
*/
@SuppressWarnings("unchecked")
@Test
public final void ユーザデータ$link登録のテスト_uriに前括弧がない場合400エラーとなること() {
// リクエストボディを設定
String userDataId = "userdata001";
JSONObject body = new JSONObject();
body.put("__id", userDataId);
String targetEntityType = "Product";
// 前準備
try {
// ユーザデータ作成
createUserData(body, HttpStatus.SC_CREATED, cellName,
boxName, colName, "Category");
createUserData(body, HttpStatus.SC_CREATED, cellName, boxName, colName, targetEntityType);
String targetUri = UrlUtils.cellRoot(cellName) + boxName + "/"
+ colName + "/" + targetEntityType + "'userdata001')";
// $links登録(リクエストボディuriの丸かっこが後ろのみ)
Http.request("link-userdata-userdata.txt")
.with("cellPath", cellName)
.with("boxPath", boxName)
.with("colPath", colName)
.with("srcPath", "Category('userdata001')")
.with("trgPath", targetEntityType)
.with("token", DcCoreConfig.getMasterToken())
.with("trgUserdataUrl", targetUri)
.returns()
.statusCode(HttpStatus.SC_BAD_REQUEST)
.debug();
} finally {
// ユーザデータの削除
deleteUserData(userDataId);
deleteUserData(cellName, boxName, colName, targetEntityType,
userDataId, DcCoreConfig.getMasterToken(), HttpStatus.SC_NO_CONTENT);
}
}
/**
* ユーザデータ$link登録のテスト_uriに後ろ括弧がない場合400エラーとなること.
*/
@SuppressWarnings("unchecked")
@Test
public final void ユーザデータ$link登録のテスト_uriに後ろ括弧がない場合400エラーとなること() {
// リクエストボディを設定
String userDataId = "userdata001";
JSONObject body = new JSONObject();
body.put("__id", userDataId);
String targetEntityType = "Product";
// 前準備
try {
// ユーザデータ作成
createUserData(body, HttpStatus.SC_CREATED, cellName,
boxName, colName, "Category");
createUserData(body, HttpStatus.SC_CREATED, cellName, boxName, colName, "Product");
String targetUri = UrlUtils.cellRoot(cellName) + boxName + "/"
+ colName + "/" + targetEntityType + "('userdata001'";
// $links登録(リクエストボディuriの丸かっこが前のみ)
Http.request("link-userdata-userdata.txt")
.with("cellPath", cellName)
.with("boxPath", boxName)
.with("colPath", colName)
.with("srcPath", "Category('userdata001')")
.with("trgPath", targetEntityType)
.with("token", DcCoreConfig.getMasterToken())
.with("trgUserdataUrl", targetUri)
.returns()
.statusCode(HttpStatus.SC_BAD_REQUEST)
.debug();
} finally {
// ユーザデータの削除
deleteUserData(userDataId);
deleteUserData(cellName, boxName, colName, targetEntityType,
userDataId, DcCoreConfig.getMasterToken(), HttpStatus.SC_NO_CONTENT);
}
}
/**
* ユーザデータの$link更新で400エラーになること.
*/
@SuppressWarnings("unchecked")
@Test
public final void ユーザデータの$link更新で400エラーになること() {
entityTypeName = "entity1";
navPropName = "entity2";
String userDataId = "et1Userdata";
String linkUserDataId = "et2Userdata";
JSONObject body = new JSONObject();
body.put("__id", userDataId);
JSONObject linkBody = new JSONObject();
linkBody.put("__id", linkUserDataId);
String linkPath = Setup.TEST_BOX1 + "/" + Setup.TEST_ODATA + "/"
+ entityTypeName + "\\('" + userDataId + "'\\)" + "/\\$links/_" + navPropName;
String targetUri = UrlUtils.cellRoot(Setup.TEST_CELL1) + Setup.TEST_BOX1 + "/"
+ Setup.TEST_ODATA + "/" + navPropName + "('" + linkUserDataId + "')";
try {
// 128文字のエンティティタイプを作成
EntityTypeUtils.create(Setup.TEST_CELL1, DcCoreConfig.getMasterToken(),
Setup.TEST_ODATA, entityTypeName, HttpStatus.SC_CREATED);
EntityTypeUtils.create(Setup.TEST_CELL1, DcCoreConfig.getMasterToken(),
Setup.TEST_ODATA, navPropName, HttpStatus.SC_CREATED);
// AssociationEndを作成
AssociationEndUtils.create(DcCoreConfig.getMasterToken(), "*", Setup.TEST_CELL1,
Setup.TEST_BOX1, Setup.TEST_ODATA, HttpStatus.SC_CREATED,
"AssociationEnd", entityTypeName);
AssociationEndUtils.create(DcCoreConfig.getMasterToken(), "*", Setup.TEST_CELL1,
Setup.TEST_BOX1, Setup.TEST_ODATA, HttpStatus.SC_CREATED,
"LinkAssociationEnd", navPropName);
// AssociationEndを関連付け
AssociationEndUtils.createLink(AbstractCase.MASTER_TOKEN_NAME,
Setup.TEST_CELL1,
Setup.TEST_BOX1,
Setup.TEST_ODATA,
entityTypeName,
navPropName,
"AssociationEnd",
"LinkAssociationEnd", HttpStatus.SC_NO_CONTENT);
// ユーザーデータを作成
createUserData(body, HttpStatus.SC_CREATED, Setup.TEST_CELL1,
Setup.TEST_BOX1, Setup.TEST_ODATA, entityTypeName);
createUserData(linkBody, HttpStatus.SC_CREATED, Setup.TEST_CELL1,
Setup.TEST_BOX1, Setup.TEST_ODATA, navPropName);
// IdありRoleへの$link更新
Http.request("link-update-with-body.txt")
.with("cellPath", Setup.TEST_CELL1)
.with("linkPath", linkPath)
.with("token", AbstractCase.MASTER_TOKEN_NAME)
.with("body", "\\{\\\"uri\\\":\\\"" + targetUri + "\\\"")
.returns()
.statusCode(HttpStatus.SC_BAD_REQUEST);
} finally {
// ユーザーデータLinkを削除
// deleteUserDataLinks(userDataId, linkUserDataId);
// ユーザーデータを削除
deleteUserData(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
entityTypeName, userDataId, DcCoreConfig.getMasterToken(), HttpStatus.SC_NO_CONTENT);
deleteUserData(Setup.TEST_CELL1, Setup.TEST_BOX1, Setup.TEST_ODATA,
navPropName, linkUserDataId, DcCoreConfig.getMasterToken(), HttpStatus.SC_NO_CONTENT);
// AssociationEndLinkを削除
AssociationEndUtils
.deleteLink(Setup.TEST_CELL1, Setup.TEST_ODATA,
Setup.TEST_BOX1, "Name='AssociationEnd',_EntityType.Name='" + entityTypeName + "'",
"Name='LinkAssociationEnd',_EntityType.Name='" + navPropName + "'",
HttpStatus.SC_NO_CONTENT);
// AssociationEndを削除
AssociationEndUtils.delete(AbstractCase.MASTER_TOKEN_NAME, Setup.TEST_CELL1,
Setup.TEST_ODATA, entityTypeName, Setup.TEST_BOX1, "AssociationEnd", HttpStatus.SC_NO_CONTENT);
AssociationEndUtils.delete(AbstractCase.MASTER_TOKEN_NAME, Setup.TEST_CELL1,
Setup.TEST_ODATA, navPropName, Setup.TEST_BOX1, "LinkAssociationEnd", HttpStatus.SC_NO_CONTENT);
// エンティティタイプを削除
EntityTypeUtils.delete(Setup.TEST_ODATA, DcCoreConfig.getMasterToken(),
"application/json", entityTypeName, Setup.TEST_CELL1, -1);
EntityTypeUtils.delete(Setup.TEST_ODATA, DcCoreConfig.getMasterToken(),
"application/json", navPropName, Setup.TEST_CELL1, -1);
}
}
}