92 lines
3.7 KiB
Swift
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")
|
|
}
|
|
}
|