feat(skill): 补齐版本测试发布与工作台链路

This commit is contained in:
2026-06-01 04:36:09 +08:00
parent 32925bad8e
commit 29f132e48c
26 changed files with 1144 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
import { beforeEach, describe, expect, it, vi } from 'vitest';
import {
archiveSkillVersion,
getSkillWorkspace,
publishSkillDraft,
saveSkillDraft,
testSkillDraft,
} from '../skill';
import { get, post } from '../request';
vi.mock('../request', () => ({
get: vi.fn(),
post: vi.fn(),
}));
describe('skill api', () => {
beforeEach(() => {
vi.clearAllMocks();
});
it('maps skill endpoints correctly', () => {
getSkillWorkspace('skill-citation');
saveSkillDraft('skill-citation', {
versionNo: 4,
promptText: '你是回答审校器',
configJson: '{"timeout":3000}',
variableSchemaJson: '{"type":"object"}',
});
testSkillDraft('skill-citation', {
versionNo: 4,
promptText: '你是回答审校器',
configJson: '{"timeout":3000}',
variableSchemaJson: '{"type":"object"}',
});
publishSkillDraft('skill-citation', {
versionNo: 4,
promptText: '你是回答审校器',
configJson: '{"timeout":3000}',
variableSchemaJson: '{"type":"object"}',
});
archiveSkillVersion('skill-citation', 3);
expect(get).toHaveBeenCalledWith('/skills/skill-citation');
expect(post).toHaveBeenCalledWith('/skills/skill-citation/draft', {
versionNo: 4,
promptText: '你是回答审校器',
configJson: '{"timeout":3000}',
variableSchemaJson: '{"type":"object"}',
});
expect(post).toHaveBeenCalledWith('/skills/skill-citation/test', {
versionNo: 4,
promptText: '你是回答审校器',
configJson: '{"timeout":3000}',
variableSchemaJson: '{"type":"object"}',
});
expect(post).toHaveBeenCalledWith('/skills/skill-citation/publish', {
versionNo: 4,
promptText: '你是回答审校器',
configJson: '{"timeout":3000}',
variableSchemaJson: '{"type":"object"}',
});
expect(post).toHaveBeenCalledWith('/skills/skill-citation/archive', undefined, { params: { versionNo: 3 } });
});
});

62
frontend/src/api/skill.ts Normal file
View File

@@ -0,0 +1,62 @@
import { get, post } from './request';
export interface SkillVersionDraft {
id?: string;
skillId?: string;
versionNo: number;
promptText?: string;
codeText?: string;
configJson?: string;
variableSchemaJson?: string;
testResultJson?: string;
publishStatus?: string;
remark?: string;
}
export interface SkillDefinitionRecord {
id?: string;
skillCode: string;
skillName: string;
skillType: string;
description?: string;
status?: string;
remark?: string;
}
export interface SkillVersionRecord extends SkillVersionDraft {
skillId: string;
publishedTime?: string;
}
export interface SkillWorkspace {
skillId: string;
skillCode: string;
skillName: string;
skillType: string;
description?: string;
status?: string;
publishedVersionNo?: number;
latestTestResultJson?: string;
skills: SkillDefinitionRecord[];
versions: SkillVersionRecord[];
}
export function getSkillWorkspace(skillCode: string) {
return get<SkillWorkspace>(`/skills/${skillCode}`);
}
export function saveSkillDraft(skillCode: string, data: SkillVersionDraft) {
return post<boolean, SkillVersionDraft>(`/skills/${skillCode}/draft`, data);
}
export function testSkillDraft(skillCode: string, data: SkillVersionDraft) {
return post<SkillVersionRecord, SkillVersionDraft>(`/skills/${skillCode}/test`, data);
}
export function publishSkillDraft(skillCode: string, data: SkillVersionDraft) {
return post<boolean, SkillVersionDraft>(`/skills/${skillCode}/publish`, data);
}
export function archiveSkillVersion(skillCode: string, versionNo: number) {
return post<boolean>(`/skills/${skillCode}/archive`, undefined, { params: { versionNo } });
}