Skip to content

Commit 29f4afe

Browse files
feat: added equatable conformance (#88)
* feat: added equatable conformance * chore: assertions on arrays of screen views
1 parent 0a5376b commit 29f4afe

4 files changed

Lines changed: 133 additions & 1 deletion

File tree

Sources/GDSAnalytics/Screens/ErrorScreenView.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,15 @@ public struct ErrorScreenView<Screen: ScreenType>: ScreenViewProtocol, LoggableE
5252
hash = error.hash
5353
}
5454
}
55+
56+
extension ErrorScreenView: Equatable {
57+
public static func == (lhs: Self, rhs: Self) -> Bool {
58+
return (
59+
type(of: lhs) == type(of: rhs) &&
60+
lhs.id == rhs.id &&
61+
lhs.screen.name == rhs.screen.name &&
62+
lhs.title == rhs.title &&
63+
lhs.parameters == rhs.parameters
64+
)
65+
}
66+
}

Sources/GDSAnalytics/Screens/ScreenView.swift

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Foundation
22

3-
public protocol ScreenViewProtocol {
3+
public protocol ScreenViewProtocol: Equatable {
44
associatedtype Screen: ScreenType
55
var id: String? { get }
66
var screen: Screen { get }
@@ -30,3 +30,15 @@ public struct ScreenView<Screen: ScreenType>: ScreenViewProtocol {
3030
self.title = titleKey.englishString(variableKeys, bundle: bundle).formattedAsParameter
3131
}
3232
}
33+
34+
extension ScreenView: Equatable {
35+
public static func == (lhs: Self, rhs: Self) -> Bool {
36+
return (
37+
type(of: lhs) == type(of: rhs) &&
38+
lhs.id == rhs.id &&
39+
lhs.screen.name == rhs.screen.name &&
40+
lhs.title == rhs.title &&
41+
lhs.parameters == rhs.parameters
42+
)
43+
}
44+
}

Tests/GDSAnalyticsTests/Screens/ErrorScreenViewTests.swift

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,56 @@ final class ErrorScreenViewTests: XCTestCase {
8181
]
8282
)
8383
}
84+
85+
func testEquatableTrue() {
86+
let uuid = UUID().uuidString.lowercased()
87+
88+
let view1 = ErrorScreenView(
89+
id: uuid,
90+
screen: MockScreen.error,
91+
titleKey: "Something went wrong",
92+
reason: "network",
93+
endpoint: "appInfo",
94+
statusCode: "401",
95+
hash: "83766358f64858b51afb745bbdde91bb"
96+
)
97+
98+
let view2 = ErrorScreenView(
99+
id: uuid,
100+
screen: MockScreen.error,
101+
titleKey: "Something went wrong",
102+
reason: "network",
103+
endpoint: "appInfo",
104+
statusCode: "401",
105+
hash: "83766358f64858b51afb745bbdde91bb"
106+
)
107+
108+
XCTAssertEqual(view1, view2)
109+
}
110+
111+
func testEquatableFalse() {
112+
let uuid = UUID().uuidString.lowercased()
113+
114+
let view1 = ErrorScreenView(
115+
id: uuid,
116+
screen: MockScreen.error,
117+
titleKey: "Something went wrong",
118+
reason: "network",
119+
endpoint: "appInfo",
120+
statusCode: "401",
121+
hash: "83766358f64858b51afb745bbdde91bb"
122+
)
123+
124+
let view2 = ErrorScreenView(
125+
id: uuid,
126+
screen: MockScreen.error,
127+
titleKey: "Went wrong",
128+
reason: "network",
129+
endpoint: "appInfo",
130+
statusCode: "401",
131+
hash: "83766358f64858b51afb745bbdde91bb"
132+
)
133+
134+
XCTAssertNotEqual(view1, view2)
135+
}
84136
}

Tests/GDSAnalyticsTests/Screens/ScreenViewTests.swift

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,60 @@ final class ScreenViewTests: XCTestCase {
3939
["is_error": "false"]
4040
)
4141
}
42+
43+
func testEquatableTrue() {
44+
let view1 = ScreenView(
45+
screen: MockScreen.welcome,
46+
titleKey: "Welcome to this app with a really really really really really really really really really really long name"
47+
)
48+
49+
let view2 = ScreenView(
50+
screen: MockScreen.welcome,
51+
titleKey: "Welcome to this app with a really really really really really really really really really really long name"
52+
)
53+
54+
XCTAssertEqual(view1, view2)
55+
}
56+
57+
func testEquatableArray() {
58+
let view1 = ScreenView(
59+
screen: MockScreen.welcome,
60+
titleKey: "Welcome to this app with a really really really really really really really really really really long name"
61+
)
62+
63+
let view2 = ScreenView(
64+
screen: MockScreen.welcome,
65+
titleKey: "Welcome to this app with a really really really really really really really really really really long name"
66+
)
67+
68+
XCTAssertEqual([view1], [view2])
69+
}
70+
71+
func testEquatableFalse() {
72+
let view1 = ScreenView(
73+
screen: MockScreen.welcome,
74+
titleKey: "Welcome to this app with a really really really really really really really really really really long name"
75+
)
76+
77+
let view2 = ScreenView(
78+
screen: MockScreen.error,
79+
titleKey: "Welcome to this app with a really really really really really really really really really really long name"
80+
)
81+
82+
XCTAssertNotEqual(view1, view2)
83+
}
84+
85+
func testEquatableArrayFalse() {
86+
let view1 = ScreenView(
87+
screen: MockScreen.welcome,
88+
titleKey: "Welcome to this app with a really really really really really really really really really really long name"
89+
)
90+
91+
let view2 = ScreenView(
92+
screen: MockScreen.error,
93+
titleKey: "Welcome to this app with a really really really really really really really really really really long name"
94+
)
95+
96+
XCTAssertNotEqual([view1], [view2])
97+
}
4298
}

0 commit comments

Comments
 (0)