Files
tools/test/test.node.ts

94 lines
3.6 KiB
TypeScript

import { expect, tap } from '@git.zone/tstest/tapbundle';
import * as tools from '../ts/index.js';
import { PackageManagerUtil } from '../ts/mod_update/classes.packagemanager.js';
tap.test('should export runCli function', async () => {
expect(typeof tools.runCli).toEqual('function');
});
// ============================================
// isNewerVersion tests
// ============================================
tap.test('isNewerVersion: should detect newer major version', async () => {
const pmUtil = new PackageManagerUtil();
expect(pmUtil.isNewerVersion('1.0.0', '2.0.0')).toBeTrue();
});
tap.test('isNewerVersion: should detect newer minor version', async () => {
const pmUtil = new PackageManagerUtil();
expect(pmUtil.isNewerVersion('1.0.0', '1.1.0')).toBeTrue();
});
tap.test('isNewerVersion: should detect newer patch version', async () => {
const pmUtil = new PackageManagerUtil();
expect(pmUtil.isNewerVersion('1.0.0', '1.0.1')).toBeTrue();
});
tap.test('isNewerVersion: should return false for equal versions', async () => {
const pmUtil = new PackageManagerUtil();
expect(pmUtil.isNewerVersion('1.0.0', '1.0.0')).toBeFalse();
});
tap.test('isNewerVersion: should return false when current is newer', async () => {
const pmUtil = new PackageManagerUtil();
expect(pmUtil.isNewerVersion('2.0.0', '1.0.0')).toBeFalse();
expect(pmUtil.isNewerVersion('1.1.0', '1.0.0')).toBeFalse();
expect(pmUtil.isNewerVersion('1.0.1', '1.0.0')).toBeFalse();
});
tap.test('isNewerVersion: should handle v-prefixed versions', async () => {
const pmUtil = new PackageManagerUtil();
expect(pmUtil.isNewerVersion('v1.0.0', 'v2.0.0')).toBeTrue();
expect(pmUtil.isNewerVersion('v2.0.0', 'v1.0.0')).toBeFalse();
});
tap.test('isNewerVersion: should handle mixed prefixed and non-prefixed', async () => {
const pmUtil = new PackageManagerUtil();
expect(pmUtil.isNewerVersion('v1.0.0', '2.0.0')).toBeTrue();
expect(pmUtil.isNewerVersion('1.0.0', 'v2.0.0')).toBeTrue();
});
tap.test('isNewerVersion: should handle versions with different segment counts', async () => {
const pmUtil = new PackageManagerUtil();
expect(pmUtil.isNewerVersion('1.0', '1.0.1')).toBeTrue();
expect(pmUtil.isNewerVersion('1.0.1', '1.0')).toBeFalse();
});
// ============================================
// parseYarnPackageName tests
// ============================================
tap.test('parseYarnPackageName: should parse scoped package correctly', async () => {
const result = PackageManagerUtil.parseYarnPackageName('@git.zone/cli@1.2.3');
expect(result.name).toEqual('@git.zone/cli');
expect(result.version).toEqual('1.2.3');
});
tap.test('parseYarnPackageName: should parse unscoped package correctly', async () => {
const result = PackageManagerUtil.parseYarnPackageName('typescript@5.3.2');
expect(result.name).toEqual('typescript');
expect(result.version).toEqual('5.3.2');
});
tap.test('parseYarnPackageName: should handle empty string', async () => {
const result = PackageManagerUtil.parseYarnPackageName('');
expect(result.name).toEqual('');
expect(result.version).toEqual('unknown');
});
tap.test('parseYarnPackageName: should handle name with no version', async () => {
const result = PackageManagerUtil.parseYarnPackageName('@git.zone/cli');
expect(result.name).toEqual('@git.zone/cli');
expect(result.version).toEqual('unknown');
});
tap.test('parseYarnPackageName: should handle unscoped name with no version', async () => {
const result = PackageManagerUtil.parseYarnPackageName('typescript');
expect(result.name).toEqual('typescript');
expect(result.version).toEqual('unknown');
});
export default tap.start();