Skip to content

Commit 0c6ebd5

Browse files
authored
Emit telemetry change event before persisting setting (#4637)
1 parent eccdf21 commit 0c6ebd5

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed

plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/settings/AwsSettings.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ class DefaultAwsSettings : PersistentStateComponent<AwsConfiguration>, AwsSettin
4747
override var isTelemetryEnabled: Boolean
4848
get() = state.isTelemetryEnabled ?: true
4949
set(value) {
50-
state.isTelemetryEnabled = value
5150
val enablementElement = if (value) "aws_enabledTelemetry" else "aws_disabledTelemetry"
5251
TelemetryService.getInstance().setTelemetryEnabled(value) {
5352
UiTelemetry.click(null as Project?, enablementElement)
5453
}
54+
state.isTelemetryEnabled = value
5555
}
5656

5757
override var promptedForTelemetry: Boolean
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.jetbrains.settings
5+
6+
import com.intellij.openapi.application.ApplicationManager
7+
import com.intellij.testFramework.DisposableRule
8+
import com.intellij.testFramework.ProjectRule
9+
import com.intellij.testFramework.replaceService
10+
import org.assertj.core.api.Assertions.assertThat
11+
import org.junit.Rule
12+
import org.junit.jupiter.api.BeforeEach
13+
import org.junit.jupiter.api.Test
14+
import org.mockito.kotlin.argumentCaptor
15+
import org.mockito.kotlin.inOrder
16+
import org.mockito.kotlin.mock
17+
import org.mockito.kotlin.spy
18+
import software.aws.toolkits.core.telemetry.TelemetryBatcher
19+
import software.aws.toolkits.core.telemetry.TelemetryPublisher
20+
import software.aws.toolkits.jetbrains.services.telemetry.NoOpPublisher
21+
import software.aws.toolkits.jetbrains.services.telemetry.TelemetryService
22+
23+
class AwsSettingsTest {
24+
private class TestTelemetryService(
25+
publisher: TelemetryPublisher = NoOpPublisher(),
26+
batcher: TelemetryBatcher
27+
) : TelemetryService(publisher, batcher)
28+
29+
@Rule
30+
@JvmField
31+
val projectRule = ProjectRule()
32+
33+
@Rule
34+
@JvmField
35+
val disposableRule = DisposableRule()
36+
37+
private lateinit var telemetryService: TelemetryService
38+
private lateinit var batcher: TelemetryBatcher
39+
private lateinit var awsSettings: DefaultAwsSettings
40+
private lateinit var awsConfiguration: AwsConfiguration
41+
42+
@BeforeEach
43+
fun setup() {
44+
batcher = mock()
45+
telemetryService = spy(TestTelemetryService(batcher = batcher))
46+
awsSettings = spy(DefaultAwsSettings())
47+
awsConfiguration = spy(AwsConfiguration())
48+
awsSettings.loadState(awsConfiguration)
49+
ApplicationManager.getApplication().replaceService(TelemetryService::class.java, telemetryService, disposableRule.disposable)
50+
ApplicationManager.getApplication().replaceService(AwsSettings::class.java, awsSettings, disposableRule.disposable)
51+
}
52+
53+
@Test
54+
fun `telemetry event batched before setting isTelemetryEnabled to false`() {
55+
verifyTelemetryEventOrder(false)
56+
}
57+
58+
@Test
59+
fun `telemetry event batched before setting isTelemetryEnabled to true`() {
60+
verifyTelemetryEventOrder(true)
61+
}
62+
63+
private fun verifyTelemetryEventOrder(value: Boolean) {
64+
val inOrder = inOrder(telemetryService, batcher, awsConfiguration)
65+
val changeCaptor = argumentCaptor<Boolean>()
66+
val onChangeEventCaptor = argumentCaptor<(Boolean) -> Unit>()
67+
68+
AwsSettings.getInstance().isTelemetryEnabled = value
69+
70+
inOrder.verify(telemetryService).setTelemetryEnabled(changeCaptor.capture(), onChangeEventCaptor.capture())
71+
assertThat(changeCaptor.firstValue).isEqualTo(value)
72+
inOrder.verify(batcher).onTelemetryEnabledChanged(value, onChangeEventCaptor.firstValue)
73+
inOrder.verify(awsConfiguration).isTelemetryEnabled = value
74+
}
75+
}

0 commit comments

Comments
 (0)