Skip to content

Commit 70039df

Browse files
committed
Add date wrapper for adjusting date
1 parent 3f58e45 commit 70039df

File tree

1 file changed

+24
-16
lines changed

1 file changed

+24
-16
lines changed

FirebaseCore/Internal/Tests/Unit/HeartbeatControllerTests.swift

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@
1515
@testable import FirebaseCoreInternal
1616
import XCTest
1717

18+
/// Used to manipulate a date across multiple concurrent contexts for simulation purposes.
19+
final class AdjustableDate: @unchecked Sendable {
20+
var date: Date
21+
init(date: Date) {
22+
self.date = date
23+
}
24+
}
25+
1826
class HeartbeatControllerTests: XCTestCase {
1927
// 2021-11-01 @ 00:00:00 (EST)
2028
let date = Date(timeIntervalSince1970: 1_635_739_200)
@@ -99,11 +107,11 @@ class HeartbeatControllerTests: XCTestCase {
99107

100108
func testLogAtEndOfTimePeriodAndAcceptAtStartOfNextOne() throws {
101109
// Given
102-
var testDate = date
110+
let testDate = AdjustableDate(date: date)
103111

104112
let controller = HeartbeatController(
105113
storage: HeartbeatStorageFake(),
106-
dateProvider: { testDate }
114+
dateProvider: { testDate.date }
107115
)
108116

109117
assertHeartbeatControllerFlushesEmptyPayload(controller)
@@ -113,12 +121,12 @@ class HeartbeatControllerTests: XCTestCase {
113121
controller.log("dummy_agent")
114122

115123
// - Advance to 2021-11-01 @ 23:59:59 (EST)
116-
testDate.addTimeInterval(60 * 60 * 24 - 1)
124+
testDate.date.addTimeInterval(60 * 60 * 24 - 1)
117125

118126
controller.log("dummy_agent")
119127

120128
// - Advance to 2021-11-02 @ 00:00:00 (EST)
121-
testDate.addTimeInterval(1)
129+
testDate.date.addTimeInterval(1)
122130

123131
controller.log("dummy_agent")
124132

@@ -271,18 +279,18 @@ class HeartbeatControllerTests: XCTestCase {
271279
).date // 2021-11-02 @ 11 PM (Tokyo time zone)
272280
)
273281

274-
var testDate = newYorkDate
282+
let testDate = AdjustableDate(date: newYorkDate)
275283

276284
let heartbeatController = HeartbeatController(
277285
storage: HeartbeatStorageFake(),
278-
dateProvider: { testDate }
286+
dateProvider: { testDate.date }
279287
)
280288

281289
// When
282290
heartbeatController.log("dummy_agent")
283291

284292
// Device travels from NYC to Tokyo.
285-
testDate = tokyoDate
293+
testDate.date = tokyoDate
286294

287295
heartbeatController.log("dummy_agent")
288296

@@ -308,22 +316,22 @@ class HeartbeatControllerTests: XCTestCase {
308316

309317
func testLoggingDependsOnDateNotUserAgent() throws {
310318
// Given
311-
var testDate = date
319+
let testDate = AdjustableDate(date: date)
312320
let heartbeatController = HeartbeatController(
313321
storage: HeartbeatStorageFake(),
314-
dateProvider: { testDate }
322+
dateProvider: { testDate.date }
315323
)
316324

317325
// When
318326
// - Day 1
319327
heartbeatController.log("dummy_agent")
320328

321329
// - Day 2
322-
testDate.addTimeInterval(60 * 60 * 24)
330+
testDate.date.addTimeInterval(60 * 60 * 24)
323331
heartbeatController.log("some_other_agent")
324332

325333
// - Day 3
326-
testDate.addTimeInterval(60 * 60 * 24)
334+
testDate.date.addTimeInterval(60 * 60 * 24)
327335
heartbeatController.log("dummy_agent")
328336

329337
// Then
@@ -359,20 +367,20 @@ class HeartbeatControllerTests: XCTestCase {
359367
let todaysDate = date
360368
let tomorrowsDate = date.addingTimeInterval(60 * 60 * 24)
361369

362-
var testDate = yesterdaysDate
370+
let testDate = AdjustableDate(date: yesterdaysDate)
363371

364372
let heartbeatController = HeartbeatController(
365373
storage: HeartbeatStorageFake(),
366-
dateProvider: { testDate }
374+
dateProvider: { testDate.date }
367375
)
368376

369377
// When
370378
heartbeatController.log("yesterdays_dummy_agent")
371-
testDate = todaysDate
379+
testDate.date = todaysDate
372380
heartbeatController.log("todays_dummy_agent")
373-
testDate = tomorrowsDate
381+
testDate.date = tomorrowsDate
374382
heartbeatController.log("tomorrows_dummy_agent")
375-
testDate = todaysDate
383+
testDate.date = todaysDate
376384

377385
// Then
378386
let payload = heartbeatController.flushHeartbeatFromToday()

0 commit comments

Comments
 (0)