import {GitCommandManager} from '../lib/git-command-manager'
import {GitAuthHelper} from '../lib/git-auth-helper'

const REPO_PATH = '/git/local/test-base'

const extraheaderConfigKey = 'http.https://github.com/.extraheader'

describe('git-auth-helper tests', () => {
  let git: GitCommandManager
  let gitAuthHelper: GitAuthHelper

  beforeAll(async () => {
    git = await GitCommandManager.create(REPO_PATH)
    gitAuthHelper = new GitAuthHelper(git)
  })

  it('tests save and restore with no persisted auth', async () => {
    await gitAuthHelper.savePersistedAuth()
    await gitAuthHelper.restorePersistedAuth()
  })

  it('tests configure and removal of auth', async () => {
    await gitAuthHelper.configureToken('github-token')
    expect(await git.configExists(extraheaderConfigKey)).toBeTruthy()
    expect(await git.getConfigValue(extraheaderConfigKey)).toEqual(
      'AUTHORIZATION: basic eC1hY2Nlc3MtdG9rZW46Z2l0aHViLXRva2Vu'
    )

    await gitAuthHelper.removeAuth()
    expect(await git.configExists(extraheaderConfigKey)).toBeFalsy()
  })

  it('tests save and restore of persisted auth', async () => {
    const extraheaderConfigValue = 'AUTHORIZATION: basic ***persisted-auth***'
    await git.config(extraheaderConfigKey, extraheaderConfigValue)

    await gitAuthHelper.savePersistedAuth()

    const exists = await git.configExists(extraheaderConfigKey)
    expect(exists).toBeFalsy()

    await gitAuthHelper.restorePersistedAuth()

    const configValue = await git.getConfigValue(extraheaderConfigKey)
    expect(configValue).toEqual(extraheaderConfigValue)

    await gitAuthHelper.removeAuth()
  })
})