import { describe, expect, it } from "vitest"; import { TEST_COOKIE, TEST_HUB_URL } from "../test/consts"; import { oauthLoginUrl } from "./oauth-login-url"; import { oauthHandleRedirect } from "./oauth-handle-redirect"; describe("oauthHandleRedirect", () => { it("should work", async () => { const localStorage = { nonce: undefined, codeVerifier: undefined, }; const url = await oauthLoginUrl({ clientId: "dummy-app", redirectUrl: "http://localhost:3000", localStorage, scopes: "openid profile email", hubUrl: TEST_HUB_URL, }); const resp = await fetch(url, { method: "POST", headers: { Cookie: `token=${TEST_COOKIE}`, }, redirect: "manual", }); if (resp.status !== 303) { throw new Error(`Failed to fetch url ${url}: ${resp.status} ${resp.statusText}`); } const location = resp.headers.get("Location"); if (!location) { throw new Error(`No location header in response`); } const result = await oauthHandleRedirect({ redirectedUrl: location, codeVerifier: localStorage.codeVerifier, nonce: localStorage.nonce, hubUrl: TEST_HUB_URL, }); if (!result) { throw new Error("Expected result to be defined"); } expect(result.accessToken).toEqual(expect.any(String)); expect(result.accessTokenExpiresAt).toBeInstanceOf(Date); expect(result.accessTokenExpiresAt.getTime()).toBeGreaterThan(Date.now()); expect(result.scope).toEqual(expect.any(String)); expect(result.userInfo).toEqual({ sub: "62f264b9f3c90f4b6514a269", name: "@huggingface/hub CI bot", preferred_username: "hub.js", email_verified: true, email: "eliott@huggingface.co", isPro: false, picture: "https://hub-ci.huggingface.co/avatars/934b830e9fdaa879487852f79eef7165.svg", profile: "https://hub-ci.huggingface.co/hub.js", website: "https://github.com/huggingface/hub.js", orgs: [], }); }); });