diff --git a/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt b/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt index 851bbbf29b9..24569c1be49 100644 --- a/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt +++ b/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt @@ -3,7 +3,10 @@ package software.aws.toolkits.jetbrains.services.telemetry -import com.intellij.openapi.components.service +import com.intellij.openapi.Disposable +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.util.Disposer +import com.intellij.testFramework.replaceService import org.junit.jupiter.api.extension.AfterEachCallback import org.junit.jupiter.api.extension.BeforeEachCallback import org.junit.jupiter.api.extension.ExtensionContext @@ -13,13 +16,17 @@ import org.mockito.kotlin.spy import software.amazon.awssdk.services.toolkittelemetry.model.Sentiment import software.aws.toolkits.core.telemetry.DefaultTelemetryBatcher import software.aws.toolkits.core.telemetry.MetricEvent +import software.aws.toolkits.core.telemetry.TelemetryBatcher import software.aws.toolkits.core.telemetry.TelemetryPublisher -class NoOpTelemetryService : TelemetryService(publisher, spy(DefaultTelemetryBatcher(publisher))) { +class NoOpTelemetryService : TelemetryService { + constructor(noOpPublisher: NoOpPublisher, batcher: TelemetryBatcher) : super(noOpPublisher, batcher) + constructor() : this(NO_OP_PUBLISHER, DefaultTelemetryBatcher(NO_OP_PUBLISHER)) + fun batcher() = super.batcher - private companion object { - private val publisher: TelemetryPublisher by lazy { NoOpPublisher() } + companion object { + val NO_OP_PUBLISHER = NoOpPublisher() } } @@ -32,11 +39,21 @@ class NoOpPublisher : TelemetryPublisher { } sealed class MockTelemetryServiceBase : ExternalResource() { - private val mockTelemetryService: NoOpTelemetryService - get() = service() as NoOpTelemetryService + protected val publisher: NoOpPublisher by lazy { NoOpTelemetryService.NO_OP_PUBLISHER } + protected val batcher: TelemetryBatcher by lazy { spy(DefaultTelemetryBatcher(publisher)) } + private lateinit var disposableParent: Disposable + + private val mockTelemetryService: NoOpTelemetryService by lazy { NoOpTelemetryService(publisher, batcher) } + + override fun before() { + // hack because @TestDisposable doesn't work here as it's not a test + disposableParent = Disposer.newDisposable() + ApplicationManager.getApplication().replaceService(TelemetryService::class.java, mockTelemetryService, disposableParent) + } override fun after() { reset(batcher()) + Disposer.dispose(disposableParent) } fun telemetryService() = mockTelemetryService