123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- /**
- * User Mock Handlers
- * 用户相关的 mock 处理器
- */
- /**
- * 用户登录 - 成功场景
- *
- * @description 用户登录认证,返回JWT token和用户信息
- * @method POST
- * @url /dr/api/v1/pub/login
- * @access 公开接口
- *
- * @param {Object} requestBody - 请求体
- * @param {string} requestBody.username - 用户名
- * @param {string} requestBody.password - 密码
- *
- * @returns {Object} 登录成功响应
- * @returns {string} data.token - JWT认证令牌
- * @returns {number} data.expire - 令牌过期时间戳
- * @returns {number} data.uid - 用户ID
- * @returns {string} data.name - 用户名
- * @returns {string} data.avatar - 用户头像URL
- *
- * @example
- * mockLoginSuccess();
- * cy.get('[data-testid="username"]').type('admin');
- * cy.get('[data-testid="password"]').type('123456');
- * cy.get('[data-testid="login-btn"]').click();
- * cy.wait('@loginSuccess');
- *
- * @see docs/DR.md - 章节7
- */
- export function mockLoginSuccess() {
- cy.intercept('POST', '/dr/api/v1/pub/login', (req) => {
- req.reply({
- statusCode: 200,
- body: {
- code: "0x000000",
- description: "Success",
- solution: "",
- data: {
- token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- expire: 1751277588,
- uid: 1,
- name: "admin",
- avatar: ""
- }
- }
- });
- }).as('loginSuccess');
- }
- /**
- * 用户登录 - 用户名或密码错误
- *
- * @description 登录失败场景:用户名或密码不正确
- * @method POST
- * @url /dr/api/v1/pub/login
- * @access 公开接口
- *
- * @returns {Object} 错误响应
- * @returns {string} code - 错误码(0x000001)
- * @returns {string} description - 错误描述
- *
- * @example
- * mockLoginInvalidCredentials();
- * cy.get('[data-testid="login-btn"]').click();
- * cy.wait('@loginInvalidCredentials');
- * cy.contains('Invalid username or password').should('be.visible');
- *
- * @see docs/DR.md - 章节7
- */
- export function mockLoginFail() {
- cy.intercept('POST', '/dr/api/v1/pub/login', (req) => {
- req.reply({
- statusCode: 200,
- body: {
- code: "0x000001",
- description: "Invalid username or password",
- solution: "Please check your credentials",
- data: {}
- }
- });
- }).as('loginFail');
- }
- /**
- * 获取用户列表 - 成功场景
- *
- * @description 获取系统所有用户列表
- * @method GET
- * @url /dr/api/v1/pub/users
- * @access 公开接口
- *
- * @returns {string[]} data - 用户名列表
- *
- * @example
- * mockGetUsersSuccess();
- * cy.wait('@getUsersSuccess').its('response.body.data').should('have.length.greaterThan', 0);
- *
- * @see docs/DR.md - 章节5
- */
- export function mockGetUsersSuccess() {
- cy.intercept('GET', '/dr/api/v1/pub/users', {
- statusCode: 200,
- body: {
- code: "0x000000",
- data: ["service", "admin", "mgr", "tech"],
- description: "Success",
- solution: ""
- }
- }).as('getUsersSuccess');
- }
- /**
- * 获取用户列表 - 空列表场景
- *
- * @description 获取用户列表,返回空列表
- * @method GET
- * @url /dr/api/v1/pub/users
- * @access 公开接口
- *
- * @returns {string[]} data - 空用户列表
- *
- * @example
- * mockGetUsersEmpty();
- * cy.wait('@getUsersEmpty').its('response.body.data').should('have.length', 0);
- *
- * @see docs/DR.md - 章节5
- */
- export function mockGetUsersEmpty() {
- cy.intercept('GET', '/dr/api/v1/pub/users', {
- statusCode: 200,
- body: {
- code: "0x000000",
- data: [],
- description: "Success",
- solution: ""
- }
- }).as('getUsersEmpty');
- }
- /**
- * 用户登出 - 成功场景
- *
- * @description 用户登出,清除服务端 session/token
- * @method POST
- * @url /dr/api/v1/pub/logout
- * @access 需要认证
- *
- * @returns {Object} 登出成功响应
- *
- * @example
- * mockLogoutSuccess();
- * cy.get('[data-testid="logout-btn"]').click();
- * cy.wait('@logoutSuccess');
- *
- * @see docs/DR.md
- */
- export function mockLogoutSuccess() {
- cy.intercept('POST', '/dr/api/v1/pub/logout', {
- statusCode: 200,
- body: {
- code: "0x000000",
- description: "Success",
- solution: "",
- data: {}
- }
- }).as('logoutSuccess');
- }
|