package com.rapidftr.model;
import com.rapidftr.form.FormField;
import com.rapidftr.form.FormFieldAction;
import com.rapidftr.form.Forms;
import com.sun.me.web.request.Part;
import com.sun.me.web.request.PostData;
import org.json.me.JSONArray;
import org.json.me.JSONException;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
public class ChildTest {
private Forms forms;
private static final String UPDATED_DATE = "2010-11-2 01:00:00GMT";
@Before
public void setUp() throws JSONException {
forms = new Forms(new JSONArray("[{'fields':[{'name':'name','enabled':true,'type':'text_field','display_name':'Name'}]}]"));
}
@Test
public void twoChildrenShouldBeSameIfHaveSameUniqueIdentifier() {
Child alice = ChildFactory.newChild();
alice.setField("name", "Alice");
alice.setField("unique_identifier", "unique_identifier");
Child joy = ChildFactory.newChild();
joy.setField("name", "joy");
joy.setField("unique_identifier", "unique_identifier");
assertTrue(joy.equals(alice));
}
@Test
public void twoChildrenShouldBeSameIfHaveSameCouchId() {
Child alice = ChildFactory.newChild();
String couchId = "someRandomCouchId";
alice.setField("name", "Alice");
alice.setField("_id", couchId);
Child joy = ChildFactory.newChild();
joy.setField("name", "joy");
joy.setField("_id", couchId);
assertTrue(joy.equals(alice));
}
@Test
public void shouldCreateNewChildWithSupliedFormData() {
forms.forEachField(new FormFieldAction() {
@Override
public void execute(FormField field) {
field.setValue("someName");
}
});
Child alice = ChildFactory.newChild();
alice.update(forms, UPDATED_DATE);
assertEquals("someName", alice.getField("name"));
}
@Test
public void shouldUpdateChildWithSupliedFormData() {
forms.forEachField(new FormFieldAction() {
@Override
public void execute(FormField field) {
field.setValue("someName");
}
});
Child alice = ChildFactory.newChild();
String couchId = "someRandomCouchId";
alice.setField("name", "Alice");
alice.setField("_id", couchId);
alice.update(forms, UPDATED_DATE);
assertEquals("someName", alice.getField("name"));
}
@Test
public void shouldUpdateLastUpdated() {
forms.forEachField(new FormFieldAction() {
@Override
public void execute(FormField field) {
field.setValue("someName");
}
});
Child child = ChildFactory.newChild();
child.setField("name", "Alice");
assertNull(child.getField(Child.LAST_UPDATED_KEY));
child.update(forms, UPDATED_DATE);
assertEquals(child.getField(Child.LAST_UPDATED_KEY), UPDATED_DATE);
}
@Test
public void isNewChildShouldReturnTrueIfChildHaveNullUniqueIdentifier() {
Child joy = ChildFactory.newChild();
joy.setField("name", "joy");
assertTrue(joy.isNewChild());
}
@Test
public void isNewChildShouldReturnFalseIfChildHaveSomeUniqueIdentifier() {
Child joy = ChildFactory.newChild();
joy.setField("name", "joy");
joy.setField("unique_identifier", "unique_identifier");
assertFalse(joy.isNewChild());
}
@Test
public void isNewChildShouldReturnFalseEvenIfThereIsASynchFailure() {
Child child = ChildFactory.newChild();
child.syncFailed("Some synch failure");
assertTrue(child.isNewChild());
}
@Test
public void shouldNotPutNullValuesInHashTable() {
Child child = ChildFactory.newChild();
child.setField("name", null);
}
@Test
public void shouldSetCreatedAt() {
Child child = ChildFactory.newChild();
assertNotNull(child.getField(Child.CREATED_AT_KEY));
}
@Test
public void shouldGetPostData() {
Child child = ChildFactory.newChild();
PostData data = child.getPostData();
Part[] parts = data.getParts();
assertEquals(2, parts.length);
assertEquals("form-data; name=\"child[_id]\"", parts[0].getHeaders()[0]
.getValue());
assertEquals("form-data; name=\"child[created_at]\"", parts[1]
.getHeaders()[0].getValue());
}
@Test
public void shouldGetPostDataWithoutHistories() {
Child child = ChildFactory.newChild();
child.setField("histories", "[histories]");
PostData data = child.getPostData();
Part[] parts = data.getParts();
assertEquals(2, parts.length);
}
@Test
public void shouldSetFlaggedKey() {
Child child = ChildFactory.newChild();
child.flagRecord("Reason");
assertNotNull(child.getField(Child.FLAGGED_KEY));
assertTrue("true".equals(child.getField(Child.FLAGGED_KEY)));
}
@Test
public void isUpdatedshouldReturnTrueWhenRecordIsFlagged() {
Child child = ChildFactory.newChild();
child.flagRecord("Reason");
assertTrue(child.isUpdated());
}
@Test
public void shouldReturnFlaggedByUserName() {
Child child = ChildFactory.newChild();
String histories = "[{\"changes\":{\"flag\":{\"from\":\"\",\"to\":\"true\"}},\"datetime\":\"01/02/2011 22:01\",\"user_name\":\"rapidftr\"}]";
child.setField("histories", histories);
assertEquals("rapidftr", child.flaggedByUserName());
}
}