package crmdna.sequence;
import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig;
import com.google.appengine.tools.development.testing.LocalServiceTestHelper;
import com.googlecode.objectify.ObjectifyFilter;
import crmdna.client.Client;
import crmdna.common.api.APIException;
import crmdna.common.api.APIResponse.Status;
import crmdna.sequence.Sequence.SequenceType;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class SequenceTest {
private final LocalServiceTestHelper datastoreHelper = new LocalServiceTestHelper(
new LocalDatastoreServiceTestConfig().setApplyAllHighRepJobPolicy());
@Before
public void setUp() {
datastoreHelper.setUp();
ObjectifyFilter.complete();
}
@After
public void tearDown() {
ObjectifyFilter.complete();
datastoreHelper.tearDown();
}
@Test
public void getNextTest() {
// client cannot be invalid
try {
Sequence.getNext("isha", SequenceType.MEMBER, 5);
assertTrue(false);
} catch (APIException ex) {
assertEquals(Status.ERROR_RESOURCE_NOT_FOUND, ex.statusCode);
}
Client.create("Isha");
// error if incorrect input
try {
Sequence.getNext("isha", SequenceType.MEMBER, -1);
assertTrue(false);
} catch (APIException ex) {
assertEquals(Status.ERROR_RESOURCE_INCORRECT, ex.statusCode);
}
List<Long> ids = Sequence.getNext("isha", SequenceType.MEMBER, 5);
assertEquals(5, ids.size());
assertEquals(1, ids.get(0).longValue());
assertEquals(2, ids.get(1).longValue());
assertEquals(3, ids.get(2).longValue());
assertEquals(4, ids.get(3).longValue());
assertEquals(5, ids.get(4).longValue());
// ensure it works for 1
ids = Sequence.getNext("isha", SequenceType.MEMBER, 1);
assertEquals(1, ids.size());
assertEquals(6, ids.get(0).longValue());
assertEquals(7, Sequence.getNext("isha", SequenceType.MEMBER));
// for other sequence types
ids = Sequence.getNext("isha", SequenceType.GROUP, 2);
assertEquals(2, ids.size());
assertEquals(1, ids.get(0).longValue());
assertEquals(2, ids.get(1).longValue());
ids = Sequence.getNext("isha", SequenceType.VENUE, 3);
assertEquals(3, ids.size());
assertEquals(1, ids.get(0).longValue());
assertEquals(2, ids.get(1).longValue());
assertEquals(3, ids.get(2).longValue());
ids = Sequence.getNext("isha", SequenceType.PROGRAM, 3);
assertEquals(3, ids.size());
assertEquals(1, ids.get(0).longValue());
assertEquals(2, ids.get(1).longValue());
assertEquals(3, ids.get(2).longValue());
}
@Test
public void getNextReturnsEmptyListWhenNumElementsIsZero() {
Client.create("Isha");
List<Long> ids = Sequence.getNext("isha", SequenceType.PROGRAM, 0);
assertTrue(ids.isEmpty());
}
}