Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add public get tags method #1893

Merged
merged 12 commits into from
Nov 16, 2023
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,9 @@ interface IUserManager {
* @param keys The collection of keys, all of which will be removed from the current user.
*/
fun removeTags(keys: Collection<String>)

/**
* Return a copy of all local tags from the current user.
*/
fun getTags() : Map<String, String>
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,6 @@ internal open class UserManager(
val externalId: String?
get() = _identityModel.externalId

val tags: Map<String, String>
get() = _propertiesModel.tags

val aliases: Map<String, String>
get() = _identityModel.filter { it.key != IdentityModel::id.name }.toMap()

Expand Down Expand Up @@ -218,4 +215,8 @@ internal open class UserManager(
_propertiesModel.tags.remove(it)
}
}

override fun getTags(): Map<String, String> {
return _propertiesModel.tags.toMap()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.onesignal.user.internal.subscriptions.ISubscriptionManager
import com.onesignal.user.internal.subscriptions.SubscriptionList
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.shouldBe
import io.kotest.matchers.shouldNotBe
import io.kotest.runner.junit4.KotestTestRunner
import io.mockk.every
import io.mockk.just
Expand Down Expand Up @@ -107,8 +108,8 @@ class UserManagerTests : FunSpec({
UserManager(mockSubscriptionManager, MockHelper.identityModelStore(), propertiesModelStore, MockHelper.languageContext())

// When
val tag1 = userManager.tags["my-tag-key1"]
val tag2 = userManager.tags["my-tag-key2"]
val tag1 = propertiesModelStore.model.tags["my-tag-key1"]
val tag2 = propertiesModelStore.model.tags["my-tag-key2"]

// add
userManager.addTag("my-tag-key5", "my-tag-value5")
Expand All @@ -135,6 +136,32 @@ class UserManagerTests : FunSpec({
propertiesModelStore.model.tags["my-tag-key3"] shouldBe null
}

test("getTags returns a copy of tags") {
// Given
val mockSubscriptionManager = mockk<ISubscriptionManager>()
val propertiesModelStore =
MockHelper.propertiesModelStore {
it.tags["my-tag-key1"] = "my-tag-value1"
}

val userManager =
UserManager(mockSubscriptionManager, MockHelper.identityModelStore(), propertiesModelStore, MockHelper.languageContext())

// When
val tagSnapshot1 = userManager.getTags()

// Then
tagSnapshot1.size shouldBe propertiesModelStore.model.tags.size
tagSnapshot1["my-tag-key1"] shouldBe propertiesModelStore.model.tags["my-tag-key1"]

// Modify
userManager.addTag("my-tag-key2", "my-tag-value2")
userManager.getTags().size shouldBe 2

// Then
tagSnapshot1.size shouldNotBe userManager.getTags().size
}

test("subscriptions are backed by the subscriptions manager") {
// Given
val subscriptionList = SubscriptionList(listOf(), UninitializedPushSubscription())
Expand Down