ShareLinkRouteTests.swift (2454B)
1 import Foundation 2 import Testing 3 4 @testable import Crossmate 5 6 @Suite("Share link route") 7 struct ShareLinkRouteTests { 8 9 private let token = "0a1BcDeFgHiJkLmNoPqRsTuVw" 10 private func url(_ path: String) -> URL { 11 URL(string: "https://crossmate.example.net\(path)")! 12 } 13 14 @Test("parses token and silhouette from a full link") 15 func parsesTokenAndShape() { 16 let route = ShareLinkRoute(shortLink: url("/s/\(token)/1/s3CA")) 17 #expect(route?.token == token) 18 #expect(route?.shape?.width == 3) 19 #expect(route?.shape?.height == 3) 20 #expect(route?.shape?.blocks[4] == true) 21 } 22 23 @Test("parses a rectangular silhouette segment") 24 func parsesRectangularShape() { 25 let route = ShareLinkRoute(shortLink: url("/s/\(token)/S23AA")) 26 #expect(route?.token == token) 27 #expect(route?.shape?.width == 2) 28 #expect(route?.shape?.height == 3) 29 } 30 31 @Test("parses a shape-only link (no title segment)") 32 func parsesShapeOnly() { 33 let route = ShareLinkRoute(shortLink: url("/s/\(token)/s3CA")) 34 #expect(route?.token == token) 35 #expect(route?.shape?.width == 3) 36 } 37 38 @Test("a title-only link yields no shape") 39 func titleOnlyHasNoShape() { 40 let route = ShareLinkRoute(shortLink: url("/s/\(token)/1")) 41 #expect(route?.token == token) 42 #expect(route?.shape == nil) 43 } 44 45 @Test("a bare link yields token and no shape") 46 func bareLink() { 47 let route = ShareLinkRoute(shortLink: url("/s/\(token)")) 48 #expect(route?.token == token) 49 #expect(route?.shape == nil) 50 } 51 52 @Test("reconstructs the iCloud share URL") 53 func reconstructsICloudURL() { 54 let route = ShareLinkRoute(shortLink: url("/s/\(token)")) 55 #expect(route?.iCloudShareURL.absoluteString == "https://www.icloud.com/share/\(token)") 56 } 57 58 @Test("rejects non-share and malformed links") 59 func rejectsBadLinks() { 60 #expect(ShareLinkRoute(shortLink: url("/s/short")) == nil) // token too short 61 #expect(ShareLinkRoute(shortLink: url("/notshare/\(token)")) == nil) // wrong prefix 62 #expect(ShareLinkRoute(shortLink: url("/s")) == nil) // no token 63 #expect(ShareLinkRoute(shortLink: url("/s/\(token)/a/b/c")) == nil) // too many segments 64 #expect(ShareLinkRoute(shortLink: URL(string: "http://crossmate.example.net/s/\(token)")!) == nil) // not https 65 } 66 }