| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- 'use strict';
- const assert = require('assert/strict');
- const fs = require('fs');
- const os = require('os');
- const path = require('path');
- const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'qiwei-knowledge-crud-'));
- process.env.QIWEI_OUTPUTS_DIR = tempRoot;
- const service = require('../mcp/src/dashboard/workspace-library-service');
- function flatten(nodes = []) { return nodes.flatMap(node => [node, ...(node.children ? flatten(node.children) : [])]); }
- function userTree() { return service.listKnowledgeTree().data.roots.find(root => root.libraryId === 'user-knowledge'); }
- function find(name) { return flatten([userTree()]).find(node => node.name === name); }
- try {
- const root = userTree();
- assert.equal(root.writable, true);
- assert.equal(root.name, '我的知识库');
- service.createKnowledgeFolder({ libraryId: 'user-knowledge', name: '客户资料' });
- service.createKnowledgeFolder({ libraryId: 'user-knowledge', parentPath: '客户资料', name: '销售话术' });
- const created = service.createKnowledgeFile({ libraryId: 'user-knowledge', parentPath: '客户资料/销售话术', name: '欢迎语.md', content: '# 欢迎\n\n你好,欢迎咨询。' });
- const createdNode = find('欢迎语.md');
- assert.ok(createdNode?.id);
- assert.equal(service.readKnowledgeFile(createdNode.id).data.content.includes('欢迎咨询'), true);
- const renamed = service.updateKnowledgeNode({ id: createdNode.id, name: '欢迎语-更新.md', content: '# 更新内容' });
- const renamedNode = find('欢迎语-更新.md');
- assert.ok(renamed.data.nodeId);
- assert.equal(service.readKnowledgeFile(renamedNode.id).data.content, '# 更新内容');
- const destination = find('客户资料');
- service.moveKnowledgeNode({ id: renamedNode.id, parentId: destination.id });
- const movedNode = find('欢迎语-更新.md');
- assert.equal(movedNode.relativePath, '客户资料/欢迎语-更新.md');
- service.deleteKnowledgeNode({ id: destination.id });
- assert.equal(find('欢迎语-更新.md'), undefined, JSON.stringify(userTree()));
- assert.throws(() => service.createKnowledgeFile({ libraryId: 'agent-knowledge', name: '越权.md', content: 'x' }), /只读/);
- assert.throws(() => service.createKnowledgeFolder({ libraryId: 'user-knowledge', parentPath: '../', name: '越界' }), /目录之外|分类/);
- process.stdout.write(JSON.stringify({ status: 'ok', checks: ['中文分类', '文件创建与读取', '重命名与编辑', '移动分类', '递归删除', '只读目录保护', '路径边界保护'] }, null, 2) + '\n');
- } finally {
- fs.rmSync(tempRoot, { recursive: true, force: true });
- }
|