package com.path.android.jobqueue.test.jobmanager;
import com.path.android.jobqueue.JobManager;
import com.path.android.jobqueue.Params;
import com.path.android.jobqueue.config.Configuration;
import com.path.android.jobqueue.test.jobs.DummyJob;
import org.hamcrest.MatcherAssert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.*;
import static org.hamcrest.CoreMatchers.equalTo;
@RunWith(RobolectricTestRunner.class)
public class NetworkJobWithConnectivityListenerTest extends JobManagerTestBase {
@Test
public void testNetworkJobWithConnectivityListener() throws Exception {
DummyNetworkUtilWithConnectivityEventSupport dummyNetworkUtil = new DummyNetworkUtilWithConnectivityEventSupport();
JobManager jobManager = createJobManager(new Configuration.Builder(Robolectric.application).networkUtil(dummyNetworkUtil));
dummyNetworkUtil.setHasNetwork(false, true);
DummyJob dummyJob = new DummyJob(new Params(0).requireNetwork());
long dummyJobId = jobManager.addJob(dummyJob);
Thread.sleep(2000);//sleep a while so that consumers die. they should die since we are using a network util
//with event support
MatcherAssert.assertThat("count should be 1 as no jobs should be consumed w/o network", jobManager.count(), equalTo(1));
dummyNetworkUtil.setHasNetwork(true, false);
Thread.sleep(1000); //wait a little bit more to consumer will run
MatcherAssert.assertThat("even though network is recovered, job manager should not consume any job because it " +
"does not know (we did not inform)", jobManager.count(), equalTo(1));
dummyNetworkUtil.setHasNetwork(true, true);
Thread.sleep(1000); //wait a little bit more to consumer will run
MatcherAssert.assertThat("job manager should consume network job after it is informed that network is recovered"
, jobManager.count(), equalTo(0));
}
}