Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-notes.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2021-09-30 14:55:59 +0300
committerStefan Niedermann <info@niedermann.it>2021-09-30 14:55:59 +0300
commitcb527367b077bfa8f6d241fc09a9e87c6899730b (patch)
tree47840fc74d105c7d42ed1ed3e8d8d34a190ef9bf /app/src
parent5801f00bfb79b19b02dc8fcb6862ed8a7bb71a1d (diff)
#761 Adjust unit tests
Adding account did formerly not require any network access. This commit mocks those resources. Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java4
-rw-r--r--app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesRepositoryTest.java86
2 files changed, 50 insertions, 40 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java
index 8963d87f..26d03572 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java
@@ -177,7 +177,7 @@ public class NotesRepository {
if (isSyncPossible()) {
syncActive.put(account.getId(), true);
try {
- Log.d(TAG, "... starting now");
+ Log.d(TAG, "… starting now");
final NotesImportTask importTask = new NotesImportTask(context, this, account, importExecutor, apiProvider);
return importTask.importNotes(new IResponseCallback<>() {
@Override
@@ -191,7 +191,7 @@ public class NotesRepository {
}
});
} catch (NextcloudFilesAppAccountNotFoundException e) {
- Log.e(TAG, "... Could not find " + SingleSignOnAccount.class.getSimpleName() + " for account name " + account.getAccountName());
+ Log.e(TAG, "… Could not find " + SingleSignOnAccount.class.getSimpleName() + " for account name " + account.getAccountName());
callback.onError(e);
}
} else {
diff --git a/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesRepositoryTest.java b/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesRepositoryTest.java
index 738a4c9e..ccaba514 100644
--- a/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesRepositoryTest.java
+++ b/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesRepositoryTest.java
@@ -1,7 +1,29 @@
package it.niedermann.owncloud.notes.persistence;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static it.niedermann.owncloud.notes.persistence.NotesTestingUtil.getOrAwaitValue;
+import static it.niedermann.owncloud.notes.shared.model.DBStatus.LOCAL_DELETED;
+import static it.niedermann.owncloud.notes.shared.model.DBStatus.LOCAL_EDITED;
+import static it.niedermann.owncloud.notes.shared.model.DBStatus.VOID;
+
import android.content.Context;
-import android.os.NetworkOnMainThreadException;
import androidx.annotation.NonNull;
import androidx.arch.core.executor.testing.InstantTaskExecutorRule;
@@ -9,9 +31,9 @@ import androidx.room.Room;
import androidx.test.core.app.ApplicationProvider;
import com.google.common.util.concurrent.MoreExecutors;
+import com.nextcloud.android.sso.api.ParsedResponse;
import com.nextcloud.android.sso.model.SingleSignOnAccount;
-import org.json.JSONException;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -20,38 +42,19 @@ import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import java.io.IOException;
-import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.Calendar;
-import java.util.Map;
+import java.util.Collections;
import java.util.concurrent.ExecutorService;
+import io.reactivex.Observable;
import it.niedermann.owncloud.notes.persistence.entity.Account;
import it.niedermann.owncloud.notes.persistence.entity.Note;
+import it.niedermann.owncloud.notes.persistence.sync.NotesAPI;
import it.niedermann.owncloud.notes.shared.model.Capabilities;
import it.niedermann.owncloud.notes.shared.model.IResponseCallback;
-import static it.niedermann.owncloud.notes.persistence.NotesTestingUtil.getOrAwaitValue;
-import static it.niedermann.owncloud.notes.shared.model.DBStatus.LOCAL_DELETED;
-import static it.niedermann.owncloud.notes.shared.model.DBStatus.LOCAL_EDITED;
-import static it.niedermann.owncloud.notes.shared.model.DBStatus.VOID;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertThrows;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
@RunWith(RobolectricTestRunner.class)
public class NotesRepositoryTest {
@@ -64,19 +67,26 @@ public class NotesRepositoryTest {
private NotesDatabase db;
@Before
- public void setupDB() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, JSONException {
+ public void setupDB() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, IOException {
final var context = ApplicationProvider.getApplicationContext();
db = Room
.inMemoryDatabaseBuilder(ApplicationProvider.getApplicationContext(), NotesDatabase.class)
.allowMainThreadQueries()
.build();
- final var constructor = NotesRepository.class.getDeclaredConstructor(Context.class, NotesDatabase.class, ExecutorService.class, ExecutorService.class, ApiProvider.class);
+ final var constructor = NotesRepository.class.getDeclaredConstructor(Context.class, NotesDatabase.class, ExecutorService.class, ExecutorService.class, ExecutorService.class, ApiProvider.class);
constructor.setAccessible(true);
final var executor = MoreExecutors.newDirectExecutorService();
- repo = constructor.newInstance(context, db, executor, executor, ApiProvider.getInstance());
+ final var apiProviderSpy = mock(ApiProvider.class);
+ final var notesApiSpy = mock(NotesAPI.class);
+ repo = constructor.newInstance(context, db, executor, executor, executor, apiProviderSpy);
- repo.addAccount("https://äöüß.example.com", "彼得", "彼得@äöüß.example.com", new Capabilities(), null, new IResponseCallback<Account>() {
+ doReturn(notesApiSpy).when(apiProviderSpy).getNotesAPI(any(), any(), any());
+ when(notesApiSpy.getNotesIDs()).thenReturn(Observable.just(Collections.emptyList()));
+ when(notesApiSpy.getNote(anyLong())).thenReturn(Observable.just(ParsedResponse.of(new Note())));
+
+ NotesTestingUtil.mockSingleSignOn(new SingleSignOnAccount("彼得@äöüß.example.com", "彼得", "1337", "https://äöüß.example.com", ""));
+ repo.addAccount("https://äöüß.example.com", "彼得", "彼得@äöüß.example.com", new Capabilities(), null, new IResponseCallback<>() {
@Override
public void onSuccess(Account result) {
@@ -84,12 +94,13 @@ public class NotesRepositoryTest {
@Override
public void onError(@NonNull Throwable t) {
- fail();
+ fail(t.getMessage());
}
});
account = repo.getAccountByName("彼得@äöüß.example.com");
- repo.addAccount("https://example.org", "test", "test@example.org", new Capabilities(), "Herbert", new IResponseCallback<Account>() {
+ NotesTestingUtil.mockSingleSignOn(new SingleSignOnAccount("test@example.org", "test", "1337", "https://example.org", ""));
+ repo.addAccount("https://example.org", "test", "test@example.org", new Capabilities(), "Herbert", new IResponseCallback<>() {
@Override
public void onSuccess(Account result) {
@@ -97,7 +108,7 @@ public class NotesRepositoryTest {
@Override
public void onError(@NonNull Throwable t) {
- fail();
+ fail(t.getMessage());
}
});
secondAccount = repo.getAccountByName("test@example.org");
@@ -141,8 +152,9 @@ public class NotesRepositoryTest {
}
@Test
- public void testAddAccount() {
- repo.addAccount("https://äöüß.example.com", "彼得", "彼得@äöüß.example.com", new Capabilities(), "", new IResponseCallback<Account>() {
+ public void testAddAccount() throws IOException {
+ NotesTestingUtil.mockSingleSignOn(new SingleSignOnAccount("彼得@äöüß.example.com", "彼得", "1337", "https://äöüß.example.com", ""));
+ repo.addAccount("https://äöüß.example.com", "彼得", "彼得@äöüß.example.com", new Capabilities(), "", new IResponseCallback<>() {
@Override
public void onSuccess(Account createdAccount) {
assertEquals("https://äöüß.example.com", createdAccount.getUrl());
@@ -152,7 +164,7 @@ public class NotesRepositoryTest {
@Override
public void onError(@NonNull Throwable t) {
- fail();
+ fail(t.getMessage());
}
});
}
@@ -253,10 +265,8 @@ public class NotesRepositoryTest {
NotesTestingUtil.mockSingleSignOn(new SingleSignOnAccount(account.getAccountName(), account.getUserName(), "1337", account.getUrl(), ""));
assertThrows("The very first time, this LiveData should never have been set", RuntimeException.class, () -> NotesTestingUtil.getOrAwaitValue(repo.getSyncErrors()));
- repo.scheduleSync(account, false);
- //noinspection ConstantConditions
- assertTrue("In our scenario, we expect an exception of type " + NetworkOnMainThreadException.class.getSimpleName() + " to be handeled.", getOrAwaitValue(repo.getSyncErrors()).stream()
- .anyMatch(e -> e.getMessage().contains(NetworkOnMainThreadException.class.getSimpleName())));
+ repo.scheduleSync(account, true);
+ assertEquals("In our scenario, we expect 4 failed note syncs to be handled.", 4, getOrAwaitValue(repo.getSyncErrors()).size());
}
@Test