90 lines
3.4 KiB
Swift
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
|
|
}
|