field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

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 }