goreleaser-action/__tests__/version.test.ts
2026-02-24 20:58:02 -05:00

94 lines
2.3 KiB
TypeScript

import {describe, expect, it, beforeEach, afterEach} from '@jest/globals';
import * as fs from 'fs';
import * as os from 'os';
import * as path from 'path';
import {getRequestedVersion} from '../src/version';
import {Inputs} from '../src/context';
describe('getRequestedVersion', () => {
let tmpDir: string;
beforeEach(() => {
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'goreleaser-test-'));
});
afterEach(() => {
try {
fs.rmSync(tmpDir, {recursive: true, force: true});
} catch (e) {
console.error(`Failed to remove temp directory ${tmpDir}:`, e);
}
});
it('returns provided version when set', () => {
const inputs: Inputs = {
distribution: 'goreleaser',
version: 'v1.2.3',
versionFile: '',
args: '',
workdir: '',
installOnly: false
};
const v = getRequestedVersion(inputs);
expect(v).toBe('v1.2.3');
});
it('warns when both version and version-file are provided and returns version', () => {
const inputs: Inputs = {
distribution: 'goreleaser',
version: 'v9.9.9',
versionFile: '.tool-versions',
args: '',
workdir: '',
installOnly: false
};
const v = getRequestedVersion(inputs);
expect(v).toBe('v9.9.9');
});
it('throws when version is empty and version-file does not exist', () => {
const inputs: Inputs = {
distribution: 'goreleaser',
version: '',
versionFile: 'nonexistent-file',
args: '',
workdir: '',
installOnly: false
};
expect(() => getRequestedVersion(inputs)).toThrow();
});
it('parses .tool-versions and returns v-prefixed version', () => {
const toolVersionsPath = path.join(tmpDir, '.tool-versions');
fs.writeFileSync(toolVersionsPath, 'goreleaser 1.2.3\n');
const inputs: Inputs = {
distribution: 'goreleaser',
version: '',
versionFile: '.tool-versions',
args: '',
workdir: tmpDir,
installOnly: false
};
const v = getRequestedVersion(inputs);
expect(v).toBe('v1.2.3');
});
it('defaults to ~> v2 when nothing provided', () => {
const inputs: Inputs = {
distribution: 'goreleaser',
version: '',
versionFile: '',
args: '',
workdir: '',
installOnly: false
};
const v = getRequestedVersion(inputs);
expect(v).toBe('~> v2');
});
});