chore: enhances tests.

Signed-off-by: Dmitry Kisler <admin@dkisler.com>
This commit is contained in:
Dmitry Kisler 2023-10-10 12:21:47 +02:00
parent 45ec8bfee0
commit ae5138eb8b
No known key found for this signature in database
GPG key ID: 46C0A987D58548F6
4 changed files with 219 additions and 202 deletions

View file

@ -17,9 +17,8 @@ jobs:
strategy: strategy:
matrix: matrix:
os: [ubuntu-latest, windows-latest, macos-latest] os: [ubuntu-latest, windows-latest, macos-latest]
# TODO: add move versions to test when the feature is added tofu-versions: [1.6.0-alpha1, latest]
tofu-versions: [latest] tofu-wrapper: [true, false]
tofu-wrapper: ["true", "false"]
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
@ -43,7 +42,7 @@ jobs:
strategy: strategy:
matrix: matrix:
os: [ubuntu-latest, windows-latest, macos-latest] os: [ubuntu-latest, windows-latest, macos-latest]
tofu-wrapper: ["true", "false"] tofu-wrapper: [true, false]
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
@ -77,7 +76,7 @@ jobs:
strategy: strategy:
matrix: matrix:
os: [ubuntu-latest, windows-latest, macos-latest] os: [ubuntu-latest, windows-latest, macos-latest]
tofu-wrapper: ["true", "false"] tofu-wrapper: [true, false]
defaults: defaults:
run: run:
working-directory: ./.github/workflows/data/local working-directory: ./.github/workflows/data/local

5
dist/index.js vendored
View file

@ -43,7 +43,7 @@ async function fetchReleases () {
}); });
if (!resp.ok) { if (!resp.ok) {
throw Error('failed fetching releases'); throw new Error('failed fetching releases');
} }
const releasesMeta = await resp.json(); const releasesMeta = await resp.json();
@ -100,8 +100,7 @@ async function getRelease (version, fetchReleasesFn = fetchReleases) {
// See: https://github.com/hashicorp/setup-terraform/blob/e192cfcbae6c6ed207c277ed7624131996c9bf13/lib/setup-terraform.js#L15 // See: https://github.com/hashicorp/setup-terraform/blob/e192cfcbae6c6ed207c277ed7624131996c9bf13/lib/setup-terraform.js#L15
module.exports = { module.exports = {
getRelease, getRelease,
Release, Release
Build
}; };

View file

@ -37,7 +37,7 @@ async function fetchReleases () {
}); });
if (!resp.ok) { if (!resp.ok) {
throw Error('failed fetching releases'); throw new Error('failed fetching releases');
} }
const releasesMeta = await resp.json(); const releasesMeta = await resp.json();
@ -94,6 +94,5 @@ async function getRelease (version, fetchReleasesFn = fetchReleases) {
// See: https://github.com/hashicorp/setup-terraform/blob/e192cfcbae6c6ed207c277ed7624131996c9bf13/lib/setup-terraform.js#L15 // See: https://github.com/hashicorp/setup-terraform/blob/e192cfcbae6c6ed207c277ed7624131996c9bf13/lib/setup-terraform.js#L15
module.exports = { module.exports = {
getRelease, getRelease,
Release, Release
Build
}; };

View file

@ -1,5 +1,6 @@
const pkg = require('../releases'); const pkg = require('../releases');
describe('getRelease', () => {
function mockFetchReleases () { function mockFetchReleases () {
const mockReleasesMeta = [{ const mockReleasesMeta = [{
tag_name: 'v1.6.0-alpha2', tag_name: 'v1.6.0-alpha2',
@ -185,15 +186,34 @@ function mockFetchReleases () {
return mockReleasesMeta.map(el => new pkg.Release(el)); return mockReleasesMeta.map(el => new pkg.Release(el));
} }
describe('getRelease', () => { it.each(
it('shall return \'1.6.0-alpha2\' release', async () => { [
const version = '<1.6.0-alpha3'; ['latest', '1.6.0-alpha2'],
const want = mockFetchReleases().find(el => el.version === '1.6.0-alpha2'); ['<1.6.0-beta', '1.6.0-alpha2'],
const gotRelease = await pkg.getRelease(version, mockFetchReleases); ['>1.6.0-alpha1', '1.6.0-alpha2'],
['>1.6.0-alpha1 <1.6.0', '1.6.0-alpha2'],
['~1.6.0-alpha', '1.6.0-alpha2'],
['<=1.6.0-alpha1', '1.6.0-alpha1']
]
)('happy path: getRelease(\'%s\') -> \'%s\'', async (input, wantVersion) => {
const want = mockFetchReleases().find(el => el.version === wantVersion);
const gotRelease = await pkg.getRelease(input, mockFetchReleases);
expect(gotRelease).toEqual(want); expect(gotRelease).toEqual(want);
}); });
it('shall return the latest release', async () => { it.each(
await pkg.getRelease('latest', mockFetchReleases); [
['foo', 'Input version cannot be used, see semver: https://semver.org/spec/v2.0.0.html', undefined],
['2.0', 'No matching version found', undefined],
['latest', 'No tofu releases found, please contact OpenTofu', async () => { return null; }],
['latest', 'No tofu releases found, please contact OpenTofu', async () => { return []; }]
]
)('unhappy path: getRelease(\'%s\') -> throw Error(\'%s\')', async (input, wantErrorMessage, mockFetchReleasesFn) => {
try {
await pkg.getRelease(input, mockFetchReleasesFn);
expect(true).toBe(false);
} catch (e) {
expect(e.message).toBe(wantErrorMessage);
}
}); });
}); });