diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java b/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java index dfdcc7559..76f4dbde5 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/common/Registry.java @@ -24,6 +24,7 @@ import org.navalplanner.business.advance.daos.IAdvanceTypeDAO; import org.navalplanner.business.costcategories.daos.ITypeOfWorkHoursDAO; import org.navalplanner.business.materials.daos.IMaterialCategoryDAO; import org.navalplanner.business.materials.daos.IMaterialDAO; +import org.navalplanner.business.qualityforms.daos.IQualityFormDAO; import org.navalplanner.business.resources.daos.ICriterionTypeDAO; import org.navalplanner.business.resources.daos.IMachineDAO; import org.navalplanner.business.users.daos.IUserDAO; @@ -70,6 +71,9 @@ public class Registry { @Autowired private IMaterialCategoryDAO materialCategoryDAO; + @Autowired + private IQualityFormDAO qualityFormDAO; + private Registry() { } @@ -108,4 +112,8 @@ public class Registry { public static IMaterialCategoryDAO getMaterialCategoryDAO() { return getInstance().materialCategoryDAO; } + + public static IQualityFormDAO getQualityFormDAO() { + return getInstance().qualityFormDAO; + } } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/IQualityFormDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/IQualityFormDAO.java new file mode 100644 index 000000000..a633a9cfd --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/IQualityFormDAO.java @@ -0,0 +1,52 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.business.qualityforms.daos; + +import java.util.List; + +import org.hibernate.NonUniqueResultException; +import org.navalplanner.business.common.daos.IGenericDAO; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; +import org.navalplanner.business.qualityforms.entities.QualityForm; +import org.navalplanner.business.qualityforms.entities.QualityFormType; + +/** + * @author Susana Montes Pedreira + */ + +public interface IQualityFormDAO extends IGenericDAO { + + List getAll(); + + QualityForm findByNameAndType(String name, QualityFormType type); + + List getAllByType(QualityFormType type); + + QualityForm findUniqueByName(String name) + throws InstanceNotFoundException, NonUniqueResultException; + + QualityForm findUniqueByName(QualityForm qualityForm) + throws InstanceNotFoundException; + + boolean existsOtherWorkReportTypeByName(QualityForm qualityForm); + + boolean existsByNameAnotherTransaction(QualityForm qualityForm); +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java new file mode 100644 index 000000000..36eafe961 --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java @@ -0,0 +1,105 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.business.qualityforms.daos; + +import java.util.List; + +import org.apache.commons.lang.Validate; +import org.hibernate.Criteria; +import org.hibernate.NonUniqueResultException; +import org.hibernate.criterion.Restrictions; +import org.navalplanner.business.common.daos.GenericDAOHibernate; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; +import org.navalplanner.business.qualityforms.entities.QualityForm; +import org.navalplanner.business.qualityforms.entities.QualityFormType; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +/** + * DAO for {@link QualityForm} + * @author Susana Montes Pedreira + */ + +@Repository +@Scope(BeanDefinition.SCOPE_SINGLETON) +public class QualityFormDAO extends GenericDAOHibernate + implements IQualityFormDAO { + + @Override + public List getAll() { + return list(QualityForm.class); + } + + @Override + public QualityForm findByNameAndType(String name, QualityFormType type) { + return (QualityForm) getSession().createCriteria(QualityForm.class) + .add(Restrictions.eq("name", name)).add( + Restrictions.eq("qualityFormType", type)) + .uniqueResult(); + } + + @Override + public List getAllByType(QualityFormType type) { + Criteria c = getSession().createCriteria(QualityForm.class).add( + Restrictions.eq("qualityFormType", type)); + return ((List) c.list()); + } + + @Override + public QualityForm findUniqueByName(QualityForm qualityForm) + throws InstanceNotFoundException { + Validate.notNull(qualityForm); + return findUniqueByName(qualityForm.getName()); + } + + @Override + public QualityForm findUniqueByName(String name) + throws InstanceNotFoundException, NonUniqueResultException { + Criteria c = getSession().createCriteria(QualityForm.class); + c.add(Restrictions.eq("name", name)); + QualityForm qualityForm = (QualityForm) c.uniqueResult(); + + if (qualityForm == null) { + throw new InstanceNotFoundException(null, "QualityForm"); + } + return qualityForm; + } + + @Override + public boolean existsOtherWorkReportTypeByName(QualityForm qualityForm) { + try { + QualityForm t = findUniqueByName(qualityForm); + return (t != null && t != qualityForm); + } catch (InstanceNotFoundException e) { + return false; + } + } + + @Override + @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW) + public boolean existsByNameAnotherTransaction(QualityForm qualityForm) { + return existsOtherWorkReportTypeByName(qualityForm); + } + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java new file mode 100644 index 000000000..2f0e6ed55 --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java @@ -0,0 +1,197 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +/** + * @author Susana Montes Pedreira + */ +package org.navalplanner.business.qualityforms.entities; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.hibernate.NonUniqueResultException; +import org.hibernate.validator.AssertTrue; +import org.hibernate.validator.NotEmpty; +import org.hibernate.validator.NotNull; +import org.hibernate.validator.Valid; +import org.navalplanner.business.common.BaseEntity; +import org.navalplanner.business.common.Registry; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; +import org.navalplanner.business.qualityforms.daos.IQualityFormDAO; + +public class QualityForm extends BaseEntity { + + public static QualityForm create() { + QualityForm qualityForm = new QualityForm(); + qualityForm.setNewObject(true); + return qualityForm; + } + + public static QualityForm create(String name, String description) { + QualityForm qualityForm = new QualityForm(name, description); + qualityForm.setNewObject(true); + return qualityForm; + } + + public QualityForm() { + + } + + private QualityForm(String name, String description) { + this.name = name; + this.description = description; + } + + private String name; + + private String description; + + private QualityFormType qualityFormType = QualityFormType.getDefault(); + + private List qualityFormItems = new ArrayList(); + + @NotEmpty + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + @NotNull + public QualityFormType getQualityFormType() { + return qualityFormType; + } + + public void setQualityFormType(QualityFormType qualityFormType) { + this.qualityFormType = qualityFormType; + } + + @Valid + public List getQualityFormItems() { + return Collections.unmodifiableList(qualityFormItems); + } + + void setQualityFormItems(List qualityFormItems) { + this.qualityFormItems = qualityFormItems; + } + + public boolean addQualityFormItemAtEnd(QualityFormItem qualityFormItem) { + if (qualityFormItem != null) { + Integer position = this.qualityFormItems.size(); + qualityFormItem.setPosition(position); + this.qualityFormItems.add(qualityFormItem); + } + return false; + } + + public void removeQualityFormItem(QualityFormItem qualityFormItem) { + this.qualityFormItems.remove(qualityFormItem); + } + + @SuppressWarnings("unused") + @AssertTrue(message = "Quality form name is already being used") + public boolean checkConstraintUniqueQualityFormName() { + IQualityFormDAO qualityFormDAO = Registry.getQualityFormDAO(); + if (isNewObject()) { + return !qualityFormDAO.existsByNameAnotherTransaction(this); + } else { + try { + QualityForm c = qualityFormDAO.findUniqueByName(name); + return c.getId().equals(getId()); + } catch (InstanceNotFoundException e) { + return true; + } catch (NonUniqueResultException e) { + return false; + } + } + } + + @SuppressWarnings("unused") + @AssertTrue(message = "The quality item positions must be uniques, consecutives and corrects in function to the percentage.") + public boolean validateTheQualityFormItemPositions() { + List result = getListToNull(qualityFormItems); + for (QualityFormItem qualityFormItem : qualityFormItems) { + // Check if index is out of range + Integer index = qualityFormItem.getPosition(); + + if (index == null) { + return false; + } + + if ((index.compareTo(0) < 0) + || (index.compareTo(result.size()) >= 0)) { + return false; + } + // Check if index is repeated + if (result.get(index) != null) { + return false; + } + result.set(index, qualityFormItem); + } + + // Check if the indexs are consecutives + for (QualityFormItem item : result) { + if (item == null) { + return false; + } + } + + // check the position is correct in function to the percentage. + for (QualityFormItem item : qualityFormItems) { + if (!item.getPosition().equals(getCorrectPosition(item))) { + return false; + } + } + return true; + } + + private Integer getCorrectPosition(QualityFormItem itemToFind) { + Integer position = 0; + for (QualityFormItem item : qualityFormItems) { + if ((!itemToFind.equals(item)) + && (itemToFind.getPercentage().compareTo(item + .getPercentage())) > 0) { + position++; + } + } + return position; + } + + private List getListToNull(List list) { + List result = new ArrayList(list + .size()); + for (int i = 0; i < list.size(); i++) { + result.add(null); + } + return result; + } + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityFormItem.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityFormItem.java new file mode 100644 index 000000000..eafa05bc1 --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityFormItem.java @@ -0,0 +1,101 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +/** + * @author Susana Montes Pedreira + */ +package org.navalplanner.business.qualityforms.entities; + +import java.math.BigDecimal; + +import org.hibernate.validator.NotEmpty; +import org.hibernate.validator.NotNull; +import org.navalplanner.business.INewObject; + +public class QualityFormItem implements INewObject { + + public static QualityFormItem create() { + QualityFormItem qualityFormItem = new QualityFormItem(); + qualityFormItem.setNewObject(true); + return qualityFormItem; + } + + public static QualityFormItem create(String name, Integer position, + BigDecimal percentage) { + QualityFormItem qualityFormItem = new QualityFormItem(name, position, + percentage); + qualityFormItem.setNewObject(true); + return qualityFormItem; + } + + public QualityFormItem() { + + } + + private QualityFormItem(String name, Integer position, BigDecimal percentage) { + this.name = name; + this.position = position; + this.percentage = percentage; + } + + private boolean newObject = false; + + private String name; + + private Integer position; + + private BigDecimal percentage; + + @NotEmpty + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @NotNull + public Integer getPosition() { + return position; + } + + public void setPosition(Integer newPosition) { + this.position = newPosition; + } + + @NotNull + public BigDecimal getPercentage() { + return percentage; + } + + public void setPercentage(BigDecimal percentage) { + this.percentage = percentage; + } + + public boolean isNewObject() { + return newObject; + } + + private void setNewObject(boolean newObject) { + this.newObject = newObject; + } + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityFormType.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityFormType.java new file mode 100644 index 000000000..a877a8309 --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityFormType.java @@ -0,0 +1,43 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +/** + * @author Susana Montes Pedreira + */ +package org.navalplanner.business.qualityforms.entities; + +public enum QualityFormType { + + BY_PERCENTAGE("By Percentage."), BY_ITEMS("By Items."); + +private String description; + + private QualityFormType(String description) { +this.description = description; +} + +public String toString() { +return this.description; +} + + public static QualityFormType getDefault() { + return BY_PERCENTAGE; +} +} diff --git a/navalplanner-business/src/main/resources/navalplanner-business-spring-config.xml b/navalplanner-business/src/main/resources/navalplanner-business-spring-config.xml index 3ebeeb53e..cbdc4a8d2 100644 --- a/navalplanner-business/src/main/resources/navalplanner-business-spring-config.xml +++ b/navalplanner-business/src/main/resources/navalplanner-business-spring-config.xml @@ -60,6 +60,9 @@ org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml + + org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml + diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml new file mode 100644 index 000000000..24835895f --- /dev/null +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml @@ -0,0 +1,33 @@ + + + + + + + + + 100 + + + + + + + + + + org.navalplanner.business.qualityforms.entities.QualityFormType + + + + + + + + + + + + + + diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/daos/AbstractQualityFormTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/daos/AbstractQualityFormTest.java new file mode 100644 index 000000000..5f2ab205d --- /dev/null +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/daos/AbstractQualityFormTest.java @@ -0,0 +1,52 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.business.test.qualityforms.daos; + +import java.math.BigDecimal; +import java.util.UUID; + +import org.navalplanner.business.qualityforms.daos.IQualityFormDAO; +import org.navalplanner.business.qualityforms.entities.QualityForm; +import org.navalplanner.business.qualityforms.entities.QualityFormItem; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * Test for {@QualityDAO} + * @author Susana Montes Pedreira + */ +public abstract class AbstractQualityFormTest { + + @Autowired + IQualityFormDAO qualityFormDAO; + + public QualityForm createValidQualityForm() { + QualityForm qualityForm = QualityForm.create(UUID.randomUUID() + .toString(), UUID.randomUUID().toString()); + return qualityForm; + } + + public QualityFormItem createValidQualityFormItem() { + QualityFormItem qualityFormItem = QualityFormItem.create(UUID + .randomUUID().toString(), new Integer(0), new BigDecimal(0)); + return qualityFormItem; + } + +} diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/daos/QualityFormDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/daos/QualityFormDAOTest.java new file mode 100644 index 000000000..94882e956 --- /dev/null +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/daos/QualityFormDAOTest.java @@ -0,0 +1,113 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.business.test.qualityforms.daos; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE; +import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE; + +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.navalplanner.business.common.exceptions.InstanceNotFoundException; +import org.navalplanner.business.qualityforms.daos.IQualityFormDAO; +import org.navalplanner.business.qualityforms.entities.QualityForm; +import org.navalplanner.business.qualityforms.entities.QualityFormItem; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +/** + * Test for {@QualityDAO} + * + * @author Susana Montes Pedreira + * + */ + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE, + BUSINESS_SPRING_CONFIG_TEST_FILE }) +@Transactional +public class QualityFormDAOTest extends AbstractQualityFormTest { + + @Autowired + IQualityFormDAO qualityFormDAO; + + @Test + public void testInSpringContainer() { + assertNotNull(qualityFormDAO); + } + + @Test + public void testSaveQualityForm() { + QualityForm qualityForm = createValidQualityForm(); + qualityFormDAO.save(qualityForm); + assertTrue(qualityForm.getId() != null); + } + + @Test + public void testRemoveQualityForm() throws InstanceNotFoundException { + QualityForm qualityForm = createValidQualityForm(); + qualityFormDAO.save(qualityForm); + qualityFormDAO.remove(qualityForm.getId()); + assertFalse(qualityFormDAO.exists(qualityForm.getId())); + } + + @Test + public void testListQualityForm() { + int previous = qualityFormDAO.list(QualityForm.class).size(); + QualityForm qualityForm = createValidQualityForm(); + qualityFormDAO.save(qualityForm); + List list = qualityFormDAO.list(QualityForm.class); + assertEquals(previous + 1, list.size()); + } + + @Test + public void testSaveQualityFormItems() { + QualityForm qualityForm = createValidQualityForm(); + QualityFormItem qualityFormItem = createValidQualityFormItem(); + qualityForm.addQualityFormItemAtEnd(qualityFormItem); + qualityFormDAO.save(qualityForm); + + assertTrue(qualityForm.getId() != null); + assertEquals(1, qualityForm.getQualityFormItems().size()); + } + + @Test + public void testSaveAndRemoveQualityFormItem() + throws InstanceNotFoundException { + QualityForm qualityForm = createValidQualityForm(); + QualityFormItem qualityFormItem = createValidQualityFormItem(); + qualityForm.addQualityFormItemAtEnd(qualityFormItem); + qualityFormDAO.save(qualityForm); + + assertTrue(qualityForm.getId() != null); + assertEquals(1, qualityForm.getQualityFormItems().size()); + + qualityForm.removeQualityFormItem(qualityFormItem); + assertEquals(0, qualityForm.getQualityFormItems().size()); + } +} diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/entities/QualityFormTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/entities/QualityFormTest.java new file mode 100644 index 000000000..f1ff5a8a3 --- /dev/null +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/qualityforms/entities/QualityFormTest.java @@ -0,0 +1,246 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.business.test.qualityforms.entities; + +import static org.junit.Assert.fail; +import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE; +import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE; + +import java.math.BigDecimal; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.qualityforms.daos.IQualityFormDAO; +import org.navalplanner.business.qualityforms.entities.QualityForm; +import org.navalplanner.business.qualityforms.entities.QualityFormItem; +import org.navalplanner.business.test.qualityforms.daos.AbstractQualityFormTest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author Susana Montes Pedreira + */ + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE, + BUSINESS_SPRING_CONFIG_TEST_FILE }) +@Transactional +public class QualityFormTest extends AbstractQualityFormTest { + + @Autowired + IQualityFormDAO qualityFormDAO; + + @Test + public void checkInvalidNameQualityForm() throws ValidationException { + QualityForm qualityForm = createValidQualityForm(); + qualityForm.setName(""); + try { + qualityFormDAO.save(qualityForm); + fail("It should throw an exception"); + } catch (ValidationException e) { + // It should throw an exception + } + + qualityForm.setName(null); + try { + qualityFormDAO.save(qualityForm); + fail("It should throw an exception"); + } catch (ValidationException e) { + // It should throw an exception + } + } + + @Test + public void checkInvalidQualityFormType() throws ValidationException { + QualityForm qualityForm = createValidQualityForm(); + qualityForm.setQualityFormType(null); + try { + qualityFormDAO.save(qualityForm); + fail("It should throw an exception"); + } catch (ValidationException e) { + // It should throw an exception + } + } + + @Test + public void checkInvalidRepeatedQualityFormItemPosition() + throws ValidationException { + QualityForm qualityForm = createValidQualityForm(); + + QualityFormItem qualityFormItem1 = createValidQualityFormItem(); + qualityForm.addQualityFormItemAtEnd(qualityFormItem1); + + QualityFormItem qualityFormItem2 = createValidQualityFormItem(); + qualityForm.addQualityFormItemAtEnd(qualityFormItem2); + + qualityFormItem1.setPosition(0); + qualityFormItem2.setPosition(0); + + try { + qualityFormDAO.save(qualityForm); + fail("It should throw an exception"); + } catch (ValidationException e) { + // It should throw an exception + } + + } + + @Test + public void checkInvalidNotConsecutivesQualityFormItemPosition() + throws ValidationException { + QualityForm qualityForm = createValidQualityForm(); + + QualityFormItem qualityFormItem1 = createValidQualityFormItem(); + qualityForm.addQualityFormItemAtEnd(qualityFormItem1); + + QualityFormItem qualityFormItem2 = createValidQualityFormItem(); + qualityForm.addQualityFormItemAtEnd(qualityFormItem2); + + qualityFormItem1.setPosition(0); + qualityFormItem2.setPosition(2); + + try { + qualityFormDAO.save(qualityForm); + fail("It should throw an exception"); + } catch (ValidationException e) { + // It should throw an exception + } + + } + + @Test + public void checkInvalidOutOfRangeQualityFormItemPosition() + throws ValidationException { + QualityForm qualityForm = createValidQualityForm(); + + QualityFormItem qualityFormItem1 = createValidQualityFormItem(); + qualityForm.addQualityFormItemAtEnd(qualityFormItem1); + + QualityFormItem qualityFormItem2 = createValidQualityFormItem(); + qualityForm.addQualityFormItemAtEnd(qualityFormItem2); + + qualityFormItem1.setPosition(1); + qualityFormItem2.setPosition(2); + + + try { + qualityFormDAO.save(qualityForm); + fail("It should throw an exception"); + } catch (ValidationException e) { + // It should throw an exception + } + + } + + @Test + public void checkInvalidPercentageQualityFormItemPosition() + throws ValidationException { + QualityForm qualityForm = createValidQualityForm(); + + QualityFormItem qualityFormItem1 = createValidQualityFormItem(); + qualityForm.addQualityFormItemAtEnd(qualityFormItem1); + + QualityFormItem qualityFormItem2 = createValidQualityFormItem(); + qualityForm.addQualityFormItemAtEnd(qualityFormItem2); + + qualityFormItem1.setPosition(0); + qualityFormItem1.setPercentage(new BigDecimal(0)); + qualityFormItem2.setPosition(1); + qualityFormItem2.setPercentage(new BigDecimal(1)); + + try { + qualityFormDAO.save(qualityForm); + } catch (ValidationException e) { + fail("It shouldn't throw an exception"); + } + + qualityFormItem1.setPercentage(new BigDecimal(1)); + qualityFormItem2.setPercentage(new BigDecimal(0)); + + try { + qualityFormDAO.save(qualityForm); + fail("It should throw an exception"); + } catch (ValidationException e) { + // It should throw an exception + } + } + + @Test + public void checkInvalidQualityFormItemName() throws ValidationException { + QualityForm qualityForm = createValidQualityForm(); + QualityFormItem qualityFormItem = createValidQualityFormItem(); + qualityForm.addQualityFormItemAtEnd(qualityFormItem); + try { + qualityFormDAO.save(qualityForm); + } catch (ValidationException e) { + fail("It should throw an exception"); + } + + qualityFormItem.setName(null); + try { + qualityFormDAO.save(qualityForm); + fail("It should throw an exception"); + } catch (ValidationException e) { + // It should throw an exception + } + + qualityFormItem.setName(""); + try { + qualityFormDAO.save(qualityForm); + fail("It should throw an exception"); + } catch (ValidationException e) { + // It should throw an exception + } + } + + @Test + public void checkNotNullQualityFormItemPosition() + throws ValidationException { + QualityForm qualityForm = createValidQualityForm(); + QualityFormItem qualityFormItem = createValidQualityFormItem(); + qualityForm.addQualityFormItemAtEnd(qualityFormItem); + qualityFormItem.setPosition(null); + try { + qualityFormDAO.save(qualityForm); + fail("It should throw an exception"); + } catch (ValidationException e) { + // It should throw an exception + } + } + + @Test + public void checkNotNullQualityFormItemPercentage() + throws ValidationException { + QualityForm qualityForm = createValidQualityForm(); + QualityFormItem qualityFormItem = createValidQualityFormItem(); + qualityFormItem.setPercentage(null); + qualityForm.addQualityFormItemAtEnd(qualityFormItem); + try { + qualityFormDAO.save(qualityForm); + fail("It should throw an exception"); + } catch (ValidationException e) { + // It should throw an exception + } + } +} diff --git a/navalplanner-business/src/test/resources/navalplanner-business-spring-config-test.xml b/navalplanner-business/src/test/resources/navalplanner-business-spring-config-test.xml index ffb209cb9..79a2dd2c4 100644 --- a/navalplanner-business/src/test/resources/navalplanner-business-spring-config-test.xml +++ b/navalplanner-business/src/test/resources/navalplanner-business-spring-config-test.xml @@ -72,6 +72,9 @@ TestEntities.hbm.xml + + org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml + diff --git a/navalplanner-webapp/src/test/resources/navalplanner-webapp-spring-config-test.xml b/navalplanner-webapp/src/test/resources/navalplanner-webapp-spring-config-test.xml index 83fa703e1..8736138b4 100644 --- a/navalplanner-webapp/src/test/resources/navalplanner-webapp-spring-config-test.xml +++ b/navalplanner-webapp/src/test/resources/navalplanner-webapp-spring-config-test.xml @@ -69,6 +69,9 @@ org/navalplanner/business/costcategories/entities/CostCategories.hbm.xml + + org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml +