use of com.jakdor.labday.common.model.LastUpdate in project LabDayApp by jakdor.
the class ProjectRepositoryIntegrationTest method integrationUpdateTestScenario2.
/**
* {@link ProjectRepository} getUpdate() integration test scenario 2
* - local last update id matches API id
* - get API last update id
* - load AppData from local db
* - check ProjectRepository after successful call/load
*/
@Test
public void integrationUpdateTestScenario2() throws Exception {
SharedPreferences sharedPreferences = targetContext.getSharedPreferences(targetContext.getString(R.string.pref_file_name), Context.MODE_PRIVATE);
Gson gson = new Gson();
LastUpdate expectedLastUpdate = gson.fromJson(readAssetFile(testContext, "api/last_update.json"), LastUpdate.class);
sharedPreferences.edit().putString(targetContext.getString(R.string.pref_api_last_update_id), expectedLastUpdate.getUpdatedAt()).commit();
Assert.assertEquals(projectRepository.getRepositoryState(), ProjectRepository.repositoryStates.INIT);
Assert.assertNull(projectRepository.getData());
projectRepository.setAccessToken(dummyToken);
AppData appData = gson.fromJson(readAssetFile(testContext, "api/app_data.json"), AppData.class);
localDbHandler.pushAppDataToDb(appData);
TestObserver<RxResponse<AppData>> testObserver = projectRepository.getUpdate(dummyApiUrl, targetContext).subscribeOn(Schedulers.io()).doOnError(throwable -> Assert.fail()).test();
testObserver.assertSubscribed();
testObserver.awaitCount(1);
testObserver.assertNoErrors();
testObserver.assertValue(appDataRxResponse -> {
Assert.assertNotNull(appDataRxResponse);
Assert.assertNotNull(appDataRxResponse.data);
Assert.assertNull(appDataRxResponse.error);
Assert.assertEquals(RxStatus.SUCCESS_DB, appDataRxResponse.status);
Assert.assertEquals(appData, appDataRxResponse.data);
Assert.assertEquals(appData.hashCode(), appDataRxResponse.data.hashCode());
Assert.assertEquals(ProjectRepository.repositoryStates.READY, projectRepository.getRepositoryState());
Assert.assertNotNull(projectRepository.getData());
Assert.assertEquals(appData, projectRepository.getData().data);
Assert.assertNotNull(expectedLastUpdate.getUpdatedAt());
Assert.assertEquals(new String(expectedLastUpdate.getUpdatedAt().toCharArray()), sharedPreferences.getString(targetContext.getString(R.string.pref_api_last_update_id), null));
return true;
});
testObserver.onComplete();
}
use of com.jakdor.labday.common.model.LastUpdate in project LabDayApp by jakdor.
the class ProjectRepositoryIntegrationTest method integrationLoginTestScenario1.
/**
* {@link ProjectRepository} login() api call
* - get accessToken after successful login
* - get AppData
* - check ProjectRepository after successful login/load
*/
@Test
public void integrationLoginTestScenario1() throws Exception {
SharedPreferences sharedPreferences = targetContext.getSharedPreferences(targetContext.getString(R.string.pref_file_name), Context.MODE_PRIVATE);
sharedPreferences.edit().putString(targetContext.getString(R.string.pref_api_last_update_id), "null").commit();
Assert.assertEquals(projectRepository.getRepositoryState(), ProjectRepository.repositoryStates.INIT);
Assert.assertNull(projectRepository.getData());
Gson gson = new Gson();
AppData appData = gson.fromJson(readAssetFile(testContext, "api/app_data.json"), AppData.class);
TestObserver<RxResponse<AppData>> testObserver = projectRepository.login(dummyApiUrl, targetContext, dummyLogin, dummyPassword).subscribeOn(Schedulers.io()).doOnError(throwable -> Assert.fail()).test();
testObserver.assertSubscribed();
testObserver.awaitCount(1);
testObserver.assertNoErrors();
testObserver.assertValue(appDataRxResponse -> {
Assert.assertNotNull(appDataRxResponse);
Assert.assertNotNull(appDataRxResponse.data);
Assert.assertNull(appDataRxResponse.error);
Assert.assertEquals(RxStatus.SUCCESS, appDataRxResponse.status);
Assert.assertEquals(appData, appDataRxResponse.data);
Assert.assertEquals(appData.hashCode(), appDataRxResponse.data.hashCode());
Assert.assertEquals(projectRepository.getRepositoryState(), ProjectRepository.repositoryStates.READY);
Assert.assertNotNull(projectRepository.getData());
Assert.assertEquals(projectRepository.getData().data, appData);
LastUpdate expectedLastUpdate = gson.fromJson(readAssetFile(testContext, "api/last_update.json"), LastUpdate.class);
Assert.assertNotNull(expectedLastUpdate.getUpdatedAt());
Assert.assertEquals(new String(expectedLastUpdate.getUpdatedAt().toCharArray()), sharedPreferences.getString(targetContext.getString(R.string.pref_api_last_update_id), null));
Assert.assertTrue(projectRepository.isLoggedIn(targetContext));
return true;
});
testObserver.onComplete();
}
use of com.jakdor.labday.common.model.LastUpdate in project LabDayApp by jakdor.
the class ProjectRepository method getUpdate.
/**
* Checks if update is necessary, then gets AppData from API or local db
* @return {Single<RxResponse<AppData>>} appData wrapped with {@link RxResponse}
*/
public Observable<RxResponse<AppData>> getUpdate(String apiUrl, Context context) {
if (accessToken == null) {
if (!loadAccessToken(context)) {
repositoryState = repositoryStates.ERROR;
return Observable.just(RxResponse.loginError(new Throwable("no access token")));
}
} else if (accessToken.equals("-1")) {
repositoryState = repositoryStates.ERROR;
return Observable.just(RxResponse.loginError(new Throwable("bad access token")));
}
networkManager.configAuth(apiUrl, accessToken);
networkManager.configAuth(apiUrl);
return networkManager.getLastUpdate().subscribeOn(rxSchedulersFacade.io()).observeOn(rxSchedulersFacade.ui()).onErrorResumeNext(Observable.just(new LastUpdate("-1"))).onExceptionResumeNext(Observable.just(new LastUpdate("-1"))).flatMap(s -> isLocalDataCurrent(apiUpdateId = s.getUpdatedAt(), context) ? // load from local db
localDbHandler.getAppDataFromDb() : // get appData from api
apiRequest(networkManager.getAppData())).onErrorResumeNext(// last effort data retrieval
localDbHandler.getAppDataFromDb()).flatMap(appDataRxResponse -> {
// last effort data retrieval from local db
if (appDataRxResponse.status == RxStatus.ERROR) {
return localDbHandler.getAppDataFromDb();
} else {
return Observable.just(appDataRxResponse);
}
}).doOnNext(appDataRxResponse -> {
if (appDataRxResponse.status == RxStatus.SUCCESS) {
saveApiLastUpdateId(apiUpdateId, context);
} else if (appDataRxResponse.status == RxStatus.SUCCESS_DB) {
this.data = appDataRxResponse;
this.repositoryState = repositoryStates.READY;
}
}).onErrorReturn(throwable -> {
if (apiUpdateCurrent) {
this.repositoryState = repositoryStates.NO_DB;
return RxResponse.noDb(throwable);
} else {
this.repositoryState = repositoryStates.ERROR;
return RxResponse.error(throwable);
}
});
}
use of com.jakdor.labday.common.model.LastUpdate in project LabDayApp by jakdor.
the class RetrofitAPICallsIntegrationTest method lastUpdateTest.
/**
* Tests API response to last_update call
*/
@Test
public void lastUpdateTest() throws Exception {
LabService labService = retrofitBuilder.createService(dummyApiUrl, LabService.class);
TestObserver<LastUpdate> testObserver = labService.getLastUpdate().test();
testObserver.assertSubscribed();
testObserver.awaitCount(1);
testObserver.assertNoErrors();
testObserver.assertValue(s -> {
assertNotNull(s);
assertNotNull(s.getUpdatedAt());
assertFalse(s.getUpdatedAt().isEmpty());
return true;
});
testObserver.onComplete();
}
use of com.jakdor.labday.common.model.LastUpdate in project LabDayApp by jakdor.
the class NetworkManagerIntegrationTest method getLastUpdate.
/**
* {@link NetworkManager} integration test: get last_update id from local REST API mock server
*/
@Test
public void getLastUpdate() throws Exception {
networkManager.configAuth(dummyApiUrl);
Gson gson = new Gson();
LastUpdate expectedLastUpdate = gson.fromJson(readAssetFile(testContext, "api/last_update.json"), LastUpdate.class);
TestObserver<LastUpdate> testObserver = networkManager.getLastUpdate().test();
testObserver.awaitCount(1);
testObserver.assertSubscribed();
testObserver.assertNoErrors();
testObserver.assertValue(s -> {
Assert.assertEquals(expectedLastUpdate, s);
return true;
});
testObserver.onComplete();
}
Aggregations