/// import { mockColumnConfigSuccess, mockColumnConfigFail, mockColumnConfigCustomOrder, mockColumnConfigMinimal, } from '../../../support/mock/handlers/columnConfig'; import { mockFetchTwoWorks } from '../../../support/mock/handlers/worklist'; import LoginPage from '../../../support/pageObjects/LoginPage'; import MainPage from '../../../support/pageObjects/MainPage'; import WorklistPage from '../../../support/pageObjects/WorklistPage'; describe('Worklist Column Configuration', () => { const loginPage = new LoginPage(); const mainPage = new MainPage(); const worklistPage = new WorklistPage(); beforeEach(() => { mockFetchTwoWorks(); }); describe('TC-WL-COL-01: 使用本地配置显示列', () => { it('应该在API失败时使用本地配置', () => { // Mock API 失败,强制使用本地配置 mockColumnConfigFail(); cy.loginAndInitialize(); mainPage.clickPatientManagementButton(); mainPage.clickWorklistButton(); // 等待配置API失败 cy.wait('@fetchColumnConfigFail'); // 验证表格可见 worklistPage.getTable().should('be.visible'); // 验证显示了配置的列(这里假设本地配置显示9个列) // 注意:实际列数取决于本地适配器的实现 worklistPage.getHeaderCount().should('be.gte', 1); }); }); describe('TC-WL-COL-02: 使用远程API配置显示列', () => { it('应该从API获取配置并正确应用', () => { // Mock API 成功返回配置 mockColumnConfigSuccess(); cy.loginAndInitialize(); mainPage.clickPatientManagementButton(); mainPage.clickWorklistButton(); // 等待配置API成功 cy.wait('@fetchColumnConfig'); // 验证表格显示 API 配置的列(9个可见列) worklistPage.getHeaderCount().should('eq', 9); // 验证特定列存在 worklistPage.columnExists('患者ID'); // PatientID worklistPage.columnExists('患者姓名'); // PatientName worklistPage.columnExists('检查ID'); // StudyID worklistPage.columnExists('登记号'); // AccessionNumber worklistPage.columnExists('检查状态'); // StudyStatus worklistPage.columnExists('模态'); // Modality }); }); describe('TC-WL-COL-03: API失败时回退到本地配置', () => { it('应该在API失败后自动使用本地配置', () => { mockColumnConfigFail(); cy.loginAndInitialize(); mainPage.clickPatientManagementButton(); mainPage.clickWorklistButton(); cy.wait('@fetchColumnConfigFail'); // 验证表格正常显示(使用本地配置) worklistPage.getTable().should('be.visible'); worklistPage.getTable().find('tr').should('have.length.at.least', 1); }); }); describe('TC-WL-COL-04: 验证特定列的显示/隐藏', () => { it('应该只显示配置中visible=true的列', () => { mockColumnConfigSuccess(); cy.loginAndInitialize(); mainPage.clickPatientManagementButton(); mainPage.clickWorklistButton(); cy.wait('@fetchColumnConfig'); // 验证可见列存在 worklistPage.columnExists('患者ID'); worklistPage.columnExists('患者姓名'); // 验证隐藏列不存在 worklistPage.columnNotExists('StudyInstanceUID'); worklistPage.columnNotExists('SpecificCharacterSet'); }); }); describe('TC-WL-COL-05: 验证列的显示顺序', () => { it('应该按配置的order顺序显示列', () => { mockColumnConfigCustomOrder(); cy.loginAndInitialize(); mainPage.clickPatientManagementButton(); mainPage.clickWorklistButton(); cy.wait('@fetchColumnConfig'); // 验证列顺序 worklistPage.getTableHeaders().should(($headers) => { // 第一列应该是 StudyStatus (order=1) expect($headers.eq(0).text()).to.include('检查状态'); // 第二列应该是 PatientID (order=2) expect($headers.eq(1).text()).to.include('患者ID'); // 第三列应该是 Modality (order=3) expect($headers.eq(2).text()).to.include('模态'); // 第四列应该是 PatientName (order=4) expect($headers.eq(3).text()).to.include('患者姓名'); }); }); }); describe('TC-WL-COL-06: 验证列宽配置', () => { it('应该应用配置中的列宽', () => { mockColumnConfigMinimal(); cy.loginAndInitialize(); mainPage.clickPatientManagementButton(); mainPage.clickWorklistButton(); cy.wait('@fetchColumnConfig'); // 验证列宽(允许一定的误差范围,因为可能有padding等) worklistPage.getColumnWidth('患者ID').should('be.closeTo', 120, 10); worklistPage.getColumnWidth('患者姓名').should('be.closeTo', 150, 10); }); }); describe('TC-WL-COL-07: 无配置时显示所有列', () => { it('应该在无配置时显示所有35个列(向后兼容)', () => { // Mock空配置或不Mock配置API cy.intercept('GET', '/api/config/table-columns', { statusCode: 200, body: { success: true, data: [ { tableName: 'worklist', columns: [], // 空配置 }, ], }, }).as('emptyConfig'); cy.loginAndInitialize(); mainPage.clickPatientManagementButton(); mainPage.clickWorklistButton(); cy.wait('@emptyConfig'); // 验证显示所有列(35列) worklistPage.getHeaderCount().should('eq', 35); }); }); });