91 lines · 3.7 KB · Swift
RawDownload
import CodexBarCoreimport Foundationimport 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")    }}