/** * @see VisitValidator#validate(Object,Errors) */ @Test(expected = APIException.class) public void validate_shouldRejectAVisitIfItHasMoreThanMaxOccursOfAnAttribute() { Visit visit = makeVisit(); visit.addAttribute(makeAttribute("one")); visit.addAttribute(makeAttribute("two")); visit.addAttribute(makeAttribute("three")); visit.addAttribute(makeAttribute("four")); ValidateUtil.validate(visit); }
/** * @see VisitValidator#validate(Object,Errors) */ @Test public void validate_shouldAcceptAVisitThatHasTheRightNumberOfAttributeOccurrences() { Visit visit = makeVisit(); visit.addAttribute(makeAttribute("one")); visit.addAttribute(makeAttribute("two")); ValidateUtil.validate(visit); }
/** * @see VisitValidator#validate(Object,Errors) */ @Test(expected = APIException.class) public void validate_shouldRejectAVisitIfItHasFewerThanMinOccursOfAnAttribute() { Visit visit = makeVisit(); visit.addAttribute(makeAttribute("one")); ValidateUtil.validate(visit); }
/** * @see VisitService#saveVisit(Visit) */ @Test public void saveVisit_shouldBeAbleToAddAnAttributeToAVisit() { Date now = new Date(); Visit visit = visitService.getVisit(1); VisitAttributeType attrType = visitService.getVisitAttributeType(1); VisitAttribute attr = new VisitAttribute(); attr.setAttributeType(attrType); attr.setValue(now); visit.addAttribute(attr); visitService.saveVisit(visit); assertEquals(new SimpleDateFormat("yyyy-MM-dd").format(now), attr.getValueReference()); }
/** * @see VisitValidator#validate(Object,Errors) */ @Test // This test will throw org.hibernate.PropertyValueException: not-null property references a null or transient value: org.openmrs.VisitAttribute.valueReference // This is a general problem, i.e. that validators on Customizable can't really be called unless you set Hibernate's flushMode to MANUAL. // Once we figure it out, this test can be un-Ignored @Ignore public void validate_shouldFailIfAnAttributeIsBad() { Visit visit = visitService.getVisit(1); visit.addAttribute(makeAttribute(new Date())); visit.addAttribute(makeAttribute("not a date")); visit.getActiveAttributes(); Errors errors = new BindException(visit, "visit"); new VisitValidator().validate(visit, errors); assertEquals(true, errors.hasFieldErrors("attributes")); }
visit.addAttribute(legalDate); badDate.setAttributeType(auditDate); visit.addAttribute(badDate);
/** * Sets the attributes of a visit * * @param visit the visit whose attributes to set * @param attributes the attributes to set */ @PropertySetter("attributes") public static void setAttributes(Visit visit, Set<VisitAttribute> attributes) { for (VisitAttribute attribute : attributes) { visit.addAttribute(attribute); //We need to force the API to set valueReference on all new attributes before any hibernate //auto flushes happen otherwise if they happen before we do so, the attributes get rejected //in the DB since valueReference would still be null yet it is not nullable if (attribute.getId() == null) { CustomDatatypeUtil.saveIfDirty(attribute); } } }
/** * @see org.openmrs.module.webservices.rest.web.resource.impl.DelegatingResourceHandler#save(java.lang.Object) */ @Override public VisitAttribute save(VisitAttribute delegate) { if (delegate.getAttributeType().getMaxOccurs() != null && delegate.getAttributeType().getMaxOccurs() == 1) { // there is a convencience method for this case, that avoids the client having to make two calls (to void and create) delegate.getVisit().setAttribute(delegate); } else { // make sure it has not already been added to the visit boolean needToAdd = true; for (VisitAttribute pa : delegate.getVisit().getActiveAttributes()) { if (pa.equals(delegate)) { needToAdd = false; break; } } if (needToAdd) { delegate.getVisit().addAttribute(delegate); } } Context.getVisitService().saveVisit(delegate.getVisit()); return delegate; }