import { test, expect } from '@playwright/test'; import { LoginPage } from '../pages/LoginPage'; import { ProblemSetPage } from '../pages/ProblemSetPage'; import { ProblemPage } from '../pages/ProblemPage'; import { TEST_USER } from '../utils/test-data'; /** * Test Suite: Problem Set * Tests for browsing and viewing problems */ test.describe('Problem Set', () => { // Login before each test test.beforeEach(async ({ page }) => { const loginPage = new LoginPage(page); await loginPage.goto(); await loginPage.login(TEST_USER.email, TEST_USER.password); await loginPage.verifyLoginSuccess(); }); test('should display problem list', async ({ page }) => { const problemSetPage = new ProblemSetPage(page); await problemSetPage.goto(); await problemSetPage.verifyOnPage(); // Verify problems are displayed const problems = await problemSetPage.getVisibleProblems(); expect(problems.length).toBeGreaterThan(0); }); test('should navigate to problem detail page', async ({ page }) => { const problemSetPage = new ProblemSetPage(page); const problemPage = new ProblemPage(page); await problemSetPage.goto(); // Get first problem ID const problemId = await problemSetPage.getFirstProblemId(); expect(problemId).not.toBeNull(); if (problemId) { // Click on the problem await problemSetPage.clickProblem(problemId); // Verify we are on problem page await problemPage.verifyOnPage(problemId); await problemPage.verifyProblemLoaded(); } }); test('should display problem details correctly', async ({ page }) => { const problemSetPage = new ProblemSetPage(page); const problemPage = new ProblemPage(page); await problemSetPage.goto(); const problemId = await problemSetPage.getFirstProblemId(); if (problemId) { await problemPage.goto(problemId); // Verify problem content is loaded await problemPage.verifyProblemLoaded(); // Verify submit button is visible await expect(problemPage.submitButton).toBeVisible(); // Get problem limits (optional, may not be visible on all problems) const limits = await problemPage.getLimits(); console.log('Problem limits:', limits); } }); });