package org.commcare.android.tests.processing;
import org.commcare.CommCareApplication;
import org.commcare.CommCareTestApplication;
import org.commcare.android.CommCareTestRunner;
import org.commcare.android.database.user.models.FormRecord;
import org.commcare.android.util.SavedFormLoader;
import org.commcare.android.util.TestAppInstaller;
import org.commcare.models.database.SqlStorage;
import org.commcare.utils.StorageUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.annotation.Config;
import static org.junit.Assert.assertEquals;
/**
* @author Phillip Mates (pmates@dimagi.com).
*/
@Config(application = CommCareTestApplication.class)
@RunWith(CommCareTestRunner.class)
public class UnsentFormsTest {
@Before
public void setup() {
TestAppInstaller.installAppAndLogin(
"jr://resource/commcare-apps/archive_form_tests/profile.ccpr",
"test", "123");
SavedFormLoader.loadFormsFromPayload(
"/commcare-apps/archive_form_tests/unsent_form_payload.xml",
FormRecord.STATUS_UNSENT);
// load some extra forms to make sure only unsent ones are processed
SavedFormLoader.loadFormsFromPayload(
"/commcare-apps/archive_form_tests/saved_form_payload.xml",
FormRecord.STATUS_SAVED);
}
/**
* Verify that unsent forms are correctly ordered when submitted
*/
@Test
public void testUnsentFormLookup() {
String[] instanceOrder = {
"8dd4031e-ee5a-4423-93b3-ad45c3ced47e",
"1dd3031e-ee5a-4423-93b3-ad45c3ced47a",
"2dd2031e-ee5a-4423-93b3-ad45c3ced47b",
"3dd1031e-ee5a-4423-93b3-ad45c3ced47c",
"4dd0031e-ee5a-4423-93b3-ad45c3ced47d"};
SqlStorage<FormRecord> storage = CommCareApplication.instance().getUserStorage(FormRecord.class);
for (int i = 0; i < instanceOrder.length; i++) {
FormRecord record = storage.getRecordForValue(FormRecord.META_UUID, instanceOrder[i]);
record.setFormNumberForSubmissionOrdering(i);
storage.write(record);
}
FormRecord[] records = StorageUtils.getUnsentRecordsForCurrentApp(storage);
int count = 0;
for (FormRecord record : records) {
assertEquals(instanceOrder[count], record.getInstanceID());
count++;
}
assertEquals(5, records.length);
assertEquals(10, storage.getNumRecords());
}
}