@VisibleForTesting static TypedRecordUpdate parseChange(FormClass formClass, JsonValue changeObject, int userId) throws JsonMappingException { return parseChange(formClass, Json.fromJson(RecordUpdate.class, changeObject), userId); }
public void executeChange(RecordUpdate update) { Optional<FormStorage> storage = catalog.getForm(update.getFormId()); if(!storage.isPresent()) { throw new InvalidUpdateException(format("Form '%s' does not exist.", update.getFormId())); } FormClass formClass = storage.get().getFormClass(); TypedRecordUpdate typedUpdate = parseChange(formClass, update, this.userId); executeUpdate(storage.get(), typedUpdate); }
@Test public void validQuantity() throws JsonMappingException { ResourceId fieldId = ResourceId.valueOf("Q1"); FormClass formClass = new FormClass(ResourceId.valueOf("XYZ123")); formClass.addElement(new FormField(fieldId).setType(new QuantityType("meters"))); JsonValue fields = createObject(); fields.put("Q1", 41.3); JsonValue change = createObject(); change.put("recordId", "A"); change.put("formId", "XYZ123"); change.put("fields", fields); TypedRecordUpdate update = Updater.parseChange(formClass, change, userId); assertThat(update.getChangedFieldValues().get(fieldId), equalTo((FieldValue)new Quantity(41.3))); }
@Test public void parsedQuantity() throws JsonMappingException { ResourceId fieldId = ResourceId.valueOf("Q1"); FormClass formClass = new FormClass(ResourceId.valueOf("XYZ123")); formClass.addElement(new FormField(fieldId).setType(new QuantityType("meters"))); JsonValue fields = Json.createObject(); fields.put("Q1", "41.3"); JsonValue change = createObject(); change.put("recordId", "A"); change.put("formId", "XYZ123"); change.put("fields", fields); TypedRecordUpdate update = Updater.parseChange(formClass, change, userId); assertThat(update.getChangedFieldValues().get(fieldId), equalTo((FieldValue)new Quantity(41.3))); }
@Test public void missingValue() throws JsonMappingException { ResourceId fieldId = ResourceId.valueOf("Q1"); FormClass formClass = new FormClass(ResourceId.valueOf("XYZ123")); formClass.addElement(new FormField(fieldId).setType(new QuantityType("meters"))); JsonValue fields = createObject(); fields.put("Q1", Json.createNull()); JsonValue change = createObject(); change.put("recordId", "A"); change.put("formId", "XYZ123"); change.put("fields", fields); TypedRecordUpdate update = Updater.parseChange(formClass, change, userId); assertTrue(update.getChangedFieldValues().containsKey(fieldId)); }
@Test(expected = InvalidUpdateException.class) public void invalidParsedQuantity() throws JsonMappingException { ResourceId fieldId = ResourceId.valueOf("Q1"); FormClass formClass = new FormClass(ResourceId.valueOf("XYZ123")); formClass.addElement(new FormField(fieldId).setType(new QuantityType("meters"))); JsonValue fields = createObject(); fields.put("Q1", "4.1.3"); JsonValue change = createObject(); change.put("recordId", "A"); change.put("formId", "XYZ123"); change.put("fields", fields); Updater.parseChange(formClass, change, userId); }
@Test(expected = InvalidUpdateException.class) public void invalidQuantity() throws JsonMappingException { ResourceId fieldId = ResourceId.valueOf("Q1"); FormClass formClass = new FormClass(ResourceId.valueOf("XYZ123")); formClass.addElement(new FormField(fieldId).setType(new QuantityType("meters"))); JsonValue fields = createObject(); fields.put("Q1", "Hello World"); JsonValue change = createObject(); change.put("recordId", "A"); change.put("formId", "XYZ123"); change.put("fields", fields); Updater.parseChange(formClass, change, userId); }
@Test public void serialNumber() throws JsonMappingException { FormClass formClass = new FormClass(ResourceId.valueOf("FORM1")); formClass.addField(ResourceId.valueOf("FIELD0")) .setType(TextType.SIMPLE) .setLabel("Province Code") .setCode("PROVINCE") .setRequired(true); FormField serialNumberField = formClass.addField(ResourceId.valueOf("FIELD1")) .setType(new SerialNumberType("PROVINCE", 5)) .setRequired(true) .setLabel("File Number") .setCode("SN"); JsonValue fields = Json.createObject(); fields.put("PROVINCE", "KUNDUZ"); JsonValue change = createObject(); change.put("recordId", "A"); change.put("formId", "FORM1"); change.put("fields", fields); TypedRecordUpdate update = Updater.parseChange(formClass, change, userId); TypedFormRecord effectiveRecord = updater.computeEffectiveRecord(formClass, Optional.<FormRecord>absent(), update); updater.generateSerialNumber(formClass, serialNumberField, effectiveRecord, update); FieldValue serialValue = update.getChangedFieldValues().get(serialNumberField.getId()); assertThat(serialValue, equalTo((FieldValue)new SerialNumber("KUNDUZ", 1))); }