feat(mod_update): add self-update flow, package name parser, dynamic CLI version, and tests
This commit is contained in:
@@ -1,9 +1,93 @@
|
||||
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();
|
||||
|
||||
Reference in New Issue
Block a user