Make AnalyticsService mockable via `AnalyticsServiceProtocol (#5599)

* Create AnalyticsServiceProtocol and conform AnalyticsService

* Replace AnalyticsService properties and arguments with AnalyticsServiceProtocol

* Inline AnalyticsServiceMock replacing old mock

* handle more complex AnalyticsServiceMock callsites

* move documentation from AnalyticsService to AnalyticsServiceProtocol
This commit is contained in:
Michael
2026-05-20 00:23:58 -05:00
committed by GitHub
parent 946cb53559
commit 5a07c98afc
118 changed files with 1218 additions and 505 deletions
@@ -14,7 +14,7 @@ struct PollFormScreenCoordinatorParameters {
/// The max number of allowed options, if no value provided the default value of the view model will be used.
var maxNumberOfOptions: Int?
let timelineController: TimelineControllerProtocol
let analytics: AnalyticsService
let analytics: AnalyticsServiceProtocol
let userIndicatorController: UserIndicatorControllerProtocol
}
@@ -13,7 +13,7 @@ typealias PollFormScreenViewModelType = StateStoreViewModelV2<PollFormScreenView
class PollFormScreenViewModel: PollFormScreenViewModelType, PollFormScreenViewModelProtocol {
private let timelineController: TimelineControllerProtocol
private let analytics: AnalyticsService
private let analytics: AnalyticsServiceProtocol
private let userIndicatorController: UserIndicatorControllerProtocol
private var actionsSubject: PassthroughSubject<PollFormScreenViewModelAction, Never> = .init()
@@ -24,7 +24,7 @@ class PollFormScreenViewModel: PollFormScreenViewModelType, PollFormScreenViewMo
init(mode: PollFormMode,
maxNumberOfOptions: Int? = nil,
timelineController: TimelineControllerProtocol,
analytics: AnalyticsService,
analytics: AnalyticsServiceProtocol,
userIndicatorController: UserIndicatorControllerProtocol) {
self.timelineController = timelineController
self.analytics = analytics
@@ -227,7 +227,7 @@ struct PollFormScreen_Previews: PreviewProvider, TestablePreview {
static func makeViewModel(mode: PollFormMode) -> PollFormScreenViewModel {
PollFormScreenViewModel(mode: mode,
timelineController: MockTimelineController(),
analytics: .mock(),
analytics: AnalyticsServiceMock.default(),
userIndicatorController: UserIndicatorControllerMock.default)
}
}