Add More Unit Tests for NotificationActivity (#4314)

This commit is contained in:
Madhur Gupta 2021-04-02 15:14:28 +05:30 committed by GitHub
parent a479dd5bb1
commit 5ddbc9e27a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 270 additions and 6 deletions

View file

@ -0,0 +1,21 @@
package fr.free.nrw.commons;
import androidx.appcompat.app.ActionBar;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
@Implements(ActionBar.class)
public class ShadowActionBar {
private boolean showHomeAsUp;
public boolean getShowHomeAsUp() {
return showHomeAsUp;
}
@Implementation
void setDisplayHomeAsUpEnabled(final boolean showHomeAsUp) {
this.showHomeAsUp = showHomeAsUp;
}
}

View file

@ -4,13 +4,18 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import fr.free.nrw.commons.R
import fr.free.nrw.commons.ShadowActionBar
import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.utils.NetworkUtils
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.robolectric.Robolectric import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
@ -19,9 +24,11 @@ import org.robolectric.annotation.Config
import org.robolectric.fakes.RoboMenu import org.robolectric.fakes.RoboMenu
import org.robolectric.fakes.RoboMenuItem import org.robolectric.fakes.RoboMenuItem
import org.wikipedia.AppAdapter import org.wikipedia.AppAdapter
import java.lang.reflect.Field
import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@Config(sdk = [21], application = TestCommonsApplication::class) @Config(sdk = [21], application = TestCommonsApplication::class, shadows = [ShadowActionBar::class])
class NotificationActivityUnitTests { class NotificationActivityUnitTests {
@Mock @Mock
@ -30,17 +37,25 @@ class NotificationActivityUnitTests {
@Mock @Mock
private lateinit var notification: Notification private lateinit var notification: Notification
private lateinit var context: Context @Mock
private lateinit var menuItem: MenuItem private lateinit var menuItem: MenuItem
private lateinit var networkUtils: NetworkUtils
private lateinit var context: Context
private lateinit var menuItemWithId: MenuItem
private lateinit var menuItemWithoutId: MenuItem
private lateinit var menu: Menu private lateinit var menu: Menu
private var notificationWorkerFragment = NotificationWorkerFragment()
private var notificationList =
listOf(Notification(NotificationType.UNKNOWN, "", "", "", "", ""))
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
networkUtils = mock(NetworkUtils::class.java)
AppAdapter.set(TestAppAdapter()) AppAdapter.set(TestAppAdapter())
val intent = Intent().putExtra("title", "read") val intent = Intent().putExtra("title", "read")
@ -50,10 +65,17 @@ class NotificationActivityUnitTests {
context = RuntimeEnvironment.application.applicationContext context = RuntimeEnvironment.application.applicationContext
menuItem = RoboMenuItem(null) menuItemWithId = RoboMenuItem(R.id.archived)
menuItemWithoutId = RoboMenuItem(null)
menu = RoboMenu(context) menu = RoboMenu(context)
val notificationMenuItem: Field =
NotificationActivity::class.java.getDeclaredField("notificationMenuItem")
notificationMenuItem.isAccessible = true
notificationMenuItem.set(activity, menuItemWithId)
} }
@Test @Test
@ -70,7 +92,21 @@ class NotificationActivityUnitTests {
@Test @Test
@Throws(Exception::class) @Throws(Exception::class)
fun checkRemoveNotification() { fun checkRemoveNotificationIsReadTrue() {
val isRead: Field =
NotificationActivity::class.java.getDeclaredField("isRead")
isRead.isAccessible = true
isRead.set(activity, true)
activity.removeNotification(notification)
}
@Test
@Throws(Exception::class)
fun checkRemoveNotificationIsReadFalse() {
val isRead: Field =
NotificationActivity::class.java.getDeclaredField("isRead")
isRead.isAccessible = true
isRead.set(activity, false)
activity.removeNotification(notification) activity.removeNotification(notification)
} }
@ -82,8 +118,215 @@ class NotificationActivityUnitTests {
@Test @Test
@Throws(Exception::class) @Throws(Exception::class)
fun testOnOptionsItemSelected() { fun testOnOptionsItemSelectedDefault() {
activity.onOptionsItemSelected(menuItemWithoutId)
}
@Test
@Throws(Exception::class)
fun testOnOptionsItemSelectedTitleCaseRead() {
`when`(menuItem.itemId).thenReturn(R.id.archived)
`when`(menuItem.title).thenReturn(context.getString(R.string.menu_option_read))
activity.onOptionsItemSelected(menuItem) activity.onOptionsItemSelected(menuItem)
} }
@Test
@Throws(Exception::class)
fun testOnOptionsItemSelectedTitleCaseUnread() {
`when`(menuItem.itemId).thenReturn(R.id.archived)
`when`(menuItem.title).thenReturn(context.getString(R.string.menu_option_unread))
activity.onOptionsItemSelected(menuItem)
}
@Test
@Throws(Exception::class)
fun testSetEmptyViewIsReadTrue() {
val isRead: Field =
NotificationActivity::class.java.getDeclaredField("isRead")
isRead.isAccessible = true
isRead.set(activity, true)
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"setEmptyView"
)
method.isAccessible = true
method.invoke(activity)
}
@Test
@Throws(Exception::class)
fun testSetEmptyViewIsReadFalse() {
val isRead: Field =
NotificationActivity::class.java.getDeclaredField("isRead")
isRead.isAccessible = true
isRead.set(activity, false)
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"setEmptyView"
)
method.isAccessible = true
method.invoke(activity)
}
@Test
@Throws(Exception::class)
fun testSetMenuItemTitleIsReadTrue() {
val isRead: Field =
NotificationActivity::class.java.getDeclaredField("isRead")
isRead.isAccessible = true
isRead.set(activity, true)
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"setMenuItemTitle"
)
method.isAccessible = true
method.invoke(activity)
}
@Test
@Throws(Exception::class)
fun testSetMenuItemTitleIsReadFalse() {
val isRead: Field =
NotificationActivity::class.java.getDeclaredField("isRead")
isRead.isAccessible = true
isRead.set(activity, false)
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"setMenuItemTitle"
)
method.isAccessible = true
method.invoke(activity)
}
@Test
@Throws(Exception::class)
fun testSetPageTitleIsReadTrue() {
val isRead: Field =
NotificationActivity::class.java.getDeclaredField("isRead")
isRead.isAccessible = true
isRead.set(activity, true)
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"setPageTitle"
)
method.isAccessible = true
method.invoke(activity)
}
@Test
@Throws(Exception::class)
fun testSetPageTitleIsReadFalse() {
val isRead: Field =
NotificationActivity::class.java.getDeclaredField("isRead")
isRead.isAccessible = true
isRead.set(activity, false)
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"setPageTitle"
)
method.isAccessible = true
method.invoke(activity)
}
@Test
@Throws(Exception::class)
fun testSetItemsListNull() {
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"setItems", List::class.java
)
method.isAccessible = true
method.invoke(activity, null)
}
@Test
@Throws(Exception::class)
fun testSetItemsListNonNull() {
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"setItems", List::class.java
)
method.isAccessible = true
method.invoke(activity, notificationList)
}
@Test
@Throws(Exception::class)
fun testHandleUrlNull() {
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"handleUrl", String::class.java
)
method.isAccessible = true
method.invoke(activity, null)
}
@Test
@Throws(Exception::class)
fun testHandleUrlNonNull() {
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"handleUrl", String::class.java
)
method.isAccessible = true
method.invoke(activity, "string")
}
@Test
@Throws(Exception::class)
fun checkAddNotificationsNull() {
val mNotificationWorkerFragment: Field =
NotificationActivity::class.java.getDeclaredField("mNotificationWorkerFragment")
mNotificationWorkerFragment.isAccessible = true
mNotificationWorkerFragment.set(activity, null)
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"addNotifications", Boolean::class.java
)
method.isAccessible = true
method.invoke(activity, true)
}
@Test
@Throws(Exception::class)
fun checkAddNotificationsNonNull() {
val mNotificationWorkerFragment: Field =
NotificationActivity::class.java.getDeclaredField("mNotificationWorkerFragment")
mNotificationWorkerFragment.isAccessible = true
mNotificationWorkerFragment.set(activity, notificationWorkerFragment)
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"addNotifications", Boolean::class.java
)
method.isAccessible = true
method.invoke(activity, true)
}
@Test
@Throws(Exception::class)
fun testInitListViewIsReadFalse() {
val isRead: Field =
NotificationActivity::class.java.getDeclaredField("isRead")
isRead.isAccessible = true
isRead.set(activity, false)
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"initListView"
)
method.isAccessible = true
method.invoke(activity)
}
@Test
@Throws(Exception::class)
fun testInitListViewIsReadTrue() {
val isRead: Field =
NotificationActivity::class.java.getDeclaredField("isRead")
isRead.isAccessible = true
isRead.set(activity, true)
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"initListView"
)
method.isAccessible = true
method.invoke(activity)
}
@Test
@Throws(Exception::class)
fun testRefreshNull() {
val method: Method = NotificationActivity::class.java.getDeclaredMethod(
"refresh", Boolean::class.java
)
method.isAccessible = true
method.invoke(activity, true)
}
} }