Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@
serviceImplementation="software.aws.toolkits.jetbrains.core.credentials.DefaultCredentialManager"
testServiceImplementation="software.aws.toolkits.jetbrains.core.credentials.MockCredentialsManager"/>
<applicationService serviceInterface="migration.software.aws.toolkits.jetbrains.services.telemetry.TelemetryService"
serviceImplementation="software.aws.toolkits.jetbrains.services.telemetry.DefaultTelemetryService"
testServiceImplementation="software.aws.toolkits.jetbrains.services.telemetry.NoOpTelemetryService"/>
serviceImplementation="software.aws.toolkits.jetbrains.services.telemetry.DefaultTelemetryService"/>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we keep it as no-op so that tests dont send metrics by default, but you can add the rule if you want to assert metrics?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

aha that makes sense

<applicationService serviceInterface="migration.software.aws.toolkits.jetbrains.core.AwsResourceCache"
serviceImplementation="software.aws.toolkits.jetbrains.core.DefaultAwsResourceCache"
testServiceImplementation="software.aws.toolkits.jetbrains.core.MockResourceCache"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@

package software.aws.toolkits.jetbrains.services.telemetry

import com.intellij.openapi.components.service
import com.intellij.openapi.application.ApplicationManager
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
Expand All @@ -13,14 +14,11 @@ 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(noOpPublisher: NoOpPublisher, batcher: TelemetryBatcher) : TelemetryService(noOpPublisher, batcher) {
fun batcher() = super.batcher

private companion object {
private val publisher: TelemetryPublisher by lazy { NoOpPublisher() }
}
}

class NoOpPublisher : TelemetryPublisher {
Expand All @@ -32,8 +30,14 @@ class NoOpPublisher : TelemetryPublisher {
}

sealed class MockTelemetryServiceBase : ExternalResource() {
private val mockTelemetryService: NoOpTelemetryService
get() = service<TelemetryService>() as NoOpTelemetryService
private val publisher: NoOpPublisher by lazy { NoOpPublisher() }
private val batcher: TelemetryBatcher by lazy { spy(DefaultTelemetryBatcher(publisher)) }

private val mockTelemetryService: NoOpTelemetryService by lazy { NoOpTelemetryService(publisher, batcher) }

override fun before() {
ApplicationManager.getApplication().replaceService(TelemetryService::class.java, mockTelemetryService, mockTelemetryService)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

replaceService needs to be reverted in the after()

}

override fun after() {
reset(batcher())
Expand Down
Loading