123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import { mockLoginSuccess, mockLogoutSuccess } from '../../support/mock/handlers/user';
- import { mockI18nSuccess, mockAllRequiredAPIs } from '../../support/mock/handlers/i18n';
- import { mockGetQuotaSuccess } from '../../support/mock/handlers/quota';
- import { mockGetPatientTypeHuman, mockGetBodyPartHuman } from '../../support/mock/handlers/protocol';
- import LoginPage from '../../support/pageObjects/LoginPage';
- import MainPage from '../../support/pageObjects/MainPage';
- import ExitModalPage from '../../support/pageObjects/ExitModalPage';
- describe('User Logout', () => {
- const loginPage = new LoginPage();
- const mainPage = new MainPage();
- const exitModalPage = new ExitModalPage();
- beforeEach(() => {
- // 清除存储
- cy.clearAllSessionStorage();
- cy.clearAllLocalStorage();
-
- // Mock 所有必要的 API
- mockAllRequiredAPIs(); // 软件信息、日志
- mockI18nSuccess('zh'); // 多语言资源
- mockGetQuotaSuccess(); // 配额检查
- mockGetPatientTypeHuman(); // 患者类型
- mockGetBodyPartHuman(); // 身体部位
- mockLoginSuccess(); // 登录
-
- // 访问并登录
- loginPage.visit();
- loginPage.login('admin', '123456');
- cy.wait('@loginSuccess');
- cy.contains('登录成功').should('be.visible');
- });
- it('should successfully logout and return to login page', () => {
- mockLogoutSuccess();
-
- // 使用 Page Object 点击退出按钮
- mainPage.clickExitButton();
-
- // 验证 modal 可见
- exitModalPage.shouldBeVisible();
-
- // 点击"注销用户"按钮
- exitModalPage.clickLogout();
-
- // 应该显示成功消息
- cy.contains('已退出登录').should('be.visible');
-
- // 应该返回登录页面
- loginPage.getUsernameInput().should('be.visible');
- loginPage.getPasswordInput().should('be.visible');
- });
- it('should clear user state after logout', () => {
- mockLogoutSuccess();
-
- // 使用 Page Object 执行登出
- mainPage.clickExitButton();
- exitModalPage.shouldBeVisible();
- exitModalPage.clickLogout();
-
- // 验证 Redux store 中用户信息已清除
- cy.window().its('store').invoke('getState')
- .its('userInfo')
- .should('deep.equal', {
- token: '',
- expire: 0,
- uid: 0,
- name: '',
- avatar: ''
- });
- });
- it('should close exit modal when clicking cancel', () => {
- // 使用 Page Object 打开退出 modal
- mainPage.clickExitButton();
- exitModalPage.shouldBeVisible();
-
- // 点击取消按钮
- exitModalPage.clickCancel();
-
- // modal 应该关闭
- exitModalPage.shouldNotBeVisible();
- });
- it('should not call backend logout API (placeholder)', () => {
- // 由于后端 API 尚未实现,此测试验证不会调用实际的后端接口
- // 当前是纯前端状态清除
-
- // 使用 Page Object 执行登出
- mainPage.clickExitButton();
- exitModalPage.shouldBeVisible();
- exitModalPage.clickLogout();
-
- // 验证成功消息
- cy.contains('已退出登录').should('be.visible');
-
- // 验证返回登录页
- loginPage.getUsernameInput().should('be.visible');
- });
- });
|