/** * 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.unit.core.model.impl.es.odata; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.HashMap; import java.util.Map; import org.junit.Test; import org.junit.experimental.categories.Category; import org.odata4j.core.OEntityKey; import org.odata4j.edm.EdmEntitySet; import com.fujitsu.dc.core.DcCoreException; import com.fujitsu.dc.core.model.Cell; import com.fujitsu.dc.core.model.ctl.ReceivedMessagePort; import com.fujitsu.dc.core.model.impl.es.CellEsImpl; import com.fujitsu.dc.core.model.impl.es.doc.EntitySetDocHandler; import com.fujitsu.dc.core.model.impl.es.doc.OEntityDocHandler; import com.fujitsu.dc.core.model.impl.es.odata.CellCtlODataProducer; import com.fujitsu.dc.test.categories.Unit; /** * UnitCtlODataProducerユニットテストクラス. */ @Category({ Unit.class }) public class CellCtlODataProducerTest extends CellCtlODataProducer { static Cell cell = new CellEsImpl(); /** * コンストラクタ. */ public CellCtlODataProducerTest() { super(cell); } /** * メッセージのバリデートにて_TYPE_MESSAGEかつSTATUS_READの場合にバリデートエラーにならないこと. */ @Test public void メッセージのバリデートにて_TYPE_MESSAGEかつSTATUS_READの場合にバリデートエラーにならないこと() { assertTrue(isValidMessageStatus( ReceivedMessagePort.TYPE_MESSAGE, ReceivedMessagePort.STATUS_READ)); } /** * メッセージのバリデートにて_TYPE_MESSAGEかつSTATUS_UNREADの場合にバリデートエラーにならないこと. */ @Test public void メッセージのバリデートにて_TYPE_MESSAGEかつSTATUS_UNREADの場合にバリデートエラーにならないこと() { assertTrue(isValidMessageStatus( ReceivedMessagePort.TYPE_MESSAGE, ReceivedMessagePort.STATUS_UNREAD)); } /** * メッセージのバリデートにて_TYPE_MESSAGEかつSTATUS_REJECTEDの場合にバリデートエラーになること. */ @Test public void メッセージのバリデートにて_TYPE_MESSAGEかつSTATUS_REJECTEDの場合にバリデートエラーになること() { assertFalse(isValidMessageStatus( ReceivedMessagePort.TYPE_MESSAGE, ReceivedMessagePort.STATUS_REJECTED)); } /** * メッセージのバリデートにて_TYPE_REQ_RELATION_BUILDかつSTATUS_UNREADの場合にバリデートエラーにならないこと. */ @Test public void メッセージのバリデートにて_REQ_RELATION_BUILDかつSTATUS_UNREADの場合にバリデートエラーにならないこと() { assertTrue(isValidMessageStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BUILD, ReceivedMessagePort.STATUS_UNREAD)); } /** * 関係承認のバリデートにて_TYPE_MESSAGEかつSTATUS_APPROVEDの場合にバリデートエラーにならないこと. */ @Test public void 関係承認のバリデートにて_TYPE_MESSAGEかつSTATUS_APPROVEDの場合にバリデートエラーにならないこと() { assertTrue(isValidRelationStatus( ReceivedMessagePort.TYPE_MESSAGE, ReceivedMessagePort.STATUS_APPROVED)); } /** * 関係承認のバリデートにて_TYPE_REQ_RELATION_BREAKかつSTATUS_NONEの場合にバリデートエラーになること. */ @Test public void 関係承認のバリデートにて_TYPE_REQ_RELATION_BREAKかつSTATUS_NONEの場合にバリデートエラーになること() { assertFalse(isValidRelationStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BREAK, ReceivedMessagePort.STATUS_NONE)); } /** * 関係承認のバリデートにて_TYPE_REQ_RELATION_BREAKかつSTATUS_APPROVEDの場合にバリデートエラーにならないこと. */ @Test public void 関係承認のバリデートにて_TYPE_REQ_RELATION_BREAKかつSTATUS_APPROVEDの場合にバリデートエラーにならないこと() { assertTrue(isValidRelationStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BREAK, ReceivedMessagePort.STATUS_APPROVED)); } /** * 関係承認のバリデートにて_TYPE_REQ_RELATION_BREAKかつSTATUS_REJECTEDの場合にバリデートエラーにならないこと. */ @Test public void 関係承認のバリデートにて_TYPE_REQ_RELATION_BREAKかつSTATUS_REJECTEDの場合にバリデートエラーにならないこと() { assertTrue(isValidRelationStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BREAK, ReceivedMessagePort.STATUS_REJECTED)); } /** * 関係承認のバリデートにて_TYPE_REQ_RELATION_BREAKかつSTATUS_READの場合にバリデートエラーになること. */ @Test public void 関係承認のバリデートにて_TYPE_REQ_RELATION_BREAKかつSTATUS_READの場合にバリデートエラーになること() { assertFalse(isValidRelationStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BREAK, ReceivedMessagePort.STATUS_READ)); } /** * 関係承認のバリデートにて_TYPE_REQ_RELATION_BREAKかつSTATUS_UNREADの場合にバリデートエラーになること. */ @Test public void 関係承認のバリデートにて_TYPE_REQ_RELATION_BREAKかつSTATUS_UNREADの場合にバリデートエラーになること() { assertFalse(isValidRelationStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BREAK, ReceivedMessagePort.STATUS_UNREAD)); } /** * 関係承認のバリデートにて_TYPE_REQ_RELATION_BUILDかつSTATUS_NONEの場合にバリデートエラーになること. */ @Test public void 関係承認のバリデートにて_TYPE_REQ_RELATION_BUILDかつSTATUS_NONEの場合にバリデートエラーになること() { assertFalse(isValidRelationStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BUILD, ReceivedMessagePort.STATUS_NONE)); } /** * 関係承認のバリデートにて_TYPE_REQ_RELATION_BUILDかつSTATUS_APPROVEDの場合にバリデートエラーにならないこと. */ @Test public void 関係承認のバリデートにて_TYPE_REQ_RELATION_BUILDかつSTATUS_APPROVEDの場合にバリデートエラーにならないこと() { assertTrue(isValidRelationStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BUILD, ReceivedMessagePort.STATUS_APPROVED)); } /** * 関係承認のバリデートにて_TYPE_REQ_RELATION_BUILDかつSTATUS_REJECTEDの場合にバリデートエラーにならないこと. */ @Test public void 関係承認のバリデートにて_TYPE_REQ_RELATION_BUILDかつSTATUS_REJECTEDの場合にバリデートエラーにならないこと() { assertTrue(isValidRelationStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BUILD, ReceivedMessagePort.STATUS_REJECTED)); } /** * 関係承認のバリデートにて_TYPE_REQ_RELATION_BUILDかつSTATUS_READの場合にバリデートエラーになること. */ @Test public void 関係承認のバリデートにて_TYPE_REQ_RELATION_BUILDかつSTATUS_READの場合にバリデートエラーになること() { assertFalse(isValidRelationStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BUILD, ReceivedMessagePort.STATUS_READ)); } /** * 関係承認のバリデートにて_TYPE_REQ_RELATION_BUILDかつSTATUS_UNREADの場合にバリデートエラーになること. */ @Test public void 関係承認のバリデートにて_TYPE_REQ_RELATION_BUILDかつSTATUS_UNREADの場合にバリデートエラーになること() { assertFalse(isValidRelationStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BUILD, ReceivedMessagePort.STATUS_UNREAD)); } /** * 関係承認のバリデートにて_TYPE_MESSAGEかつSTATUS_REJECTEDの場合にバリデートエラーにならないこと. */ @Test public void 関係承認のバリデートにて_TYPE_MESSAGEかつSTATUS_REJECTEDの場合にバリデートエラーにならないこと() { assertTrue(isValidRelationStatus( ReceivedMessagePort.TYPE_MESSAGE, ReceivedMessagePort.STATUS_REJECTED)); } /** * 現状ののバリデートにて_TYPE_REQ_RELATION_BUILDの時に現ステータスがSTATUS_NONEの場合にバリデートエラーにならないこと. */ @Test public void REQ_RELATION_BUILDの時に現ステータスがSTATUS_NONEの場合にバリデートエラーにならないこと() { assertTrue(isValidCurrentStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BUILD, ReceivedMessagePort.STATUS_NONE)); } /** * REQ_RELATION_BREAKの時に現ステータスがSTATUS_NONEの場合にバリデートエラーにならないこと. */ @Test public void REQ_RELATION_BREAKの時に現ステータスがSTATUS_NONEの場合にバリデートエラーにならないこと() { assertTrue(isValidCurrentStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BREAK, ReceivedMessagePort.STATUS_NONE)); } /** * REQ_RELATION_BUILDの時に現ステータスがSTATUS_APPROVEDの場合にバリデートエラーになること. */ @Test public void REQ_RELATION_BUILDの時に現ステータスがSTATUS_APPROVEDの場合にバリデートエラーになること() { assertFalse(isValidCurrentStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BUILD, ReceivedMessagePort.STATUS_APPROVED)); } /** * REQ_RELATION_BUILDの時に現ステータスがSTATUS_REJECTEDの場合にバリデートエラーになること. */ @Test public void REQ_RELATION_BUILDの時に現ステータスがSTATUS_REJECTEDの場合にバリデートエラーになること() { assertFalse(isValidCurrentStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BUILD, ReceivedMessagePort.STATUS_REJECTED)); } /** * REQ_RELATION_BREAKの時に現ステータスがSTATUS_APPROVEDの場合にバリデートエラーになること. */ @Test public void REQ_RELATION_BREAKの時に現ステータスがSTATUS_APPROVEDの場合にバリデートエラーになること() { assertFalse(isValidCurrentStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BREAK, ReceivedMessagePort.STATUS_APPROVED)); } /** * REQ_RELATION_BREAKの時に現ステータスがSTATUS_REJECTEDの場合にバリデートエラーになること. */ @Test public void REQ_RELATION_BREAKの時に現ステータスがSTATUS_REJECTEDの場合にバリデートエラーになること() { assertFalse(isValidCurrentStatus( ReceivedMessagePort.TYPE_REQ_RELATION_BREAK, ReceivedMessagePort.STATUS_REJECTED)); } /** * リレーションクラスURLからリレーション名を取得できること. */ @Test public void リレーションクラスURLからリレーション名を取得できること() { String relationName = getRelationFromRelationClassUrl( "https://example.com/test0110/__relation/box/+:me"); assertEquals("+:me", relationName); } /** * リレーションクラスURLのフォーマットが不正な場合はnullが取得できること. */ @Test public void リレーションクラスURLのフォーマットが不正な場合はnullが取得できること() { String relationName = getRelationFromRelationClassUrl( "https://example.com/test0110/__relation/box/"); assertEquals(null, relationName); } /** * elasticsearchに接続しないためのCellCtlODataProducerMockクラス. */ public static class CellCtlODataProducerMock extends CellCtlODataProducer { static Cell cell = new CellEsImpl(); private boolean getRelationNullFlag = false; private boolean getExtCellNullFlag = false; /** * コンストラクタ. */ public CellCtlODataProducerMock() { super(cell); } /** * getRelationNullFlagのセッター. * @param getRelationNullFlag Nullで返却するか否か */ public void setGetRelationNullFlag(boolean getRelationNullFlag) { this.getRelationNullFlag = getRelationNullFlag; } /** * getExtCellNullFlagのセッター. * @param getExtCellNullFlag Nullで返却するか否か */ public void setGetExtCellNullFlag(boolean getExtCellNullFlag) { this.getExtCellNullFlag = getExtCellNullFlag; } @Override protected EntitySetDocHandler retrieveWithKey(EdmEntitySet entitySet, OEntityKey oEntityKey) { return null; } @Override protected EntitySetDocHandler getRelation(String key) { if (getRelationNullFlag) { return null; } else { return new OEntityDocHandler(); } } @Override protected EntitySetDocHandler getExtCell(String key) { if (getExtCellNullFlag) { return null; } else { return new OEntityDocHandler(); } } /** * retrieveWithKeyの結果Nullを返すMock. * @param key 存在確認対象のExtCell * @return nullを返却 */ public EntitySetDocHandler getExtCellOfNull(String key) { return getExtCell(key); } /** * deleteLinkEntityの結果falseを返すMock. * @param source リンク元エンティティ * @param target リンク先エンティティ * @return nullを返却 */ @Override protected boolean deleteLinkEntity(EntitySetDocHandler source, EntitySetDocHandler target) { return false; } /** * retrieveWithKeyの結果Nullを返すMock. * @param entitySetDocHandler メッセージのDocHandler */ public void breakRelationMock(EntitySetDocHandler entitySetDocHandler) { breakRelation(entitySetDocHandler); } } @Override protected EntitySetDocHandler retrieveWithKey(EdmEntitySet entitySet, OEntityKey oEntityKey) { return new OEntityDocHandler(); } /** * extCellの取得で存在する場合にEntitySetDocHandlerが返却されること. */ @Test public void extCellの取得で存在する場合にEntitySetDocHandlerが返却されること() { assertTrue(getExtCell("https://example.com/test0110/") != null); } /** * リレーションクラスURLのフォーマットが不正な場合はnullが取得できること. */ @Test public void extCellの存在確認でOEntityKeyのパースに失敗した場合はREQUEST_RELATION_TARGET_PARSE_ERRORが発生すること() { try { getExtCell("https://example.com/'/"); fail("DcCoreException.ReceiveMessage.REQUEST_RELATION_TARGET_PARSE_ERROR does not occurred."); } catch (DcCoreException e) { DcCoreException expected = DcCoreException.ReceiveMessage.REQUEST_RELATION_TARGET_PARSE_ERROR; assertEquals(expected.getCode(), e.getCode()); assertEquals(expected.getMessage(), e.getMessage()); } } /** * RequestRelationが不正な場合はREQUEST_RELATION_PARSE_ERRORが発生すること. */ @Test public void RequestRelationが不正な場合はREQUEST_RELATION_PARSE_ERRORが発生すること() { OEntityDocHandler docHandler = new OEntityDocHandler(); Map<String, Object> staticFields = new HashMap<String, Object>(); staticFields.put(ReceivedMessagePort.P_REQUEST_RELATION.getName(), "https://example.com/test0110/__relation/box/"); docHandler.setStaticFields(staticFields); try { breakRelation(docHandler); fail("DcCoreException.ReceiveMessage.REQUEST_RELATION_PARSE_ERROR does not occurred."); } catch (DcCoreException e) { DcCoreException expected = DcCoreException.ReceiveMessage.REQUEST_RELATION_PARSE_ERROR; assertEquals(expected.getCode(), e.getCode()); assertEquals(expected.getMessage(), e.getMessage()); } } /** * RequestRelationが不正な場合はREQUEST_RELATION_DOES_NOT_EXISTSが発生すること. */ @Test public void RequestRelationが存在しない場合はREQUEST_RELATION_DOES_NOT_EXISTSが発生すること() { OEntityDocHandler docHandler = new OEntityDocHandler(); Map<String, Object> staticFields = new HashMap<String, Object>(); staticFields.put(ReceivedMessagePort.P_REQUEST_RELATION.getName(), "https://example.com/test0110/__relation/box/+:me"); docHandler.setStaticFields(staticFields); try { CellCtlODataProducerMock mock = new CellCtlODataProducerMock(); mock.setGetRelationNullFlag(true); mock.breakRelationMock(docHandler); fail("DcCoreException.ReceiveMessage.REQUEST_RELATION_DOES_NOT_EXISTS does not occurred."); } catch (DcCoreException e) { DcCoreException expected = DcCoreException.ReceiveMessage.REQUEST_RELATION_DOES_NOT_EXISTS .params("+:me"); assertEquals(expected.getCode(), e.getCode()); assertEquals(expected.getMessage(), e.getMessage()); } } /** * RequestRelationTargetが存在しない場合はREQUEST_RELATION_TARGET_DOES_NOT_EXISTSが発生すること. */ @Test public void RequestRelationTargetが存在しない場合はREQUEST_RELATION_TARGET_DOES_NOT_EXISTSが発生すること() { OEntityDocHandler docHandler = new OEntityDocHandler(); Map<String, Object> staticFields = new HashMap<String, Object>(); staticFields.put(ReceivedMessagePort.P_REQUEST_RELATION.getName(), "https://example.com/test0110/__relation/box/+:me"); staticFields.put(ReceivedMessagePort.P_REQUEST_RELATION_TARGET.getName(), "https://example.com/test0110/"); docHandler.setStaticFields(staticFields); try { CellCtlODataProducerMock mock = new CellCtlODataProducerMock(); mock.setGetExtCellNullFlag(true); mock.breakRelationMock(docHandler); fail("DcCoreException.ReceiveMessage.REQUEST_RELATION_TARGET_DOES_NOT_EXISTS does not occurred."); } catch (DcCoreException e) { DcCoreException expected = DcCoreException.ReceiveMessage.REQUEST_RELATION_TARGET_DOES_NOT_EXISTS .params("https://example.com/test0110/"); assertEquals(expected.getCode(), e.getCode()); assertEquals(expected.getMessage(), e.getMessage()); } } /** * Link情報が存在しない場合はLINK_DOES_NOT_EXISTSが発生すること. */ @Test public void Link情報が存在しない場合はLINK_DOES_NOT_EXISTSが発生すること() { OEntityDocHandler docHandler = new OEntityDocHandler(); Map<String, Object> staticFields = new HashMap<String, Object>(); staticFields.put(ReceivedMessagePort.P_REQUEST_RELATION.getName(), "https://example.com/test0110/__relation/box/+:me"); staticFields.put(ReceivedMessagePort.P_REQUEST_RELATION_TARGET.getName(), "https://example.com/test0110/"); docHandler.setStaticFields(staticFields); try { CellCtlODataProducerMock mock = new CellCtlODataProducerMock(); mock.breakRelationMock(docHandler); fail("DcCoreException.ReceiveMessage.LINK_DOES_NOT_EXISTS does not occurred."); } catch (DcCoreException e) { DcCoreException expected = DcCoreException.ReceiveMessage.LINK_DOES_NOT_EXISTS .params("+:me", "https://example.com/test0110/"); assertEquals(expected.getCode(), e.getCode()); assertEquals(expected.getMessage(), e.getMessage()); } } }