/*******************************************************************************
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2013,2014 by Peter Pilgrim, Addiscombe, Surrey, XeNoNiQUe UK
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU GPL v3.0
* which accompanies this distribution, and is available at:
* http://www.gnu.org/licenses/gpl-3.0.txt
*
* Developers:
* Peter Pilgrim -- design, development and implementation
* -- Blog: http://www.xenonique.co.uk/blog/
* -- Twitter: @peter_pilgrim
*
* Contributors:
*
*******************************************************************************/
package je7hb.intro.xentracker.boundary;
import je7hb.intro.xentracker.StringHelper;
import je7hb.intro.xentracker.entity.Project;
import je7hb.intro.xentracker.entity.Task;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ArchivePaths;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.ejb.EJB;
import java.util.Date;
import java.util.List;
import java.util.Random;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import static je7hb.intro.xentracker.FixtureUtils.*;
/**
* A unit test ProjectTaskServiceTest to verify the operation of ProjectTaskServiceTest
*
* @author Peter Pilgrim
*/
@RunWith(Arquillian.class)
public class ProjectTaskServiceTest {
@Deployment
public static WebArchive createDeployment() {
WebArchive war = ShrinkWrap.create(WebArchive.class)
.addPackage(Project.class.getPackage())
.addPackage(ProjectTaskService.class.getPackage())
.addClasses(StringHelper.class )
.addAsWebInfResource(
"test-persistence.xml",
"classes/META-INF/persistence.xml")
.addAsWebInfResource(
EmptyAsset.INSTANCE,
ArchivePaths.create("classes/beans.xml"));
System.out.println(war.toString(true));
return war;
}
@EJB
ProjectTaskService service;
@Test
public void shouldSaveProject() {
Project proj1 = createProjectAndTasks(3);
service.saveProject(proj1);
System.out.printf("***** proj1=%s\n", proj1);
assertNotNull( proj1.getId());
assertFalse( proj1.getTasks().isEmpty());
assertThat( proj1.getTasks().size(), is(3));
for ( Task task: proj1.getTasks()) {
assertNotNull( task.getId());
assertThat( task.getProject().getId(), is( proj1.getId()) );
}
}
@Test
public void shouldUpdateProject() {
Project proj1 = createProjectAndTasks(3);
service.saveProject(proj1);
proj1.setName("Firebrand");
proj1.getTasks().get(1).setName("Get skimmed milk");
service.updateProject(proj1);
System.out.printf("***** proj1=%s\n", proj1);
}
@Test
public void shouldFindProjectById() {
Project proj1 = createProjectAndTasks(3);
service.saveProject(proj1);
List<Project> projects = service.findProjectById( proj1.getId());
System.out.printf("***** projects=%s\n", projects);
assertThat(projects.size(), is(1));
assertThat( projects.get(0).getTasks().size(), is(3));
}
@Test
public void shouldFindAllProjectByIdOrderedByName() {
service.clearDatabase();
Project proj1 = createProjectAndTasks("Alice",3);
Project proj2 = createProjectAndTasks("Ben",2);
Project proj3 = createProjectAndTasks("Caroline",1);
service.saveProject(proj1);
service.saveProject(proj2);
service.saveProject(proj3);
List<Project> projects = service.findAllProjects();
System.out.printf("***** projects=%s\n", projects);
assertThat(projects.size(), is(3));
assertThat(projects.get(0).getTasks().size(), is(3));
assertThat( projects.get(1).getTasks().size(), is(2));
assertThat(projects.get(2).getTasks().size(), is(1));
}
@Test
public void shouldFindTaskById() {
Project proj1 = createProjectAndTasks(3);
service.saveProject(proj1);
List<Task> tasks = service.findTaskById( proj1.getTasks().get(1).getId());
System.out.printf("***** proj1=%s\n", proj1);
System.out.printf("***** tasks=%s\n", tasks);
assertThat( tasks.size(), is(1));
assertThat( tasks.get(0).getProject(), is(proj1));
}
@Test
public void shouldTasksByProjectId() {
Project proj1 = createProjectAndTasks(5);
service.saveProject(proj1);
List<Task> tasks = service.findTasksByProjectId(proj1.getId());
System.out.printf("***** proj1=%s\n", proj1);
System.out.printf("***** tasks=%s\n", tasks);
assertThat( tasks.size(), is(5));
for ( Task task: tasks ) {
assertThat( task.getProject(), is(proj1));
}
}
@Test
public void shouldSaveAndRemoveProject() {
Project proj1 = createProjectAndTasks(3);
service.saveProject(proj1);
service.removeProject(proj1);
System.out.printf("***** proj1=%s\n", proj1);
}
@Test
public void shouldAnyProjects() {
service.clearDatabase();
List<Project> projects = service.findAllProjects();
assertTrue( projects.isEmpty());
}
@Test
public void shouldNotFindProjectsById() {
service.clearDatabase();
List<Project> projects = service.findProjectById(1);
assertTrue( projects.isEmpty());
}
@Test
public void shouldNotFindTasksById() {
service.clearDatabase();
List<Task> tasks= service.findTaskById(1);
assertTrue( tasks.isEmpty());
}
@Test
public void shouldNotFindTasksByProjectId() {
service.clearDatabase();
List<Task> tasks= service.findTasksByProjectId(1);
assertTrue( tasks.isEmpty());
}
public static Date getFutureRandomDate() {
return getFutureRandomDate( new Date() );
}
public static Date getFutureRandomDate( Date now ) {
int days = (int)(Math.random() * 14 + 1);
return new Date( days * 86400L * 1000L + now.getTime());
}
@Test
public void createData() {
try {
createInitialProjectData();
}
catch (Throwable t) {
System.err.println(t.getMessage());
throw t;
}
}
public void createInitialProjectData() {
Project project1 = new Project("Technology Presentation");
project1.addTask( new Task("Design concept", getFutureRandomDate(), true ));
project1.addTask( new Task("Write slides", getFutureRandomDate(), false ));
project1.addTask( new Task("Talk to the organizer", getFutureRandomDate(), false ));
project1.addTask( new Task("Prepare demos", getFutureRandomDate(), false ));
service.saveProject(project1);
Project project2 = new Project("Family Birthday");
project2.addTask( new Task("Secretly find out gifts", getFutureRandomDate(), true ));
project2.addTask( new Task("Buy gifts", getFutureRandomDate(), false ));
project2.addTask( new Task("Buy birthday card", getFutureRandomDate(), true ));
project2.addTask( new Task("Organize the party", getFutureRandomDate(), false ));
service.saveProject(project2);
Project project3 = new Project("Business Report");
Date x = getFutureRandomDate();
Date y = getFutureRandomDate(x);
Date z = getFutureRandomDate(y);
project3.addTask( new Task("Set up a meeting", x, true ));
project3.addTask( new Task("Hold the meeting", y, false ));
project3.addTask( new Task("Write the report", z, false ));
project3.addTask( new Task("Furnish report to the boss", getFutureRandomDate(z), false ));
service.saveProject(project3);
}
}