harb/kraiken-lib/src/tests/version.test.ts
openhands 26a9645b1f fix: kraiken-lib: fix broken tests + raise coverage to 95% (#286)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 00:10:45 +00:00

101 lines
3.4 KiB
TypeScript

import { describe, expect, test } from 'vitest';
import {
COMPATIBLE_CONTRACT_VERSIONS,
KRAIKEN_LIB_VERSION,
STACK_META_ID,
getVersionMismatchError,
isCompatibleVersion,
} from '../version.js';
describe('version constants', () => {
test('KRAIKEN_LIB_VERSION is a positive integer', () => {
expect(typeof KRAIKEN_LIB_VERSION).toBe('number');
expect(KRAIKEN_LIB_VERSION).toBeGreaterThan(0);
expect(Number.isInteger(KRAIKEN_LIB_VERSION)).toBe(true);
});
test('STACK_META_ID is the expected string', () => {
expect(STACK_META_ID).toBe('stack-meta');
});
test('COMPATIBLE_CONTRACT_VERSIONS is a non-empty array', () => {
expect(Array.isArray(COMPATIBLE_CONTRACT_VERSIONS)).toBe(true);
expect(COMPATIBLE_CONTRACT_VERSIONS.length).toBeGreaterThan(0);
});
test('COMPATIBLE_CONTRACT_VERSIONS includes KRAIKEN_LIB_VERSION', () => {
expect(COMPATIBLE_CONTRACT_VERSIONS).toContain(KRAIKEN_LIB_VERSION);
});
});
describe('isCompatibleVersion', () => {
test('returns true for all known compatible versions', () => {
for (const version of COMPATIBLE_CONTRACT_VERSIONS) {
expect(isCompatibleVersion(version)).toBe(true);
}
});
test('returns false for version 0', () => {
expect(isCompatibleVersion(0)).toBe(false);
});
test('returns false for a future unknown version', () => {
expect(isCompatibleVersion(9999)).toBe(false);
});
test('returns false for a negative version', () => {
expect(isCompatibleVersion(-1)).toBe(false);
});
});
describe('getVersionMismatchError', () => {
test('returns a multi-line string for ponder context', () => {
const error = getVersionMismatchError(99, 'ponder');
expect(typeof error).toBe('string');
expect(error.includes('\n')).toBe(true);
});
test('ponder context includes contract version number', () => {
const error = getVersionMismatchError(99, 'ponder');
expect(error).toContain('99');
});
test('ponder context includes VERSION MISMATCH header', () => {
const error = getVersionMismatchError(99, 'ponder');
expect(error).toContain('VERSION MISMATCH');
expect(error).toContain('ponder');
});
test('ponder context includes ponder-specific rebuild instructions', () => {
const error = getVersionMismatchError(99, 'ponder');
expect(error).toContain('build-kraiken-lib.sh');
});
test('frontend context includes VERSION MISMATCH header', () => {
const error = getVersionMismatchError(99, 'frontend');
expect(error).toContain('VERSION MISMATCH');
expect(error).toContain('frontend');
});
test('frontend context includes page refresh instruction', () => {
const error = getVersionMismatchError(99, 'frontend');
expect(error).toContain('refreshing');
});
test('error includes the library version', () => {
const error = getVersionMismatchError(99, 'ponder');
expect(error).toContain(String(KRAIKEN_LIB_VERSION));
});
test('error includes compatible versions list', () => {
const error = getVersionMismatchError(99, 'ponder');
const expectedVersions = COMPATIBLE_CONTRACT_VERSIONS.join(', ');
expect(error).toContain(expectedVersions);
});
test('frontend and ponder errors differ in instructions', () => {
const ponderError = getVersionMismatchError(99, 'ponder');
const frontendError = getVersionMismatchError(99, 'frontend');
expect(ponderError).not.toBe(frontendError);
});
});