ItEr35S14CUAdministracionMateriaisItEr34S14: Manage the relation 'parent' in MaterialCategory
Methods to manage the relation 'parent' in both directions. Tests for this relation.
This commit is contained in:
parent
291c248b8e
commit
4c60b9e5a6
2 changed files with 110 additions and 8 deletions
|
|
@ -20,7 +20,6 @@
|
|||
|
||||
package org.navalplanner.business.materials.entities;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
|
|
@ -38,7 +37,7 @@ public class MaterialCategory extends BaseEntity {
|
|||
@NotEmpty
|
||||
private String name;
|
||||
|
||||
private MaterialCategory parent;
|
||||
private MaterialCategory parent = null;
|
||||
|
||||
private Set<MaterialCategory> subcategories = new HashSet<MaterialCategory>();
|
||||
|
||||
|
|
@ -69,7 +68,33 @@ public class MaterialCategory extends BaseEntity {
|
|||
return parent;
|
||||
}
|
||||
|
||||
public void setParent(MaterialCategory parentId) {
|
||||
this.parent = parentId;
|
||||
/* WARNING: do not use this method to set parent to null.
|
||||
* It must be done using removeParent().
|
||||
*/
|
||||
public void setParent(MaterialCategory parent) {
|
||||
this.parent = parent;
|
||||
parent.addSubcategory(this);
|
||||
}
|
||||
|
||||
public void removeParent() {
|
||||
MaterialCategory category = parent;
|
||||
parent = null;
|
||||
category.removeSubcategory(this);
|
||||
}
|
||||
|
||||
public Set<MaterialCategory> getSubcategories() {
|
||||
return subcategories;
|
||||
}
|
||||
|
||||
public void addSubcategory (MaterialCategory subcategory) {
|
||||
subcategories.add(subcategory);
|
||||
if(subcategory.getParent()==null)
|
||||
subcategory.setParent(this);
|
||||
}
|
||||
|
||||
public void removeSubcategory (MaterialCategory subcategory) {
|
||||
subcategories.remove(subcategory);
|
||||
if(subcategory.getParent()!=null)
|
||||
subcategory.removeParent();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,13 +28,13 @@ import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONF
|
|||
import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.navalplanner.business.materials.daos.IMaterialCategoryDAO;
|
||||
import org.navalplanner.business.materials.daos.IMaterialDAO;
|
||||
import org.navalplanner.business.materials.entities.MaterialCategory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
|
|
@ -67,14 +67,14 @@ public class MaterialCategoryDAOTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testSaveLabel() {
|
||||
public void testSaveMaterialCategory() {
|
||||
MaterialCategory materialCategory = createValidMaterialCategory();
|
||||
materialCategoryDAO.save(materialCategory);
|
||||
assertTrue(materialCategory.getId() != null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRemoveLabel() throws InstanceNotFoundException {
|
||||
public void testRemoveMaterialCategory() throws InstanceNotFoundException {
|
||||
MaterialCategory materialCategory = createValidMaterialCategory();
|
||||
materialCategoryDAO.save(materialCategory);
|
||||
materialCategoryDAO.remove(materialCategory.getId());
|
||||
|
|
@ -82,11 +82,88 @@ public class MaterialCategoryDAOTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testListLabels() {
|
||||
public void testListMaterialCategories() {
|
||||
int previous = materialCategoryDAO.list(MaterialCategory.class).size();
|
||||
MaterialCategory materialCategory = createValidMaterialCategory();
|
||||
materialCategoryDAO.save(materialCategory);
|
||||
List<MaterialCategory> list = materialCategoryDAO.list(MaterialCategory.class);
|
||||
assertEquals(previous + 1, list.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testListChildrenMaterialCategories() {
|
||||
MaterialCategory category = createValidMaterialCategory();
|
||||
MaterialCategory subcategory = createValidMaterialCategory();
|
||||
int previous = category.getSubcategories().size();
|
||||
category.addSubcategory(subcategory);
|
||||
materialCategoryDAO.save(category);
|
||||
Set<MaterialCategory> childrenList = category.getSubcategories();
|
||||
assertEquals(previous + 1, childrenList.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRemoveChildrenMaterialCategories() {
|
||||
MaterialCategory category = createValidMaterialCategory();
|
||||
MaterialCategory subcategory = createValidMaterialCategory();
|
||||
category.addSubcategory(subcategory);
|
||||
materialCategoryDAO.save(category);
|
||||
int previous = category.getSubcategories().size();
|
||||
|
||||
category.removeSubcategory(subcategory);
|
||||
materialCategoryDAO.save(category);
|
||||
Set<MaterialCategory> childrenList = category.getSubcategories();
|
||||
assertEquals(previous - 1, childrenList.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRemoveParentMaterialCategory() {
|
||||
MaterialCategory category = createValidMaterialCategory();
|
||||
MaterialCategory subcategory = createValidMaterialCategory();
|
||||
category.addSubcategory(subcategory);
|
||||
materialCategoryDAO.save(category);
|
||||
int previous = category.getSubcategories().size();
|
||||
|
||||
subcategory.removeParent();
|
||||
materialCategoryDAO.save(category);
|
||||
Set<MaterialCategory> childrenList = category.getSubcategories();
|
||||
assertEquals(previous - 1, childrenList.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSaveMaterialSubcategoryTopDown() {
|
||||
MaterialCategory category = createValidMaterialCategory();
|
||||
MaterialCategory subcategory = createValidMaterialCategory();
|
||||
category.addSubcategory(subcategory);
|
||||
//materialCategoryDAO.save(subcategory); //unnecessary due to cascade=all
|
||||
materialCategoryDAO.save(category);
|
||||
List<MaterialCategory> list = materialCategoryDAO.list(MaterialCategory.class);
|
||||
for(MaterialCategory listCategory:list) {
|
||||
if(listCategory.getId()==category.getId()) {
|
||||
assertEquals(1, listCategory.getSubcategories().size());
|
||||
}
|
||||
if(listCategory.getId()==subcategory.getId()) {
|
||||
assertNotNull(listCategory.getParent());
|
||||
assertEquals(category.getId(), listCategory.getParent().getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSaveMaterialSubcategoryBottomUp() {
|
||||
MaterialCategory category = createValidMaterialCategory();
|
||||
MaterialCategory subcategory = createValidMaterialCategory();
|
||||
subcategory.setParent(category);
|
||||
//materialCategoryDAO.save(subcategory); //unnecessary due to cascade=all
|
||||
materialCategoryDAO.save(category);
|
||||
List<MaterialCategory> list = materialCategoryDAO.list(MaterialCategory.class);
|
||||
for(MaterialCategory listCategory:list) {
|
||||
if(listCategory.getId()==category.getId()) {
|
||||
assertEquals(1, listCategory.getSubcategories().size());
|
||||
}
|
||||
if(listCategory.getId()==subcategory.getId()) {
|
||||
assertNotNull(listCategory.getParent());
|
||||
assertEquals(category.getId(), listCategory.getParent().getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue