package com.belladati.sdk.form.impl; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotEquals; import static org.testng.Assert.assertTrue; import java.util.ArrayList; import java.util.List; import org.testng.annotations.Test; import com.belladati.sdk.form.Form; import com.belladati.sdk.form.FormElement; import com.belladati.sdk.test.SDKTest; import com.belladati.sdk.util.CachedList; import com.fasterxml.jackson.databind.JsonNode; @Test public class FormTest extends SDKTest { private final String id = "123"; private final String name = "form name"; private final String recordTimestamp = "true"; private final String baseUri = "/api/import/forms"; private final String formUri = baseUri + "/" + id; private final String elemId = "ABCD1234"; private final String elemName = "element name"; private final String elemType = "textfield"; public void loadForms_withoutElements() { CachedList<Form> list = service.getImportForms(); server.registerPaginatedItem(baseUri, "importForms", builder.buildFormNode(id, name, recordTimestamp)); list.load(); server.assertRequestUris(baseUri); assertEquals(list.get().size(), 1); Form form = list.get().get(0); assertEquals(form.getId(), id); assertEquals(form.getName(), name); assertEquals(form.getRecordTimestamp() + "", recordTimestamp); assertEquals(form.getElements().size(), 0); assertEquals(form.toString(), name); } public void loadForm_withoutElements() { server.register(formUri, builder.buildFormNode(id, name, recordTimestamp).toString()); Form form = service.loadImportForm(id); server.assertRequestUris(formUri); assertEquals(form.getId(), id); assertEquals(form.getName(), name); assertEquals(form.getRecordTimestamp() + "", recordTimestamp); assertEquals(form.getElements().size(), 0); assertEquals(form.toString(), name); } public void loadForms_withElements() { CachedList<Form> list = service.getImportForms(); server.registerPaginatedItem(baseUri, "importForms", builder.buildFormNode(id, name, recordTimestamp, testElements())); list.load(); server.assertRequestUris(baseUri); assertEquals(list.get().size(), 1); Form form = list.get().get(0); assertEquals(form.getId(), id); assertEquals(form.getName(), name); assertEquals(form.getRecordTimestamp() + "", recordTimestamp); assertEquals(form.toString(), name); assertEquals(form.getElements().size(), 6); assertElements(form.getElements()); } public void loadForm_withElements() { server.register(formUri, builder.buildFormNode(id, name, recordTimestamp, testElements()).toString()); Form form = service.loadImportForm(id); server.assertRequestUris(formUri); assertEquals(form.getId(), id); assertEquals(form.getName(), name); assertEquals(form.getRecordTimestamp() + "", recordTimestamp); assertEquals(form.toString(), name); assertEquals(form.getElements().size(), 6); assertElements(form.getElements()); } public void formEquality() { Form o1 = new FormImpl(builder.buildFormNode(id, name, recordTimestamp)); Form o2 = new FormImpl(builder.buildFormNode(id, "", "")); Form o3 = new FormImpl(builder.buildFormNode("otherId", name, recordTimestamp)); assertEquals(o1, o2); assertEquals(o1.hashCode(), o2.hashCode()); assertFalse(o1.equals(new Object())); assertNotEquals(o1, o3); } public void formElementEquality() { FormElement o1 = new FormElementImpl(builder.buildFormElementNode(elemId, elemName, elemType, null)); FormElement o2 = new FormElementImpl(builder.buildFormElementNode(elemId, "", "", null)); FormElement o3 = new FormElementImpl(builder.buildFormElementNode("otherId", elemName, elemType, null)); assertEquals(o1, o2); assertEquals(o1.hashCode(), o2.hashCode()); assertFalse(o1.equals(new Object())); assertNotEquals(o1, o3); } private List<JsonNode> testElements() { List<JsonNode> elements = new ArrayList<>(); elements.add(builder.buildFormElementNode(elemId, elemName, elemType, null)); elements.add(builder.buildFormElementNode("e01", "e01 name", "username", null)); elements.add(builder.buildFormElementNode("e02", "e02 name", "checkbox", null)); elements.add(builder.buildFormElementNode("e03", "e03 name", "timestamp", null)); elements.add(builder.buildFormElementNode("e04", "e04 name", "datefield", "true")); elements.add(builder.buildFormElementNode("e05", "e05 name", "select", null, "item1", "item2", "item3")); return elements; } private void assertElements(List<FormElement> elements) { assertElement(elements.get(0), elemId, elemName, elemType, null); assertElement(elements.get(1), "e01", "e01 name", "username", null); assertElement(elements.get(2), "e02", "e02 name", "checkbox", null); assertElement(elements.get(3), "e03", "e03 name", "timestamp", null); assertElement(elements.get(4), "e04", "e04 name", "datefield", true); assertElement(elements.get(5), "e05", "e05 name", "select", null, "item1", "item2", "item3"); } private void assertElement(FormElement element, String id, String name, String type, Boolean mapToDateColumn, String... items) { assertEquals(element.getId(), id); assertEquals(element.getName(), name); assertEquals(element.getType().getJsonValue(), type); assertEquals(element.getMapToDateColumn(), mapToDateColumn); if (items == null) { assertEquals(element.getItems().size(), 0); } else { assertEquals(element.getItems().size(), items.length); for (String item : items) { assertTrue(element.getItems().contains(item), "Element " + id + " is missing item: " + item); } } } }