diff --git a/e2e/tests/us26-templates-crud.spec.ts b/e2e/tests/us26-templates-crud.spec.ts new file mode 100644 index 0000000..32f6f2a --- /dev/null +++ b/e2e/tests/us26-templates-crud.spec.ts @@ -0,0 +1,322 @@ +/** + * US-26 — Admin/redteam creates and manages simulation templates. + * Covers AC-26.3 → AC-26.8 (API CRUD + UI). + * AC-26.1/2 (model + migration) tested implicitly via API assertions. + */ +import { test, expect } from '@playwright/test'; +import { + adminToken, + deleteUserByUsername, + ensureUser, + login, + makeClient, +} from '../fixtures/api'; +import { seedTokenInStorage } from '../fixtures/auth'; + +const REDTEAM_USER = 'us26-redteam'; +const SOC_USER = 'us26-soc'; +const PASS = 'us26-pass-strong'; + +interface Template { + id: number; + name: string; + description: string | null; + commands: string | null; + prerequisites: string | null; + techniques: { id: string; name: string }[]; + tactics: { id: string; name: string }[]; + created_at: string; + updated_at: string | null; + created_by: { id: number; username: string }; +} + +async function createTemplate( + token: string, + payload: { name: string; description?: string; commands?: string; technique_ids?: string[]; tactic_ids?: string[] }, +): Promise