From 6e485d687ceae9dea09f73d5eac8421cb8debfa8 Mon Sep 17 00:00:00 2001 From: Ashish Kumar Date: Thu, 5 Dec 2019 16:04:07 +0530 Subject: [PATCH] Added unit-tests for NotificationClient & NotificationController (#3274) --- .../notification/NotificationClientTest.kt | 72 +++++++++++++++++++ .../NotificationControllerTest.kt | 47 ++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 app/src/test/kotlin/fr/free/nrw/commons/notification/NotificationClientTest.kt create mode 100644 app/src/test/kotlin/fr/free/nrw/commons/notification/NotificationControllerTest.kt diff --git a/app/src/test/kotlin/fr/free/nrw/commons/notification/NotificationClientTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/notification/NotificationClientTest.kt new file mode 100644 index 000000000..ff2ee5131 --- /dev/null +++ b/app/src/test/kotlin/fr/free/nrw/commons/notification/NotificationClientTest.kt @@ -0,0 +1,72 @@ +package fr.free.nrw.commons.notification + +import com.nhaarman.mockito_kotlin.eq +import io.reactivex.Observable +import org.junit.Before +import org.junit.Test +import org.mockito.ArgumentMatchers +import org.mockito.Mock +import org.mockito.Mockito +import org.mockito.Mockito.verify +import org.mockito.MockitoAnnotations +import org.wikipedia.csrf.CsrfTokenClient +import org.wikipedia.dataclient.Service +import org.wikipedia.dataclient.mwapi.MwQueryResponse +import org.wikipedia.dataclient.mwapi.MwQueryResult +import org.wikipedia.notifications.Notification + +class NotificationClientTest { + + @Mock + private lateinit var service: Service + @Mock + private lateinit var csrfTokenClient: CsrfTokenClient + + @Mock + private lateinit var mQueryResponse: MwQueryResponse + @Mock + private lateinit var mQueryResult: MwQueryResult + @Mock + private lateinit var mQueryResultNotificationsList: MwQueryResult.NotificationList + @Mock + private lateinit var notificationsList: List + + private lateinit var notificationClient: NotificationClient + + /** + * initial setup, test environment + */ + @Before + @Throws(Exception::class) + fun setUp() { + MockitoAnnotations.initMocks(this) + notificationClient = NotificationClient(service, csrfTokenClient) + } + + /** + * Test getNotifications + */ + + @Test + fun getNotificationTest() { + Mockito.`when`(service.getAllNotifications(ArgumentMatchers.anyString(), ArgumentMatchers.anyString(), ArgumentMatchers.any())).thenReturn(Observable.just(mQueryResponse)) + Mockito.`when`(mQueryResponse.query()).thenReturn(mQueryResult) + Mockito.`when`(mQueryResult.notifications()).thenReturn(mQueryResultNotificationsList) + Mockito.`when`(mQueryResultNotificationsList.list()).thenReturn(notificationsList) + notificationClient.getNotifications(true) + verify(service).getAllNotifications(eq("wikidatawiki|commonswiki|enwiki"), eq("read"), eq(null)) + } + + /** + * Test mark Notifications As Read + */ + @Test + fun markNotificationAsReadTest() { + Mockito.`when`(csrfTokenClient.tokenBlocking).thenReturn("test") + Mockito.`when`(service.markRead(ArgumentMatchers.anyString(), ArgumentMatchers.anyString(), ArgumentMatchers.anyString())).thenReturn(Observable.just(mQueryResponse)) + Mockito.`when`(mQueryResponse.success()).thenReturn(true) + notificationClient.markNotificationAsRead("test") + verify(service).markRead(ArgumentMatchers.anyString(), ArgumentMatchers.anyString(), ArgumentMatchers.anyString()) + } + +} \ No newline at end of file diff --git a/app/src/test/kotlin/fr/free/nrw/commons/notification/NotificationControllerTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/notification/NotificationControllerTest.kt new file mode 100644 index 000000000..d089e7905 --- /dev/null +++ b/app/src/test/kotlin/fr/free/nrw/commons/notification/NotificationControllerTest.kt @@ -0,0 +1,47 @@ +package fr.free.nrw.commons.notification + +import com.nhaarman.mockito_kotlin.verify +import org.junit.Before +import org.junit.Test +import org.mockito.ArgumentMatchers +import org.mockito.ArgumentMatchers.eq +import org.mockito.Mock +import org.mockito.MockitoAnnotations + +class NotificationControllerTest { + + @Mock + private lateinit var notificationClient: NotificationClient + @Mock + private lateinit var notification: Notification + private lateinit var notificationController: NotificationController + + /** + * initial setup, test environment + */ + @Before + @Throws(Exception::class) + fun setUp() { + MockitoAnnotations.initMocks(this) + notificationController = NotificationController(notificationClient) + } + + /** + * Test get notifications + */ + @Test + fun testGetNotifications() { + notificationController.getNotifications(ArgumentMatchers.anyBoolean()) + verify(notificationClient).getNotifications(ArgumentMatchers.anyBoolean()) + } + + /** + * Test mark notifications as read + */ + @Test + fun testMarkNotificationsAsRead() { + notification.notificationId = "test" + notificationController.markAsRead(notification) + verify(notificationClient).markNotificationAsRead(eq("test")) + } +} \ No newline at end of file