/*
* 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.service.impl;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import jp.co.nemuzuka.common.Authority;
import jp.co.nemuzuka.common.ProjectAuthority;
import jp.co.nemuzuka.core.entity.GlobalTransaction;
import jp.co.nemuzuka.core.entity.TransactionEntity;
import jp.co.nemuzuka.dao.MemberDao;
import jp.co.nemuzuka.dao.ProjectDao;
import jp.co.nemuzuka.dao.ProjectMemberDao;
import jp.co.nemuzuka.entity.TicketMstEntity.TicketMst;
import jp.co.nemuzuka.form.CategoryForm;
import jp.co.nemuzuka.form.KindForm;
import jp.co.nemuzuka.form.MilestoneForm;
import jp.co.nemuzuka.form.PriorityForm;
import jp.co.nemuzuka.form.StatusForm;
import jp.co.nemuzuka.form.VersionForm;
import jp.co.nemuzuka.model.MemberModel;
import jp.co.nemuzuka.model.ProjectMemberModel;
import jp.co.nemuzuka.model.ProjectModel;
import jp.co.nemuzuka.service.CategoryService;
import jp.co.nemuzuka.service.KindService;
import jp.co.nemuzuka.service.MilestoneService;
import jp.co.nemuzuka.service.PriorityService;
import jp.co.nemuzuka.service.StatusService;
import jp.co.nemuzuka.service.VersionService;
import jp.co.nemuzuka.tester.AppEngineTestCase4HRD;
import org.junit.Test;
import org.slim3.datastore.Datastore;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.Text;
/**
* TicketMstServiceImplのテストクラス.
* @author kazumune
*/
public class TicketMstServiceImplTest extends AppEngineTestCase4HRD {
TicketMstServiceImpl service = TicketMstServiceImpl.getInstance();
ProjectDao projectDao = ProjectDao.getInstance();
MemberDao memberDao = MemberDao.getInstance();
ProjectMemberDao projectMemberDao = ProjectMemberDao.getInstance();
Key projectKey;
/**
* getTicketMstのテストクラス.
*/
@Test
public void testGetTicketMst() throws Exception {
createTestData();
String projectKeyString = Datastore.keyToString(projectKey);
//キャッシュされていないので、作り変える
TicketMst actual = service.getTicketMst(projectKeyString);
assertThat(actual, is(not(nullValue())));
assertThat(actual.priorityList.size(), is(4));
assertThat(actual.statusList.size(), is(5));
assertThat(actual.statusList.get(0).getValue(), is("未対応"));
assertThat(actual.statusList.get(1).getValue(), is("対応中"));
assertThat(actual.statusList.get(2).getValue(), is("対応済み"));
assertThat(actual.statusList.get(3).getValue(), is("完了"));
assertThat(actual.statusList.get(4).getValue(), is("キャンセル"));
assertThat(actual.openStatus, is(new String[]{"未対応","対応中","対応済み"}));
assertThat(actual.searchStatusList.size(), is(6));
assertThat(actual.searchStatusList.get(0).getValue(), is("-1"));
assertThat(actual.searchStatusList.get(0).getLabel(), is("未完了"));
assertThat(actual.searchStatusList.get(1).getValue(), is("未対応"));
assertThat(actual.searchStatusList.get(2).getValue(), is("対応中"));
assertThat(actual.searchStatusList.get(3).getValue(), is("対応済み"));
assertThat(actual.searchStatusList.get(4).getValue(), is("完了"));
assertThat(actual.searchStatusList.get(5).getValue(), is("キャンセル"));
assertThat(actual.kindList.size(), is(4));
assertThat(actual.categoryList.size(), is(5));
assertThat(actual.milestoneList.size(), is(3));
assertThat(actual.versionList.size(), is(6));
//もう一度呼び出す際にはキャッシュされている
actual = service.getTicketMst(projectKeyString);
//初期化された超えた場合
service.initRefreshStartTime(projectKeyString);
//再作成
actual = service.getTicketMst(projectKeyString);
}
/**
* テストデータ作成.
* @throws Exception 例外
*/
private void createTestData() throws Exception {
ProjectModel model = new ProjectModel();
model.setProjectId("test_project");
model.setProjectName("テストプロジェクト");
model.setProjectSummary(new Text("テスト用プロジェクトですってば"));
projectDao.put(model);
projectKey = model.getKey();
GlobalTransaction.transaction.get().commit();
GlobalTransaction.transaction.get().begin();
CategoryService categoryService = CategoryServiceImpl.getInstance();
KindService kindService = KindServiceImpl.getInstance();
PriorityService priorityService = PriorityServiceImpl.getInstance();
StatusService statusService = StatusServiceImpl.getInstance();
VersionService versionService = VersionServiceImpl.getInstance();
MilestoneService milestoneService = MilestoneServiceImpl.getInstance();
String projectKeyString = Datastore.keyToString(projectKey);
CategoryForm categoryForm = new CategoryForm();
categoryForm.categoryName = "カテゴリ名\nカテゴリ名2\nカテゴリ名3\nカテゴリ名4";
categoryService.put(categoryForm, projectKeyString);
GlobalTransaction.transaction.get().commit();
GlobalTransaction.transaction.get().begin();
KindForm kindForm = new KindForm();
kindForm.kindName = "種別名\n種別名1\n種別2\n";
kindService.put(kindForm, projectKeyString);
GlobalTransaction.transaction.get().commit();
GlobalTransaction.transaction.get().begin();
PriorityForm priorityForm = new PriorityForm();
priorityForm.priorityName = "高\n中\n低";
priorityService.put(priorityForm, projectKeyString);
GlobalTransaction.transaction.get().commit();
GlobalTransaction.transaction.get().begin();
StatusForm statusForm = new StatusForm();
statusForm.statusName = "未対応\n対応中\n対応済み\n完了\nキャンセル";
statusForm.closeStatusName = "完了\nキャンセル";
statusService.put(statusForm, projectKeyString);
GlobalTransaction.transaction.get().commit();
GlobalTransaction.transaction.get().begin();
VersionForm versionForm = new VersionForm();
versionForm.versionName = "1.0.0\n1.0.1\n1.0.2\n2.0.0\n2.0.1\n";
versionService.put(versionForm, projectKeyString);
GlobalTransaction.transaction.get().commit();
GlobalTransaction.transaction.get().begin();
MilestoneForm milestoneForm = new MilestoneForm();
milestoneForm.milestoneName = "まいるすとん1";
milestoneService.put(milestoneForm, projectKeyString);
milestoneForm = new MilestoneForm();
milestoneForm.milestoneName = "まいるすとん2";
milestoneService.put(milestoneForm, projectKeyString);
GlobalTransaction.transaction.get().commit();
GlobalTransaction.transaction.get().begin();
//メンバーとプロジェクトメンバーを登録
List<Key> memberKeyList = new ArrayList<Key>();
for(int i = 0; i < 4; i++) {
MemberModel memberModel = new MemberModel();
memberModel.createKey("mail" + i + "@gmail.com");
memberModel.setName("name" + i);
Authority authority = null;
if(i == 0 || i == 2) {
authority = Authority.admin;
} else {
authority = Authority.normal;
}
memberModel.setAuthority(authority);
memberDao.put(memberModel);
memberKeyList.add(memberModel.getKey());
GlobalTransaction.transaction.get().commit();
GlobalTransaction.transaction.get().begin();
}
ProjectMemberModel projectMemberModel = new ProjectMemberModel();
projectMemberModel.createKey(projectKey, memberKeyList.get(0));
projectMemberModel.setProjectAuthority(ProjectAuthority.type1);
projectMemberDao.put(projectMemberModel);
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);
}
}