Skip to content

Commit 320596d

Browse files
Refactor FXIOS-13748 [Telemetry] Migrate FxAWebViewTelemetry to use mock telemetry (#30245)
* Bugfix FXIOS-13685 [Bookmarks] Fix navigation bar partial display in New Folder screen on landscape * Refactor FXIOS-13748 [Telemetry] Use TelemetryWrapperProtocol in FxAWebViewTelemetry - Add dependency injection for TelemetryWrapperProtocol in FxAWebViewTelemetry - Mock TelemetryWrapper in SyncTelemetryTests to avoid calling Glean during tests - Add 7 new test methods to verify recordTelemetry() behavior * Update firefox-ios/RustFxA/FxAWebViewTelemetry.swift Co-authored-by: lmarceau <[email protected]> * Add MockTelemetryWrapper to test target --------- Co-authored-by: lmarceau <[email protected]>
1 parent bdf008d commit 320596d

File tree

3 files changed

+73
-3
lines changed

3 files changed

+73
-3
lines changed

firefox-ios/Client.xcodeproj/project.pbxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1386,6 +1386,7 @@
13861386
96EB6C3827D821B800A9D159 /* HistoryPanelViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96EB6C3727D821B800A9D159 /* HistoryPanelViewModel.swift */; };
13871387
96EB6C3E27D9266500A9D159 /* HistoryActionables.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96EB6C3D27D9266500A9D159 /* HistoryActionables.swift */; };
13881388
96F8DA49280452CA00E53239 /* GleanPlumbContextProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F8DA48280452CA00E53239 /* GleanPlumbContextProvider.swift */; };
1389+
A0B6D6632EB49C0400574E34 /* MockTelemetryWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A9A09D328B01D8700B6F51E /* MockTelemetryWrapper.swift */; };
13891390
A83E5B1A1C1DA8BF0026D912 /* image.gif in Resources */ = {isa = PBXBuildFile; fileRef = A83E5B181C1DA8BF0026D912 /* image.gif */; };
13901391
A83E5B1B1C1DA8BF0026D912 /* image.png in Resources */ = {isa = PBXBuildFile; fileRef = A83E5B191C1DA8BF0026D912 /* image.png */; };
13911392
A83E5B1D1C1DA8D80026D912 /* UIPasteboardExtensionsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A83E5B1C1C1DA8D80026D912 /* UIPasteboardExtensionsTests.swift */; };
@@ -18180,6 +18181,7 @@
1818018181
buildActionMask = 2147483647;
1818118182
files = (
1818218183
43D6D6A327E535FF00F47485 /* FxALoginRegistrationTelemetryTests.swift in Sources */,
18184+
A0B6D6632EB49C0400574E34 /* MockTelemetryWrapper.swift in Sources */,
1818318185
);
1818418186
runOnlyForDeploymentPostprocessing = 0;
1818518187
};

firefox-ios/RustFxA/FxAWebViewTelemetry.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// file, You can obtain one at http://mozilla.org/MPL/2.0/
44

55
import Foundation
6+
import Common
67

78
enum FxAFlow {
89
case completed
@@ -40,6 +41,11 @@ class FxAWebViewTelemetry {
4041
// There are two valid started flow
4142
// signup and signin
4243
var validStartedFlow: FxAUrlPathStartedFlow?
44+
private let telemetryWrapper: TelemetryWrapperProtocol
45+
46+
init(telemetryWrapper: TelemetryWrapperProtocol = TelemetryWrapper.shared) {
47+
self.telemetryWrapper = telemetryWrapper
48+
}
4349

4450
func getFlowFromUrl(fxaUrl: URL?) -> FxAUrlPathStartedFlow? {
4551
guard let url = fxaUrl,
@@ -84,7 +90,7 @@ class FxAWebViewTelemetry {
8490
eventObject = .fxaConfirmSignInToken
8591
}
8692
}
87-
TelemetryWrapper.recordEvent(
93+
telemetryWrapper.recordEvent(
8894
category: .firefoxAccount,
8995
method: .view,
9096
object: eventObject)

firefox-ios/firefox-ios-tests/Tests/SyncTelemetryTests/FxALoginRegistrationTelemetryTests.swift

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,19 @@ struct MockFxAUrls {
1414
static let mockSignInTockenUrl = URL(string: "https://accounts.firefox.com/oauth/signin_token_code/")!
1515
}
1616

17-
// TODO: FXIOS-13748 - Migrate SyncTelemetryTests to use mock telemetry or GleanWrapper
1817
class SyncTelemetryTests: XCTestCase {
1918
var fxaWebViewTelemetry: FxAWebViewTelemetry!
19+
var telemetryWrapper: MockTelemetryWrapper!
2020

2121
override func setUp() {
2222
super.setUp()
23-
fxaWebViewTelemetry = FxAWebViewTelemetry()
23+
telemetryWrapper = MockTelemetryWrapper()
24+
fxaWebViewTelemetry = FxAWebViewTelemetry(telemetryWrapper: telemetryWrapper)
2425
}
2526

2627
override func tearDown() {
2728
fxaWebViewTelemetry = nil
29+
telemetryWrapper = nil
2830
super.tearDown()
2931
}
3032

@@ -51,4 +53,64 @@ class SyncTelemetryTests: XCTestCase {
5153
XCTAssertNotNil(flow)
5254
XCTAssertEqual(flow, FxAUrlPathStartedFlow.confirmSignupCode)
5355
}
56+
57+
// MARK: - recordTelemetry() tests
58+
59+
func testRecordTelemetry_signinStarted_recordsCorrectEvent() {
60+
fxaWebViewTelemetry.recordTelemetry(for: .startedFlow(type: .signinStarted))
61+
62+
XCTAssertEqual(telemetryWrapper.recordEventCallCount, 1)
63+
XCTAssertEqual(telemetryWrapper.recordedCategories.first, .firefoxAccount)
64+
XCTAssertEqual(telemetryWrapper.recordedMethods.first, .view)
65+
XCTAssertEqual(telemetryWrapper.recordedObjects.first, .fxaLoginWebpage)
66+
}
67+
68+
func testRecordTelemetry_signinCompleted_recordsCorrectEvent() {
69+
fxaWebViewTelemetry.recordTelemetry(for: .startedFlow(type: .signinStarted))
70+
fxaWebViewTelemetry.recordTelemetry(for: .completed)
71+
72+
XCTAssertEqual(telemetryWrapper.recordEventCallCount, 2)
73+
XCTAssertEqual(telemetryWrapper.recordedObjects.last, .fxaLoginCompleteWebpage)
74+
}
75+
76+
func testRecordTelemetry_signinTokenCode_recordsCorrectEvent() {
77+
fxaWebViewTelemetry.recordTelemetry(for: .startedFlow(type: .signinTokenCode))
78+
79+
XCTAssertEqual(telemetryWrapper.recordEventCallCount, 1)
80+
XCTAssertEqual(telemetryWrapper.recordedCategories.first, .firefoxAccount)
81+
XCTAssertEqual(telemetryWrapper.recordedMethods.first, .view)
82+
XCTAssertEqual(telemetryWrapper.recordedObjects.first, .fxaConfirmSignInToken)
83+
}
84+
85+
func testRecordTelemetry_signupStarted_recordsCorrectEvent() {
86+
fxaWebViewTelemetry.recordTelemetry(for: .startedFlow(type: .signupStarted))
87+
88+
XCTAssertEqual(telemetryWrapper.recordEventCallCount, 1)
89+
XCTAssertEqual(telemetryWrapper.recordedCategories.first, .firefoxAccount)
90+
XCTAssertEqual(telemetryWrapper.recordedMethods.first, .view)
91+
XCTAssertEqual(telemetryWrapper.recordedObjects.first, .fxaRegistrationWebpage)
92+
}
93+
94+
func testRecordTelemetry_signupCompleted_recordsCorrectEvent() {
95+
fxaWebViewTelemetry.recordTelemetry(for: .startedFlow(type: .signupStarted))
96+
fxaWebViewTelemetry.recordTelemetry(for: .completed)
97+
98+
XCTAssertEqual(telemetryWrapper.recordEventCallCount, 2)
99+
XCTAssertEqual(telemetryWrapper.recordedObjects.last, .fxaRegistrationCompletedWebpage)
100+
}
101+
102+
func testRecordTelemetry_confirmSignupCode_recordsCorrectEvent() {
103+
fxaWebViewTelemetry.recordTelemetry(for: .startedFlow(type: .confirmSignupCode))
104+
105+
XCTAssertEqual(telemetryWrapper.recordEventCallCount, 1)
106+
XCTAssertEqual(telemetryWrapper.recordedCategories.first, .firefoxAccount)
107+
XCTAssertEqual(telemetryWrapper.recordedMethods.first, .view)
108+
XCTAssertEqual(telemetryWrapper.recordedObjects.first, .fxaConfirmSignUpCode)
109+
}
110+
111+
func testRecordTelemetry_completedWithoutStartedFlow_doesNotRecordEvent() {
112+
fxaWebViewTelemetry.recordTelemetry(for: .completed)
113+
114+
XCTAssertEqual(telemetryWrapper.recordEventCallCount, 0)
115+
}
54116
}

0 commit comments

Comments
 (0)