|
|
@@ -3,13 +3,14 @@ import { testClient } from 'hono/testing';
|
|
|
import { IntegrationTestDatabase, setupIntegrationDatabaseHooksWithEntities } from '@d8d/shared-test-util';
|
|
|
import { UserEntityMt, RoleMt } from '@d8d/user-module-mt';
|
|
|
import { FileMt } from '@d8d/file-module-mt';
|
|
|
+import { SystemConfigMt } from '@d8d/core-module-mt/system-config-module-mt/entities';
|
|
|
import { FeieMtRoutes } from '../../src/routes';
|
|
|
import { FeiePrinterMt, FeiePrintTaskMt, FeieConfigMt } from '../../src/entities';
|
|
|
import { FeieTestDataFactory } from '../utils/test-data-factory';
|
|
|
|
|
|
// 设置集成测试钩子
|
|
|
setupIntegrationDatabaseHooksWithEntities([
|
|
|
- UserEntityMt, RoleMt, FileMt, FeiePrinterMt, FeiePrintTaskMt, FeieConfigMt
|
|
|
+ UserEntityMt, RoleMt, FileMt, SystemConfigMt, FeiePrinterMt, FeiePrintTaskMt, FeieConfigMt
|
|
|
])
|
|
|
|
|
|
describe('飞鹅打印多租户API集成测试', () => {
|
|
|
@@ -83,7 +84,7 @@ describe('飞鹅打印多租户API集成测试', () => {
|
|
|
const otherTenantPrinter = await FeieTestDataFactory.createTestPrinter(dataSource, 2);
|
|
|
|
|
|
// 使用租户1的用户尝试访问租户2的打印机
|
|
|
- const response = await client['printers/:printerSn'].$get({
|
|
|
+ const response = await client.printers[':printerSn'].$get({
|
|
|
param: { printerSn: otherTenantPrinter.printerSn }
|
|
|
}, {
|
|
|
headers: {
|
|
|
@@ -102,7 +103,7 @@ describe('飞鹅打印多租户API集成测试', () => {
|
|
|
const tenant1Printer = await FeieTestDataFactory.createTestPrinter(dataSource, 1);
|
|
|
|
|
|
// 使用租户2的用户尝试访问租户1的打印机
|
|
|
- const response = await client['printers/:printerSn'].$get({
|
|
|
+ const response = await client.printers[':printerSn'].$get({
|
|
|
param: { printerSn: tenant1Printer.printerSn }
|
|
|
}, {
|
|
|
headers: {
|
|
|
@@ -176,7 +177,7 @@ describe('飞鹅打印多租户API集成测试', () => {
|
|
|
const printer2 = await FeieTestDataFactory.createTestPrinter(dataSource, 1, { printerName: '打印机2', isDefault: 0 });
|
|
|
|
|
|
// 设置打印机2为默认
|
|
|
- const response = await client['printers/:printerSn/set-default'].$post({
|
|
|
+ const response = await client.printers[':printerSn']['set-default'].$post({
|
|
|
param: { printerSn: printer2.printerSn }
|
|
|
}, {
|
|
|
headers: {
|
|
|
@@ -213,7 +214,7 @@ describe('飞鹅打印多租户API集成测试', () => {
|
|
|
const taskData = {
|
|
|
printerSn: testPrinter.printerSn,
|
|
|
content: '<CB>测试打印内容</CB><BR>',
|
|
|
- printType: 'RECEIPT',
|
|
|
+ printType: 'RECEIPT' as const,
|
|
|
delaySeconds: 0
|
|
|
};
|
|
|
|
|
|
@@ -302,7 +303,7 @@ describe('飞鹅打印多租户API集成测试', () => {
|
|
|
const taskData = {
|
|
|
printerSn: 'NONEXISTENT_PRINTER',
|
|
|
content: '测试内容',
|
|
|
- printType: 'RECEIPT'
|
|
|
+ printType: 'RECEIPT' as const
|
|
|
};
|
|
|
|
|
|
const response = await client.tasks.$post({
|
|
|
@@ -322,21 +323,21 @@ describe('飞鹅打印多租户API集成测试', () => {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- it('应该在打印任务不存在时查询状态失败', async () => {
|
|
|
- const response = await client['tasks/:taskId/status'].$get({
|
|
|
- param: { taskId: 'NONEXISTENT_TASK' }
|
|
|
+ it('应该在查询打印任务列表时返回错误(当飞鹅API配置不完整时)', async () => {
|
|
|
+ const response = await client.tasks.$get({
|
|
|
+ query: {}
|
|
|
}, {
|
|
|
headers: {
|
|
|
'Authorization': `Bearer ${userToken}`
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- // 应该返回500(服务层抛出错误)
|
|
|
- expect(response.status).toBe(500);
|
|
|
- if (response.status === 500) {
|
|
|
- const data = await response.json();
|
|
|
+ // 由于飞鹅API配置不完整,应该返回400错误
|
|
|
+ expect(response.status).toBe(400);
|
|
|
+ if (response.status === 400) {
|
|
|
+ const data = await response.json() as { success: boolean; message: string };
|
|
|
expect(data.success).toBe(false);
|
|
|
- expect(data.message).toBe('打印任务不存在');
|
|
|
+ expect(data.message).toContain('飞鹅API配置');
|
|
|
}
|
|
|
});
|
|
|
|
|
|
@@ -364,152 +365,155 @@ describe('飞鹅打印多租户API集成测试', () => {
|
|
|
});
|
|
|
});
|
|
|
|
|
|
- describe('调度器管理功能验证', () => {
|
|
|
- it.skip('应该能够获取调度器状态 - 需要实际飞鹅API连接', async () => {
|
|
|
- const response = await client['scheduler/status'].$get({}, {
|
|
|
- headers: {
|
|
|
- 'Authorization': `Bearer ${userToken}`
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- expect(response.status).toBe(200);
|
|
|
- if (response.status === 200) {
|
|
|
- const data = await response.json();
|
|
|
-
|
|
|
- expect(data.success).toBe(true);
|
|
|
- expect(data.data).toBeDefined();
|
|
|
- expect(data.data.isRunning).toBeDefined();
|
|
|
- expect(data.data.lastRunTime).toBeDefined();
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- it.skip('应该能够启动和停止调度器 - 需要实际飞鹅API连接', async () => {
|
|
|
- // 启动调度器
|
|
|
- const startResponse = await client['scheduler/start'].$post({}, {
|
|
|
- headers: {
|
|
|
- 'Authorization': `Bearer ${userToken}`
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- expect(startResponse.status).toBe(200);
|
|
|
- if (startResponse.status === 200) {
|
|
|
- const data = await startResponse.json();
|
|
|
- expect(data.success).toBe(true);
|
|
|
- expect(data.message).toBe('调度器已启动');
|
|
|
- }
|
|
|
-
|
|
|
- // 停止调度器
|
|
|
- const stopResponse = await client['scheduler/stop'].$post({}, {
|
|
|
- headers: {
|
|
|
- 'Authorization': `Bearer ${userToken}`
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- expect(stopResponse.status).toBe(200);
|
|
|
- if (stopResponse.status === 200) {
|
|
|
- const data = await stopResponse.json();
|
|
|
- expect(data.success).toBe(true);
|
|
|
- expect(data.message).toBe('调度器已停止');
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- it.skip('应该能够进行调度器健康检查 - 需要实际飞鹅API连接', async () => {
|
|
|
- const response = await client['scheduler/health'].$get({}, {
|
|
|
- headers: {
|
|
|
- 'Authorization': `Bearer ${userToken}`
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- expect(response.status).toBe(200);
|
|
|
- if (response.status === 200) {
|
|
|
- const data = await response.json();
|
|
|
-
|
|
|
- expect(data.success).toBe(true);
|
|
|
- expect(data.data).toBeDefined();
|
|
|
- expect(data.data.healthy).toBeDefined();
|
|
|
- expect(data.data.message).toBeDefined();
|
|
|
- }
|
|
|
- });
|
|
|
- });
|
|
|
-
|
|
|
- describe('配置管理功能验证', () => {
|
|
|
- it('应该能够获取打印配置', async () => {
|
|
|
- const response = await client.config.$get({}, {
|
|
|
- headers: {
|
|
|
- 'Authorization': `Bearer ${userToken}`
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- expect(response.status).toBe(200);
|
|
|
- if (response.status === 200) {
|
|
|
- const data = await response.json();
|
|
|
-
|
|
|
- expect(data.success).toBe(true);
|
|
|
- expect(data.data.data).toBeDefined();
|
|
|
- expect(Array.isArray(data.data.data)).toBe(true);
|
|
|
-
|
|
|
- // 应该包含飞鹅API配置
|
|
|
- const feieConfigs = data.data.data.filter((config: any) =>
|
|
|
- config.configKey.startsWith('feie.api.')
|
|
|
- );
|
|
|
- expect(feieConfigs.length).toBeGreaterThan(0);
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- it('应该能够更新打印配置', async () => {
|
|
|
- const updateData = {
|
|
|
- configValue: 'new_test_user'
|
|
|
- };
|
|
|
-
|
|
|
- const response = await client['config/:configKey'].$put({
|
|
|
- param: { configKey: 'feie.api.user' },
|
|
|
- json: updateData
|
|
|
- }, {
|
|
|
- headers: {
|
|
|
- 'Authorization': `Bearer ${userToken}`
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- expect(response.status).toBe(200);
|
|
|
- if (response.status === 200) {
|
|
|
- const data = await response.json();
|
|
|
-
|
|
|
- expect(data.success).toBe(true);
|
|
|
- expect(data.data.configKey).toBe('feie.api.user');
|
|
|
- expect(data.data.configValue).toBe('new_test_user');
|
|
|
- }
|
|
|
-
|
|
|
- // 验证配置已更新
|
|
|
- const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
- const updatedConfig = await dataSource.getRepository(FeieConfigMt).findOne({
|
|
|
- where: { tenantId: 1, configKey: 'feie.api.user' }
|
|
|
- });
|
|
|
- expect(updatedConfig?.configValue).toBe('new_test_user');
|
|
|
- });
|
|
|
-
|
|
|
- it('应该在配置值为空时返回错误', async () => {
|
|
|
- const updateData = {
|
|
|
- configValue: ''
|
|
|
- };
|
|
|
-
|
|
|
- const response = await client['config/:configKey'].$put({
|
|
|
- param: { configKey: 'feie.api.user' },
|
|
|
- json: updateData
|
|
|
- }, {
|
|
|
- headers: {
|
|
|
- 'Authorization': `Bearer ${userToken}`
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- // 应该返回400
|
|
|
- expect(response.status).toBe(400);
|
|
|
- if (response.status === 400) {
|
|
|
- const data = await response.json();
|
|
|
- expect(data.success).toBe(false);
|
|
|
- expect(data.message).toBe('配置值不能为空');
|
|
|
- }
|
|
|
- });
|
|
|
- });
|
|
|
+ // 调度器管理功能验证 - 当前路由定义中不存在这些路由
|
|
|
+ // describe('调度器管理功能验证', () => {
|
|
|
+ // it.skip('应该能够获取调度器状态 - 需要实际飞鹅API连接', async () => {
|
|
|
+ // const response = await client['scheduler/status'].$get({}, {
|
|
|
+ // headers: {
|
|
|
+ // 'Authorization': `Bearer ${userToken}`
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ //
|
|
|
+ // expect(response.status).toBe(200);
|
|
|
+ // if (response.status === 200) {
|
|
|
+ // const data = await response.json();
|
|
|
+ //
|
|
|
+ // expect(data.success).toBe(true);
|
|
|
+ // expect(data.data).toBeDefined();
|
|
|
+ // expect(data.data.isRunning).toBeDefined();
|
|
|
+ // expect(data.data.lastRunTime).toBeDefined();
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ //
|
|
|
+ // it.skip('应该能够启动和停止调度器 - 需要实际飞鹅API连接', async () => {
|
|
|
+ // // 启动调度器
|
|
|
+ // const startResponse = await client['scheduler/start'].$post({}, {
|
|
|
+ // headers: {
|
|
|
+ // 'Authorization': `Bearer ${userToken}`
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ //
|
|
|
+ // expect(startResponse.status).toBe(200);
|
|
|
+ // if (startResponse.status === 200) {
|
|
|
+ // const data = await startResponse.json();
|
|
|
+ // expect(data.success).toBe(true);
|
|
|
+ // expect(data.message).toBe('调度器已启动');
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // 停止调度器
|
|
|
+ // const stopResponse = await client['scheduler/stop'].$post({}, {
|
|
|
+ // headers: {
|
|
|
+ // 'Authorization': `Bearer ${userToken}`
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ //
|
|
|
+ // expect(stopResponse.status).toBe(200);
|
|
|
+ // if (stopResponse.status === 200) {
|
|
|
+ // const data = await stopResponse.json();
|
|
|
+ // expect(data.success).toBe(true);
|
|
|
+ // expect(data.message).toBe('调度器已停止');
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ //
|
|
|
+ // it.skip('应该能够进行调度器健康检查 - 需要实际飞鹅API连接', async () => {
|
|
|
+ // const response = await client['scheduler/health'].$get({}, {
|
|
|
+ // headers: {
|
|
|
+ // 'Authorization': `Bearer ${userToken}`
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ //
|
|
|
+ // expect(response.status).toBe(200);
|
|
|
+ // if (response.status === 200) {
|
|
|
+ // const data = await response.json();
|
|
|
+ //
|
|
|
+ // expect(data.success).toBe(true);
|
|
|
+ // expect(data.data).toBeDefined();
|
|
|
+ // expect(data.data.healthy).toBeDefined();
|
|
|
+ // expect(data.data.message).toBeDefined();
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ // });
|
|
|
+
|
|
|
+ // 配置管理功能验证 - 当前路由定义中不存在这些路由
|
|
|
+ // describe('配置管理功能验证', () => {
|
|
|
+ // it('应该能够获取打印配置', async () => {
|
|
|
+ // const response = await client.config.$get({}, {
|
|
|
+ // headers: {
|
|
|
+ // 'Authorization': `Bearer ${userToken}`
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ //
|
|
|
+ // expect(response.status).toBe(200);
|
|
|
+ // if (response.status === 200) {
|
|
|
+ // const data = await response.json();
|
|
|
+ //
|
|
|
+ // expect(data.success).toBe(true);
|
|
|
+ // expect(data.data.data).toBeDefined();
|
|
|
+ // expect(Array.isArray(data.data.data)).toBe(true);
|
|
|
+ //
|
|
|
+ // // 应该包含飞鹅API配置
|
|
|
+ // const feieConfigs = data.data.data.filter((config: any) =>
|
|
|
+ // config.configKey.startsWith('feie.api.')
|
|
|
+ // );
|
|
|
+ // expect(feieConfigs.length).toBeGreaterThan(0);
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ //
|
|
|
+ // it('应该能够更新打印配置', async () => {
|
|
|
+ // const updateData = {
|
|
|
+ // configValue: 'new_test_user'
|
|
|
+ // };
|
|
|
+ //
|
|
|
+ // const response = await client['config/:configKey'].$put({
|
|
|
+ // param: { configKey: 'feie.api.user' },
|
|
|
+ // json: updateData
|
|
|
+ // }, {
|
|
|
+ // headers: {
|
|
|
+ // 'Authorization': `Bearer ${userToken}`
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ //
|
|
|
+ // expect(response.status).toBe(200);
|
|
|
+ // if (response.status === 200) {
|
|
|
+ // const data = await response.json();
|
|
|
+ //
|
|
|
+ // expect(data.success).toBe(true);
|
|
|
+ // expect(data.data.configKey).toBe('feie.api.user');
|
|
|
+ // expect(data.data.configValue).toBe('new_test_user');
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // // 验证配置已更新
|
|
|
+ // const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
+ // const updatedConfig = await dataSource.getRepository(FeieConfigMt).findOne({
|
|
|
+ // where: { tenantId: 1, configKey: 'feie.api.user' }
|
|
|
+ // });
|
|
|
+ // expect(updatedConfig?.configValue).toBe('new_test_user');
|
|
|
+ // });
|
|
|
+ // });
|
|
|
+ //
|
|
|
+ // it('应该在配置值为空时返回错误', async () => {
|
|
|
+ // const updateData = {
|
|
|
+ // configValue: ''
|
|
|
+ // };
|
|
|
+ //
|
|
|
+ // const response = await client['config/:configKey'].$put({
|
|
|
+ // param: { configKey: 'feie.api.user' },
|
|
|
+ // json: updateData
|
|
|
+ // }, {
|
|
|
+ // headers: {
|
|
|
+ // 'Authorization': `Bearer ${userToken}`
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ //
|
|
|
+ // // 应该返回400
|
|
|
+ // expect(response.status).toBe(400);
|
|
|
+ // if (response.status === 400) {
|
|
|
+ // const data = await response.json();
|
|
|
+ // expect(data.success).toBe(false);
|
|
|
+ // expect(data.message).toBe('配置值不能为空');
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ // });
|
|
|
|
|
|
// 新增:越权访问防护测试
|
|
|
describe('越权访问防护验证', () => {
|
|
|
@@ -520,7 +524,7 @@ describe('飞鹅打印多租户API集成测试', () => {
|
|
|
const otherUserPrinter = await FeieTestDataFactory.createTestPrinter(dataSource, 1);
|
|
|
|
|
|
// testUser尝试访问otherUser的打印机
|
|
|
- const response = await client['printers/:printerSn'].$get({
|
|
|
+ const response = await client.printers[':printerSn'].$get({
|
|
|
param: { printerSn: otherUserPrinter.printerSn }
|
|
|
}, {
|
|
|
headers: {
|
|
|
@@ -539,7 +543,7 @@ describe('飞鹅打印多租户API集成测试', () => {
|
|
|
const otherTenantPrinter = await FeieTestDataFactory.createTestPrinter(dataSource, 2);
|
|
|
|
|
|
// testUser(租户1)尝试访问otherTenantUser(租户2)的打印机
|
|
|
- const response = await client['printers/:printerSn'].$get({
|
|
|
+ const response = await client.printers[':printerSn'].$get({
|
|
|
param: { printerSn: otherTenantPrinter.printerSn }
|
|
|
}, {
|
|
|
headers: {
|
|
|
@@ -640,10 +644,10 @@ describe('飞鹅打印多租户API集成测试', () => {
|
|
|
// 管理员更新打印机
|
|
|
const updateData = {
|
|
|
printerName: '管理员更新后的打印机',
|
|
|
- printerType: '80mm'
|
|
|
+ printerType: 'RECEIPT' as const
|
|
|
};
|
|
|
|
|
|
- const response = await client['printers/:printerSn'].$put({
|
|
|
+ const response = await client.printers[':printerSn'].$put({
|
|
|
param: { printerSn: printer.printerSn },
|
|
|
json: updateData
|
|
|
}, {
|