Files
ihaleist/tests/release-info.test.mjs
T

30 lines
1.3 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { deployedRelease, frontendAssetInfo } from '../server/release-info.mjs';
test('release metadata rejects missing build markers', () => {
assert.equal(deployedRelease({}), null);
assert.equal(deployedRelease({ APP_RELEASE: 'unknown' }), null);
assert.equal(deployedRelease({ SOURCE_COMMIT: 'abc1234' }), 'abc1234');
assert.equal(deployedRelease({ APP_RELEASE: 'release-a', SOURCE_COMMIT: 'release-b' }), 'release-a');
});
test('frontend asset metadata hashes the script referenced by index.html', () => {
const root = mkdtempSync(join(tmpdir(), 'ihaleist-release-'));
try {
mkdirSync(join(root, 'assets'));
writeFileSync(join(root, 'index.html'), '<script type="module" src="/assets/index-test.js"></script>');
writeFileSync(join(root, 'assets/index-test.js'), 'console.log("release");\n');
assert.deepEqual(frontendAssetInfo([root]), {
path: '/assets/index-test.js',
sha256: 'ed81365d3ce25c2e499a43c7d91c72cbc05c6475a19423f18fc3917c96857e80',
bytes: 24,
});
} finally {
rmSync(root, { recursive: true, force: true });
}
});