mirror of
https://github.com/iflytek/skillhub.git
synced 2026-08-28 11:25:00 +00:00
* feat(cli,domain): support non-global namespace skill download Parse namespace from skill name using -- separator (e.g., astroclaw--api-gateway) so users don't need --namespace flag. Allow anonymous download for any PUBLIC skill regardless of namespace. CLI changes: - Add cli/src/shared/skill-name-parser.ts utility - Update install and remove commands to parse skill name argument - 10 unit tests covering edge cases Domain changes: - SkillDownloadService.isAnonymousDownloadAllowed: drop namespace type check, only require PUBLIC visibility - Update test to expect success for team-namespace public skill Synced from SAAS commit 26c67e31b1221249cf9b73321d1b726d8ba6e6df * fix(cli): use bun:test instead of vitest in skill-name-parser test
90 lines
2.5 KiB
TypeScript
90 lines
2.5 KiB
TypeScript
import { describe, test, expect } from 'bun:test'
|
|
import { parseSkillName } from '../../../src/shared/skill-name-parser'
|
|
|
|
describe('parseSkillName', () => {
|
|
describe('with namespace--slug format', () => {
|
|
test('should parse namespace and slug separated by double dash', () => {
|
|
const result = parseSkillName('astroclaw--api-gateway')
|
|
expect(result).toEqual({
|
|
namespace: 'astroclaw',
|
|
slug: 'api-gateway'
|
|
})
|
|
})
|
|
|
|
test('should handle namespace and slug with single dashes', () => {
|
|
const result = parseSkillName('my-org--my-skill-name')
|
|
expect(result).toEqual({
|
|
namespace: 'my-org',
|
|
slug: 'my-skill-name'
|
|
})
|
|
})
|
|
|
|
test('should handle multiple double dashes by using first as separator', () => {
|
|
const result = parseSkillName('namespace--slug--with--dashes')
|
|
expect(result).toEqual({
|
|
namespace: 'namespace',
|
|
slug: 'slug--with--dashes'
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('with slug only format', () => {
|
|
test('should use default namespace when no separator present', () => {
|
|
const result = parseSkillName('api-gateway')
|
|
expect(result).toEqual({
|
|
namespace: 'global',
|
|
slug: 'api-gateway'
|
|
})
|
|
})
|
|
|
|
test('should use custom default namespace when provided', () => {
|
|
const result = parseSkillName('api-gateway', 'myorg')
|
|
expect(result).toEqual({
|
|
namespace: 'myorg',
|
|
slug: 'api-gateway'
|
|
})
|
|
})
|
|
|
|
test('should handle slug with single dashes', () => {
|
|
const result = parseSkillName('my-skill-name')
|
|
expect(result).toEqual({
|
|
namespace: 'global',
|
|
slug: 'my-skill-name'
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('edge cases', () => {
|
|
test('should handle separator at start', () => {
|
|
const result = parseSkillName('--api-gateway')
|
|
expect(result).toEqual({
|
|
namespace: 'global',
|
|
slug: 'api-gateway'
|
|
})
|
|
})
|
|
|
|
test('should handle separator at end', () => {
|
|
const result = parseSkillName('astroclaw--')
|
|
expect(result).toEqual({
|
|
namespace: 'global',
|
|
slug: 'astroclaw'
|
|
})
|
|
})
|
|
|
|
test('should handle empty string', () => {
|
|
const result = parseSkillName('')
|
|
expect(result).toEqual({
|
|
namespace: 'global',
|
|
slug: ''
|
|
})
|
|
})
|
|
|
|
test('should handle just separator', () => {
|
|
const result = parseSkillName('--')
|
|
expect(result).toEqual({
|
|
namespace: 'global',
|
|
slug: ''
|
|
})
|
|
})
|
|
})
|
|
})
|