mirror of https://github.com/tuskyapp/Tusky.git
Browse Source
* Navigate to the Follow Requests page from notification Fixes #2655 * Fix lock statuspull/2773/head
5 changed files with 145 additions and 2 deletions
@ -0,0 +1,130 @@
|
||||
package com.keylesspalace.tusky |
||||
|
||||
import android.app.Activity |
||||
import android.app.NotificationManager |
||||
import android.content.ComponentName |
||||
import android.content.Intent |
||||
import androidx.test.ext.junit.runners.AndroidJUnit4 |
||||
import androidx.test.platform.app.InstrumentationRegistry |
||||
import androidx.viewpager2.widget.ViewPager2 |
||||
import androidx.work.testing.WorkManagerTestInitHelper |
||||
import at.connyduck.calladapter.networkresult.NetworkResult |
||||
import com.keylesspalace.tusky.appstore.EventHub |
||||
import com.keylesspalace.tusky.components.notifications.NotificationHelper |
||||
import com.keylesspalace.tusky.db.AccountEntity |
||||
import com.keylesspalace.tusky.entity.Account |
||||
import com.keylesspalace.tusky.entity.Notification |
||||
import com.keylesspalace.tusky.entity.TimelineAccount |
||||
import org.junit.Assert.assertEquals |
||||
import org.junit.Assert.assertNotNull |
||||
import org.junit.Before |
||||
import org.junit.Test |
||||
import org.junit.runner.RunWith |
||||
import org.mockito.kotlin.doReturn |
||||
import org.mockito.kotlin.mock |
||||
import org.robolectric.Robolectric |
||||
import org.robolectric.Shadows.shadowOf |
||||
import org.robolectric.android.util.concurrent.BackgroundExecutor.runInBackground |
||||
import org.robolectric.annotation.Config |
||||
import java.util.Date |
||||
|
||||
@Config(sdk = [28]) |
||||
@RunWith(AndroidJUnit4::class) |
||||
class MainActivityTest { |
||||
|
||||
private val context = InstrumentationRegistry.getInstrumentation().targetContext |
||||
private val account = Account( |
||||
id = "1", |
||||
localUsername = "", |
||||
username = "", |
||||
displayName = "", |
||||
createdAt = Date(), |
||||
note = "", |
||||
url = "", |
||||
avatar = "", |
||||
header = "", |
||||
) |
||||
private val accountEntity = AccountEntity( |
||||
id = 1, |
||||
domain = "test.domain", |
||||
accessToken = "fakeToken", |
||||
clientId = "fakeId", |
||||
clientSecret = "fakeSecret", |
||||
isActive = true |
||||
) |
||||
|
||||
@Before |
||||
fun setup() { |
||||
WorkManagerTestInitHelper.initializeTestWorkManager(context) |
||||
} |
||||
|
||||
@Test |
||||
fun `clicking notification of type FOLLOW shows notification tab`() { |
||||
val intent = showNotification(Notification.Type.FOLLOW) |
||||
|
||||
val activity = startMainActivity(intent) |
||||
val currentTab = activity.findViewById<ViewPager2>(R.id.viewPager).currentItem |
||||
|
||||
val notificationTab = defaultTabs().indexOfFirst { it.id == NOTIFICATIONS } |
||||
|
||||
assertEquals(currentTab, notificationTab) |
||||
} |
||||
|
||||
@Test |
||||
fun `clicking notification of type FOLLOW_REQUEST shows follow requests`() { |
||||
val intent = showNotification(Notification.Type.FOLLOW_REQUEST) |
||||
|
||||
val activity = startMainActivity(intent) |
||||
val nextActivity = shadowOf(activity).peekNextStartedActivity() |
||||
|
||||
assertNotNull(nextActivity) |
||||
assertEquals(ComponentName(context, AccountListActivity::class.java.name), nextActivity.component) |
||||
assertEquals(AccountListActivity.Type.FOLLOW_REQUESTS, nextActivity.getSerializableExtra("type")) |
||||
} |
||||
|
||||
private fun showNotification(type: Notification.Type): Intent { |
||||
val notificationManager = context.getSystemService(NotificationManager::class.java) |
||||
val shadowNotificationManager = shadowOf(notificationManager) |
||||
|
||||
NotificationHelper.createNotificationChannelsForAccount(accountEntity, context) |
||||
|
||||
runInBackground { |
||||
NotificationHelper.make( |
||||
context, |
||||
Notification( |
||||
type = type, |
||||
id = "id", |
||||
account = TimelineAccount( |
||||
id = "1", |
||||
localUsername = "connyduck", |
||||
username = "connyduck@mastodon.example", |
||||
displayName = "Conny Duck", |
||||
url = "https://mastodon.example/@ConnyDuck", |
||||
avatar = "https://mastodon.example/system/accounts/avatars/000/150/486/original/ab27d7ddd18a10ea.jpg" |
||||
), |
||||
status = null |
||||
), |
||||
accountEntity, |
||||
true |
||||
) |
||||
} |
||||
|
||||
val notification = shadowNotificationManager.allNotifications.first() |
||||
return shadowOf(notification.contentIntent).savedIntent |
||||
} |
||||
|
||||
private fun startMainActivity(intent: Intent): Activity { |
||||
val controller = Robolectric.buildActivity(MainActivity::class.java, intent) |
||||
val activity = controller.get() |
||||
activity.eventHub = EventHub() |
||||
activity.accountManager = mock { |
||||
on { activeAccount } doReturn accountEntity |
||||
} |
||||
activity.mastodonApi = mock { |
||||
onBlocking { accountVerifyCredentials() } doReturn NetworkResult.success(account) |
||||
onBlocking { listAnnouncements(false) } doReturn NetworkResult.success(emptyList()) |
||||
} |
||||
controller.create().start() |
||||
return activity |
||||
} |
||||
} |
||||
Loading…
Reference in new issue