You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.3 KiB
Kotlin
93 lines
3.3 KiB
Kotlin
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.fenix.ui
|
|
|
|
import android.content.Context
|
|
import android.os.Build
|
|
import androidx.test.rule.GrantPermissionRule
|
|
import androidx.test.rule.GrantPermissionRule.grant
|
|
import mozilla.components.service.nimbus.messaging.FxNimbusMessaging
|
|
import org.json.JSONObject
|
|
import org.junit.Before
|
|
import org.junit.Rule
|
|
import org.junit.Test
|
|
import org.mozilla.experiments.nimbus.HardcodedNimbusFeatures
|
|
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
|
|
import org.mozilla.fenix.helpers.TestHelper
|
|
import org.mozilla.fenix.helpers.TestHelper.mDevice
|
|
import org.mozilla.fenix.helpers.TestSetup
|
|
import org.mozilla.fenix.nimbus.FxNimbus
|
|
import org.mozilla.fenix.ui.robots.notificationShade
|
|
|
|
/**
|
|
* A UI test for testing the notification surface for Nimbus Messaging.
|
|
*/
|
|
class NimbusMessagingNotificationTest : TestSetup() {
|
|
private lateinit var context: Context
|
|
private lateinit var hardcodedNimbus: HardcodedNimbusFeatures
|
|
|
|
@get:Rule
|
|
val activityTestRule =
|
|
HomeActivityIntentTestRule.withDefaultSettingsOverrides(skipOnboarding = true)
|
|
|
|
@get:Rule
|
|
val grantPermissionRule: GrantPermissionRule =
|
|
if (Build.VERSION.SDK_INT >= 33) {
|
|
grant("android.permission.POST_NOTIFICATIONS")
|
|
} else {
|
|
grant()
|
|
}
|
|
|
|
@Before
|
|
override fun setUp() {
|
|
super.setUp()
|
|
context = TestHelper.appContext
|
|
}
|
|
|
|
@Test
|
|
fun testShowingNotificationMessage() {
|
|
hardcodedNimbus = HardcodedNimbusFeatures(
|
|
context,
|
|
"messaging" to JSONObject(
|
|
"""
|
|
{
|
|
"message-under-experiment": "test-default-browser-notification",
|
|
"messages": {
|
|
"test-default-browser-notification": {
|
|
"title": "preferences_set_as_default_browser",
|
|
"text": "default_browser_experiment_card_text",
|
|
"surface": "notification",
|
|
"style": "NOTIFICATION",
|
|
"action": "MAKE_DEFAULT_BROWSER",
|
|
"trigger": [
|
|
"ALWAYS"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
""".trimIndent(),
|
|
),
|
|
)
|
|
// The scheduling of the Messaging Notification Worker happens in the HomeActivity
|
|
// onResume().
|
|
// We need to have connected FxNimbus to hardcodedNimbus by the time it is scheduled, so
|
|
// we finishActivity, connect, _then_ re-launch the activity so that the worker has
|
|
// hardcodedNimbus by the time its re-scheduled.
|
|
// Because the scheduling happens for a second time, the work request needs to replace the
|
|
// existing one.
|
|
activityTestRule.finishActivity()
|
|
hardcodedNimbus.connectWith(FxNimbus)
|
|
activityTestRule.launchActivity(null)
|
|
|
|
mDevice.openNotification()
|
|
notificationShade {
|
|
val data =
|
|
FxNimbusMessaging.features.messaging.value().messages["test-default-browser-notification"]
|
|
verifySystemNotificationExists(data!!.title!!)
|
|
verifySystemNotificationExists(data.text)
|
|
}
|
|
}
|
|
}
|