Files
2026-07-13 12:22:33 +08:00

92 lines
3.7 KiB
Swift

import CodexBarCore
import Foundation
import Testing
struct CopilotDeviceFlowTests {
@Test
func `prefers verification uri complete when available`() throws {
let response = try JSONDecoder().decode(
CopilotDeviceFlow.DeviceCodeResponse.self,
from: Data(
"""
{
"device_code": "device-code",
"user_code": "ABCD-EFGH",
"verification_uri": "https://github.com/login/device",
"verification_uri_complete": "https://github.com/login/device?user_code=ABCD-EFGH",
"expires_in": 900,
"interval": 5
}
""".utf8))
#expect(response.verificationURLToOpen == "https://github.com/login/device?user_code=ABCD-EFGH")
}
@Test
func `falls back to verification uri when complete url missing`() throws {
let response = try JSONDecoder().decode(
CopilotDeviceFlow.DeviceCodeResponse.self,
from: Data(
"""
{
"device_code": "device-code",
"user_code": "ABCD-EFGH",
"verification_uri": "https://github.com/login/device",
"expires_in": 900,
"interval": 5
}
""".utf8))
#expect(response.verificationURLToOpen == "https://github.com/login/device")
}
@Test
func `device flow uses github by default`() throws {
let flow = CopilotDeviceFlow()
let deviceCodeURL = try #require(flow.deviceCodeURL)
let accessTokenURL = try #require(flow.accessTokenURL)
#expect(deviceCodeURL.absoluteString == "https://github.com/login/device/code")
#expect(accessTokenURL.absoluteString == "https://github.com/login/oauth/access_token")
}
@Test
func `device flow uses enterprise host`() throws {
let flow = CopilotDeviceFlow(enterpriseHost: "https://octocorp.ghe.com/login")
let deviceCodeURL = try #require(flow.deviceCodeURL)
let accessTokenURL = try #require(flow.accessTokenURL)
#expect(deviceCodeURL.absoluteString == "https://octocorp.ghe.com/login/device/code")
#expect(accessTokenURL.absoluteString == "https://octocorp.ghe.com/login/oauth/access_token")
}
@Test
func `device flow rejects invalid enterprise host without crashing`() {
let flow = CopilotDeviceFlow(enterpriseHost: "foo bar")
#expect(flow.deviceCodeURL == nil)
#expect(flow.accessTokenURL == nil)
}
@Test
func `device flow preserves enterprise host port`() throws {
let flow = CopilotDeviceFlow(enterpriseHost: "https://octocorp.ghe.com:8443/login")
let deviceCodeURL = try #require(flow.deviceCodeURL)
let accessTokenURL = try #require(flow.accessTokenURL)
#expect(deviceCodeURL.absoluteString == "https://octocorp.ghe.com:8443/login/device/code")
#expect(accessTokenURL.absoluteString == "https://octocorp.ghe.com:8443/login/oauth/access_token")
}
@Test
func `usage url uses enterprise api host`() throws {
let defaultURL = try #require(CopilotUsageFetcher.usageURL(enterpriseHost: nil))
let enterpriseURL = try #require(CopilotUsageFetcher.usageURL(enterpriseHost: "octocorp.ghe.com"))
let enterprisePortURL = try #require(CopilotUsageFetcher.usageURL(enterpriseHost: "octocorp.ghe.com:8443"))
#expect(defaultURL.absoluteString == "https://api.github.com/copilot_internal/user")
#expect(enterpriseURL.absoluteString == "https://api.octocorp.ghe.com/copilot_internal/user")
#expect(enterprisePortURL.absoluteString == "https://api.octocorp.ghe.com:8443/copilot_internal/user")
}
}