package org.openlmis.core.training;
import org.joda.time.DateTime;
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.openlmis.core.service.SyncUpManager;
import org.robolectric.RuntimeEnvironment;
import java.util.Date;
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 TrainingSyncAdapterTest {
private TrainingSyncAdapter trainingSyncAdapter;
private SyncUpManager mockSyncUpManager;
private SharedPreferenceMgr sharedPreferenceMgr;
@Before
public void setUp() throws Exception {
mockSyncUpManager = mock(SyncUpManager.class);
sharedPreferenceMgr = new SharedPreferenceMgr(RuntimeEnvironment.application);
trainingSyncAdapter = new TrainingSyncAdapter();
trainingSyncAdapter.sharedPreferenceMgr = sharedPreferenceMgr;
trainingSyncAdapter.syncUpManager = mockSyncUpManager;
sharedPreferenceMgr.getPreference().edit().clear();
UserInfoMgr.getInstance().setUser(new User());
LMISTestApp.getInstance().setCurrentTimeMillis(new Date().getTime());
}
@Test
public void shouldRequestTrainingSyncWhenTrainingFeatureIsOn() throws Exception {
LMISTestApp.getInstance().setFeatureToggle(R.bool.feature_training, true);
trainingSyncAdapter.onPerformSync();
verify(mockSyncUpManager).fakeSyncRnr();
verify(mockSyncUpManager).fakeSyncStockCards();
verify(mockSyncUpManager).fakeSyncUpCmms();
when(mockSyncUpManager.fakeSyncRnr()).thenReturn(true);
when(mockSyncUpManager.fakeSyncStockCards()).thenReturn(true);
trainingSyncAdapter.onPerformSync();
long lastRnrFormSyncedTimestamp = sharedPreferenceMgr.getRnrLastSyncTime();
long lastStockCardSyncedTimestamp = sharedPreferenceMgr.getStockLastSyncTime();
DateTime rnrFormDate = new DateTime(lastRnrFormSyncedTimestamp);
DateTime stockCardDate = new DateTime(lastStockCardSyncedTimestamp);
DateTime expectDate = new DateTime();
assertThat(rnrFormDate.getDayOfMonth(), is(expectDate.getDayOfMonth()));
assertThat(rnrFormDate.getHourOfDay(), is(expectDate.getHourOfDay()));
assertThat(stockCardDate.getDayOfMonth(), is(expectDate.getDayOfMonth()));
assertThat(stockCardDate.getHourOfDay(), is(expectDate.getHourOfDay()));
}
}