apple_kit

Apple-native services for Radroots iOS and macOS apps
git clone https://radroots.dev/git/apple_kit.git
Log | Files | Refs | README

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 }