Skip to content

Commit 4ef04d1

Browse files
committed
Add integration tests of set account information in reliability module
1 parent 87d7506 commit 4ef04d1

File tree

13 files changed

+791
-1
lines changed

13 files changed

+791
-1
lines changed

dd-sdk-android-core/api/apiSurface

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,9 @@ object com.datadog.android.log.LogAttributes
408408
const val USR_EMAIL: String
409409
const val USR_ID: String
410410
const val USR_NAME: String
411+
const val ACCOUNT_ATTRIBUTES_GROUP: String
412+
const val ACCOUNT_ID: String
413+
const val ACCOUNT_NAME: String
411414
const val VARIANT: String
412415
const val SOURCE_TYPE: String
413416
const val ERROR_FINGERPRINT: String

dd-sdk-android-core/api/dd-sdk-android-core.api

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,9 @@ public abstract interface annotation class com/datadog/android/lint/InternalApi
956956
}
957957

958958
public final class com/datadog/android/log/LogAttributes {
959+
public static final field ACCOUNT_ATTRIBUTES_GROUP Ljava/lang/String;
960+
public static final field ACCOUNT_ID Ljava/lang/String;
961+
public static final field ACCOUNT_NAME Ljava/lang/String;
959962
public static final field APPLICATION_PACKAGE Ljava/lang/String;
960963
public static final field APPLICATION_VERSION Ljava/lang/String;
961964
public static final field DATE Ljava/lang/String;

dd-sdk-android-core/src/main/kotlin/com/datadog/android/log/LogAttributes.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77
package com.datadog.android.log
88

99
import com.datadog.android.api.SdkCore
10+
import com.datadog.android.log.LogAttributes.ACCOUNT_ID
11+
import com.datadog.android.log.LogAttributes.ACCOUNT_NAME
12+
import com.datadog.android.log.LogAttributes.USR_EMAIL
13+
import com.datadog.android.log.LogAttributes.USR_ID
14+
import com.datadog.android.log.LogAttributes.USR_NAME
1015

1116
/**
1217
* This class holds constant log attribute keys.
@@ -318,6 +323,28 @@ object LogAttributes {
318323
*/
319324
const val USR_NAME: String = "$USR_ATTRIBUTES_GROUP.name"
320325

326+
/**
327+
* Group containing account properties.
328+
*
329+
* @see ACCOUNT_ID
330+
* @see ACCOUNT_NAME
331+
*/
332+
const val ACCOUNT_ATTRIBUTES_GROUP: String = "account"
333+
334+
/**
335+
* The account identifier. (String)
336+
* This value is filled automatically by the [Logger].
337+
* @see [SdkCore.setAccountInfo]
338+
*/
339+
const val ACCOUNT_ID: String = "$ACCOUNT_ATTRIBUTES_GROUP.id"
340+
341+
/**
342+
* The account friendly name. (String)
343+
* This value is filled automatically by the [Logger].
344+
* @see [SdkCore.setAccountInfo]
345+
*/
346+
const val ACCOUNT_NAME: String = "$ACCOUNT_ATTRIBUTES_GROUP.name"
347+
321348
/**
322349
* The application variant. (String)
323350
* This value is filled automatically by the [Logger].

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/DatadogCoreTest.kt

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import com.datadog.android.core.internal.ContextProvider
1919
import com.datadog.android.core.internal.CoreFeature
2020
import com.datadog.android.core.internal.DatadogCore
2121
import com.datadog.android.core.internal.SdkFeature
22+
import com.datadog.android.core.internal.account.MutableAccountInfoProvider
2223
import com.datadog.android.core.internal.lifecycle.ProcessLifecycleCallback
2324
import com.datadog.android.core.internal.lifecycle.ProcessLifecycleMonitor
2425
import com.datadog.android.core.internal.net.DefaultFirstPartyHostHeaderTypeResolver
@@ -37,6 +38,7 @@ import com.datadog.android.utils.verifyLog
3738
import com.datadog.tools.unit.annotations.TestConfigurationsProvider
3839
import com.datadog.tools.unit.extensions.TestConfigurationExtension
3940
import com.datadog.tools.unit.extensions.config.TestConfiguration
41+
import com.datadog.tools.unit.forge.exhaustiveAttributes
4042
import com.google.gson.JsonObject
4143
import fr.xgouchet.elmyr.Forge
4244
import fr.xgouchet.elmyr.annotation.AdvancedForgery
@@ -289,6 +291,52 @@ internal class DatadogCoreTest {
289291
)
290292
}
291293

294+
@Test
295+
fun `M update accountInfoProvider W setAccountInfo()`(
296+
@StringForgery(type = StringForgeryType.HEXADECIMAL) id: String,
297+
@StringForgery name: String,
298+
@MapForgery(
299+
key = AdvancedForgery(string = [StringForgery(StringForgeryType.ALPHA_NUMERICAL)]),
300+
value = AdvancedForgery(string = [StringForgery(StringForgeryType.ALPHA_NUMERICAL)])
301+
) fakeAccountProperties: Map<String, String>
302+
) {
303+
// Given
304+
val mockAccountInfoProvider = mock<MutableAccountInfoProvider>()
305+
testedCore.coreFeature.accountInfoProvider = mockAccountInfoProvider
306+
307+
// When
308+
testedCore.setAccountInfo(id, name, fakeAccountProperties)
309+
310+
// Then
311+
verify(mockAccountInfoProvider).setAccountInfo(id, name, fakeAccountProperties)
312+
}
313+
314+
@Test
315+
fun `M set additional account info W addAccountExtraInfo() is called`(
316+
forge: Forge,
317+
@StringForgery(type = StringForgeryType.HEXADECIMAL) id: String,
318+
@StringForgery name: String
319+
) {
320+
// Given
321+
val fakeExtraProperties = forge.exhaustiveAttributes(excludedKeys = setOf("id", "name"))
322+
testedCore.coreFeature = mock()
323+
whenever(testedCore.coreFeature.initialized).thenReturn(AtomicBoolean())
324+
val mockAccountInfoProvider = mock<MutableAccountInfoProvider>()
325+
whenever(testedCore.coreFeature.accountInfoProvider) doReturn mockAccountInfoProvider
326+
327+
// When
328+
testedCore.setAccountInfo(id, name, emptyMap())
329+
testedCore.addAccountExtraInfo(fakeExtraProperties)
330+
331+
// Then
332+
verify(mockAccountInfoProvider).setAccountInfo(
333+
id,
334+
name,
335+
emptyMap()
336+
)
337+
verify(mockAccountInfoProvider).addExtraInfo(extraInfo = fakeExtraProperties)
338+
}
339+
292340
@Test
293341
fun `M update feature context W updateFeatureContext()`(
294342
@StringForgery feature: String,

reliability/core-it/src/androidTest/kotlin/com/datadog/android/core/integration/tests/InternalSdkCoreTest.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,15 @@ class InternalSdkCoreTest : MockServerTest() {
7474
@StringForgery(regex = "[a-z]+\\.[a-z]+@[a-z]+\\.[a-z]{3}")
7575
lateinit var fakeUserEmail: String
7676
private var fakeUserAdditionalProperties: Map<String, Any?> = emptyMap()
77+
78+
@StringForgery(type = StringForgeryType.ALPHABETICAL)
79+
lateinit var fakeAccountId: String
80+
81+
@StringForgery(regex = "[A-Z][a-z]+ [A-Z]\\. [A-Z][a-z]+")
82+
lateinit var fakeAccountName: String
83+
84+
private var fakeAccountExtraInfo: Map<String, Any?> = emptyMap()
85+
7786
private lateinit var stubFeature: Feature
7887

7988
@StringForgery(type = StringForgeryType.ALPHABETICAL)
@@ -97,12 +106,14 @@ class InternalSdkCoreTest : MockServerTest() {
97106
)
98107
fakeTrackingConsent = forge.aValueFrom(TrackingConsent::class.java)
99108
fakeUserAdditionalProperties = forge.exhaustiveAttributes(excludedKeys = setOf("id", "name", "email"))
109+
fakeAccountExtraInfo = forge.exhaustiveAttributes(excludedKeys = setOf("id", "name"))
100110
testedInternalSdkCore = Datadog.initialize(
101111
ApplicationProvider.getApplicationContext(),
102112
fakeConfiguration,
103113
fakeTrackingConsent
104114
) as InternalSdkCore
105115
Datadog.setUserInfo(fakeUserId, fakeUserName, fakeUserEmail, fakeUserAdditionalProperties)
116+
Datadog.setAccountInfo(fakeAccountId, fakeAccountName, fakeAccountExtraInfo)
106117
testedInternalSdkCore.registerFeature(stubFeature)
107118
}
108119

@@ -150,6 +161,10 @@ class InternalSdkCoreTest : MockServerTest() {
150161
assertThat(context.userInfo.email).isEqualTo(fakeUserEmail)
151162
assertThat(context.userInfo.additionalProperties)
152163
.containsExactlyInAnyOrderEntriesOf(fakeUserAdditionalProperties)
164+
assertThat(context.accountInfo?.id).isEqualTo(fakeAccountId)
165+
assertThat(context.accountInfo?.name).isEqualTo(fakeAccountName)
166+
assertThat(context.accountInfo?.extraInfo)
167+
.containsExactlyInAnyOrderEntriesOf(fakeAccountExtraInfo)
153168
assertThat(context.featuresContext).isEmpty()
154169
}
155170

0 commit comments

Comments
 (0)