/*
* 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.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import jp.co.nemuzuka.common.Authority;
import jp.co.nemuzuka.common.ProjectAuthority;
import jp.co.nemuzuka.common.TodoStatus;
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.dao.TicketDao;
import jp.co.nemuzuka.dao.TodoDao;
import jp.co.nemuzuka.model.MemberModel;
import jp.co.nemuzuka.model.MilestoneModel;
import jp.co.nemuzuka.model.ProjectMemberModel;
import jp.co.nemuzuka.model.ProjectModel;
import jp.co.nemuzuka.model.TicketModel;
import jp.co.nemuzuka.model.TodoModel;
import jp.co.nemuzuka.service.DashboardService;
import jp.co.nemuzuka.tester.AppEngineTestCase4HRD;
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;
/**
* DashboardServiceImplのテストクラス.
* @author kazumune
*/
public class DashboardServiceImplTest extends AppEngineTestCase4HRD {
DashboardServiceImpl service = DashboardServiceImpl.getInstance();
TicketDao ticketDao = TicketDao.getInstance();
TodoDao todoDao = TodoDao.getInstance();
ProjectDao projectDao = ProjectDao.getInstance();
MemberDao memberDao = MemberDao.getInstance();
ProjectMemberDao projectMemberDao = ProjectMemberDao.getInstance();
List<Key> ticketKeyList = new ArrayList<Key>();
List<Long> ticketNoList = new ArrayList<Long>();
List<Key> projectKeyList = new ArrayList<Key>();
List<Key> todoKeyList = new ArrayList<Key>();
/**
* getDashboardInfoのテスト.
* @throws Exception
*/
@Test
public void testGetDashboardInfo() throws Exception {
createTestData();
String projectKeyString = Datastore.keyToString(projectKeyList.get(0));
String[] openStatus = new String[]{"未対応","対応済み"};
//プロジェクト指定
DashboardService.Result result = service.getDashboardInfo("hige@hoge.hage", projectKeyString, openStatus, 3);
assertThat(result.todoList.size(), is(3));
assertThat(result.todoList.get(0).getModel().getKey(), is(todoKeyList.get(5)));
assertThat(result.todoList.get(1).getModel().getKey(), is(todoKeyList.get(2)));
assertThat(result.todoList.get(2).getModel().getKey(), is(todoKeyList.get(0)));
assertThat(result.ticketList.size(), is(2));
assertThat(result.ticketList.get(0).getModel().getKey(), is(ticketKeyList.get(5)));
assertThat(result.ticketList.get(1).getModel().getKey(), is(ticketKeyList.get(2)));
assertThat(result.projectList, is(nullValue()));
assertThat(result.viewProjectList, is(false));
//プロジェクト未設定
result = service.getDashboardInfo("hige@hoge.hage", null, openStatus, 3);
assertThat(result.todoList.size(), is(3));
assertThat(result.todoList.get(0).getModel().getKey(), is(todoKeyList.get(5)));
assertThat(result.todoList.get(1).getModel().getKey(), is(todoKeyList.get(2)));
assertThat(result.todoList.get(2).getModel().getKey(), is(todoKeyList.get(0)));
assertThat(result.ticketList, is(nullValue()));
assertThat(result.projectList.size(), is(1));
assertThat(result.projectList.get(0).getModel().getKey(), is(projectKeyList.get(0)));
assertThat(result.viewProjectList, is(true));
}
/**
* テストデータ作成.
* @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);
projectModel.setProjectSummary(new Text("概要" + i));
projectDao.put(projectModel);
projectKeyList.add(projectModel.getKey());
GlobalTransaction.transaction.get().commit();
GlobalTransaction.transaction.get().begin();
}
MemberModel memberModel = new MemberModel();
memberModel.createKey("hige@hoge.hage");
memberModel.setAuthority(Authority.normal);
memberModel.setMemo(new Text(""));
memberModel.setName("");
memberDao.put(memberModel);
ProjectMemberModel projectMemberModel = new ProjectMemberModel();
projectMemberModel.setProjectKey(projectKeyList.get(0));
projectMemberModel.setMemberKey(memberModel.getKey());
projectMemberModel.setProjectAuthority(ProjectAuthority.type1);
projectMemberDao.put(projectMemberModel);
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 == 5 || 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());
ticketNoList.add(model.getNo());
GlobalTransaction.transaction.get().commit();
GlobalTransaction.transaction.get().begin();
}
TodoModel todoModel = null;
for(int i = 0; i < 10; i++) {
todoModel = new TodoModel();
String targetEmail;
if(0 <= i && i <= 5) {
targetEmail = "hige@hoge.hage";
} else {
targetEmail = "hoge2@hige.hage";
}
TodoStatus status = null;
if(0 <= i && i <= 2) {
status = TodoStatus.nothing;
} else if(5 <= i && i <= 8) {
status = TodoStatus.doing;
} else {
status = TodoStatus.finish;
}
Date period = null;
if(4 <= i && i <= 6) {
period = sdf.parse("20120105");
} else if(i == 2 || (8 <= i && i <= 9)) {
period = sdf.parse("20120106");
}
todoModel.setStatus(status);
Key memberKey = Datastore.createKey(MemberModel.class, targetEmail);
todoModel.setCreateMemberKey(memberKey);
if(i == 0 || i == 2) {
model.setTitle("Like用件名" + i);
} else {
model.setTitle("件名1" + i);
}
todoModel.setContent(new Text("詳細" + i));
todoModel.setPeriod(period);
todoDao.put(todoModel);
todoKeyList.add(todoModel.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);
}
}