Buckets:
localhost1978/localhost / LOCALHOST1978 /Modules /SSK_Abstractions /Tests /SSK_AbstractionsTests /SSKURITests.swift
| // | |
| // SSKURITests.swift | |
| // SSK_AbstractionsTests | |
| // | |
| // Unit tests for SSKURI, Identifiable protocol conformance, and ssk:// URI formatting. | |
| // | |
| import XCTest | |
| @testable import SSK_Abstractions | |
| final class SSKURITests: XCTestCase { | |
| func testSSKURICanonicalFormatting() { | |
| let uri = SSKURI( | |
| authority: .cas(hash: SSKURI.ContentHash(rawValue: "7a9f8b")), | |
| domain: .code, | |
| subdomain: "ast", | |
| pathComponents: ["SSK_Foundation", "PeerRegistry"], | |
| fragment: "registerPeer", | |
| queryParams: ["hlc": "100.1", "author": "z6Mku"] | |
| ) | |
| let expected = "ssk://cas:7a9f8b/code/ast/SSK_Foundation/PeerRegistry#registerPeer?author=z6Mku&hlc=100.1" | |
| XCTAssertEqual(uri.stringValue, expected) | |
| XCTAssertEqual(uri.id, expected) | |
| XCTAssertEqual(uri.description, expected) | |
| } | |
| func testSSKURIParsing() { | |
| let rawString = "ssk://did:key:z6Mku123/social/chat/room42#msg-10?hlc=50.2&v=1" | |
| guard let parsed = SSKURI(rawString) else { | |
| XCTFail("Failed to parse valid SSKURI string: \(rawString)") | |
| return | |
| } | |
| XCTAssertEqual( | |
| parsed.authority, | |
| .did(pubkey: SSKURI.PublicKey(rawValue: "z6Mku123")) | |
| ) | |
| XCTAssertEqual(parsed.domain, .social) | |
| XCTAssertEqual(parsed.subdomain, "chat") | |
| XCTAssertEqual(parsed.pathComponents, ["room42"]) | |
| XCTAssertEqual(parsed.fragment, "msg-10") | |
| XCTAssertEqual(parsed.queryParams["hlc"], "50.2") | |
| XCTAssertEqual(parsed.queryParams["v"], "1") | |
| XCTAssertEqual(parsed.stringValue, rawString) | |
| } | |
| func testSSKURIInvalidParsing() { | |
| let invalidScheme = "http://invalid.scheme/code/ast" | |
| let invalidAuth = "ssk://invalidAuthority/code/ast" | |
| let invalidDomain = "ssk://cas:1234/invalidDomain/ast" | |
| let tooShort = "ssk://cas:1234" | |
| XCTAssertNil(SSKURI(invalidScheme)) | |
| XCTAssertNil(SSKURI(invalidAuth)) | |
| XCTAssertNil(SSKURI(invalidDomain)) | |
| XCTAssertNil(SSKURI(tooShort)) | |
| } | |
| func testSSKURICodable() throws { | |
| let uri = SSKURI( | |
| authority: .node(nodeID: SSKURI.NodeIdentifier(rawValue: "alpha")), | |
| domain: .identity, | |
| subdomain: "session", | |
| pathComponents: ["test-uuid-1234"] | |
| ) | |
| let encoder = JSONEncoder() | |
| let decoder = JSONDecoder() | |
| let data = try encoder.encode(uri) | |
| let decoded = try decoder.decode(SSKURI.self, from: data) | |
| XCTAssertEqual(uri, decoded) | |
| XCTAssertEqual(uri.stringValue, decoded.stringValue) | |
| } | |
| func testSSKURIParentAndChildNavigation() { | |
| let parentURI = SSKURI( | |
| authority: .spec( | |
| standardID: SSKURI.StandardIdentifier(rawValue: "ACP-1.0") | |
| ), | |
| domain: .spec, | |
| subdomain: "mandate", | |
| pathComponents: ["security"] | |
| ) | |
| let child = parentURI.appending(child: "encryption") | |
| XCTAssertEqual(child.stringValue, "ssk://spec:ACP-1.0/spec/mandate/security/encryption") | |
| let withFrag = child.withFragment("sec-4") | |
| XCTAssertEqual(withFrag.stringValue, "ssk://spec:ACP-1.0/spec/mandate/security/encryption#sec-4") | |
| let backToChild = withFrag.parent | |
| XCTAssertEqual(backToChild?.stringValue, child.stringValue) | |
| let backToParent = child.parent | |
| XCTAssertEqual(backToParent?.stringValue, parentURI.stringValue) | |
| } | |
| func testSSKURISemanticAppEntityIntegration() { | |
| let sskURI = SSKURI( | |
| authority: .cas(hash: SSKURI.ContentHash(rawValue: "a1b2c3d4")), | |
| domain: .vault, | |
| subdomain: "kasset", | |
| pathComponents: ["audio", "track1"] | |
| ) | |
| let entity = SemanticAppEntity( | |
| sskURI: sskURI, | |
| type: .media, | |
| semanticPrimitives: [.media] | |
| ) | |
| XCTAssertEqual(entity.uri, sskURI.stringValue) | |
| XCTAssertEqual(entity.sskURI, sskURI) | |
| XCTAssertEqual(entity.displayRepresentation.title.key, "vault/kasset") | |
| } | |
| } | |
Xet Storage Details
- Size:
- 4.12 kB
- Xet hash:
- 09302c6dfa71b01c6e8e7da001e962993bb26ff45d7ec6823cc0f0feb3e1fe2d
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.