mirror of
https://github.com/opentofu/setup-opentofu.git
synced 2025-12-06 07:50:37 +00:00
chore: enhances tests.
Signed-off-by: Dmitry Kisler <admin@dkisler.com>
This commit is contained in:
parent
45ec8bfee0
commit
ae5138eb8b
4 changed files with 219 additions and 202 deletions
9
.github/workflows/setup-tofu.yml
vendored
9
.github/workflows/setup-tofu.yml
vendored
|
|
@ -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
5
dist/index.js
vendored
|
|
@ -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
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue