package org.openlmis.core.service; import com.google.inject.AbstractModule; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.openlmis.core.LMISTestApp; import org.openlmis.core.LMISTestRunner; import org.openlmis.core.R; import org.openlmis.core.manager.SharedPreferenceMgr; import org.openlmis.core.manager.UserInfoMgr; import org.openlmis.core.model.User; import org.robolectric.RuntimeEnvironment; import java.util.Date; import roboguice.RoboGuice; import static junit.framework.Assert.assertEquals; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(LMISTestRunner.class) public class SyncAdapterTest { private SyncAdapter syncAdapter; private SyncUpManager mockSyncUpManager; private SharedPreferenceMgr sharedPreferenceMgr; private SyncDownManager mockSyncDownManager; private UpgradeManager mockupgradeManager; @Before public void setUp() throws Exception { mockSyncUpManager = mock(SyncUpManager.class); mockSyncDownManager = mock(SyncDownManager.class); mockupgradeManager = mock(UpgradeManager.class); sharedPreferenceMgr = new SharedPreferenceMgr(RuntimeEnvironment.application); RoboGuice.overrideApplicationInjector(RuntimeEnvironment.application, new MyTestModule()); syncAdapter = new SyncAdapter(RuntimeEnvironment.application, true); syncAdapter.sharedPreferenceMgr = this.sharedPreferenceMgr; sharedPreferenceMgr.getPreference().edit().clear(); UserInfoMgr.getInstance().setUser(new User()); LMISTestApp.getInstance().setCurrentTimeMillis(new Date().getTime()); } @Test public void shouldRecordCorrespondingLastSyncTime() throws Exception { when(mockSyncUpManager.syncRnr()).thenReturn(true); when(mockSyncUpManager.syncStockCards()).thenReturn(true); syncAdapter.onPerformSync(null, null, null, null, null); long lastRnrFormSyncedTimestamp = sharedPreferenceMgr.getRnrLastSyncTime(); long lastStockCardSyncedTimestamp = sharedPreferenceMgr.getStockLastSyncTime(); Date rnrFormDate = new Date(lastRnrFormSyncedTimestamp); Date stockCardDate = new Date(lastStockCardSyncedTimestamp); Date expectDate = new Date(); assertThat(rnrFormDate.getDay(), is(expectDate.getDay())); assertThat(rnrFormDate.getHours(), is(expectDate.getHours())); assertThat(stockCardDate.getDay(), is(expectDate.getDay())); assertThat(stockCardDate.getHours(), is(expectDate.getHours())); } @Test public void shouldNotRecordLastSyncTime() throws Exception { when(mockSyncUpManager.syncRnr()).thenReturn(false); when(mockSyncUpManager.syncStockCards()).thenReturn(false); syncAdapter.onPerformSync(null, null, null, null, null); long lastRnrFormSyncedTimestamp = sharedPreferenceMgr.getRnrLastSyncTime(); long lastStockCardSyncedTimestamp = sharedPreferenceMgr.getStockLastSyncTime(); assertEquals(0, lastRnrFormSyncedTimestamp); assertEquals(0, lastStockCardSyncedTimestamp); } @Test public void shouldOnlyRecordRnrFormLastSyncTime() throws Exception { when(mockSyncUpManager.syncRnr()).thenReturn(true); when(mockSyncUpManager.syncStockCards()).thenReturn(false); syncAdapter.onPerformSync(null, null, null, null, null); long lastRnrFormSyncedTimestamp = sharedPreferenceMgr.getRnrLastSyncTime(); long lastStockCardSyncedTimestamp = sharedPreferenceMgr.getStockLastSyncTime(); Date rnrFormDate = new Date(lastRnrFormSyncedTimestamp); Date expectDate = new Date(); assertThat(rnrFormDate.getDay(), is(expectDate.getDay())); assertThat(rnrFormDate.getHours(), is(expectDate.getHours())); assertEquals(0, lastStockCardSyncedTimestamp); } @Test public void shouldSyncDownLatestProductList() throws Exception { //when syncAdapter.onPerformSync(null, null, null, null, null); //then verify(mockSyncDownManager).syncDownServerData(); } @Test public void shouldOnlyRecordStockCardLastSyncTime() throws Exception { when(mockSyncUpManager.syncRnr()).thenReturn(false); when(mockSyncUpManager.syncStockCards()).thenReturn(true); syncAdapter.onPerformSync(null, null, null, null, null); long lastRnrFormSyncedTimestamp = sharedPreferenceMgr.getRnrLastSyncTime(); long lastStockCardSyncedTimestamp = sharedPreferenceMgr.getStockLastSyncTime(); Date stockCardTime = new Date(lastStockCardSyncedTimestamp); Date expectDate = new Date(); assertThat(stockCardTime.getDay(), is(expectDate.getDay())); assertThat(stockCardTime.getHours(), is(expectDate.getHours())); assertEquals(0, lastRnrFormSyncedTimestamp); } @Test public void shouldTriggerUpgrade() throws Exception { syncAdapter.onPerformSync(null, null, null, null, null); verify(mockupgradeManager).triggerUpgrade(); } @Test public void shouldSyncCmmsWhenToggleOn() throws Exception { syncAdapter.onPerformSync(null, null, null, null, null); verify(mockSyncUpManager).syncUpCmms(); } public class MyTestModule extends AbstractModule { @Override protected void configure() { bind(SyncUpManager.class).toInstance(mockSyncUpManager); bind(SyncDownManager.class).toInstance(mockSyncDownManager); bind(UpgradeManager.class).toInstance(mockupgradeManager); } } }