diff --git a/__tests__/get-latest-version.test.ts b/__tests__/get-latest-version.test.ts new file mode 100644 index 0000000..fea6fc8 --- /dev/null +++ b/__tests__/get-latest-version.test.ts @@ -0,0 +1,64 @@ +import {getURL, getLatestVersion} from '../src/get-latest-version'; +import nock from 'nock'; +import {FetchError} from 'node-fetch'; +import {Tool} from '../src/constants'; +import jsonTestBrew from './data/brew.json'; +import jsonTestGithub from './data/github.json'; + +beforeEach(() => { + jest.resetModules(); +}); + +afterEach(() => { + nock.cleanAll(); +}); + +describe('getURL()', () => { + test('return expected URL', () => { + const urlBrewExpected = `https://formulae.brew.sh/api/formula/${Tool.Repo}.json`; + const urlBrew: string = getURL(Tool.Org, Tool.Repo, 'brew'); + expect(urlBrew).toMatch(urlBrewExpected); + + const urlGithubExpected = `https://api.github.com/repos/${Tool.Org}/${Tool.Repo}/releases/latest`; + const urlGithub: string = getURL(Tool.Org, Tool.Repo, 'github'); + expect(urlGithub).toMatch(urlGithubExpected); + }); +}); + +describe('getLatestVersion()', () => { + test('return latest version via brew', async () => { + nock('https://formulae.brew.sh') + .get(`/api/formula/${Tool.Repo}.json`) + .reply(200, jsonTestBrew); + + const versionLatest: string = await getLatestVersion( + Tool.Org, + Tool.Repo, + 'brew' + ); + expect(versionLatest).toMatch(Tool.TestVersionLatest); + }); + + test('return latest version via GitHub', async () => { + nock('https://api.github.com') + .get(`/repos/${Tool.Org}/${Tool.Repo}/releases/latest`) + .reply(200, jsonTestGithub); + + const versionLatest: string = await getLatestVersion( + Tool.Org, + Tool.Repo, + 'github' + ); + expect(versionLatest).toMatch(Tool.TestVersionLatest); + }); + + test('return exception 404', async () => { + nock('https://formulae.brew.sh') + .get(`/api/formula/${Tool.Repo}.json`) + .reply(404); + + await expect( + getLatestVersion(Tool.Org, Tool.Repo, 'brew') + ).rejects.toThrowError(FetchError); + }); +}); diff --git a/__tests__/main.test.ts b/__tests__/main.test.ts index c8f8d8f..311d564 100644 --- a/__tests__/main.test.ts +++ b/__tests__/main.test.ts @@ -56,7 +56,8 @@ describe('showVersion()', () => { }); test('return not found', async () => { - result = await main.showVersion('gitgit', ['--version']); - expect(result.exitcode).not.toBe(0); + await expect( + main.showVersion('gitgit', ['--version']) + ).rejects.toThrowError(Error); }); }); diff --git a/src/constants.ts b/src/constants.ts index e305ca4..7078254 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -3,5 +3,7 @@ export enum Tool { Org = 'gohugoio', Repo = 'hugo', CmdName = 'hugo', - CmdOptVersion = 'version' + CmdOptVersion = 'version', + TestVersionLatest = '0.62.2', + TestVersionSpec = '0.61.0' } diff --git a/src/get-latest-version.ts b/src/get-latest-version.ts index e6f3c37..5922830 100644 --- a/src/get-latest-version.ts +++ b/src/get-latest-version.ts @@ -17,18 +17,14 @@ export async function getLatestVersion( repo: string, api: string ): Promise { - try { - const url = getURL(org, repo, api); - const response = await fetch(url); - const json = await response.json(); - let latestVersion = ''; - if (api === 'brew') { - latestVersion = json.versions.stable; - } else if (api === 'github') { - latestVersion = json.tag_name; - } - return latestVersion; - } catch (e) { - return e; + const url = getURL(org, repo, api); + const response = await fetch(url); + const json = await response.json(); + let latestVersion = ''; + if (api === 'brew') { + latestVersion = json.versions.stable; + } else if (api === 'github') { + latestVersion = json.tag_name; } + return latestVersion; } diff --git a/src/main.ts b/src/main.ts index 20dd72d..50c5170 100644 --- a/src/main.ts +++ b/src/main.ts @@ -26,11 +26,7 @@ export async function showVersion( } }; - try { - result.exitcode = await exec.exec(cmd, args, options); - } catch (e) { - return e; - } + result.exitcode = await exec.exec(cmd, args, options); core.debug(`command: ${cmd} ${args}`); core.debug(`exit code: ${result.exitcode}`); core.debug(`stdout: ${result.output}`);