+
+ @Test
+ public final void testSaveOrUpdateTaxonWithMisappliedName() {
+ Taxon expectedTaxon = Taxon.NewInstance(null, null);
+ TaxonName misappliedNameName = TaxonName.NewInstance(NomenclaturalCode.ICNAFP, Rank.SPECIES(), "Abies", null, "alba", null, null, null, null, null);
+
+ UUID misappliedNameNameUuid = nameService.save(misappliedNameName).getUuid();
+ misappliedNameName = nameService.find(misappliedNameNameUuid);
+ SpecimenTypeDesignation typedes = SpecimenTypeDesignation.NewInstance();
+ DerivedUnit derivedUnit = DerivedUnit.NewPreservedSpecimenInstance();
+ FieldUnit fieldUnit = FieldUnit.NewInstance();
+ DerivationEvent derivationEvent = DerivationEvent.NewSimpleInstance(fieldUnit, derivedUnit, DerivationEventType.ACCESSIONING());
+// derivedUnit.addDerivationEvent(derivationEvent);
+ typedes.setTypeSpecimen(derivedUnit);
+ misappliedNameName.addTypeDesignation(typedes, false);
+ Taxon misappliedName = Taxon.NewInstance(misappliedNameName, null);
+ UUID misappliedNameUuid = service.save(misappliedName).getUuid();
+ misappliedName = (Taxon) service.find(misappliedNameUuid);
+ expectedTaxon.addMisappliedName(misappliedName, null, null);
+ UUID uuid = service.save(expectedTaxon).getUuid();
+ TaxonBase<?> actualTaxon = service.find(uuid);
+ assertEquals(expectedTaxon, actualTaxon);
+ misappliedName.setSec(ReferenceFactory.newArticle());
+
+ try{
+ service.saveOrUpdate(actualTaxon);
+ misappliedName = (Taxon)service.find(misappliedNameUuid);
+ Assert.assertNotNull(misappliedName.getSec());
+ }catch(Exception e){
+ Assert.fail();
+ }
+ commitAndStartNewTransaction(null);
+ actualTaxon = service.find(uuid);
+ ((Taxon)actualTaxon).getTaxonRelations(misappliedName).iterator().next().getFromTaxon().setSec(null);
+ try{
+ service.saveOrUpdate(actualTaxon);
+ misappliedName = (Taxon)service.find(misappliedNameUuid);
+ Assert.assertNull(misappliedName.getSec());
+ }catch(Exception e){
+ Assert.fail();
+ }
+ }
+