apple_kit

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

RadrootsReceiptPrivacyTests.swift (2565B)


      1 import Foundation
      2 @testable import RadrootsKit
      3 import Testing
      4 
      5 @Test func receiptPersistenceAndDiagnosticsExcludeTransientAuthorityAndHostMetadata() async throws {
      6     let roots = try appleTransferRoots()
      7     defer { try? FileManager.default.removeItem(at: roots.dataRoot.deletingLastPathComponent()) }
      8     let markers = ["AUTH_SENTINEL_809d", "DRAFT_SENTINEL_81ac", "LOCATION_SENTINEL_717d"]
      9     let request = try RadrootsBackgroundTransferRequest(
     10         identifier: RadrootsBackgroundTransferIdentifier("privacy.receipt"),
     11         remoteURL: #require(URL(string: "https://example.org/upload")), method: .put,
     12         operation: .upload(source: .file(RadrootsFileReference(scope: .cache, relativePath: "body"))),
     13         headers: ["Authorization": markers[0]], metadata: [markers[1]: markers[2]], responsePolicy: .boundedJSON()
     14     )
     15     let response = try RadrootsBackgroundTransferResponse(statusCode: 200, mediaType: "application/json",
     16                                                           body: Data(#"{"url":"https://example.org/blob"}"#.utf8))
     17     let snapshot = try RadrootsBackgroundTransferSnapshot(request: request, state: .awaitingVerification,
     18                                                           response: response, executionID: UUID())
     19     let store = RadrootsAppleBackgroundTransferStore(roots: roots)
     20     try await store.saveSnapshot(snapshot)
     21     let serializedRequest = try JSONEncoder().encode(request)
     22     let serializedSnapshot = try JSONEncoder().encode(snapshot)
     23     let persistedFile = RadrootsFileReference(scope: .data, relativePath: "background_transfers/transfers.json")
     24     let persistedURL = try roots.resolvedURL(for: persistedFile)
     25     let persisted = try Data(contentsOf: persistedURL)
     26     let diagnostics = [String(reflecting: request), String(describing: request), String(reflecting: snapshot),
     27                        String(describing: snapshot), String(reflecting: response), String(describing: response)]
     28     for marker in markers {
     29         #expect(![serializedRequest, serializedSnapshot, persisted].contains { $0.range(of: Data(marker.utf8)) != nil })
     30         #expect(!diagnostics.contains { $0.contains(marker) })
     31     }
     32     #expect(!diagnostics.contains { $0.contains("https://example.org/blob") })
     33     let recovered = try #require(try await store.loadSnapshots().first)
     34     #expect(recovered.request.headers.isEmpty && recovered.request.metadata.isEmpty)
     35     #expect(recovered.response == response && recovered.executionID == snapshot.executionID)
     36     #expect(request.headers["Authorization"] == markers[0])
     37 }