Files
euchre_camp/e2e/admin-tournament-edit-allowTies.test.ts
T
david e455d5dba5
Build CI Images / build-ci-base (push) Successful in 1m53s
Release / release (push) Failing after 12m42s
fix: mount /apps and docker socket in PR workflow build-and-deploy-ci job (#41)
Reviewed-on: #41
Co-authored-by: David Gwilliam <dhgwilliam@gmail.com>
Co-committed-by: David Gwilliam <dhgwilliam@gmail.com>
2026-05-20 19:51:35 +00:00

187 lines
5.9 KiB
TypeScript

/**
* E2E Test: Tournament Edit with allowTies
*
* User Story: As a tournament admin, I want to edit tournament settings including allowTies
*
* Acceptance Criteria:
* - Can edit tournament settings
* - allowTies checkbox can be toggled
* - allowTies value is saved correctly
*/
import { test, expect } from '@playwright/test';
import { prisma } from '@/lib/prisma';
const BASE_URL = process.env.CI ? 'https://euchre-ci.notsosm.art' : 'http://localhost:3000';
function getTestCredentials() {
const timestamp = Date.now();
return {
email: `allowties-admin-${timestamp}@example.com`,
password: 'AdminPassword123!',
name: `AllowTies Admin ${timestamp}`,
};
}
test.describe.skip('Tournament Edit - allowTies functionality', () => {
let tournamentId: number;
let testEmail: string;
let testPassword: string;
test.beforeAll(async () => {
// Create admin user via API
const credentials = getTestCredentials();
testEmail = credentials.email;
testPassword = credentials.password;
const response = await fetch(`${BASE_URL}/api/auth/sign-up/email`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Origin: BASE_URL,
},
body: JSON.stringify({
email: testEmail,
password: testPassword,
name: credentials.name,
}),
});
console.log('allowTies test user creation response:', response.status);
// Update user to club_admin role
const user = await prisma.user.findUnique({
where: { email: testEmail },
});
if (user) {
await prisma.user.update({
where: { id: user.id },
data: { role: 'club_admin' },
});
}
// Create a test tournament for editing
const tournament = await prisma.event.create({
data: {
name: 'Test Tournament for AllowTies Edit',
eventType: 'tournament',
format: 'round_robin',
status: 'planned',
allowTies: false,
targetScore: 5,
ownerId: user?.id,
createdAt: new Date(),
updatedAt: new Date(),
},
});
tournamentId = tournament.id;
});
test.afterAll(async () => {
// Clean up test tournament
if (tournamentId) {
await prisma.event.delete({
where: { id: tournamentId },
}).catch(() => {});
}
// Clean up user
const user = await prisma.user.findUnique({ where: { email: testEmail } });
if (user) {
await prisma.user.delete({ where: { id: user.id } });
}
});
test('should display allowTies checkbox on edit form @chromium-admin', async ({ page }) => {
// Login first
await page.goto('/auth/login');
await page.fill('input[name="email"]', testEmail);
await page.fill('input[name="password"]', testPassword);
await page.click('button[type="submit"]');
await page.waitForURL(/\/(admin|players)/, { timeout: 5000 });
// Navigate to tournament edit page
await page.goto(`/admin/tournaments/${tournamentId}/edit`);
// Wait for form to load - edit page shows "Edit Tournament" heading
await expect(page.locator('text=Edit Tournament')).toBeVisible({ timeout: 5000 });
// Check that allowTies checkbox exists
const allowTiesCheckbox = page.locator('input[name="allowTies"]');
await expect(allowTiesCheckbox).toBeVisible();
await expect(allowTiesCheckbox).not.toBeChecked();
});
test('should save allowTies when toggled to true @chromium-admin', async ({ page }) => {
// Login first
await page.goto('/auth/login');
await page.fill('input[name="email"]', testEmail);
await page.fill('input[name="password"]', testPassword);
await page.click('button[type="submit"]');
await page.waitForURL(/\/(admin|players)/, { timeout: 5000 });
// Navigate to tournament edit page
await page.goto(`/admin/tournaments/${tournamentId}/edit`);
// Wait for form to load
await expect(page.locator('text=Edit Tournament')).toBeVisible({ timeout: 5000 });
// Toggle allowTies checkbox
const allowTiesCheckbox = page.locator('input[name="allowTies"]');
await allowTiesCheckbox.check();
await expect(allowTiesCheckbox).toBeChecked();
// Submit form
await page.click('button[type="submit"]');
// Wait for success message
await expect(page.locator('text=Tournament updated successfully')).toBeVisible({ timeout: 5000 });
// Verify allowTies was saved by checking the database
const updatedTournament = await prisma.event.findUnique({
where: { id: tournamentId },
});
expect(updatedTournament?.allowTies).toBe(true);
});
test('should save allowTies when toggled to false @chromium-admin', async ({ page }) => {
// First, set allowTies to true
await prisma.event.update({
where: { id: tournamentId },
data: { allowTies: true },
});
// Login first
await page.goto('/auth/login');
await page.fill('input[name="email"]', testEmail);
await page.fill('input[name="password"]', testPassword);
await page.click('button[type="submit"]');
await page.waitForURL(/\/(admin|players)/, { timeout: 5000 });
// Navigate to tournament edit page
await page.goto(`/admin/tournaments/${tournamentId}/edit`);
// Wait for form to load
await expect(page.locator('text=Edit Tournament')).toBeVisible({ timeout: 5000 });
// Verify checkbox is checked
const allowTiesCheckbox = page.locator('input[name="allowTies"]');
await expect(allowTiesCheckbox).toBeChecked();
// Uncheck allowTies checkbox
await allowTiesCheckbox.uncheck();
await expect(allowTiesCheckbox).not.toBeChecked();
// Submit form
await page.click('button[type="submit"]');
// Wait for success message
await expect(page.locator('text=Tournament updated successfully')).toBeVisible({ timeout: 5000 });
// Verify allowTies was saved by checking the database
const updatedTournament = await prisma.event.findUnique({
where: { id: tournamentId },
});
expect(updatedTournament?.allowTies).toBe(false);
});
});