import { test as base } from "@playwright/test"
import { describe, expect, test } from "./baseFixture"

if (process.env.GITHUB_TOKEN) {
  describe("GitHub token", [], {}, () => {
    test("should be logged in to pull requests extension", async ({ codeServerPage }) => {
      await codeServerPage.exec("git init")
      await codeServerPage.exec("git remote add origin https://github.com/coder/code-server")
      await codeServerPage.installExtension("GitHub.vscode-pull-request-github")
      await codeServerPage.executeCommandViaMenus("View: Show Github")
      await codeServerPage.page.click("text=Sign in")
      await codeServerPage.page.click("text=Allow")
      // It should ask to select an account, one of which will be the one we
      // pre-injected.
      expect(await codeServerPage.page.isVisible("text=Select an account")).toBe(false)
    })
  })

  describe("No GitHub token", [], { GITHUB_TOKEN: "" }, () => {
    test("should not be logged in to pull requests extension", async ({ codeServerPage }) => {
      await codeServerPage.exec("git init")
      await codeServerPage.exec("git remote add origin https://github.com/coder/code-server")
      await codeServerPage.installExtension("GitHub.vscode-pull-request-github")
      await codeServerPage.executeCommandViaMenus("View: Show Github")
      await codeServerPage.page.click("text=Sign in")
      await codeServerPage.page.click("text=Allow")
      // Since there is no account it will ask directly for the token (because
      // we are on localhost; otherwise it would initiate the oauth flow).
      expect(await codeServerPage.page.isVisible("text=GitHub Personal Access Token")).toBe(false)
    })
  })
} else {
  base.describe("GitHub token", () => {
    base.skip("skipped because GITHUB_TOKEN is not set", () => {
      // Playwright will not show this without a function.
    })
  })
}