field_ios

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

TeraRootShellTests.swift (2484B)


      1 @testable import TeraApp
      2 import XCTest
      3 
      4 final class TeraRootShellTests: XCTestCase {
      5     func testRootInventoryIsExactlyTodayThenAdd() {
      6         XCTAssertEqual(TeraRootTab.allCases.map(\.rawValue), ["today", "add"])
      7     }
      8 
      9     func testRestorationFailsClosedToToday() {
     10         XCTAssertEqual(TeraRootTab.resolve(nil), .today)
     11         XCTAssertEqual(TeraRootTab.resolve("capture"), .today)
     12         XCTAssertEqual(TeraRootTab.resolve("activity"), .today)
     13         XCTAssertEqual(TeraRootTab.resolve("settings"), .today)
     14     }
     15 
     16     func testDeepLinksAcceptOnlyCanonicalRootAuthorities() throws {
     17         for (rawValue, expected) in [
     18           ("radroots://today", TeraRootTab.today),
     19           ("RADROOTS://TODAY", TeraRootTab.today),
     20           ("radroots://add", TeraRootTab.add),
     21           ("RadRoots://AdD", TeraRootTab.add),
     22         ] {
     23             XCTAssertEqual(
     24               try TeraRootTab.resolve(url: XCTUnwrap(URL(string: rawValue))),
     25               expected,
     26               "Expected canonical root deep link: \(rawValue)"
     27             )
     28         }
     29     }
     30 
     31     func testDeepLinksRejectRemovedAndStructurallyAmbiguousRoutes() throws {
     32         for rawValue in [
     33           "radroots://capture",
     34           "radroots://activity",
     35           "radroots://settings",
     36           "radroots://search",
     37           "radroots://me",
     38           "radroots:today",
     39           "radroots:/today",
     40           "radroots:///today",
     41           "radroots://host/today",
     42           "radroots://today/",
     43           "radroots://today/add",
     44           "radroots://add/today",
     45         ] {
     46             XCTAssertNil(
     47               try TeraRootTab.resolve(url: XCTUnwrap(URL(string: rawValue))),
     48               "Expected noncanonical deep link rejection: \(rawValue)"
     49             )
     50         }
     51     }
     52 
     53     func testDeepLinksRejectAuthorityDecorationsAndEncodedAliases() {
     54         for rawValue in [
     55           "radroots://user@today",
     56           "radroots://user:password@add",
     57           "radroots://today:7447",
     58           "radroots://today?",
     59           "radroots://today?source=widget",
     60           "radroots://today#",
     61           "radroots://add#composer",
     62           "radroots://%74oday",
     63           "radroots://%61dd",
     64           "radroots://today/%61dd",
     65         ] {
     66             if let url = URL(string: rawValue) {
     67                 XCTAssertNil(
     68                   TeraRootTab.resolve(url: url),
     69                   "Expected decorated or encoded deep link rejection: \(rawValue)"
     70                 )
     71             }
     72         }
     73     }
     74 }