132 lines
4.2 KiB
JavaScript
132 lines
4.2 KiB
JavaScript
const { launchMiniProgram, closeMiniProgram, sleep } = require('../helpers/automator');
|
|
const LoginPage = require('../pages/LoginPage');
|
|
const HomePage = require('../pages/HomePage');
|
|
const CourseListPage = require('../pages/CourseListPage');
|
|
const CourseDetailPage = require('../pages/CourseDetailPage');
|
|
|
|
let miniProgram;
|
|
let loginPage;
|
|
let homePage;
|
|
let courseListPage;
|
|
let courseDetailPage;
|
|
|
|
describe('P2 - 教练课程控制测试(开课/结课)', () => {
|
|
beforeAll(async () => {
|
|
miniProgram = await launchMiniProgram();
|
|
loginPage = new LoginPage(miniProgram);
|
|
homePage = new HomePage(miniProgram);
|
|
courseListPage = new CourseListPage(miniProgram);
|
|
courseDetailPage = new CourseDetailPage(miniProgram);
|
|
|
|
// 先完成登录
|
|
await loginPage.login('coach_test1', 'Test@123');
|
|
await loginPage.waitForLoginSuccess(20000);
|
|
await homePage.waitForLoad();
|
|
}, 120000);
|
|
|
|
afterAll(async () => {
|
|
await closeMiniProgram();
|
|
}, 30000);
|
|
|
|
test('导航到课程列表并筛选待开课课程', async () => {
|
|
await homePage.navigateToCourseList();
|
|
await courseListPage.waitForLoad();
|
|
await courseListPage.filterByStatus('pending');
|
|
await sleep(1000);
|
|
}, 30000);
|
|
|
|
test('进入待开课课程详情 → 验证开课按钮存在', async () => {
|
|
const count = await courseListPage.getCourseCount();
|
|
|
|
if (count === 0) {
|
|
console.warn('[WARN] 没有待开课课程,跳过开课/结课测试');
|
|
return;
|
|
}
|
|
|
|
// 点击第一个待开课课程
|
|
await courseListPage.clickCourse(0);
|
|
await courseDetailPage.waitForLoad();
|
|
|
|
const actionBtn = await courseDetailPage.getActionButtonStatus();
|
|
expect(actionBtn).not.toBeNull();
|
|
|
|
if (actionBtn.type === 'start') {
|
|
// 如果按钮存在且为开课按钮
|
|
expect(actionBtn.text).toMatch(/开课/i);
|
|
}
|
|
// 注:如果 disabled,说明未到开课时间,跳过实操
|
|
}, 30000);
|
|
|
|
test('点击开课按钮(如可用)→ 验证状态变化', async () => {
|
|
const actionBtn = await courseDetailPage.getActionButtonStatus();
|
|
|
|
if (!actionBtn || actionBtn.type !== 'start') {
|
|
console.warn('[WARN] 没有可用的开课按钮,跳过开课操作测试');
|
|
return;
|
|
}
|
|
|
|
if (actionBtn.disabled) {
|
|
console.warn('[WARN] 开课按钮被禁用(尚未到开课时间),跳过开课操作');
|
|
return;
|
|
}
|
|
|
|
// 执行开课
|
|
await courseDetailPage.startCourse();
|
|
await sleep(2000);
|
|
|
|
// 刷新页面查看状态是否变化
|
|
const page = await miniProgram.currentPage();
|
|
const statusEl = await page.$('.cover-status text');
|
|
if (statusEl) {
|
|
const statusText = (await statusEl.text()).trim();
|
|
expect(statusText).toMatch(/进行中|教练迟到/);
|
|
}
|
|
}, 60000);
|
|
|
|
test('进入进行中课程 → 验证结课按钮存在', async () => {
|
|
// 回到课程列表页
|
|
await miniProgram.navigateBack();
|
|
await sleep(1500);
|
|
|
|
const page = await miniProgram.currentPage();
|
|
|
|
// 如果在课程列表页
|
|
if (page.path.includes('pages/course-list')) {
|
|
await courseListPage.filterByStatus('in_progress');
|
|
await sleep(1500);
|
|
|
|
const count = await courseListPage.getCourseCount();
|
|
if (count === 0) {
|
|
console.warn('[WARN] 没有进行中的课程,跳过结课测试');
|
|
return;
|
|
}
|
|
|
|
await courseListPage.clickCourse(0);
|
|
await courseDetailPage.waitForLoad();
|
|
|
|
const actionBtn = await courseDetailPage.getActionButtonStatus();
|
|
expect(actionBtn).not.toBeNull();
|
|
|
|
if (actionBtn) {
|
|
// 可以是 end 或 disabled(不满足结课条件)
|
|
expect(['end', 'disabled']).toContain(actionBtn.type);
|
|
}
|
|
}
|
|
}, 40000);
|
|
|
|
test('生成签到二维码(模拟)→ 返回 courseId', async () => {
|
|
const page = await miniProgram.currentPage();
|
|
|
|
if (!page.path.includes('pages/course-detail')) {
|
|
console.warn('[WARN] 不在课程详情页,跳过二维码测试');
|
|
return;
|
|
}
|
|
|
|
const qrData = await courseDetailPage.generateQRCode();
|
|
expect(qrData).toBeDefined();
|
|
// 验证返回的数据结构
|
|
expect(qrData).toHaveProperty('courseId');
|
|
expect(qrData).toHaveProperty('timestamp');
|
|
}, 15000);
|
|
});
|