/** * Yobi, Project Hosting SW * * Copyright 2012 NAVER Corp. * http://yobi.io * * @Author yoon * * 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 models; import com.avaje.ebean.Ebean; import models.enumeration.State; import org.apache.commons.lang3.time.DateUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import play.i18n.Messages; import play.libs.Yaml; import support.Helpers; import utils.JodaDateUtil; import utils.YamlUtil; import java.io.IOException; import java.util.*; import static org.fest.assertions.Assertions.assertThat; public class MilestoneTest extends ModelTest<Milestone> { @Test public void create() throws Exception { // Given Milestone newMilestone = new Milestone(); newMilestone.dueDate = new Date(); newMilestone.setContents("테스트 마일스톤"); newMilestone.project = Project.find.byId(3l); newMilestone.title = "0.1"; // When Milestone.create(newMilestone); // Then assertThat(newMilestone.id).isNotNull(); //To keep data clean after this test. newMilestone.delete(); } @Test public void findById() throws Exception { // Given // When Milestone firstMilestone = Milestone.findById(1l); // Then assertThat(firstMilestone.title).isEqualTo("v.0.1"); assertThat(firstMilestone.getContents()).isEqualTo("nFORGE 첫번째 버전."); Calendar expactDueDate = new GregorianCalendar(); expactDueDate.set(2012, Calendar.JULY, 12, 23, 59, 59); // 2012-07-12 Calendar dueDate = new GregorianCalendar(); dueDate.setTime(firstMilestone.dueDate); assertThat(expactDueDate.get(Calendar.YEAR)).isEqualTo( dueDate.get(Calendar.YEAR)); assertThat(expactDueDate.get(Calendar.MONTH)).isEqualTo( dueDate.get(Calendar.MONTH)); assertThat(expactDueDate.get(Calendar.DAY_OF_MONTH)).isEqualTo( dueDate.get(Calendar.DAY_OF_MONTH)); assertThat(firstMilestone.getNumClosedIssues()).isEqualTo(2); assertThat(firstMilestone.getNumOpenIssues()).isEqualTo(2); assertThat(firstMilestone.getNumTotalIssues()).isEqualTo(4); assertThat(firstMilestone.project).isEqualTo(Project.find.byId(1l)); assertThat(firstMilestone.getCompletionRate()).isEqualTo(50); } @Test public void delete() throws Exception { // Given Milestone milestone = new Milestone(); milestone.title = "test"; milestone.project = getTestProject(); milestone.contents = "test"; milestone.save(); Milestone savedMilestone = Milestone.findById(milestone.id); assertThat(savedMilestone).isNotNull(); // When savedMilestone.delete(); //Then savedMilestone = Milestone.findById(milestone.id); assertThat(savedMilestone).isNull(); } @Test public void findByProjectId() throws Exception { // Given // When List<Milestone> firstProjectMilestones = Milestone.findByProjectId(1l); // Then assertThat(firstProjectMilestones.size()).isEqualTo(2); checkIfTheMilestoneIsBelongToTheProject(firstProjectMilestones, 1l, 2l); // Given // When List<Milestone> secondProjectMilestones = Milestone.findByProjectId(2l); // Then assertThat(secondProjectMilestones.size()).isEqualTo(2); checkIfTheMilestoneIsBelongToTheProject(secondProjectMilestones, 3l, 4l); } private void checkIfTheMilestoneIsBelongToTheProject( List<Milestone> milestones, Long... actualMilestoneIds) { List<Long> milestoneIds = Arrays.asList(actualMilestoneIds); for (Milestone milestone : milestones) { assertThat(milestoneIds.contains(milestone.id)).isEqualTo(true); } } @Test public void findClosedMilestones() throws Exception { // Given // When List<Milestone> p1Milestones = Milestone.findClosedMilestones(1l); // Then assertThat(p1Milestones.size()).isEqualTo(0); // Given // When List<Milestone> p2Milestones = Milestone.findClosedMilestones(2l); // Then assertThat(p2Milestones.size()).isEqualTo(1); } @Test public void findOpenMilestones() throws Exception { // Given // When List<Milestone> p1Milestones = Milestone.findOpenMilestones(1l); // Then assertThat(p1Milestones.size()).isEqualTo(2); // Given // When List<Milestone> p2Milestones = Milestone.findOpenMilestones(2l); // Then assertThat(p2Milestones.size()).isEqualTo(1); } @Test public void findMilestones() throws Exception { // Given // When List<Milestone> p1InCmpleteMilestones = Milestone.findMilestones(1l, State.OPEN); // Then assertThat(p1InCmpleteMilestones.size()).isEqualTo(2); // Given // When List<Milestone> p2CompletedMilestones = Milestone.findMilestones(2l, State.CLOSED); // Then assertThat(p2CompletedMilestones.size()).isEqualTo(1); // Given // When List<Milestone> p2Milestones = Milestone.findMilestones(2l, State.ALL); // Then assertThat(p2Milestones.size()).isEqualTo(2); } @Test public void getDueDateString() throws Exception { // Given // When Milestone m1 = Milestone.findById(1l); // Then String m1DueDate = m1.getDueDateString(); assertThat(m1DueDate).isEqualTo("2012-07-12"); // Given // When Milestone m4 = Milestone.findById(4l); // Then String m4DueDate = m4.getDueDateString(); assertThat(m4DueDate).isEqualTo("2012-04-11"); } @Test public void options() { // Given // When Map<String, String> milestoneOptions = Milestone.options(1l); // Then assertThat(milestoneOptions).hasSize(2); } @Test public void addIssue() throws Exception { // GIVEN Milestone m5 = Milestone.findById(5l); int totalNumber = m5.getNumTotalIssues(); int openNumber = m5.getNumOpenIssues(); Issue issue = new Issue(); issue.title = "불필요한 로그 출력 코드 제거test"; issue.createdDate = JodaDateUtil.today(); issue.state = State.OPEN; issue.authorId = User.find.byId(1l).id; issue.milestone = Milestone.find.byId(5l); issue.project = issue.milestone.project; // WHEN issue.save(); // THEN m5 = Milestone.findById(5l); assertThat(m5.getNumTotalIssues()).isEqualTo(totalNumber + 1); assertThat(m5.getNumOpenIssues()).isEqualTo(openNumber + 1); //To keep data clean after this test. issue.delete(); } @Test public void updateIssue() throws Exception { //Given Issue issue = new Issue(); issue.title = "불필요한 로그 출력 코드 제거test"; issue.milestone = Milestone.find.byId(6l); Milestone m6 = issue.milestone; assertThat(m6.getNumOpenIssues()).isEqualTo(0); assertThat(m6.getNumClosedIssues()).isEqualTo(1); assertThat(m6.getNumTotalIssues()).isEqualTo(1); assertThat(m6.getCompletionRate()).isEqualTo(100); //When issue.update(5l); //Then m6 = Milestone.findById(m6.id); assertThat(m6.getNumOpenIssues()).isEqualTo(1); assertThat(m6.getNumClosedIssues()).isEqualTo(1); assertThat(m6.getNumTotalIssues()).isEqualTo(2); assertThat(m6.getCompletionRate()).isEqualTo(50); } @Test public void deleteIssue() throws Exception { //Given Issue issue = Issue.finder.byId(7l); Milestone m5 = issue.milestone; assertThat(m5.getNumOpenIssues()).isEqualTo(1); assertThat(m5.getNumClosedIssues()).isEqualTo(1); assertThat(m5.getNumTotalIssues()).isEqualTo(2); assertThat(m5.getCompletionRate()).isEqualTo(50); //When issue.delete(); //Then m5 = Milestone.find.byId(m5.id); assertThat(m5.getNumOpenIssues()).isEqualTo(0); assertThat(m5.getNumClosedIssues()).describedAs("number of closed issues should be 1").isEqualTo(1); assertThat(m5.getNumTotalIssues()).describedAs("number of total issues should be 1").isEqualTo(1); assertThat(m5.getCompletionRate()).isEqualTo(100); } @Test public void isUniqueProjectIdAndTitle() { //Given //When boolean isUnique = Milestone.isUniqueProjectIdAndTitle(1l, "v.0.1"); //Then assertThat(isUnique == false); //Given //When isUnique = Milestone.isUniqueProjectIdAndTitle(1l, "unique milestone"); //Then assertThat(isUnique == true); } @Test public void untilOver() { // Given int days = 3; Milestone milestone = new Milestone(); milestone.dueDate = DateUtils.truncate(DateUtils.addDays(new Date(), -days), Calendar.DATE); // When String until = milestone.until(); // Then assertThat(until).isEqualTo(Messages.get("common.time.overday", days)); } @Test public void untilToday() { // Given Milestone milestone = new Milestone(); milestone.dueDate = DateUtils.truncate(new Date(), Calendar.DATE); // When String until = milestone.until(); // Then assertThat(until).isEqualTo(Messages.get("common.time.today")); } @Test public void untilLeft() { // Given int days = 3; Milestone milestone = new Milestone(); milestone.dueDate = DateUtils.truncate(DateUtils.addDays(new Date(), days), Calendar.DATE); // When String until = milestone.until(); // Then assertThat(until).isEqualTo(Messages.get("common.time.leftday", days)); } }