TeraPrivacyPackagingTests.swift (2862B)
1 import CoreFoundation 2 import Foundation 3 @testable import TeraApp 4 import XCTest 5 6 final class TeraPrivacyPackagingTests: XCTestCase { 7 func testInstalledBundleContainsLinkedPublicContentAndReviewedReasonsWithoutTracking() throws { 8 let url = try XCTUnwrap(Bundle.main.url(forResource: "PrivacyInfo", withExtension: "xcprivacy")) 9 let value = try PropertyListSerialization.propertyList(from: Data(contentsOf: url), format: nil) 10 let manifest = try XCTUnwrap(value as? [String: Any]) 11 let tracking = try XCTUnwrap(manifest["NSPrivacyTracking"] as? NSNumber) 12 XCTAssertEqual(CFGetTypeID(tracking), CFBooleanGetTypeID()) 13 XCTAssertFalse(tracking.boolValue) 14 XCTAssertEqual(manifest["NSPrivacyTrackingDomains"] as? [String], []) 15 let dataTypes = try XCTUnwrap(manifest["NSPrivacyCollectedDataTypes"] as? [[String: Any]]) 16 XCTAssertEqual(dataTypes.compactMap { $0["NSPrivacyCollectedDataType"] as? String }, [ 17 "NSPrivacyCollectedDataTypeName", "NSPrivacyCollectedDataTypeUserID", 18 "NSPrivacyCollectedDataTypePhysicalAddress", "NSPrivacyCollectedDataTypePhotosorVideos", 19 "NSPrivacyCollectedDataTypeOtherUserContent", 20 ]) 21 for type in dataTypes { 22 XCTAssertEqual(type["NSPrivacyCollectedDataTypeLinked"] as? Bool, true) 23 XCTAssertEqual(type["NSPrivacyCollectedDataTypeTracking"] as? Bool, false) 24 XCTAssertEqual(type["NSPrivacyCollectedDataTypePurposes"] as? [String], ["NSPrivacyCollectedDataTypePurposeAppFunctionality"]) 25 } 26 let apis = try XCTUnwrap(manifest["NSPrivacyAccessedAPITypes"] as? [[String: Any]]) 27 XCTAssertEqual(apis.compactMap { $0["NSPrivacyAccessedAPIType"] as? String }, [ 28 "NSPrivacyAccessedAPICategoryFileTimestamp", "NSPrivacyAccessedAPICategoryDiskSpace", "NSPrivacyAccessedAPICategoryUserDefaults", 29 ]) 30 XCTAssertEqual(apis.compactMap { $0["NSPrivacyAccessedAPITypeReasons"] as? [String] }, [["C617.1"], ["E174.1"], ["CA92.1"]]) 31 } 32 33 func testInstalledPurposeAndSupportContactDescribeCurrentPublicPosting() throws { 34 XCTAssertEqual(Bundle.main.object(forInfoDictionaryKey: "NSCameraUsageDescription") as? String, 35 "Tera uses the camera only when you choose to add a photo to a public post.") 36 XCTAssertEqual(Bundle.main.object(forInfoDictionaryKey: "TeraSupportEmail") as? String, "support@radroots.org") 37 let mail = try XCTUnwrap(TeraSupportContact.packagedMailURL) 38 XCTAssertEqual(mail.absoluteString, "mailto:support@radroots.org") 39 } 40 41 func testContactRefusesUnreviewedOrInjectedRecipients() { 42 for email: String? in [nil, "", "operator@example.invalid", "support@radroots.org?subject=private", " support@radroots.org"] { 43 XCTAssertNil(TeraSupportContact.mailURL(email: email)) 44 } 45 XCTAssertEqual(TeraSupportContact.mailURL(email: "support@radroots.org")?.absoluteString, "mailto:support@radroots.org") 46 } 47 }