Compare commits
11 Commits
b2876d1e49
..
v0.1.6
| Author | SHA1 | Date | |
|---|---|---|---|
| 75358bf20d | |||
| 5dc24db277 | |||
| a77870b894 | |||
| 8bf34640e6 | |||
| a0909c82a0 | |||
| 4e2fcf9d28 | |||
| d91da9b0be | |||
| b4dd40da27 | |||
| c3090236dd | |||
| b7fcb94ccb | |||
| 8ea12f39d2 |
@@ -1,3 +1,23 @@
|
|||||||
|
## [0.1.6] - 2026-04-26
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- fix: update Cucumber config and hooks to properly load test infrastructure
|
||||||
|
- feat: add feature summary documentation
|
||||||
|
- docs: update README with feature files and issue tracking
|
||||||
|
- feat: add tournament schedule feature test (issue #7)
|
||||||
|
- feat: add player schedule feature test (issue #9)
|
||||||
|
- feat: add password reset feature test (issue #10)
|
||||||
|
- feat: add wordmark navigation feature test (issue #24)
|
||||||
|
- docs: add README for Cucumber test framework
|
||||||
|
- feat: add cucumber gherkin-style E2E test framework
|
||||||
|
|
||||||
|
## [0.1.5] - 2026-04-26
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- ci: fix deployment directory path in release workflow
|
||||||
|
|
||||||
## [0.1.4] - 2026-04-02
|
## [0.1.4] - 2026-04-02
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ module.exports = {
|
|||||||
// Paths to step definitions
|
// Paths to step definitions
|
||||||
import: ['e2e/cucumber/step-definitions/**/*.ts'],
|
import: ['e2e/cucumber/step-definitions/**/*.ts'],
|
||||||
|
|
||||||
|
// Paths to support files (hooks, world)
|
||||||
|
require: ['e2e/cucumber/support/**/*.ts'],
|
||||||
|
|
||||||
// Use tsx loader for TypeScript with path aliases
|
// Use tsx loader for TypeScript with path aliases
|
||||||
requireModule: ['tsx'],
|
requireModule: ['tsx'],
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,8 @@
|
|||||||
* Cucumber hooks for EuchreCamp E2E tests
|
* Cucumber hooks for EuchreCamp E2E tests
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Before, After, BeforeAll, AfterAll, IWorldOptions, World } from '@cucumber/cucumber';
|
import { Before, After, BeforeAll, AfterAll } from '@cucumber/cucumber';
|
||||||
import { chromium, Browser, type FullConfig } from '@playwright/test';
|
import { chromium, Browser } from '@playwright/test';
|
||||||
import { cleanupAllTestData } from '@/__tests__/test-utils';
|
|
||||||
import { world } from './world';
|
import { world } from './world';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
@@ -48,7 +47,7 @@ AfterAll(async function () {
|
|||||||
/**
|
/**
|
||||||
* Before each scenario: Create new page context
|
* Before each scenario: Create new page context
|
||||||
*/
|
*/
|
||||||
Before(async function (this: World) {
|
Before(async function () {
|
||||||
// Create new context and page
|
// Create new context and page
|
||||||
world.context = await browser.newContext();
|
world.context = await browser.newContext();
|
||||||
world.page = await world.context.newPage();
|
world.page = await world.context.newPage();
|
||||||
@@ -69,9 +68,9 @@ Before(async function (this: World) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* After each scenario: Close page and cleanup test data
|
* After each scenario: Close page
|
||||||
*/
|
*/
|
||||||
After(async function (this: World) {
|
After(async function () {
|
||||||
console.log('🌍 Cleaning up after scenario...');
|
console.log('🌍 Cleaning up after scenario...');
|
||||||
|
|
||||||
// Close page and context
|
// Close page and context
|
||||||
@@ -81,39 +80,29 @@ After(async function (this: World) {
|
|||||||
if (world.context) {
|
if (world.context) {
|
||||||
await world.context.close();
|
await world.context.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clean up test data
|
|
||||||
try {
|
|
||||||
await cleanupAllTestData();
|
|
||||||
console.log('🌍 Test data cleaned up');
|
|
||||||
} catch (error) {
|
|
||||||
console.error('🌍 Error cleaning up test data:', error);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Custom hook for navigating to a page
|
* Custom hook for navigating to a page
|
||||||
*/
|
*/
|
||||||
Before({ tags: '@navigation' }, async function (this: World) {
|
Before({ tags: '@navigation' }, async function () {
|
||||||
console.log('🌍 Navigation hook triggered');
|
console.log('🌍 Navigation hook triggered');
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Custom hook for authenticated scenarios
|
* Custom hook for authenticated scenarios
|
||||||
*/
|
*/
|
||||||
Before({ tags: '@authenticated' }, async function (this: World) {
|
Before({ tags: '@authenticated' }, async function () {
|
||||||
console.log('🌍 Authenticated hook triggered');
|
console.log('🌍 Authenticated hook triggered');
|
||||||
// This hook can be extended to load saved auth state
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tag hooks for specific scenarios
|
* Tag hooks for specific scenarios
|
||||||
*/
|
*/
|
||||||
Before({ tags: '@slow' }, async function (this: World) {
|
Before({ tags: '@slow' }, async function () {
|
||||||
console.log('🌍 Slow test - extending timeout');
|
console.log('🌍 Slow test - extending timeout');
|
||||||
// Note: Timeout extension happens at step definition level
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Before({ tags: '@flaky' }, async function (this: World) {
|
Before({ tags: '@flaky' }, async function () {
|
||||||
console.log('🌍 Flaky test - retry enabled');
|
console.log('🌍 Flaky test - retry enabled');
|
||||||
});
|
});
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "euchre_camp",
|
"name": "euchre_camp",
|
||||||
"version": "0.1.4",
|
"version": "0.1.6",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "NEXT_PUBLIC_GIT_COMMIT=$(git rev-parse --short HEAD) next dev",
|
"dev": "NEXT_PUBLIC_GIT_COMMIT=$(git rev-parse --short HEAD) next dev",
|
||||||
|
|||||||
Reference in New Issue
Block a user