fix(core,testing): improve type safety and update tests for latest tstest and storage APIs

This commit is contained in:
2026-04-30 09:25:26 +00:00
parent 2e2726a4de
commit 45e24ecff3
19 changed files with 1394 additions and 1414 deletions
+31 -31
View File
@@ -1,4 +1,4 @@
import { tap, expect } from '@git.zone/tstest';
import { tap, expect } from '@git.zone/tstest/tapbundle';
import { RegistryStorage } from '../ts/core/classes.registrystorage.js';
import { CargoRegistry } from '../ts/cargo/classes.cargoregistry.js';
import { AuthManager } from '../ts/core/classes.authmanager.js';
@@ -17,21 +17,21 @@ tap.test('should calculate correct index paths for different crate names', async
const getPath = (storage as any).getCargoIndexPath.bind(storage);
// 1-character names
expect(getPath('a')).to.equal('cargo/index/1/a');
expect(getPath('z')).to.equal('cargo/index/1/z');
expect(getPath('a')).toEqual('cargo/index/1/a');
expect(getPath('z')).toEqual('cargo/index/1/z');
// 2-character names
expect(getPath('io')).to.equal('cargo/index/2/io');
expect(getPath('ab')).to.equal('cargo/index/2/ab');
expect(getPath('io')).toEqual('cargo/index/2/io');
expect(getPath('ab')).toEqual('cargo/index/2/ab');
// 3-character names
expect(getPath('axo')).to.equal('cargo/index/3/a/axo');
expect(getPath('foo')).to.equal('cargo/index/3/f/foo');
expect(getPath('axo')).toEqual('cargo/index/3/a/axo');
expect(getPath('foo')).toEqual('cargo/index/3/f/foo');
// 4+ character names
expect(getPath('serde')).to.equal('cargo/index/se/rd/serde');
expect(getPath('tokio')).to.equal('cargo/index/to/ki/tokio');
expect(getPath('my-crate')).to.equal('cargo/index/my/--/my-crate');
expect(getPath('serde')).toEqual('cargo/index/se/rd/serde');
expect(getPath('tokio')).toEqual('cargo/index/to/ki/tokio');
expect(getPath('my-crate')).toEqual('cargo/index/my/--/my-crate');
});
// Test crate file path calculation
@@ -46,9 +46,9 @@ tap.test('should calculate correct crate file paths', async () => {
// Access private method for testing
const getPath = (storage as any).getCargoCratePath.bind(storage);
expect(getPath('serde', '1.0.0')).to.equal('cargo/crates/serde/serde-1.0.0.crate');
expect(getPath('tokio', '1.28.0')).to.equal('cargo/crates/tokio/tokio-1.28.0.crate');
expect(getPath('my-crate', '0.1.0')).to.equal('cargo/crates/my-crate/my-crate-0.1.0.crate');
expect(getPath('serde', '1.0.0')).toEqual('cargo/crates/serde/serde-1.0.0.crate');
expect(getPath('tokio', '1.28.0')).toEqual('cargo/crates/tokio/tokio-1.28.0.crate');
expect(getPath('my-crate', '0.1.0')).toEqual('cargo/crates/my-crate/my-crate-0.1.0.crate');
});
// Test crate name validation
@@ -73,28 +73,28 @@ tap.test('should validate crate names correctly', async () => {
const validate = (registry as any).validateCrateName.bind(registry);
// Valid names
expect(validate('serde')).to.be.true;
expect(validate('tokio')).to.be.true;
expect(validate('my-crate')).to.be.true;
expect(validate('my_crate')).to.be.true;
expect(validate('crate123')).to.be.true;
expect(validate('a')).to.be.true;
expect(validate('serde')).toBeTrue();
expect(validate('tokio')).toBeTrue();
expect(validate('my-crate')).toBeTrue();
expect(validate('my_crate')).toBeTrue();
expect(validate('crate123')).toBeTrue();
expect(validate('a')).toBeTrue();
// Invalid names (uppercase not allowed)
expect(validate('Serde')).to.be.false;
expect(validate('MyCreate')).to.be.false;
expect(validate('Serde')).toBeFalse();
expect(validate('MyCreate')).toBeFalse();
// Invalid names (special characters)
expect(validate('my.crate')).to.be.false;
expect(validate('my@crate')).to.be.false;
expect(validate('my crate')).to.be.false;
expect(validate('my.crate')).toBeFalse();
expect(validate('my@crate')).toBeFalse();
expect(validate('my crate')).toBeFalse();
// Invalid names (too long)
const longName = 'a'.repeat(65);
expect(validate(longName)).to.be.false;
expect(validate(longName)).toBeFalse();
// Invalid names (empty)
expect(validate('')).to.be.false;
expect(validate('')).toBeFalse();
});
// Test config.json response
@@ -122,12 +122,12 @@ tap.test('should return valid config.json', async () => {
query: {},
});
expect(response.status).to.equal(200);
expect(response.headers['Content-Type']).to.equal('application/json');
expect(response.status).toEqual(200);
expect(response.headers['Content-Type']).toEqual('application/json');
const body = await streamToJson(response.body);
expect(body).to.be.an('object');
expect(body.dl).to.include('/api/v1/crates/{crate}/{version}/download');
expect(body.api).to.equal('http://localhost:5000/cargo');
expect(body).toBeTypeOf('object');
expect(body.dl).toInclude('/api/v1/crates/{crate}/{version}/download');
expect(body.api).toEqual('http://localhost:5000/cargo');
});
export default tap.start();