package io.lqd.sdk.model;
import android.util.Log;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.Date;
import io.lqd.sdk.LQQueuer;
import io.lqd.sdk.factory.FactoryGirl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@Config(manifest = "../AndroidManifest.xml")
@RunWith(RobolectricTestRunner.class)
public class LQQueuerTest {
private ArrayList<LQNetworkRequest> queue = new ArrayList<LQNetworkRequest>();
private LQUser user = new LQUser("123");
private LQNetworkRequest q1 = new LQNetworkRequest("url", "get", user.toJSON().toString());
private LQQueuer queuer;
@Before
public void setUp() {
System.setProperty("dexmaker.dexcache", Robolectric.application.getCacheDir().getPath());
queue.clear();
queue.add(q1);
queuer = new LQQueuer(Robolectric.application, "le_token");
}
// @Test
// public void testLoadFail() {
// Robolectric.application.deleteFile("filename.queue");
//
// ArrayList<LQNetworkRequest> savedQueue = LQNetworkRequest.loadQueue(Robolectric.application, "filename");
// assertTrue(savedQueue.size() == 0);
// }
//
// @Test
// public void testSaveSuccess() {
// LQNetworkRequest.saveQueue(Robolectric.application, queue, "filename");
//
// ArrayList<LQNetworkRequest> savedQueue = LQNetworkRequest.loadQueue(Robolectric.application, "filename");
// Log.e("teste", savedQueue.get(0).getJSON());
// System.out.println(savedQueue.get(0).getJSON());
// assertEquals(queue.get(0), savedQueue.get(0));
// }
/**
* Test that queuer removes the successful requests and keep the bad requests to retry
*/
@Test
public void testRemoveSuccessRequests() {
LQNetworkRequest r1 = spy(FactoryGirl.createRequest());
LQNetworkRequest r2 = spy(FactoryGirl.createRequest());
LQNetworkRequest r3 = spy(FactoryGirl.createRequest());
LQNetworkRequest r4 = spy(FactoryGirl.createRequest());
LQNetworkRequest r5 = spy(FactoryGirl.createRequest());
when(r1.sendRequest("le_token")).thenReturn(new LQNetworkResponse(200));
when(r2.sendRequest("le_token")).thenReturn(new LQNetworkResponse(200));
when(r3.sendRequest("le_token")).thenReturn(new LQNetworkResponse(401));
when(r4.sendRequest("le_token")).thenReturn(new LQNetworkResponse(403));
when(r5.sendRequest("le_token")).thenReturn(new LQNetworkResponse(422));
queuer.addToHttpQueue(r1);
queuer.addToHttpQueue(r2);
queuer.addToHttpQueue(r3);
queuer.addToHttpQueue(r4);
queuer.addToHttpQueue(r5);
queuer.flush();
assertEquals(3, queuer.getQueue().size());
for(LQNetworkRequest req : queuer.getQueue()) {
assertEquals(1, req.getNumberOfTries());
}
}
@Test
public void testremoveByNumberOfTries() {
LQNetworkRequest r1 = spy( FactoryGirl.createRequest());
when(r1.sendRequest("le_token")).thenReturn(new LQNetworkResponse(401));
queuer.addToHttpQueue(r1);
for(int i = 0 ; i < 10 ; ++i) {
assertEquals(i, queuer.getQueue().get(0).getNumberOfTries());
queuer.flush();
assertEquals(1, queuer.getQueue().size());
}
queuer.flush();
assertEquals(0, queuer.getQueue().size());
}
@Test
public void testSendIfLastTryGraterThan30Minutes() {
LQNetworkRequest r1 = spy( FactoryGirl.createRequest());
when(r1.sendRequest("le_token")).thenReturn(new LQNetworkResponse(422));
r1.setLastTry(new Date(new Date().getTime() - (10 * 60 * 1000)));
queuer.addToHttpQueue(r1);
for(int i = 0 ; i < 20 ; ++i) {
assertEquals(0, queuer.getQueue().get(0).getNumberOfTries());
queuer.flush();
assertEquals(1, queuer.getQueue().size());
}
when(r1.sendRequest("le_token")).thenReturn(new LQNetworkResponse(200));
r1.setLastTry(new Date(new Date().getTime() - (40 * 60 * 1000)));
queuer.flush();
assertEquals(0, queuer.getQueue().size());
}
}