Skip to content

Commit f026396

Browse files
feat: dcmaw 14345 add default saved doc type (#89)
* feat: added default paramater values for savedDocType * feat: added new parameter to tests * feat: updated merging precedence on params, added to V2 and tests * feat: added v2 test and linting
1 parent 29f4afe commit f026396

9 files changed

Lines changed: 114 additions & 33 deletions

File tree

Sources/GAnalytics/GAnalytics.swift

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ public struct GAnalytics {
6060

6161
/// Merging `parameters` dictionary parameter with `additionalParameters` property
6262
private func mergeAdditionalParameters(_ parameters: [String: Any]) -> [String: Any] {
63-
additionalParameters.merging(parameters) { $1 }
63+
additionalParameters.merging(parameters) { lhs, _ in
64+
lhs
65+
}
6466
}
6567
}
6668

@@ -69,10 +71,7 @@ extension GAnalytics: AnalyticsService {
6971
_ additionalParameters: [String: Any]
7072
) -> Self {
7173
var newCopy = self
72-
newCopy.additionalParameters = self.additionalParameters
73-
.merging(additionalParameters) { lhs, _ in
74-
lhs
75-
}
74+
newCopy.additionalParameters = self.mergeAdditionalParameters(additionalParameters)
7675
return newCopy
7776
}
7877

Sources/GAnalytics/GAnalyticsV2.swift

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ public struct GAnalyticsV2 {
6060

6161
/// Merging `parameters` dictionary parameter with `additionalParameters` property
6262
private func mergeAdditionalParameters(_ parameters: [String: Any]) -> [String: Any] {
63-
additionalParameters.merging(parameters) { $1 }
63+
additionalParameters.merging(parameters) { lhs, _ in
64+
lhs
65+
}
6466
}
6567
}
6668

@@ -69,10 +71,7 @@ extension GAnalyticsV2: AnalyticsServiceV2 {
6971
_ additionalParameters: [String: Any]
7072
) -> Self {
7173
var newCopy = self
72-
newCopy.additionalParameters = self.additionalParameters
73-
.merging(additionalParameters) { lhs, _ in
74-
lhs
75-
}
74+
newCopy.additionalParameters = self.mergeAdditionalParameters(additionalParameters)
7675
return newCopy
7776
}
7877

Sources/GDSAnalytics/Screens/ErrorScreenView.swift

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public struct ErrorScreenView<Screen: ScreenType>: ScreenViewProtocol, LoggableE
88
public let endpoint: String?
99
public let statusCode: String?
1010
public let hash: String?
11+
public let savedDocType: String
1112

1213
public var parameters: [String: String] {
1314
[
@@ -16,35 +17,44 @@ public struct ErrorScreenView<Screen: ScreenType>: ScreenViewProtocol, LoggableE
1617
ScreenParameter.endpoint.rawValue: endpoint,
1718
ScreenParameter.hash.rawValue: hash,
1819
ScreenParameter.status.rawValue: statusCode,
20+
ScreenParameter.savedDocType.rawValue: savedDocType,
1921
ScreenParameter.isError.rawValue: "true"
2022
]
2123
.compactMapValues(\.?.formattedAsParameter)
2224
}
2325

24-
public init(id: String? = nil,
25-
screen: Screen,
26-
titleKey: String,
27-
reason: String? = nil,
28-
endpoint: String? = nil,
29-
statusCode: String? = nil,
30-
hash: String? = nil,
31-
bundle: Bundle = .main) {
26+
public init(
27+
id: String? = nil,
28+
screen: Screen,
29+
titleKey: String,
30+
reason: String? = nil,
31+
endpoint: String? = nil,
32+
statusCode: String? = nil,
33+
hash: String? = nil,
34+
bundle: Bundle = .main,
35+
savedDocType: String = "undefined"
36+
) {
3237
self.screen = screen
3338
self.title = titleKey.englishString(bundle: bundle).formattedAsParameter
3439
self.id = id
3540
self.reason = reason
3641
self.endpoint = endpoint
3742
self.statusCode = statusCode
3843
self.hash = hash
44+
self.savedDocType = savedDocType
3945
}
4046

41-
public init(id: String? = nil,
42-
screen: Screen,
43-
titleKey: String,
44-
error: LoggableError,
45-
bundle: Bundle = .main) {
47+
public init(
48+
id: String? = nil,
49+
screen: Screen,
50+
titleKey: String,
51+
error: LoggableError,
52+
bundle: Bundle = .main,
53+
savedDocType: String = "undefined"
54+
) {
4655
self.id = id
4756
self.screen = screen
57+
self.savedDocType = savedDocType
4858
title = titleKey.englishString(bundle: bundle).formattedAsParameter
4959
reason = error.reason
5060
endpoint = error.endpoint

Sources/GDSAnalytics/Screens/ScreenParameter.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ public enum ScreenParameter: String {
55
case hash
66
case id = "screen_id"
77
case isError = "is_error"
8+
case savedDocType = "saved_doc_type"
89
}

Sources/GDSAnalytics/Screens/ScreenView.swift

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,36 @@ public protocol ScreenViewProtocol: Equatable {
55
var id: String? { get }
66
var screen: Screen { get }
77
var title: String { get }
8+
var savedDocType: String { get }
89
var parameters: [String: String] { get }
910
}
1011

1112
public struct ScreenView<Screen: ScreenType>: ScreenViewProtocol {
1213
public let id: String?
1314
public let screen: Screen
1415
public let title: String
16+
public let savedDocType: String
1517

1618
public var parameters: [String: String] {
1719
[
1820
ScreenParameter.id.rawValue: id,
21+
ScreenParameter.savedDocType.rawValue: savedDocType,
1922
ScreenParameter.isError.rawValue: "false"
2023
].compactMapValues(\.?.formattedAsParameter)
2124
}
2225

23-
public init(id: String? = nil,
24-
screen: Screen,
25-
titleKey: String,
26-
variableKeys: [String] = [],
27-
bundle: Bundle = .main) {
26+
public init(
27+
id: String? = nil,
28+
screen: Screen,
29+
titleKey: String,
30+
variableKeys: [String] = [],
31+
savedDocType: String = "undefined",
32+
bundle: Bundle = .main
33+
) {
2834
self.id = id
2935
self.screen = screen
3036
self.title = titleKey.englishString(variableKeys, bundle: bundle).formattedAsParameter
37+
self.savedDocType = savedDocType
3138
}
3239
}
3340

Tests/GAnalyticsTests/GAnalyticsTests.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,35 @@ extension GAnalyticsTests {
196196
)
197197
}
198198

199+
func testTrackScreenAdditionalParametersPrecedence() {
200+
sut.additionalParameters = [
201+
"journey": "id_verification"
202+
]
203+
204+
sut.trackScreen(
205+
TestScreen.welcome,
206+
parameters: [
207+
"additional_parameter": "testing",
208+
"journey": "something_else"
209+
]
210+
)
211+
212+
XCTAssertEqual(
213+
analyticsLogger.events,
214+
[
215+
.init(
216+
name: "screen_view",
217+
parameters: [
218+
"screen_name": "WELCOME_SCREEN",
219+
"screen_class": "WELCOME_SCREEN",
220+
"additional_parameter": "testing",
221+
"journey": "id_verification"
222+
]
223+
)
224+
]
225+
)
226+
}
227+
199228
func testTrackScreenV2() {
200229
struct TestScreenV2: LoggableScreenV2 {
201230
let name: String = "Welcome to GOV.UK One Login"

Tests/GAnalyticsTests/GAnalyticsV2Tests.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,35 @@ extension GAnalyticsTestsV2 {
197197
)
198198
}
199199

200+
func testTrackScreenAdditionalParametersPrecedence() {
201+
sut.additionalParameters = [
202+
"journey": "id_verification"
203+
]
204+
205+
sut.trackScreen(
206+
TestScreen.welcome,
207+
parameters: [
208+
"additional_parameter": "testing",
209+
"journey": "something_else"
210+
]
211+
)
212+
213+
XCTAssertEqual(
214+
analyticsLogger.events,
215+
[
216+
.init(
217+
name: "screen_view",
218+
parameters: [
219+
"screen_name": "WELCOME_SCREEN",
220+
"screen_class": "WELCOME_SCREEN",
221+
"additional_parameter": "testing",
222+
"journey": "id_verification"
223+
]
224+
)
225+
]
226+
)
227+
}
228+
200229
func testTrackScreenV2() {
201230
struct TestScreenV2: LoggableScreenV2 {
202231
let name: String = "Welcome to GOV.UK One Login"

Tests/GDSAnalyticsTests/Screens/ErrorScreenViewTests.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ final class ErrorScreenViewTests: XCTestCase {
2121
view.parameters,
2222
[
2323
"screen_id": uuid,
24-
"is_error": "true"
24+
"is_error": "true",
25+
"saved_doc_type": "undefined"
2526
]
2627
)
2728
}
@@ -51,7 +52,8 @@ final class ErrorScreenViewTests: XCTestCase {
5152
"reason": "server",
5253
"endpoint": "fetchbiometrictoken",
5354
"status": "429",
54-
"is_error": "true"
55+
"is_error": "true",
56+
"saved_doc_type": "undefined"
5557
]
5658
)
5759
}
@@ -77,7 +79,8 @@ final class ErrorScreenViewTests: XCTestCase {
7779
"endpoint": "appinfo",
7880
"status": "401",
7981
"hash": "83766358f64858b51afb745bbdde91bb",
80-
"is_error": "true"
82+
"is_error": "true",
83+
"saved_doc_type": "undefined"
8184
]
8285
)
8386
}

Tests/GDSAnalyticsTests/Screens/ScreenViewTests.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ final class ScreenViewTests: XCTestCase {
2020
XCTAssertEqual(
2121
view.parameters, [
2222
"screen_id": uuid,
23-
"is_error": "false"
23+
"is_error": "false",
24+
"saved_doc_type": "undefined"
2425
]
2526
)
2627
}
@@ -36,7 +37,10 @@ final class ScreenViewTests: XCTestCase {
3637

3738
XCTAssertEqual(
3839
view.parameters,
39-
["is_error": "false"]
40+
[
41+
"is_error": "false",
42+
"saved_doc_type": "undefined"
43+
]
4044
)
4145
}
4246

0 commit comments

Comments
 (0)