/*
* (C) Copyright 2014 Agile Booster.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Maxime ESCOURBIAC
*/
package com.agilebooster.data.jpa;
import com.agilebooster.data.entity.Project;
import com.agilebooster.data.entity.User;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.*;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* Test class for ProjectController.
*
* @author Maxime ESCOURBIAC
*/
public class ProjectControllerTest {
private static User scrumMaster;
private static User productOwner;
private static User developer1;
private static User developer2;
private static User developer3;
private static UserController userController;
/**
* Default constructor.
*/
public ProjectControllerTest() {
}
/**
* Init the test environment.
*/
@BeforeClass
public static void initContext() {
userController = new UserController();
scrumMaster = new User("ScrumMaster@agilebooster.fr", "Forename", "Last Name", "password", true);
scrumMaster = userController.create(scrumMaster);
productOwner = new User("ProductOwner@agilebooster.fr", "Forename", "Last Name", "password", true);
productOwner = userController.create(productOwner);
developer1 = new User("developer1@agilebooster.fr", "Forename", "Last Name", "password", true);
developer1 = userController.create(developer1);
developer2 = new User("developer2@agilebooster.fr", "Forename", "Last Name", "password", true);
developer2 = userController.create(developer2);
developer3 = new User("developer3@agilebooster.fr", "Forename", "Last Name", "password", true);
developer3 = userController.create(developer3);
}
/**
* Destroy the test environment.
*/
@AfterClass
public static void destroyContext() {
userController.destroy(scrumMaster);
userController.destroy(productOwner);
userController.destroy(developer1);
userController.destroy(developer2);
userController.destroy(developer3);
}
/**
* Clean the users after each test.
*/
@After
public void cleanData() {
scrumMaster = userController.refresh(scrumMaster);
productOwner = userController.refresh(productOwner);
developer1 = userController.refresh(developer1);
developer2 = userController.refresh(developer2);
developer3 = userController.refresh(developer3);
}
/**
* Test of create method, of class ProjectController.
*/
@Test
public void testCreate() {
System.out.println("ProjectController:Create");
ProjectController projectController = new ProjectController();
List<User> assignedUsers = new ArrayList<>();
assignedUsers.add(developer1);
assignedUsers.add(developer2);
assignedUsers.add(developer3);
Date creationDate = new Date();
Project project = new Project("Test Create", "TCE", "Project creation test.", creationDate, "http://www.testCreate.com", "http://www.testCreate.git", scrumMaster, productOwner);
project.setAssignedUsers(assignedUsers);
Project projectResult = projectController.create(project);
//Check Project properties.
assertNotNull(projectResult.getId());
assertEquals(project.getName(), projectResult.getName());
assertEquals(project.getKeyName(), projectResult.getKeyName());
assertEquals(project.getDescription(), projectResult.getDescription());
assertEquals(project.getCreationDate(), projectResult.getCreationDate());
assertEquals(project.getURLWebsite(), projectResult.getURLWebsite());
assertEquals(project.getURLRepository(), projectResult.getURLRepository());
assertEquals(project.getScrumMaster(), projectResult.getScrumMaster());
assertEquals(project.getProductOwner(), projectResult.getProductOwner());
assertEquals(project.getAssignedUsers(), projectResult.getAssignedUsers());
//Check users properties.
scrumMaster = userController.refresh(scrumMaster);
assertTrue(scrumMaster.getAssignedProjectsAsSM().contains(projectResult));
productOwner = userController.refresh(productOwner);
assertTrue(productOwner.getAssignedProjectsAsPO().contains(projectResult));
developer1 = userController.refresh(developer1);
assertTrue(developer1.getAssignedProjects().contains(projectResult));
developer2 = userController.refresh(developer2);
assertTrue(developer2.getAssignedProjects().contains(projectResult));
developer3 = userController.refresh(developer3);
assertTrue(developer3.getAssignedProjects().contains(projectResult));
projectController.destroy(project);
}
/**
* Test of destroy method, of class ProjectController.
*/
@Test
public void testDestroy() {
System.out.println("ProjectController:Destroy");
ProjectController projectController = new ProjectController();
List<User> assignedUsers = new ArrayList<>();
assignedUsers.add(developer1);
assignedUsers.add(developer2);
assignedUsers.add(developer3);
Date creationDate = new Date();
Project project = new Project("Test Destroy", "TDY", "Project destroy test.", creationDate, "http://www.testDestroy.com", "http://www.testDestroy.git", scrumMaster, productOwner);
project.setAssignedUsers(assignedUsers);
project = projectController.create(project);
assertTrue(projectController.destroy(project));
}
/**
* Test of getProjects method, of class ProjectController.
*/
@Test
public void testGetProject() {
System.out.println("ProjectController:GetProjects");
ProjectController instance = new ProjectController();
List<User> assignedUsers = new ArrayList<>();
assignedUsers.add(developer1);
assignedUsers.add(developer2);
assignedUsers.add(developer3);
Date creationDate = new Date();
Project project1 = new Project("Test Get Project 1", "TG1", "Project Get Project 1 test.", creationDate, "http://www.testGetProject.com", "http://www.testGetProject.git", scrumMaster, productOwner);
Project project2 = new Project("Test Get Project 2", "TG2", "Project Get Project 2 test.", creationDate, "http://www.testGetProject.com", "http://www.testGetProject.git", scrumMaster, productOwner);
Project project3 = new Project("Test Get Project 3", "TG3", "Project Get Project 3 test.", creationDate, "http://www.testGetProject.com", "http://www.testGetProject.git", scrumMaster, productOwner);
project1.setAssignedUsers(assignedUsers);
project2.setAssignedUsers(assignedUsers);
project3.setAssignedUsers(assignedUsers);
project1 = instance.create(project1);
project2 = instance.create(project2);
project3 = instance.create(project3);
List result = instance.getProjects();
assertTrue(result.contains(project1));
assertTrue(result.contains(project2));
assertTrue(result.contains(project3));
instance.destroy(project1);
instance.destroy(project2);
instance.destroy(project3);
}
/**
* Test of getProjectByKeyName method, of class ProjectController.
*/
@Test
public void testGetProjectByKeyName() {
System.out.println("ProjectController:GetProjectByKeyName");
List<User> assignedUsers = new ArrayList<>();
assignedUsers.add(developer1);
assignedUsers.add(developer2);
assignedUsers.add(developer3);
Date creationDate = new Date();
Project project = new Project("Test Get Project By KeyName", "TGK", "Project Get Project By KeyName.", creationDate, "http://www.testGetProjectByKeyName.com", "http://www.testGetProjectByKeyName.git", scrumMaster, productOwner);
project.setAssignedUsers(assignedUsers);
ProjectController instance = new ProjectController();
instance.create(project);
//Check true case.
Project projectResult = instance.getProjectByKeyName(project.getKeyName());
assertEquals(project.getName(), projectResult.getName());
assertEquals(project.getKeyName(), projectResult.getKeyName());
assertEquals(project.getDescription(), projectResult.getDescription());
assertEquals(project.getCreationDate(), projectResult.getCreationDate());
assertEquals(project.getURLWebsite(), projectResult.getURLWebsite());
assertEquals(project.getURLRepository(), projectResult.getURLRepository());
assertEquals(project.getScrumMaster(), projectResult.getScrumMaster());
assertEquals(project.getProductOwner(), projectResult.getProductOwner());
assertEquals(project.getAssignedUsers(), projectResult.getAssignedUsers());
instance.destroy(projectResult);
//Check wrong case.
projectResult = instance.getProjectByKeyName("FCE");
assertNull(projectResult);
}
}