/** * 测试文件: Worklist - 删除功能 * * 测试场景: * 1. 成功删除未锁定的记录 * 2. 尝试删除锁定的记录(应显示警告) * 3. 删除API失败的情况(网络错误/服务器错误) * 4. 取消删除操作 */ import { mockLoginSuccess } from '../../support/mock/handlers/user'; import { mockFetchTwoWorksWithUnlocked, mockFetchTwoWorksWithLocked, mockDeleteStudySuccess, mockDeleteStudyFailure, DeleteStudy, FetchTwoWorksWithUnlocked, FetchTwoWorksWithLocked, } from '../../support/mock/handlers/worklist'; import { mockI18nSuccess, mockGetLanguageListSuccess, mockAllRequiredAPIs, } from '../../support/mock/handlers/i18n'; import { mockGetQuotaSuccess } from '../../support/mock/handlers/quota'; import LoginPage from '../../support/pageObjects/LoginPage'; import MainPage from '../../support/pageObjects/MainPage'; import WorklistPage from '../../support/pageObjects/WorklistPage'; describe('Worklist - 删除功能测试', () => { const loginPage = new LoginPage(); const mainPage = new MainPage(); const worklistPage = new WorklistPage(); beforeEach(() => { // Mock多语言资源和必要的API mockI18nSuccess('zh_CN'); mockGetLanguageListSuccess(); mockAllRequiredAPIs('zh_CN'); // Mock登录成功响应 mockLoginSuccess(); // Mock配额成功 mockGetQuotaSuccess(); // 登录系统 loginPage.visit(); loginPage.login('admin', '123456'); // 等待页面渲染和路由跳转 cy.wait(1500); // 验证登录成功:登录页面元素不再存在 loginPage.getUsernameInput().should('not.exist'); loginPage.getPasswordInput().should('not.exist'); loginPage.getSubmitButton().should('not.exist'); // ⚠️ 不在这里导航,让每个测试用例自己设置mock并导航 }); it('应该成功删除未锁定的记录', () => { // 设置Worklist数据mock(未锁定) mockFetchTwoWorksWithUnlocked(); mockDeleteStudySuccess(); // 导航到工作列表 mainPage.clickWorklistButton(); cy.wait(FetchTwoWorksWithUnlocked); // 验证初始状态:2条记录 worklistPage.verifyRowCount(2); // 调试:点击前查看Redux state cy.window().its('store').invoke('getState').then(state => { cy.log('Before click - selectedIds:', state.workSelection?.selectedIds || []); }); // 点击第一行(未锁定)选中 worklistPage.clickRowByIndex(0); // 等待React更新state cy.wait(500); // 调试:点击后查看Redux state cy.window().its('store').invoke('getState').then(state => { cy.log('After click - selectedIds:', state.workSelection?.selectedIds || []); }); worklistPage.verifyRowSelected(0); // 点击删除按钮 worklistPage.clickDeleteButton(); // 验证确认对话框出现 worklistPage.getDeleteConfirmModal(); cy.contains('确认删除').should('be.visible'); cy.contains('确定要删除选中的 1 个项目吗').should('be.visible'); // 确认删除 worklistPage.confirmDeleteInModal(); // 等待删除API调用 cy.wait(DeleteStudy).then((interception) => { expect(interception.response?.statusCode).to.eq(200); expect(interception.response?.body.code).to.eq('0x000000'); }); // 验证删除后只剩1条记录(本地删除,无需等待列表刷新) worklistPage.verifyRowCount(1); }); it('尝试删除锁定的记录时应显示警告', () => { // 设置Worklist数据mock(已锁定) mockFetchTwoWorksWithLocked(); // 导航到工作列表 mainPage.clickWorklistButton(); cy.wait(FetchTwoWorksWithLocked); // 验证有2条记录 worklistPage.verifyRowCount(2); // 点击第一行(已锁定)选中 worklistPage.clickRowByIndex(0); worklistPage.verifyRowSelected(0); // 点击删除按钮 worklistPage.clickDeleteButton(); // 验证警告消息:锁定状态不可删除 worklistPage.verifyDeleteWarningMessage('锁定状态不可删除'); // 验证没有弹出确认对话框(因为被提前拦截了) worklistPage.verifyModalNotExist(); // 验证记录仍然存在 worklistPage.verifyRowCount(2); }); it('删除API失败时应显示错误提示', () => { // 设置Worklist数据mock和失败的删除API mockFetchTwoWorksWithUnlocked(); mockDeleteStudyFailure(); // 导航到工作列表 mainPage.clickWorklistButton(); cy.wait(FetchTwoWorksWithUnlocked); // 验证有2条记录 worklistPage.verifyRowCount(2); // 点击第一行选中 worklistPage.clickRowByIndex(0); worklistPage.verifyRowSelected(0); // 点击删除按钮 worklistPage.clickDeleteButton(); // 验证确认对话框出现 worklistPage.getDeleteConfirmModal(); // 确认删除 worklistPage.confirmDeleteInModal(); // 等待删除API调用(失败) cy.wait(DeleteStudy).then((interception) => { expect(interception.response?.statusCode).to.eq(200); expect(interception.response?.body.code).to.not.eq('0x000000'); }); // 验证记录仍然存在(因为删除失败) worklistPage.verifyRowCount(2); }); it('取消删除操作时记录应保持不变', () => { // 设置Worklist数据mock mockFetchTwoWorksWithUnlocked(); // 导航到工作列表 mainPage.clickWorklistButton(); cy.wait(FetchTwoWorksWithUnlocked); // 验证有2条记录 worklistPage.verifyRowCount(2); // 点击第一行选中 worklistPage.clickRowByIndex(0); worklistPage.verifyRowSelected(0); // 点击删除按钮 worklistPage.clickDeleteButton(); // 验证确认对话框出现 worklistPage.getDeleteConfirmModal(); // 取消删除 worklistPage.cancelDeleteInModal(); // 验证对话框关闭 worklistPage.verifyModalNotExist(); // 验证记录仍然存在 worklistPage.verifyRowCount(2); }); it('未选中任何记录时点击删除应显示警告', () => { // 设置Worklist数据mock mockFetchTwoWorksWithUnlocked(); // 导航到工作列表 mainPage.clickWorklistButton(); cy.wait(FetchTwoWorksWithUnlocked); // 验证有2条记录 worklistPage.verifyRowCount(2); // 不选中任何记录,直接点击删除按钮 worklistPage.clickDeleteButton(); // 验证警告消息:请先选择要删除的项目 worklistPage.verifyDeleteWarningMessage('请先选择要删除的项目'); // 验证没有弹出确认对话框 worklistPage.verifyModalNotExist(); // 验证记录仍然存在 worklistPage.verifyRowCount(2); }); });