Skip to content

Commit 98252fd

Browse files
authored
ci: run tests on push (#100)
* test: adjust expected values for event payloads to account for differences in float precision
1 parent f29629d commit 98252fd

File tree

3 files changed

+121
-17
lines changed

3 files changed

+121
-17
lines changed

.github/workflows/run-tests.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
name: Run Tests
2+
3+
on:
4+
push:
5+
6+
jobs:
7+
unit-tests:
8+
name: Run Unit Tests
9+
runs-on: macos-13
10+
steps:
11+
- name: Install xcbeautify
12+
run: brew install xcbeautify
13+
- name: Checkout
14+
uses: actions/checkout@v3
15+
- name: Run Tests
16+
run: "scripts/run-unit-tests.sh MuxUploadSDK"

Tests/MuxUploadSDKTests/Upload Tests/ReporterTests.swift

Lines changed: 61 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ import XCTest
99

1010
class ReporterTests: XCTestCase {
1111

12-
enum ExpectedJSONStrings {
12+
/// There was a change in JSONEncoder behavior between
13+
/// iOS 16 and 17 that affected precision when encoding
14+
/// floats. It's immaterial in terms of data but does
15+
/// require slightly different expected values when
16+
/// testing.
17+
enum ExpectedJSONStringsiOS16AndBelow {
1318
static let inputStandardizationFailed = #"{"data":{"app_name":"AcmeApp","app_version":"3.2.1","device_model":"iPad","error_description":"foo","input_duration":3.1400000000000001,"input_size":1500000,"maximum_resolution":"default","non_standard_input_reasons":[],"platform_name":"iPadOS","platform_version":"15.0.0","sdk_version":"0.4.1","standardization_end_time":"2023-07-07T03:43:58Z","standardization_start_time":"2023-07-07T03:38:58Z","upload_canceled":false,"upload_url":"https:\/\/www.example.com"},"session_id":"xyz789","type":"upload_input_standardization_failed","version":"1"}"#
1419

1520
static let inputStandardizationSucceeded = #"{"data":{"app_name":"AcmeApp","app_version":"3.2.1","device_model":"iPad","input_duration":3.1400000000000001,"input_size":1500000,"maximum_resolution":"default","non_standard_input_reasons":[],"platform_name":"iPadOS","platform_version":"15.0.0","sdk_version":"0.4.1","standardization_end_time":"2023-07-07T03:43:58Z","standardization_start_time":"2023-07-07T03:38:58Z","upload_url":"https:\/\/www.example.com"},"session_id":"jkl567","type":"upload_input_standardization_succeeded","version":"1"}"#
@@ -19,6 +24,16 @@ class ReporterTests: XCTestCase {
1924
static let uploadSucceeded = #"{"data":{"app_name":"AcmeApp","app_version":"3.2.1","device_model":"iPad","input_duration":3.1400000000000001,"input_size":1500000,"input_standardization_requested":true,"platform_name":"iPadOS","platform_version":"16.2.0","region_code":"US","sdk_version":"0.3.0","upload_end_time":"2023-07-07T04:12:48Z","upload_start_time":"2023-07-07T04:12:18Z","upload_url":"https:\/\/www.example.com"},"session_id":"abc123","type":"upload_succeeded","version":"1"}"#
2025
}
2126

27+
enum ExpectedJSONStringsiOS17 {
28+
static let inputStandardizationFailed = #"{"data":{"app_name":"AcmeApp","app_version":"3.2.1","device_model":"iPad","error_description":"foo","input_duration":3.14,"input_size":1500000,"maximum_resolution":"default","non_standard_input_reasons":[],"platform_name":"iPadOS","platform_version":"15.0.0","sdk_version":"0.4.1","standardization_end_time":"2023-07-07T03:43:58Z","standardization_start_time":"2023-07-07T03:38:58Z","upload_canceled":false,"upload_url":"https:\/\/www.example.com"},"session_id":"xyz789","type":"upload_input_standardization_failed","version":"1"}"#
29+
30+
static let inputStandardizationSucceeded = #"{"data":{"app_name":"AcmeApp","app_version":"3.2.1","device_model":"iPad","input_duration":3.14,"input_size":1500000,"maximum_resolution":"default","non_standard_input_reasons":[],"platform_name":"iPadOS","platform_version":"15.0.0","sdk_version":"0.4.1","standardization_end_time":"2023-07-07T03:43:58Z","standardization_start_time":"2023-07-07T03:38:58Z","upload_url":"https:\/\/www.example.com"},"session_id":"jkl567","type":"upload_input_standardization_succeeded","version":"1"}"#
31+
32+
static let uploadFailed = #"{"data":{"app_name":"AcmeApp","app_version":"3.2.1","device_model":"iPad","error_description":"foo","input_duration":3.14,"input_size":1500000,"input_standardization_requested":false,"platform_name":"iPadOS","platform_version":"16.2.0","region_code":"US","sdk_version":"0.3.0","upload_end_time":"2023-07-07T04:12:48Z","upload_start_time":"2023-07-07T04:12:18Z","upload_url":"https:\/\/www.example.com"},"session_id":"abc123","type":"upload_failed","version":"1"}"#
33+
34+
static let uploadSucceeded = #"{"data":{"app_name":"AcmeApp","app_version":"3.2.1","device_model":"iPad","input_duration":3.14,"input_size":1500000,"input_standardization_requested":true,"platform_name":"iPadOS","platform_version":"16.2.0","region_code":"US","sdk_version":"0.3.0","upload_end_time":"2023-07-07T04:12:48Z","upload_start_time":"2023-07-07T04:12:18Z","upload_url":"https:\/\/www.example.com"},"session_id":"abc123","type":"upload_succeeded","version":"1"}"#
35+
}
36+
2237
var jsonEncoder = Reporter().jsonEncoder
2338

2439
func testInputStandardizationFailedEventSerialization() throws {
@@ -52,10 +67,18 @@ class ReporterTests: XCTestCase {
5267
)
5368
)
5469

55-
XCTAssertEqual(
56-
json,
57-
ExpectedJSONStrings.inputStandardizationFailed
58-
)
70+
if #available(iOS 17, *) {
71+
XCTAssertEqual(
72+
json,
73+
ExpectedJSONStringsiOS17.inputStandardizationFailed
74+
)
75+
} else {
76+
XCTAssertEqual(
77+
json,
78+
ExpectedJSONStringsiOS16AndBelow.inputStandardizationFailed
79+
)
80+
}
81+
5982
}
6083

6184
func testInputStandardizationSucceededEventSerialization() throws {
@@ -87,10 +110,17 @@ class ReporterTests: XCTestCase {
87110
)
88111
)
89112

90-
XCTAssertEqual(
91-
json,
92-
ExpectedJSONStrings.inputStandardizationSucceeded
93-
)
113+
if #available(iOS 17, *) {
114+
XCTAssertEqual(
115+
json,
116+
ExpectedJSONStringsiOS17.inputStandardizationSucceeded
117+
)
118+
} else {
119+
XCTAssertEqual(
120+
json,
121+
ExpectedJSONStringsiOS16AndBelow.inputStandardizationSucceeded
122+
)
123+
}
94124
}
95125

96126
func testUploadFailedEventSerialization() throws {
@@ -123,10 +153,17 @@ class ReporterTests: XCTestCase {
123153
)
124154
)
125155

126-
XCTAssertEqual(
127-
json,
128-
ExpectedJSONStrings.uploadFailed
129-
)
156+
if #available(iOS 17, *) {
157+
XCTAssertEqual(
158+
json,
159+
ExpectedJSONStringsiOS17.uploadFailed
160+
)
161+
} else {
162+
XCTAssertEqual(
163+
json,
164+
ExpectedJSONStringsiOS16AndBelow.uploadFailed
165+
)
166+
}
130167
}
131168

132169
func testUploadSucceededEventSerialization() throws {
@@ -159,10 +196,17 @@ class ReporterTests: XCTestCase {
159196
)
160197
)
161198

162-
XCTAssertEqual(
163-
json,
164-
ExpectedJSONStrings.uploadSucceeded
165-
)
199+
if #available(iOS 17, *) {
200+
XCTAssertEqual(
201+
json,
202+
ExpectedJSONStringsiOS17.uploadSucceeded
203+
)
204+
} else {
205+
XCTAssertEqual(
206+
json,
207+
ExpectedJSONStringsiOS16AndBelow.uploadSucceeded
208+
)
209+
}
166210
}
167211

168212
}

scripts/run-unit-tests.sh

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/bin/bash
2+
3+
readonly XCODE=$(xcodebuild -version | grep Xcode | cut -d " " -f2)
4+
5+
set -euo pipefail
6+
7+
if [ $# -ne 1 ]; then
8+
echo "▸ Usage: $0 SCHEME"
9+
exit 1
10+
fi
11+
12+
readonly SCHEME="$1"
13+
14+
if ! command -v xcbeautify &> /dev/null
15+
then
16+
echo -e "\033[1;31m ERROR: xcbeautify could not be found please install it... \033[0m"
17+
exit 1
18+
fi
19+
20+
echo "▸ Selecting Xcode 15"
21+
22+
sudo xcode-select -s /Applications/Xcode_15.0.app/Contents/Developer
23+
24+
echo "▸ Using Xcode Version: ${XCODE}"
25+
26+
echo "▸ Available Xcode SDKs"
27+
28+
xcodebuild -showsdks
29+
30+
echo "▸ Resolve Package Dependencies"
31+
32+
xcodebuild -resolvePackageDependencies
33+
34+
echo "▸ Available Schemes"
35+
36+
xcodebuild -list -json
37+
38+
echo "▸ Test ${SCHEME}"
39+
40+
xcodebuild clean test \
41+
-scheme $SCHEME \
42+
-destination 'platform=iOS Simulator,OS=17.0.1,name=iPhone 15' \
43+
-sdk iphonesimulator17.0 \
44+
| xcbeautify

0 commit comments

Comments
 (0)