Files
steipete--codexbar/Tests/CodexBarTests/PerplexityCookieHeaderTests.swift
2026-07-13 12:22:33 +08:00

90 lines
3.4 KiB
Swift

import Foundation
import Testing
@testable import CodexBarCore
struct PerplexityCookieHeaderTests {
@Test
func `bare token uses default session cookie name`() {
let override = PerplexityCookieHeader.override(from: "abc123")
#expect(override?.name == PerplexityCookieHeader.defaultSessionCookieName)
#expect(override?.token == "abc123")
#expect(override?.requestCookieNames == PerplexityCookieHeader.supportedSessionCookieNames)
}
@Test
func `extracts secure next auth session cookie from header`() {
let header = "foo=bar; __Secure-next-auth.session-token=token-a; baz=qux"
let override = PerplexityCookieHeader.override(from: header)
#expect(override?.name == "__Secure-next-auth.session-token")
#expect(override?.token == "token-a")
}
@Test
func `extracts auth JS session cookie from header`() {
let header = "foo=bar; __Secure-authjs.session-token=token-b; baz=qux"
let override = PerplexityCookieHeader.override(from: header)
#expect(override?.name == "__Secure-authjs.session-token")
#expect(override?.token == "token-b")
}
@Test
func `prefers auth JS session cookie when both names exist`() {
let header = """
__Secure-next-auth.session-token=legacy-token; __Secure-authjs.session-token=live-token
"""
let override = PerplexityCookieHeader.override(from: header)
#expect(override?.name == "__Secure-authjs.session-token")
#expect(override?.token == "live-token")
}
@Test
func `reassembles chunked next auth session cookie from header`() {
let header = """
foo=bar; __Secure-next-auth.session-token.1=chunk-b; __Secure-next-auth.session-token.0=chunk-a
"""
let override = PerplexityCookieHeader.override(from: header)
#expect(override?.name == "__Secure-next-auth.session-token")
#expect(override?.token == "chunk-achunk-b")
}
@Test
func `reassembles chunked auth JS session cookie from header`() {
let header = "foo=bar; authjs.session-token.0=chunk-a; authjs.session-token.1=chunk-b"
let override = PerplexityCookieHeader.override(from: header)
#expect(override?.name == "authjs.session-token")
#expect(override?.token == "chunk-achunk-b")
}
@Test
func `unsupported cookie header returns nil`() {
let override = PerplexityCookieHeader.override(from: "foo=bar; hello=world")
#expect(override == nil)
}
#if os(macOS)
@Test
func `importer session info reassembles chunked session cookies`() throws {
let cookies = try [
#require(self.makeCookie(name: "__Secure-authjs.session-token.0", value: "chunk-a")),
#require(self.makeCookie(name: "__Secure-authjs.session-token.1", value: "chunk-b")),
]
let session = PerplexityCookieImporter.SessionInfo(cookies: cookies, sourceLabel: "Chrome")
#expect(session.sessionCookie?.name == "__Secure-authjs.session-token")
#expect(session.sessionCookie?.token == "chunk-achunk-b")
}
#endif
#if os(macOS)
private func makeCookie(name: String, value: String) -> HTTPCookie? {
HTTPCookie(properties: [
.domain: "www.perplexity.ai",
.path: "/",
.name: name,
.value: value,
.secure: "TRUE",
])
}
#endif
}