package com.thebluealliance.androidclient.subscribers; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.thebluealliance.androidclient.R; import com.thebluealliance.androidclient.database.Database; import com.thebluealliance.androidclient.database.DatabaseMocker; import com.thebluealliance.androidclient.datafeed.framework.DatafeedTestDriver; import com.thebluealliance.androidclient.datafeed.framework.ModelMaker; import com.thebluealliance.androidclient.eventbus.EventStatsEvent; import com.thebluealliance.androidclient.listitems.ListItem; import com.thebluealliance.androidclient.listitems.StatsListElement; import org.greenrobot.eventbus.EventBus; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import android.content.res.Resources; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @Config(manifest = Config.NONE) @RunWith(RobolectricTestRunner.class) public class StatsListSubscriberTest { @Mock public Database mDb; @Mock public Resources mResources; @Mock public EventBus mEventBus; private StatsListSubscriber mSubscriber; private JsonObject mStats; private JsonElement mInsights; @Before public void setUp() { MockitoAnnotations.initMocks(this); DatabaseMocker.mockTeamsTable(mDb); when(mResources.getString(R.string.stats_format, 87.96, 50.89, 37.07)) .thenReturn("Stats"); mSubscriber = new StatsListSubscriber(mResources, mDb, mEventBus); mStats = ModelMaker.getModel(JsonObject.class, "2016nyny_oprs_apiv3"); mInsights = ModelMaker.getModel(JsonObject.class, "2016nyny_insights_apiv3"); } @Test public void testParseNullData() { DatafeedTestDriver.parseNullData(mSubscriber); } @Test public void testSimpleBinding() { StatsListSubscriber.Model model = new StatsListSubscriber.Model(mStats, mInsights); DatafeedTestDriver.testSimpleParsing(mSubscriber, model); verify(mEventBus).post(eq(new EventStatsEvent("1. Team 3419 - <b>41.77</b><br>2. Team 578 - <b>38.19</b><br>3. Team 1635 - <b>34.83</b><br>4. Team 1797 - <b>34.65</b><br>5. Team 5806 - <b>34.63</b>"))); } @Test public void testNoInsights() { StatsListSubscriber.Model model = new StatsListSubscriber.Model(mStats, null); DatafeedTestDriver.testSimpleParsing(mSubscriber, model); } @Test public void testParsedData() { StatsListSubscriber.Model model = new StatsListSubscriber.Model(mStats, mInsights); List<ListItem> data = DatafeedTestDriver.getParsedData(mSubscriber, model); assertEquals(66, data.size()); assertTrue(data.get(0) instanceof StatsListElement); StatsListElement actual = ((StatsListElement)data.get(0)); assertEquals(actual.teamNumber, "3419"); assertEquals(actual.teamName, "Team 3419"); assertEquals(actual.opr, 41.76934455450079, 0); assertEquals(actual.dpr, 18.164742518609433, 0); assertEquals(actual.ccwm, 23.60460203589137, 0); } }