68 lines
2.9 KiB
TypeScript
68 lines
2.9 KiB
TypeScript
|
|
import { test, expect } from '@playwright/test';
|
||
|
|
import { TEST_URLS } from '../fixtures/test-data';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Instructor Dashboard Tests
|
||
|
|
* ใช้ cookies จาก instructor-setup project (ไม่ต้อง login ซ้ำ)
|
||
|
|
*/
|
||
|
|
test.describe('Instructor Dashboard', () => {
|
||
|
|
test.beforeEach(async ({ page }) => {
|
||
|
|
await page.goto(TEST_URLS.instructorDashboard);
|
||
|
|
await page.waitForLoadState('networkidle');
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should display welcome message', async ({ page }) => {
|
||
|
|
await expect(page.locator('h1')).toContainText('สวัสดี');
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should display stats cards', async ({ page }) => {
|
||
|
|
await expect(page.getByText('หลักสูตรทั้งหมด')).toBeVisible();
|
||
|
|
await expect(page.getByText('ผู้เรียนทั้งหมด')).toBeVisible();
|
||
|
|
await expect(page.getByText('เรียนจบแล้ว')).toBeVisible();
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should display course status breakdown', async ({ page }) => {
|
||
|
|
await expect(page.getByText('สถานะหลักสูตร')).toBeVisible();
|
||
|
|
await expect(page.getByText('เผยแพร่แล้ว')).toBeVisible();
|
||
|
|
await expect(page.getByText('รอตรวจสอบ')).toBeVisible();
|
||
|
|
await expect(page.getByText('แบบร่าง')).toBeVisible();
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should display recent courses section', async ({ page }) => {
|
||
|
|
await expect(page.getByText('หลักสูตร')).toBeVisible();
|
||
|
|
await expect(page.getByRole('button', { name: 'ดูทั้งหมด' })).toBeVisible();
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should navigate to courses list', async ({ page }) => {
|
||
|
|
await page.getByRole('button', { name: 'ดูทั้งหมด' }).click();
|
||
|
|
await page.waitForURL('**/instructor/courses**');
|
||
|
|
await expect(page).toHaveURL(/\/instructor\/courses/);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should show user menu on avatar click', async ({ page }) => {
|
||
|
|
await page.locator('.w-12.h-12.rounded-full').click();
|
||
|
|
|
||
|
|
await expect(page.getByText('โปรไฟล์')).toBeVisible();
|
||
|
|
await expect(page.getByText('ออกจากระบบ')).toBeVisible();
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should navigate to profile', async ({ page }) => {
|
||
|
|
await page.locator('.w-12.h-12.rounded-full').click();
|
||
|
|
await page.getByText('โปรไฟล์').click();
|
||
|
|
|
||
|
|
await page.waitForURL('**/instructor/profile**');
|
||
|
|
await expect(page).toHaveURL(/\/instructor\/profile/);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('should logout and redirect to login', async ({ page }) => {
|
||
|
|
await page.locator('.w-12.h-12.rounded-full').click();
|
||
|
|
await page.getByText('ออกจากระบบ').click();
|
||
|
|
|
||
|
|
// Confirm logout dialog
|
||
|
|
await page.locator('.q-dialog').getByText('ออกจากระบบ').click();
|
||
|
|
|
||
|
|
await page.waitForURL('**/login**', { timeout: 10_000 });
|
||
|
|
await expect(page).toHaveURL(/\/login/);
|
||
|
|
});
|
||
|
|
});
|