/**
* personium.io
* Copyright 2014 FUJITSU LIMITED
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.fujitsu.dc.test.jersey.cell;
import static org.junit.Assert.assertEquals;
import java.util.Calendar;
import javax.ws.rs.HttpMethod;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpStatus;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import com.fujitsu.dc.core.model.Cell;
import com.fujitsu.dc.test.categories.Integration;
import com.fujitsu.dc.test.categories.Regression;
import com.fujitsu.dc.test.categories.Unit;
import com.fujitsu.dc.test.jersey.DcRequest;
import com.fujitsu.dc.test.jersey.DcResponse;
import com.fujitsu.dc.test.jersey.ODataCommon;
import com.fujitsu.dc.test.unit.core.UrlUtils;
/**
* Cellの作成のIT.
*/
@Category({Unit.class, Integration.class, Regression.class })
public class CreateTest extends ODataCommon {
private static String cellNameLower = "cellname";
private static String cellNameUpper = "CELLNAME";
/**
* コンストラクタ. テスト対象のパッケージをsuperに渡す必要がある
*/
public CreateTest() {
super("com.fujitsu.dc.core.rs");
}
/**
* すべてのテストで必ず1度実行される処理.
*/
@BeforeClass
public static void beforeClass() {
// DBサーバーを共有した際、同時にテストを行うと、同じCell名では409となってしまうため、一意にするため、Cell名に時間をセット
cellNameLower = cellNameLower + Long.toString(Calendar.getInstance().getTimeInMillis());
cellNameUpper = cellNameUpper + Long.toString(Calendar.getInstance().getTimeInMillis());
}
/**
* すべてのテスト毎に1度実行される処理.
*/
@Before
public void before() {
super.setResponse(null);
}
/**
* すべてのテスト毎に1度実行される処理.
*/
@After
public void after() {
super.cellDelete();
}
/**
* Cellの作成の正常系のテスト.
*/
@Test
public final void Cellの作成の正常系のテスト() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellNormal(req, cellNameLower);
}
/**
* 登録したCellを削除後すぐに再登録するテスト.
*/
@Test
public final void 登録したCellを削除後すぐに再登録するテスト() {
// Cellを作成
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
DcResponse res = cellNormalResponse(req, cellNameLower);
// Cell削除
cellDelete(res);
// Cellを再作成
cellNormal(req, cellNameLower);
}
/**
* Cellの作成のリクエストボディが無いパターンのテスト.
*/
@Test
public final void Cellの作成のリクエストボディが無いパターンのテスト() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorEmptyBody(req);
}
/**
* Cellの作成のリクエストボディに不正なフィールド名を指定したパターンのテスト.
*/
@Test
public final void Cellの作成のリクエストボディに不正なフィールド名を指定したパターンのテスト() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorInvalidField(req, cellNameLower);
}
/**
* Cellの作成のNameが空のパターンのテスト.
*/
@Test
public final void Cellの作成のNameが空のパターンのテスト() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorName0(req);
}
/**
* Cellの作成のNameが1文字のパターンのテスト.
*/
@Test
public final void Cellの作成のNameが1文字のパターンのテスト() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellName1(req);
}
/**
* Cellの作成のNameが128文字のパターンのテスト.
*/
@Test
public final void Cellの作成のNameが128文字のパターンのテスト() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellName128(req);
}
/**
* Cellの作成のNameが129文字のパターンのテスト.
*/
@Test
public final void Cellの作成のNameが129文字のパターンのテスト() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorName129(req);
}
/**
* Cellの作成のNameが半角英数と"-","_"以外のパターンのテスト.
*/
@Test
public final void Cellの作成のNameが不正な値のパターンのテスト() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorNameCharacter(req);
}
/**
* Cellの作成のNameが[__]の場合に400が返却されること.
*/
@Test
public final void Cellの作成のNameが__の場合に400が返却されること() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorNameUnderbaer(req);
}
/**
* Cellの作成のNameが[__ctl]の場合に400が返却されること.
*/
@Test
public final void Cellの作成のNameが__ctlの場合に400が返却されること() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorNameUnderbaerCtl(req);
}
/**
* Cell作成のリクエストボディに管理情報[__published]が指定された場合に400が返却されること.
*/
@Test
public final void Cell作成のリクエストボディに管理情報__publishedが指定された場合に400が返却されること() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorBodyDateCtl(req, PUBLISHED);
}
/**
* Cell作成のリクエストボディに管理情報[__updated]が指定された場合に400が返却されること.
*/
@Test
public final void Cell作成のリクエストボディに管理情報__updatedが指定された場合に400が返却されること() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorBodyDateCtl(req, UPDATED);
}
/**
* Cell作成のリクエストボディに管理情報[__metadata]が指定された場合に400が返却されること.
*/
@Test
public final void Cell作成のリクエストボディに管理情報__metadataが指定された場合に400が返却されること() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorBodyMetadataCtl(req, METADATA);
}
/**
* Cellの作成のJSONフォーマットエラーのテスト.
*/
@Test
public final void Cellの作成のJSONフォーマットエラーのテスト() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorInvalidJson(req, cellNameLower);
}
/**
* Cellの作成のXMLフォーマットエラーのテスト.
*/
@Test
public final void Cellの作成のXMLフォーマットエラーのテスト() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorInvalidXml(req, cellNameLower);
}
/**
* Cellの作成の認証ヘッダ無しのテスト.
*/
@Test
public final void Cellの作成の認証ヘッダ無しのテスト() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorAuthNone(req);
}
/**
* Cellの作成の不正な認証ヘッダのテスト.
*/
@Test
public final void Cellの作成の不正な認証ヘッダのテスト() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorAuthInvalid(req);
}
/**
* Cellの作成の不正なメソッドのテスト.
*/
@Test
public final void Cellの作成の不正なメソッドのテスト() {
DcRequest req = DcRequest.delete(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellErrorInvalidMethod(req, cellNameLower);
}
/**
* Cellの作成で小文字のCell名を登録した後に同じ小文字のCell名を登録した場合、409となることを確認するテスト.
*/
@Test
public final void Cellの作成で小文字のCell名を登録した後に同じ小文字のCell名を登録した場合_409となることを確認() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellConflict(req, cellNameLower);
}
/**
* Cellの作成で大文字のCell名を登録した後に同じ大文字のCell名を登録した場合、409となることを確認するテスト.
*/
@Test
public final void Cellの作成で大文字のCell名を登録した後に同じ大文字のCell名を登録した場合_409となることを確認() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellConflict(req, cellNameUpper);
}
/**
* Cellの作成で小文字のCell名を登録した後に大文字で同じCell名を登録した場合、201となることを確認するテスト.
*/
@Test
public final void Cellの作成で小文字のCell名を登録した後に大文字で同じCell名を登録した場合_201となることを確認() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellCreateResCheck(req, HttpMethod.POST, UrlUtils.unitCtl(Cell.EDM_TYPE_NAME), cellNameLower, cellNameUpper);
}
/**
* Cellの作成で大文字のCell名を登録した後に小文字で同じCell名を登録した場合、201となることを確認するテスト.
*/
@Test
public final void Cellの作成で大文字のCell名を登録した後に小文字で同じCell名を登録した場合_201となることを確認() {
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellCreateResCheck(req, HttpMethod.POST, UrlUtils.unitCtl(Cell.EDM_TYPE_NAME), cellNameUpper, cellNameLower);
}
/**
* 大文字Cell名で作成したCellに対してCellレベルAPIが利用できること.
*/
@Test
public final void 大文字Cell名で作成したCellに対してCellレベルAPIが利用できること() {
// 大文字Cell名のCellを作成
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellNormal(req, cellNameUpper);
// 大文字Cell名を指定してBoxの一覧取得を実行
req = DcRequest.get(UrlUtils.cellCtl(cellNameUpper, "Box"));
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN);
DcResponse response = request(req);
// 200になることを確認
assertEquals(HttpStatus.SC_OK, response.getStatusCode());
}
/**
* 小文字Cell名で作成したCellに対してCellレベルAPIが利用できること.
*/
@Test
public final void 小文字Cell名で作成したCellに対してCellレベルAPIが利用できること() {
// 小文字Cell名のCellを作成
DcRequest req = DcRequest.post(UrlUtils.unitCtl(Cell.EDM_TYPE_NAME));
cellNormal(req, cellNameLower);
// 小文字Cell名を指定してBoxの一覧取得を実行
req = DcRequest.get(UrlUtils.cellCtl(cellNameLower, "Box"));
req.header(HttpHeaders.AUTHORIZATION, BEARER_MASTER_TOKEN);
DcResponse response = request(req);
// 200になることを確認
assertEquals(HttpStatus.SC_OK, response.getStatusCode());
}
}