RadrootsBackgroundTaskTestingTests.swift (2397B)
1 import Foundation 2 import Testing 3 import RadrootsKit 4 import RadrootsKitTesting 5 6 @Test func fakeBackgroundTaskSchedulerRecordsSubmittedRequestsAndPendingTasks() async throws { 7 let scheduler = RadrootsFakeBackgroundTaskScheduler( 8 submittedAt: Date(timeIntervalSince1970: 20) 9 ) 10 let request = try RadrootsBackgroundTaskRequest( 11 identifier: "org.radroots.field-ios.background.refresh", 12 kind: .appRefresh, 13 earliestBeginDate: Date(timeIntervalSince1970: 30) 14 ) 15 16 let snapshot = try await scheduler.submit(request) 17 18 #expect(snapshot.identifier == request.identifier) 19 #expect(snapshot.submittedAt == Date(timeIntervalSince1970: 20)) 20 #expect(await scheduler.submittedRequestCount == 1) 21 #expect(await scheduler.submittedRequests == [request]) 22 #expect(try await scheduler.pendingTasks() == [snapshot]) 23 } 24 25 @Test func fakeBackgroundTaskSchedulerCancelsIndividualAndAllTasks() async throws { 26 let first = try RadrootsBackgroundTaskRequest( 27 identifier: "org.radroots.field-ios.background.processing", 28 kind: .processing 29 ) 30 let second = try RadrootsBackgroundTaskRequest( 31 identifier: "org.radroots.field-ios.background.refresh", 32 kind: .appRefresh 33 ) 34 let scheduler = RadrootsFakeBackgroundTaskScheduler() 35 _ = try await scheduler.submit(first) 36 _ = try await scheduler.submit(second) 37 38 try await scheduler.cancel(first.identifier) 39 40 #expect(await scheduler.cancelledIdentifiers == [first.identifier]) 41 #expect(try await scheduler.pendingTasks().map(\.identifier) == [second.identifier]) 42 43 try await scheduler.cancelAll() 44 45 #expect(await scheduler.cancelAllCount == 1) 46 #expect(try await scheduler.pendingTasks().isEmpty) 47 } 48 49 @Test func fakeBackgroundTaskSchedulerCanReturnSubmitFailures() async throws { 50 let scheduler = RadrootsFakeBackgroundTaskScheduler( 51 submitOutcome: .failure(.schedulerFailure("scheduler rejected request")) 52 ) 53 let request = try RadrootsBackgroundTaskRequest( 54 identifier: "org.radroots.field-ios.background.refresh", 55 kind: .appRefresh 56 ) 57 58 await #expect(throws: RadrootsBackgroundTaskError.schedulerFailure("scheduler rejected request")) { 59 _ = try await scheduler.submit(request) 60 } 61 #expect(await scheduler.submittedRequests == [request]) 62 #expect(try await scheduler.pendingTasks().isEmpty) 63 }