UNPKG

backport

Version:

A CLI tool that automates the process of backporting commits

203 lines (201 loc) 8.76 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const promises_1 = __importDefault(require("fs/promises")); const path_1 = __importDefault(require("path")); const getDevAccessToken_1 = require("../../private/getDevAccessToken"); const sandbox_1 = require("../../sandbox"); const runBackportViaCli_1 = require("./runBackportViaCli"); const accessToken = (0, getDevAccessToken_1.getDevAccessToken)(); jest.setTimeout(15000); describe('non interactive (json) error handling', () => { it(`when access token is missing`, async () => { const configFilePath = await createConfigFile({ editor: 'code' }); const { output, code } = await (0, runBackportViaCli_1.runBackportViaCli)([ '--json', `--globalConfigFile=${configFilePath}`, ]); const backportResult = JSON.parse(output); // remove absolute path to avoid issues on ci const errorMessage = backportResult.errorMessage.replace(configFilePath, '<GLOBAL_CONFIG_FILE>'); expect(code).toBe(1); expect(backportResult.status).toBe('failure'); expect(errorMessage).toMatchInlineSnapshot(` "Please update your config file: "<GLOBAL_CONFIG_FILE>". It must contain a valid "accessToken". Read more: https://github.com/sorenlouv/backport/blob/main/docs/config-file-options.md#global-config-backportconfigjson" `); }); it('when target branches cannot be inferred from pull request', async () => { const { output, code } = await (0, runBackportViaCli_1.runBackportViaCli)([ '--json', '--repo=backport-org/backport-e2e', '--pr=9', `--accessToken=${accessToken}`, ]); expect(code).toBe(0); const backportResult = JSON.parse(output); expect(backportResult.status).toBe('aborted'); expect(backportResult.error).toEqual({ errorContext: { code: 'no-branches-exception' }, name: 'BackportError', }); expect(backportResult.errorMessage).toBe('There are no branches to backport to. Aborting.'); }); it(`when target branch and branch label mapping are missing`, async () => { const { output, code } = await (0, runBackportViaCli_1.runBackportViaCli)([ '--json', `--access-token=${accessToken}`, ]); expect(code).toBe(1); const backportResult = JSON.parse(output); expect(backportResult.status).toBe('failure'); expect(backportResult.errorMessage).toMatchInlineSnapshot(` "Please specify a target branch: "--branch 6.1". Read more: https://github.com/sorenlouv/backport/blob/main/docs/config-file-options.md#project-config-backportrcjson" `); }); it(`when argument is invalid`, async () => { const { output } = await (0, runBackportViaCli_1.runBackportViaCli)(['--json', '--foo'], {}); const backportResult = JSON.parse(output); expect(backportResult.status).toBe('failure'); expect(backportResult.errorMessage).toEqual('Unknown argument: foo'); }); it('when `--repo` is invalid', async () => { const { output } = await (0, runBackportViaCli_1.runBackportViaCli)([ '--json', '--repo=backport-org/backport-e2e-foo', `--accessToken=${accessToken}`, ]); const backportResult = JSON.parse(output); expect(backportResult.status).toBe('failure'); expect(backportResult.errorMessage).toEqual('The repository "backport-org/backport-e2e-foo" doesn\'t exist'); }); it('when `--sha` is invalid', async () => { const { output } = await (0, runBackportViaCli_1.runBackportViaCli)([ '--json', '--repo=backport-org/backport-e2e', '--sha=abcdefg', `--accessToken=${accessToken}`, ]); const backportResult = JSON.parse(output); expect(backportResult.status).toBe('failure'); expect(backportResult.errorMessage).toEqual('No commit found on branch "master" with sha "abcdefg"'); }); it('when `--branch` is invalid', async () => { const { output } = await (0, runBackportViaCli_1.runBackportViaCli)([ '--json', '--repo=backport-org/backport-e2e', '--pr=9', '--branch=foobar', `--accessToken=${accessToken}`, ]); const backportResult = JSON.parse(output); expect(backportResult.status).toBe('success'); //@ts-expect-error expect(backportResult.results[0].error).toEqual({ name: 'BackportError', errorContext: { code: 'invalid-branch-exception', branchName: 'foobar', }, }); }); it('when `--branch` tries to inject argument', async () => { const { output } = await (0, runBackportViaCli_1.runBackportViaCli)([ '--json', '--repo=backport-org/backport-e2e', '--pr=9', '--branch=--foo bar', `--accessToken=${accessToken}`, ]); const backportResult = JSON.parse(output); expect(backportResult.status).toBe('success'); //@ts-expect-error expect(backportResult.results[0].error).toEqual({ name: 'BackportError', errorContext: { code: 'invalid-branch-exception', branchName: '--foo bar', }, }); }); it('when `--pr` is invalid', async () => { const { output } = await (0, runBackportViaCli_1.runBackportViaCli)([ '--json', '--repo=backport-org/backport-e2e', '--pr=900', '--branch=7.x', `--accessToken=${accessToken}`, ]); const backportResult = JSON.parse(output); expect(backportResult.status).toEqual('failure'); expect(backportResult.errorMessage).toEqual('[GraphQL] Could not resolve to a PullRequest with the number of 900. (Github API v4)'); }); it('when encountering conflicts', async () => { const { output } = await (0, runBackportViaCli_1.runBackportViaCli)([ '--json', '--repo=backport-org/repo-with-conflicts', '--pr=12', '--branch=7.x', `--accessToken=${accessToken}`, ]); const backportResult = JSON.parse(output); expect(backportResult.status).toEqual('success'); expect( //@ts-expect-error backportResult.results[0].error.errorContext.conflictingFiles).toEqual(['la-liga.md']); }); it('when `--source-branch` is invalid', async () => { const { output } = await (0, runBackportViaCli_1.runBackportViaCli)([ '--json', '--repo=backport-org/backport-e2e', '--pr=9', '--branch=7.x', '--source-branch=foo', `--accessToken=${accessToken}`, ]); const backportResult = JSON.parse(output); expect(backportResult.status).toBe('success'); expect(backportResult.results[0]).toEqual({ error: { context: { cmdArgs: ['checkout', 'foo'], code: 1, stderr: "error: pathspec 'foo' did not match any file(s) known to git\n", stdout: '', }, name: 'SpawnError', }, status: 'unhandled-error', targetBranch: '7.x', }); }); it('when attempting to backport unmerged PR', async () => { const { output } = await (0, runBackportViaCli_1.runBackportViaCli)([ '--json', '--repo=backport-org/backport-e2e', '--pr=12', `--accessToken=${accessToken}`, ]); const backportResult = JSON.parse(output); expect(backportResult.status).toBe('failure'); expect(backportResult.error).toEqual({ errorContext: { code: 'message-only-exception', message: 'The PR #12 is not merged', }, name: 'BackportError', }); }); }); async function createConfigFile(options) { const sandboxPath = (0, sandbox_1.getSandboxPath)({ filename: __filename }); await (0, sandbox_1.resetSandbox)(sandboxPath); const configPath = path_1.default.join(sandboxPath, 'config.json'); await promises_1.default.writeFile(configPath, JSON.stringify(options)); return configPath; } //# sourceMappingURL=error-handling-non-interactive-mode.private.test.js.map