mirror of
https://github.com/Shik3i/KoalaSync.git
synced 2026-08-29 12:07:09 +00:00
test: harden release and browser gates
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import {
|
||||
parseCheckRuns,
|
||||
validateRepositoryName,
|
||||
validateRequiredChecks,
|
||||
validateVersionSnapshot
|
||||
} from './release-preflight.mjs';
|
||||
|
||||
describe('release preflight helpers', () => {
|
||||
it('parses successful GitHub check runs', () => {
|
||||
const checks = parseCheckRuns('verify\tsuccess\thttps://example.test/1\nnode20\tsuccess\thttps://example.test/2\ne2e\tsuccess\thttps://example.test/3');
|
||||
expect(checks).toEqual([
|
||||
{ name: 'verify', conclusion: 'success', url: 'https://example.test/1' },
|
||||
{ name: 'node20', conclusion: 'success', url: 'https://example.test/2' },
|
||||
{ name: 'e2e', conclusion: 'success', url: 'https://example.test/3' }
|
||||
]);
|
||||
expect(() => validateRequiredChecks(checks)).not.toThrow();
|
||||
});
|
||||
|
||||
it('rejects missing, pending, and failed release checks', () => {
|
||||
expect(() => validateRequiredChecks([{ name: 'verify', conclusion: 'success' }]))
|
||||
.toThrow('Required check is missing for the release commit: node20');
|
||||
expect(() => validateRequiredChecks([
|
||||
{ name: 'verify', conclusion: 'success' },
|
||||
{ name: 'node20', conclusion: 'success' },
|
||||
{ name: 'e2e', conclusion: 'in_progress' }
|
||||
])).toThrow('Required check e2e did not succeed: in_progress');
|
||||
expect(() => validateRequiredChecks([
|
||||
{ name: 'verify', conclusion: 'failure' },
|
||||
{ name: 'node20', conclusion: 'success' },
|
||||
{ name: 'e2e', conclusion: 'success' }
|
||||
])).toThrow('Required check verify did not succeed: failure');
|
||||
expect(() => validateRequiredChecks([
|
||||
{ name: 'verify', conclusion: 'success' },
|
||||
{ name: 'verify', conclusion: 'failure' },
|
||||
{ name: 'node20', conclusion: 'success' },
|
||||
{ name: 'e2e', conclusion: 'success' }
|
||||
])).toThrow('Required check verify did not succeed: success, failure');
|
||||
});
|
||||
|
||||
it('validates repository names and malformed check output', () => {
|
||||
expect(validateRepositoryName('Shik3i/KoalaSync')).toBe('Shik3i/KoalaSync');
|
||||
for (const invalid of ['', 'KoalaSync', 'owner/repo/extra', 'owner /repo']) {
|
||||
expect(() => validateRepositoryName(invalid)).toThrow('Invalid GitHub repository');
|
||||
}
|
||||
expect(() => parseCheckRuns('verify')).toThrow('Invalid check-run record');
|
||||
});
|
||||
|
||||
it('requires every release source to already match the tag version', () => {
|
||||
expect(() => validateVersionSnapshot('3.1.5', {
|
||||
package: '3.1.5',
|
||||
manifest: '3.1.5'
|
||||
})).not.toThrow();
|
||||
expect(() => validateVersionSnapshot('3.1.5', {
|
||||
package: '3.1.5',
|
||||
manifest: '3.1.4'
|
||||
})).toThrow('manifest version 3.1.4 does not match tag version 3.1.5');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user