use of org.activityinfo.model.formula.SymbolNode in project activityinfo by bedatadriven.
the class LookupKeySetTest method simpleHierarchyTest.
/**
* In the case of a simple hierarchy, we are referencing a single form that
* in turn has key reference fields.
*
* For example, if the field references a Village form, this should yield:
*
* <pre>
* Province.Name
* ^
* |
* District.Name
* ^
* |
* Village.Name
* </pre>
*
* All fields are required because we ultimately need the reference to the village record.
*/
@Test
public void simpleHierarchyTest() {
TestingStorageProvider catalog = new TestingStorageProvider();
NfiForm nfiForm = catalog.getNfiForm();
VillageForm villageForm = catalog.getVillageForm();
AdminLevelForm territoryForm = catalog.getVillageForm().getParentForm();
AdminLevelForm provinceForm = territoryForm.getParentForm().get();
FormTree formTree = catalog.getFormTree(nfiForm.getFormId());
LookupKeySet lookupKeySet = new LookupKeySet(formTree, nfiForm.getVillageField());
// Keys need to be topologically sorted,
// with parent keys preceding child keys in the list
assertThat(lookupKeySet.getKey(0).getKeyLabel(), equalTo("Province Name"));
assertThat(lookupKeySet.getKey(1).getKeyLabel(), equalTo("Territory Name"));
assertThat(lookupKeySet.getKey(2).getKeyLabel(), equalTo("Village Name"));
SymbolNode villageName = Formulas.symbol(villageForm.getNameField().getId());
SymbolNode villageTerritory = new SymbolNode(villageForm.getAdminFieldId());
FormulaNode territoryName = new CompoundExpr(villageTerritory, territoryForm.getNameFieldId());
FormulaNode territoryProvince = new CompoundExpr(villageTerritory, territoryForm.getParentFieldId());
FormulaNode provinceName = new CompoundExpr(territoryProvince, provinceForm.getNameFieldId());
assertThat(lookupKeySet.getLeafKeys(), hasSize(1));
LookupKey leafKey = Iterables.getOnlyElement(lookupKeySet.getLeafKeys());
assertThat(leafKey.getKeyFormulas().values(), containsInAnyOrder(villageName, territoryName, provinceName));
}
use of org.activityinfo.model.formula.SymbolNode in project activityinfo by bedatadriven.
the class FormStoreTest method serialNumberOffline.
@Test
public void serialNumberOffline() {
TestSetup setup = new TestSetup();
IntakeForm intakeForm = setup.getCatalog().getIntakeForm();
// Synchronize the intake form
setup.setConnected(true);
setup.getFormStore().setFormOffline(intakeForm.getFormId(), true);
setup.runScheduled();
// Go offline
setup.setConnected(false);
// Create a new intake record
FormInstance newRecord = intakeForm.getGenerator().get();
newRecord.set(intakeForm.getProtectionCodeFieldId(), (FieldValue) null);
Promise<Void> update = setup.getFormStore().updateRecords(new RecordTransactionBuilder().create(newRecord).build());
assertThat(update.getState(), equalTo(Promise.State.FULFILLED));
// Verify that we can read the new record offline
QueryModel queryModel = new QueryModel(intakeForm.getFormId());
queryModel.selectResourceId().as("id");
queryModel.selectField(intakeForm.getProtectionCodeFieldId()).as("serial");
queryModel.setFilter(Formulas.equals(new SymbolNode("_id"), new ConstantNode(newRecord.getId().asString())));
Connection<ColumnSet> view = setup.connect(setup.getFormStore().query(queryModel));
assertThat(view.assertLoaded().getNumRows(), equalTo(1));
assertThat(view.assertLoaded().getColumnView("serial").getString(0), nullValue());
// Now go online...
setup.setConnected(true);
setup.getOfflineStore().syncChanges();
;
setup.runScheduled();
// Check that the serial number has been updated with the value from the server
assertThat(view.assertLoaded().getColumnView("serial").getString(0), not(nullValue()));
}
Aggregations