Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import org.json.JSONObject
import org.junit.After
import org.junit.Assert
import org.junit.Before
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import java.util.concurrent.TimeUnit
Expand Down Expand Up @@ -110,12 +109,6 @@ class EmbeddedMessageIntegrationTest : BaseIntegrationTest() {
}

@Test
@Ignore(
"BCIT backend returns `placements: []` for our dated test user even with the " +
"iOS-shape isPremium false→true transition that works for iOS. Likely a BCIT " +
"Iterable-project configuration gap (no Android-targeting embedded campaign). " +
"Re-enable once the backend side is set up."
)
fun testEmbeddedMessageMVP() {
// Step 1: Ensure user is signed in
Log.d(TAG, "📧 Step 1: Ensuring user is signed in...")
Expand All @@ -141,17 +134,17 @@ class EmbeddedMessageIntegrationTest : BaseIntegrationTest() {
}
Assert.assertTrue("FragmentContainerView should exist in EmbeddedMessageTestActivity", viewReady)

// Drive a clean isPremium false→true transition. Mirrors the iOS BCIT embedded
// test — the BCIT campaign sends on the eligibility transition, not on a flat
// eligibility check.
setIsPremium(false)
// Drive a clean standard→premium membership transition. Mirrors the iOS BCIT
// embedded test — the BCIT campaign's audience predicate is on
// `membershipLevel == "premium"`.
setMembershipLevel("standard")
syncMessagesAndWait()
Assert.assertFalse(
"User should not be eligible for placement $TEST_PLACEMENT_ID with isPremium=false",
"User should not be eligible for placement $TEST_PLACEMENT_ID with membershipLevel=standard",
IterableApi.getInstance().embeddedManager.getPlacementIds().contains(TEST_PLACEMENT_ID)
)

setIsPremium(true)
setMembershipLevel("premium")
val placementIds = syncAndWaitForPlacement(TEST_PLACEMENT_ID, timeoutSeconds = 30)
Assert.assertTrue(
"Placement ID $TEST_PLACEMENT_ID should exist, but found: $placementIds",
Expand Down Expand Up @@ -260,8 +253,8 @@ class EmbeddedMessageIntegrationTest : BaseIntegrationTest() {
Log.d(TAG, "✅✅✅ Test completed successfully! All steps passed.")
}

private fun setIsPremium(value: Boolean) {
IterableApi.getInstance().updateUser(JSONObject().put("isPremium", value))
private fun setMembershipLevel(level: String) {
IterableApi.getInstance().updateUser(JSONObject().put("membershipLevel", level))
Thread.sleep(3000)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,46 +38,45 @@ class EmbeddedMessageTestActivity : AppCompatActivity() {

private fun setupClickListeners() {
checkIsPremiumButton.setOnClickListener {
checkIsPremiumStatus()
checkMembershipStatus()
}

isPremiumSwitch.setOnCheckedChangeListener { _, isChecked ->
updateUserIsPremium(isChecked)
updateUserMembershipLevel(if (isChecked) "premium" else "standard")
}

syncMessagesButton.setOnClickListener {
syncEmbeddedMessages()
}
}
private fun checkIsPremiumStatus() {

private fun checkMembershipStatus() {
AlertDialog.Builder(this)
.setTitle("isPremium Status")
.setTitle("Membership Level")
.setMessage("User data fields are stored on the server, not in the SDK.\n\n" +
"To check isPremium status:\n" +
"To check membershipLevel:\n" +
"1. Check server logs/dashboard\n" +
"2. Call server API to get user profile\n" +
"3. Check logcat for updateUser calls")
.setPositiveButton("OK", null)
.show()
}

private fun updateUserIsPremium(isPremium: Boolean) {
val statusText = if (isPremium) "true" else "false"
updateStatus("Updating user (isPremium = $statusText)...")


private fun updateUserMembershipLevel(level: String) {
updateStatus("Updating user (membershipLevel = $level)...")

val dataFields = JSONObject().apply {
put("isPremium", isPremium)
put("membershipLevel", level)
}

isPremiumSwitch.isEnabled = false
IterableApi.getInstance().updateUser(dataFields)
Toast.makeText(this, "updateUser called (isPremium = $statusText)\nWait 5 seconds then sync messages", Toast.LENGTH_LONG).show()

Toast.makeText(this, "updateUser called (membershipLevel = $level)\nWait a few seconds then sync messages", Toast.LENGTH_LONG).show()

isPremiumSwitch.postDelayed({
isPremiumSwitch.isEnabled = true
updateStatus("User updated (isPremium = $statusText) - Sync messages to verify")
updateStatus("User updated (membershipLevel = $level) — Sync messages to verify")
}, 1000)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
android:id="@+id/btnCheckIsPremium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Check isPremium Status"
android:text="Check Membership Level"
android:layout_marginBottom="8dp" />

<LinearLayout
Expand All @@ -38,7 +38,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="isPremium Status:"
android:text="Premium Member:"
android:textSize="16sp" />

<android.widget.Switch
Expand Down
Loading