From 25f6116ca26c502c3586ea754e52942aae3e3b59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Mon, 3 Aug 2009 16:05:05 +0200 Subject: [PATCH] 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. --- .../orders/entities/OrderElement.java | 4 +- ...ddAdvanceAssigmentsToOrderElementTest.java | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java index 7b9b151f4..43c0a056c 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java @@ -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); diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java index 8a5b9c7e3..0a9dff46a 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssigmentsToOrderElementTest.java @@ -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); + } + } + }