/* * Copyright 2012 Kazumune Katagiri. (http://d.hatena.ne.jp/nemuzuka) * * 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 jp.co.nemuzuka.dao; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import jp.co.nemuzuka.core.entity.GlobalTransaction; import jp.co.nemuzuka.core.entity.TransactionEntity; import jp.co.nemuzuka.entity.TicketMstEntity.TicketMst; import jp.co.nemuzuka.model.MemberModel; import jp.co.nemuzuka.model.MilestoneModel; import jp.co.nemuzuka.model.ProjectModel; import jp.co.nemuzuka.model.TicketModel; import jp.co.nemuzuka.tester.AppEngineTestCase4HRD; import jp.co.nemuzuka.utils.ConvertUtils; import jp.co.nemuzuka.utils.DateTimeUtils; import org.junit.Test; import org.slim3.datastore.Datastore; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.Text; /** * TicketDaoのテストクラス. * @author kazumune */ public class TicketDaoTest extends AppEngineTestCase4HRD { TicketDao ticketDao = TicketDao.getInstance(); ProjectDao projectDao = ProjectDao.getInstance(); List<Key> ticketKeyList = new ArrayList<Key>(); List<Key> projectKeyList = new ArrayList<Key>(); //親子関係のTicket Key parentKey = null; Key childKey = null; List<Key> grandChildKey = new ArrayList<Key>(); /** * getChildListのテスト. * @throws Exception */ @Test public void testGetChildList() throws Exception { createTestData(); List<Key> actual = ticketDao.getChildList(parentKey, projectKeyList.get(0)); assertThat(actual.size(), is(1)); assertThat(actual.get(0), is(childKey)); actual = ticketDao.getChildList(childKey, projectKeyList.get(0)); assertThat(actual.size(), is(2)); assertThat(actual.get(0), is(grandChildKey.get(0))); assertThat(actual.get(1), is(grandChildKey.get(1))); actual = ticketDao.getChildList(grandChildKey.get(0), projectKeyList.get(0)); assertThat(actual.size(), is(0)); } /** * getListのテスト. * @throws Exception 例外 */ @Test public void testGetList() throws Exception { createTestData(); String projectKeyString = Datastore.keyToString(projectKeyList.get(0)); String[] openStatus = new String[]{"未対応","対応済み"}; //ステータスの検索条件 TicketDao.Param param = new TicketDao.Param(); param.status = new String[]{TicketMst.NO_FINISH}; param.projectKeyString = projectKeyString; param.openStatus = openStatus; List<TicketModel> actualList = ticketDao.getList(param); assertThat(actualList.size(), is(4)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(0))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(1))); assertThat(actualList.get(2).getKey(), is(ticketKeyList.get(2))); assertThat(actualList.get(3).getKey(), is(ticketKeyList.get(5))); param = new TicketDao.Param(); param.status = new String[]{"対応済み"}; param.projectKeyString = projectKeyString; param.openStatus = openStatus; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(1)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(5))); //件名の検索実行 param = new TicketDao.Param(); param.title = "Like用件名"; param.status = null; param.projectKeyString = projectKeyString; param.openStatus = openStatus; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(2)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(0))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(2))); String[] status = new String[0]; //優先度の検索実行 param = new TicketDao.Param(); param.priority = "高"; param.status = status; param.projectKeyString = projectKeyString; param.openStatus = openStatus; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(2)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(0))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(3))); //種別の検索実行 param = new TicketDao.Param(); param.kind = "種別1"; param.status = status; param.projectKeyString = projectKeyString; param.openStatus = openStatus; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(2)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(2))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(4))); //カテゴリの検索実行 param = new TicketDao.Param(); param.category = "カテゴリ9"; param.status = status; param.projectKeyString = projectKeyString; param.openStatus = openStatus; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(2)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(0))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(1))); //バージョンの検索実行 param = new TicketDao.Param(); param.version = "1.0"; param.status = status; param.projectKeyString = projectKeyString; param.openStatus = openStatus; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(2)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(2))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(3))); //マイルストーンの検索実行 param = new TicketDao.Param(); param.milestone = Datastore.keyToString(Datastore.createKey(MilestoneModel.class, 1L)); param.status = status; param.projectKeyString = projectKeyString; param.openStatus = openStatus; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(2)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(1))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(2))); //担当者の検索実行 param = new TicketDao.Param(); param.targetMember = Datastore.keyToString(Datastore.createKey(MemberModel.class, "hige@hoge.hage")); param.status = status; param.projectKeyString = projectKeyString; param.openStatus = openStatus; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(2)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(2))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(3))); SimpleDateFormat sdf = DateTimeUtils.createSdf("yyyyMMdd"); //期限日From指定 param = new TicketDao.Param(); param.fromPeriod = ConvertUtils.toDate("20120106", sdf); param.status = status; param.projectKeyString = projectKeyString; param.openStatus = openStatus; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(1)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(2))); param = new TicketDao.Param(); param.fromPeriod = ConvertUtils.toDate("20120105", sdf); param.status = status; param.projectKeyString = projectKeyString; param.openStatus = openStatus; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(3)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(2))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(4))); assertThat(actualList.get(2).getKey(), is(ticketKeyList.get(5))); //期間To指定 param = new TicketDao.Param(); param.toPeriod = ConvertUtils.toDate("20120105", sdf); param.status = status; param.projectKeyString = projectKeyString; param.openStatus = openStatus; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(2)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(4))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(5))); //期間From〜To指定 param = new TicketDao.Param(); param.fromPeriod = ConvertUtils.toDate("20120106", sdf); param.toPeriod = ConvertUtils.toDate("20120106", sdf); param.status = status; param.projectKeyString = projectKeyString; param.openStatus = openStatus; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(1)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(2))); //件数指定 param = new TicketDao.Param(); param.kind = "種別1"; param.status = status; param.projectKeyString = projectKeyString; param.openStatus = openStatus; param.limit = 1; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(1)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(2))); param = new TicketDao.Param(); param.toPeriod = ConvertUtils.toDate("20120105", sdf); param.status = status; param.projectKeyString = projectKeyString; param.openStatus = openStatus; param.limit = 10; actualList = ticketDao.getList(param); assertThat(actualList.size(), is(2)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(4))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(5))); } /** * getDashbordListのテスト * @throws Exception */ @Test public void testGetDashbordList() throws Exception { createTestData(); String projectKeyString = Datastore.keyToString(projectKeyList.get(0)); String[] openStatus = new String[]{"未対応","完了"}; String targetMemberKeyString = Datastore.keyToString( Datastore.createKey(MemberModel.class, "hige@hoge.hage")); List<TicketModel> actualList = ticketDao.getDashbordList(10, targetMemberKeyString, projectKeyString, openStatus); assertThat(actualList.size(), is(2)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(2))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(3))); targetMemberKeyString = Datastore.keyToString( Datastore.createKey(MemberModel.class, "hige@hoge.hage")); actualList = ticketDao.getDashbordList(1, targetMemberKeyString, projectKeyString, openStatus); assertThat(actualList.size(), is(1)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(2))); targetMemberKeyString = Datastore.keyToString( Datastore.createKey(MemberModel.class, "hige@hoge.hage")); actualList = ticketDao.getDashbordList(2, targetMemberKeyString, projectKeyString, openStatus); assertThat(actualList.size(), is(2)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(2))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(3))); targetMemberKeyString = Datastore.keyToString( Datastore.createKey(MemberModel.class, "hige@hoge.hage")); projectKeyString = Datastore.keyToString(projectKeyList.get(1)); actualList = ticketDao.getDashbordList(3, targetMemberKeyString, projectKeyString, openStatus); assertThat(actualList.size(), is(2)); assertThat(actualList.get(0).getKey(), is(ticketKeyList.get(8))); assertThat(actualList.get(1).getKey(), is(ticketKeyList.get(9))); } /** * テストデータ作成. * @throws Exception 例外 */ private void createTestData() throws Exception { ProjectModel projectModel = null; for(int i = 0; i < 2; i++) { projectModel = new ProjectModel(); projectModel.setProjectName("プロジェクト" + i); projectModel.setProjectId("id" + i); projectDao.put(projectModel); projectKeyList.add(projectModel.getKey()); GlobalTransaction.transaction.get().commit(); GlobalTransaction.transaction.get().begin(); } TicketModel model = null; SimpleDateFormat sdf = DateTimeUtils.createSdf("yyyyMMdd"); for(int i = 0; i < 10; i++) { model = new TicketModel(); Key projectKey = null; if(0 <= i && i <= 5) { projectKey = projectKeyList.get(0); } else { projectKey = projectKeyList.get(1); } model.setProjectKey(projectKey); String status = null; if(0 <= i && i <= 2) { status = "未対応"; } else if(5 <= i && i <= 7) { status = "対応済み"; } else { status = "完了"; } model.setStatus(status); Date period = null; if(4 <= i && i <= 6 ) { period = sdf.parse("20120105"); } else if(i == 2 || (7 <= i && i <= 8)) { period = sdf.parse("20120106"); } model.setPeriod(period); Key memberKey = null; if(i == 2 || i == 3 || i == 8 || i == 9) { memberKey = Datastore.createKey(MemberModel.class, "hige@hoge.hage"); } model.setTargetMemberKey(memberKey); if(i == 0 || i == 2) { model.setTitle("Like用件名" + i); } else { model.setTitle("件名1" + i); } model.setContent(new Text("詳細" + i)); model.setEndCondition(new Text("終了条件" + i)); String priority = ""; if(i == 0 || i == 3) { priority = "高"; } model.setPriority(priority); String targetKind = ""; if(i == 2 || i == 4) { targetKind = "種別1"; } model.setTargetKind(targetKind); String category = ""; if(i == 0 || i == 1) { category = "カテゴリ9"; } model.setCategory(category); Key milestoneKey = null; if(i == 1 || i == 2) { milestoneKey = Datastore.createKey(MilestoneModel.class, 1L); } model.setMilestone(milestoneKey); String targetVersion = ""; if(i==2 || i==3) { targetVersion = "1.0"; } model.setTargetVersion(targetVersion); ticketDao.put(model); ticketKeyList.add(model.getKey()); GlobalTransaction.transaction.get().commit(); GlobalTransaction.transaction.get().begin(); } TicketModel parentModel = new TicketModel(); parentModel.setProjectKey(projectKeyList.get(0)); parentModel.setTitle("親Ticket"); ticketDao.put(parentModel); parentKey = parentModel.getKey(); TicketModel childModel = new TicketModel(); childModel.setProjectKey(projectKeyList.get(0)); childModel.setTitle("子Ticket"); childModel.setParentTicketKey(parentKey); ticketDao.put(childModel); childKey = childModel.getKey(); TicketModel grandChildModel = new TicketModel(); grandChildModel.setProjectKey(projectKeyList.get(0)); grandChildModel.setTitle("孫Ticket1"); grandChildModel.setParentTicketKey(childKey); ticketDao.put(grandChildModel); grandChildKey.add(grandChildModel.getKey()); grandChildModel = new TicketModel(); grandChildModel.setProjectKey(projectKeyList.get(0)); grandChildModel.setTitle("孫Ticket2"); grandChildModel.setParentTicketKey(childKey); ticketDao.put(grandChildModel); grandChildKey.add(grandChildModel.getKey()); GlobalTransaction.transaction.get().commit(); GlobalTransaction.transaction.get().begin(); return; } /* (非 Javadoc) * @see org.slim3.tester.AppEngineTestCase#setUp() */ @Override public void setUp() throws Exception { super.setUp(); TransactionEntity transactionEntity = new TransactionEntity(); GlobalTransaction.transaction.set(transactionEntity); } }