@@ -5,10 +5,14 @@ package software.aws.toolkits.jetbrains.services.telemetry
55
66import com.intellij.ide.highlighter.ProjectFileType
77import com.intellij.openapi.project.ex.ProjectManagerEx
8+ import com.intellij.testFramework.DisposableRule
9+ import com.intellij.testFramework.ExtensionTestUtil
810import com.intellij.testFramework.PlatformTestUtil
911import com.intellij.testFramework.ProjectRule
1012import com.intellij.testFramework.TemporaryDirectory
1113import com.intellij.testFramework.createTestOpenProjectOptions
14+ import kotlinx.coroutines.ExperimentalCoroutinesApi
15+ import kotlinx.coroutines.test.runBlockingTest
1216import org.assertj.core.api.Assertions.assertThat
1317import org.junit.After
1418import org.junit.Rule
@@ -19,23 +23,29 @@ import org.mockito.kotlin.mock
1923import org.mockito.kotlin.stub
2024import org.mockito.kotlin.times
2125import org.mockito.kotlin.verify
26+ import software.amazon.awssdk.services.toolkittelemetry.model.Sentiment
2227import software.aws.toolkits.core.credentials.CredentialIdentifier
2328import software.aws.toolkits.core.region.AwsRegion
2429import software.aws.toolkits.core.telemetry.DefaultMetricEvent.Companion.METADATA_INVALID
2530import software.aws.toolkits.core.telemetry.DefaultMetricEvent.Companion.METADATA_NOT_SET
2631import software.aws.toolkits.core.telemetry.MetricEvent
2732import software.aws.toolkits.core.telemetry.TelemetryBatcher
2833import software.aws.toolkits.core.telemetry.TelemetryPublisher
34+ import software.aws.toolkits.core.utils.test.aString
2935import software.aws.toolkits.jetbrains.core.MockResourceCacheRule
3036import software.aws.toolkits.jetbrains.core.credentials.AwsConnectionManager
3137import software.aws.toolkits.jetbrains.core.credentials.ConnectionState
3238import software.aws.toolkits.jetbrains.core.credentials.MockAwsConnectionManager
3339import software.aws.toolkits.jetbrains.core.credentials.MockAwsConnectionManager.ProjectAccountSettingsManagerRule
3440import software.aws.toolkits.jetbrains.core.credentials.MockCredentialManagerRule
3541import software.aws.toolkits.jetbrains.core.credentials.waitUntilConnectionStateIsStable
42+ import software.aws.toolkits.jetbrains.core.experiments.DummyExperiment
43+ import software.aws.toolkits.jetbrains.core.experiments.ToolkitExperimentManager
44+ import software.aws.toolkits.jetbrains.core.experiments.setState
3645import software.aws.toolkits.jetbrains.core.region.MockRegionProviderRule
3746import software.aws.toolkits.jetbrains.services.sts.StsResources
3847import software.aws.toolkits.jetbrains.settings.AwsSettings
48+ import software.aws.toolkits.jetbrains.ui.feedback.ENABLED_EXPERIMENTS
3949import java.util.concurrent.CountDownLatch
4050import java.util.concurrent.TimeUnit
4151
@@ -62,6 +72,10 @@ class TelemetryServiceTest {
6272 @Rule
6373 val connectionSettingsManager = ProjectAccountSettingsManagerRule (projectRule)
6474
75+ @JvmField
76+ @Rule
77+ val disposableRule = DisposableRule ()
78+
6579 @After
6680 fun tearDown () {
6781 AwsSettings .getInstance().isTelemetryEnabled = false
@@ -243,6 +257,28 @@ class TelemetryServiceTest {
243257 }
244258 }
245259
260+ @Test
261+ @ExperimentalCoroutinesApi
262+ fun experimentStatusIsIncludedInFeedback () = runBlockingTest {
263+ val fooExperiment = DummyExperiment ()
264+ val barExperiment = DummyExperiment ()
265+ val bloopExperiment = DummyExperiment ()
266+ ExtensionTestUtil .maskExtensions(ToolkitExperimentManager .EP_NAME , listOf (fooExperiment, barExperiment, bloopExperiment), disposableRule.disposable)
267+
268+ fooExperiment.setState(true )
269+ barExperiment.setState(true )
270+
271+ val publisher = mock<TelemetryPublisher >()
272+ val telemetryService = TestTelemetryService (publisher = publisher, batcher = mock())
273+
274+ val comment = aString()
275+
276+ telemetryService.sendFeedback(Sentiment .NEGATIVE , comment)
277+ telemetryService.dispose()
278+
279+ verify(publisher).sendFeedback(Sentiment .NEGATIVE , comment, mapOf (ENABLED_EXPERIMENTS to " ${fooExperiment.id} ,${barExperiment.id} " ))
280+ }
281+
246282 @Test
247283 fun disposeClosesThePublisher () {
248284 val mockPublisher = mock<TelemetryPublisher >()
0 commit comments