Compare commits
3 Commits
e21a8acc60
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 321b940398 | |||
| 1513bb3658 | |||
| 3b63285bd1 |
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
# nuzlocke-tracker-m8ki
|
||||||
|
title: Split e2e tests into manual workflow
|
||||||
|
status: completed
|
||||||
|
type: task
|
||||||
|
priority: normal
|
||||||
|
created_at: 2026-02-21T16:53:37Z
|
||||||
|
updated_at: 2026-02-21T16:54:04Z
|
||||||
|
---
|
||||||
|
|
||||||
|
Remove e2e-tests job from ci.yml and create a new e2e.yml workflow with workflow_dispatch trigger only.
|
||||||
27
.github/workflows/ci.yml
vendored
27
.github/workflows/ci.yml
vendored
@@ -69,30 +69,3 @@ jobs:
|
|||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: npm test
|
run: npm test
|
||||||
working-directory: frontend
|
working-directory: frontend
|
||||||
|
|
||||||
e2e-tests:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
|
||||||
with:
|
|
||||||
node-version: "24"
|
|
||||||
- name: Install dependencies
|
|
||||||
run: npm ci
|
|
||||||
working-directory: frontend
|
|
||||||
- name: Install Playwright browsers
|
|
||||||
run: npx playwright install --with-deps chromium
|
|
||||||
working-directory: frontend
|
|
||||||
- name: Run e2e tests
|
|
||||||
run: npm run test:e2e
|
|
||||||
working-directory: frontend
|
|
||||||
env:
|
|
||||||
E2E_API_URL: http://192.168.1.10:8100
|
|
||||||
- name: Upload Playwright report
|
|
||||||
if: failure()
|
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
||||||
with:
|
|
||||||
name: playwright-report
|
|
||||||
path: frontend/playwright-report/
|
|
||||||
|
|||||||
35
.github/workflows/e2e.yml
vendored
Normal file
35
.github/workflows/e2e.yml
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
name: E2E Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
e2e-tests:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||||
|
with:
|
||||||
|
node-version: "24"
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
working-directory: frontend
|
||||||
|
- name: Install Playwright browsers
|
||||||
|
run: npx playwright install --with-deps chromium
|
||||||
|
working-directory: frontend
|
||||||
|
- name: Run e2e tests
|
||||||
|
run: npm run test:e2e
|
||||||
|
working-directory: frontend
|
||||||
|
env:
|
||||||
|
E2E_API_URL: http://192.168.1.10:8100
|
||||||
|
- name: Upload Playwright report
|
||||||
|
if: failure()
|
||||||
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
|
with:
|
||||||
|
name: playwright-report
|
||||||
|
path: frontend/playwright-report/
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
"""Database upsert helpers for seed data."""
|
"""Database upsert helpers for seed data."""
|
||||||
|
|
||||||
from sqlalchemy import delete, select
|
from sqlalchemy import delete, select, update
|
||||||
from sqlalchemy.dialects.postgresql import insert
|
from sqlalchemy.dialects.postgresql import insert
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from app.models.boss_battle import BossBattle
|
from app.models.boss_battle import BossBattle
|
||||||
from app.models.boss_pokemon import BossPokemon
|
from app.models.boss_pokemon import BossPokemon
|
||||||
|
from app.models.encounter import Encounter
|
||||||
from app.models.evolution import Evolution
|
from app.models.evolution import Evolution
|
||||||
from app.models.game import Game
|
from app.models.game import Game
|
||||||
from app.models.pokemon import Pokemon
|
from app.models.pokemon import Pokemon
|
||||||
@@ -195,17 +196,33 @@ async def upsert_routes(
|
|||||||
for child in route.get("children", []):
|
for child in route.get("children", []):
|
||||||
seed_names.add(child["name"])
|
seed_names.add(child["name"])
|
||||||
|
|
||||||
pruned = await session.execute(
|
# Find stale route IDs, excluding routes with user encounters
|
||||||
delete(Route)
|
in_use_subq = select(Encounter.route_id).distinct().subquery()
|
||||||
.where(
|
stale_route_ids_result = await session.execute(
|
||||||
|
select(Route.id).where(
|
||||||
Route.version_group_id == version_group_id,
|
Route.version_group_id == version_group_id,
|
||||||
Route.name.not_in(seed_names),
|
Route.name.not_in(seed_names),
|
||||||
|
Route.id.not_in(select(in_use_subq)),
|
||||||
)
|
)
|
||||||
.returning(Route.id)
|
|
||||||
)
|
)
|
||||||
pruned_count = len(pruned.all())
|
stale_route_ids = [row.id for row in stale_route_ids_result]
|
||||||
if pruned_count:
|
|
||||||
print(f" Pruned {pruned_count} stale route(s)")
|
if stale_route_ids:
|
||||||
|
# Delete encounters referencing stale routes (no DB-level cascade)
|
||||||
|
await session.execute(
|
||||||
|
delete(RouteEncounter).where(
|
||||||
|
RouteEncounter.route_id.in_(stale_route_ids)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
# Nullify boss battle references to stale routes
|
||||||
|
await session.execute(
|
||||||
|
update(BossBattle)
|
||||||
|
.where(BossBattle.after_route_id.in_(stale_route_ids))
|
||||||
|
.values(after_route_id=None)
|
||||||
|
)
|
||||||
|
# Now safe to delete the routes
|
||||||
|
await session.execute(delete(Route).where(Route.id.in_(stale_route_ids)))
|
||||||
|
print(f" Pruned {len(stale_route_ids)} stale route(s)")
|
||||||
|
|
||||||
await session.flush()
|
await session.flush()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user