ItEr20S07CUIntroducionAvanceUnidadeTraballoItEr19S12: Fixing bug. IMPORTANT: The comparison between Long objects must be done using equals instead of instance equality operator.

Adding test case that reproduced the error.
This way they're more resilient to change.
This commit is contained in:
Óscar González Fernández 2009-08-03 16:05:05 +02:00
parent 5d565508a7
commit 25f6116ca2
2 changed files with 39 additions and 2 deletions

View file

@ -209,8 +209,8 @@ public abstract class OrderElement {
throws DuplicateAdvanceAssigmentForOrderElementException {
for (AdvanceAssigment advanceAssigment : orderElement
.getAdvanceAssigments()) {
if (advanceAssigment.getAdvanceType().getId() == newAdvanceAssigment
.getAdvanceType().getId()) {
if (advanceAssigment.getAdvanceType().getId().equals(
newAdvanceAssigment.getAdvanceType().getId())) {
throw new DuplicateAdvanceAssigmentForOrderElementException(
"Duplicate Advance Assigment For Order Element", this,
OrderElement.class);

View file

@ -20,6 +20,7 @@ import org.navalplanner.business.advance.entities.AdvanceAssigment;
import org.navalplanner.business.advance.entities.AdvanceType;
import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssigmentForOrderElementException;
import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.orders.daos.IOrderDAO;
import org.navalplanner.business.orders.daos.IOrderElementDAO;
import org.navalplanner.business.orders.entities.HoursGroup;
@ -430,4 +431,40 @@ public class AddAdvanceAssigmentsToOrderElementTest {
}
}
@Test(expected = DuplicateAdvanceAssigmentForOrderElementException.class)
public void addingAnotherAdvanceAssigmentWithAnEquivalentTypeButDifferentInstance()
throws DuplicateValueTrueReportGlobalAdvanceException,
DuplicateAdvanceAssigmentForOrderElementException {
final Order order = createValidOrder();
OrderLine line = createValidLeaf("GranSon", "75757");
order.add(line);
orderDao.save(order);
AdvanceType type = createValidAdvanceType("tipoA");
advanceTypeDao.save(type);
getSession().flush();
getSession().evict(type);
AdvanceType typeReloaded = reloadType(type);
AdvanceAssigment assigment = createValidAdvanceAssigment(false);
assigment.setAdvanceType(type);
AdvanceAssigment assigmentWithSameType = createValidAdvanceAssigment(false);
assigmentWithSameType.setAdvanceType(typeReloaded);
line.addAvanceAssigment(assigment);
line.addAvanceAssigment(assigmentWithSameType);
}
private AdvanceType reloadType(AdvanceType type) {
try {
// new instance of id is created to avoid both types have the same
// id object
Long newLong = new Long(type.getId());
return advanceTypeDao.find(newLong);
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}
}
}