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 }