column-config.cy.ts 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /// <reference types="cypress" />
  2. import {
  3. mockColumnConfigSuccess,
  4. mockColumnConfigFail,
  5. mockColumnConfigCustomOrder,
  6. mockColumnConfigMinimal,
  7. } from '../../../support/mock/handlers/columnConfig';
  8. import { mockFetchTwoWorks } from '../../../support/mock/handlers/worklist';
  9. import LoginPage from '../../../support/pageObjects/LoginPage';
  10. import MainPage from '../../../support/pageObjects/MainPage';
  11. import WorklistPage from '../../../support/pageObjects/WorklistPage';
  12. describe('Worklist Column Configuration', () => {
  13. const loginPage = new LoginPage();
  14. const mainPage = new MainPage();
  15. const worklistPage = new WorklistPage();
  16. beforeEach(() => {
  17. mockFetchTwoWorks();
  18. });
  19. describe('TC-WL-COL-01: 使用本地配置显示列', () => {
  20. it('应该在API失败时使用本地配置', () => {
  21. // Mock API 失败,强制使用本地配置
  22. mockColumnConfigFail();
  23. cy.loginAndInitialize();
  24. mainPage.clickPatientManagementButton();
  25. mainPage.clickWorklistButton();
  26. // 等待配置API失败
  27. cy.wait('@fetchColumnConfigFail');
  28. // 验证表格可见
  29. worklistPage.getTable().should('be.visible');
  30. // 验证显示了配置的列(这里假设本地配置显示9个列)
  31. // 注意:实际列数取决于本地适配器的实现
  32. worklistPage.getHeaderCount().should('be.gte', 1);
  33. });
  34. });
  35. describe('TC-WL-COL-02: 使用远程API配置显示列', () => {
  36. it('应该从API获取配置并正确应用', () => {
  37. // Mock API 成功返回配置
  38. mockColumnConfigSuccess();
  39. cy.loginAndInitialize();
  40. mainPage.clickPatientManagementButton();
  41. mainPage.clickWorklistButton();
  42. // 等待配置API成功
  43. cy.wait('@fetchColumnConfig');
  44. // 验证表格显示 API 配置的列(9个可见列)
  45. worklistPage.getHeaderCount().should('eq', 9);
  46. // 验证特定列存在
  47. worklistPage.columnExists('患者ID'); // PatientID
  48. worklistPage.columnExists('患者姓名'); // PatientName
  49. worklistPage.columnExists('检查ID'); // StudyID
  50. worklistPage.columnExists('登记号'); // AccessionNumber
  51. worklistPage.columnExists('检查状态'); // StudyStatus
  52. worklistPage.columnExists('模态'); // Modality
  53. });
  54. });
  55. describe('TC-WL-COL-03: API失败时回退到本地配置', () => {
  56. it('应该在API失败后自动使用本地配置', () => {
  57. mockColumnConfigFail();
  58. cy.loginAndInitialize();
  59. mainPage.clickPatientManagementButton();
  60. mainPage.clickWorklistButton();
  61. cy.wait('@fetchColumnConfigFail');
  62. // 验证表格正常显示(使用本地配置)
  63. worklistPage.getTable().should('be.visible');
  64. worklistPage.getTable().find('tr').should('have.length.at.least', 1);
  65. });
  66. });
  67. describe('TC-WL-COL-04: 验证特定列的显示/隐藏', () => {
  68. it('应该只显示配置中visible=true的列', () => {
  69. mockColumnConfigSuccess();
  70. cy.loginAndInitialize();
  71. mainPage.clickPatientManagementButton();
  72. mainPage.clickWorklistButton();
  73. cy.wait('@fetchColumnConfig');
  74. // 验证可见列存在
  75. worklistPage.columnExists('患者ID');
  76. worklistPage.columnExists('患者姓名');
  77. // 验证隐藏列不存在
  78. worklistPage.columnNotExists('StudyInstanceUID');
  79. worklistPage.columnNotExists('SpecificCharacterSet');
  80. });
  81. });
  82. describe('TC-WL-COL-05: 验证列的显示顺序', () => {
  83. it('应该按配置的order顺序显示列', () => {
  84. mockColumnConfigCustomOrder();
  85. cy.loginAndInitialize();
  86. mainPage.clickPatientManagementButton();
  87. mainPage.clickWorklistButton();
  88. cy.wait('@fetchColumnConfig');
  89. // 验证列顺序
  90. worklistPage.getTableHeaders().should(($headers) => {
  91. // 第一列应该是 StudyStatus (order=1)
  92. expect($headers.eq(0).text()).to.include('检查状态');
  93. // 第二列应该是 PatientID (order=2)
  94. expect($headers.eq(1).text()).to.include('患者ID');
  95. // 第三列应该是 Modality (order=3)
  96. expect($headers.eq(2).text()).to.include('模态');
  97. // 第四列应该是 PatientName (order=4)
  98. expect($headers.eq(3).text()).to.include('患者姓名');
  99. });
  100. });
  101. });
  102. describe('TC-WL-COL-06: 验证列宽配置', () => {
  103. it('应该应用配置中的列宽', () => {
  104. mockColumnConfigMinimal();
  105. cy.loginAndInitialize();
  106. mainPage.clickPatientManagementButton();
  107. mainPage.clickWorklistButton();
  108. cy.wait('@fetchColumnConfig');
  109. // 验证列宽(允许一定的误差范围,因为可能有padding等)
  110. worklistPage.getColumnWidth('患者ID').should('be.closeTo', 120, 10);
  111. worklistPage.getColumnWidth('患者姓名').should('be.closeTo', 150, 10);
  112. });
  113. });
  114. describe('TC-WL-COL-07: 无配置时显示所有列', () => {
  115. it('应该在无配置时显示所有35个列(向后兼容)', () => {
  116. // Mock空配置或不Mock配置API
  117. cy.intercept('GET', '/api/config/table-columns', {
  118. statusCode: 200,
  119. body: {
  120. success: true,
  121. data: [
  122. {
  123. tableName: 'worklist',
  124. columns: [], // 空配置
  125. },
  126. ],
  127. },
  128. }).as('emptyConfig');
  129. cy.loginAndInitialize();
  130. mainPage.clickPatientManagementButton();
  131. mainPage.clickWorklistButton();
  132. cy.wait('@emptyConfig');
  133. // 验证显示所有列(35列)
  134. worklistPage.getHeaderCount().should('eq', 35);
  135. });
  136. });
  137. });