Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/live/02_allapot.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ Drift-proof observability egy greenfield lowcode platformban.


- **Frontend (Angular)**
- **E2E smoke (Playwright):** `frontend/e2e/smoke.spec.ts` — fő low-code + **New workflow/entity**, **Admin tenants**, **Upgrade**, **Auth** + **`/lowcode/auth/callback`** + részletes útvonalak (workflow / run / entity / records, nem létező UUID-val); CI: `scripts/e2e-smoke-ci.sh` → `npm run e2e:smoke` + **`frontend-e2e`**; lokális Windows: `scripts/e2e-smoke-ci.ps1`; közreműködői útmutató: [`CONTRIBUTING.md`](../../CONTRIBUTING.md), [`frontend/README.md`](../../frontend/README.md) — [`e2e-smoke-plan.md`](e2e-smoke-plan.md). **Opcionális seedelt E2E:** `e2e/workflow-seeded.spec.ts` + `e2e/entity-seeded.spec.ts` (`e2e/seeded-helpers.ts`) — `npm run e2e:seeded` (nem a CI smoke).
- **E2E smoke (Playwright):** `frontend/e2e/smoke.spec.ts` — fő low-code + **New workflow/entity**, **Admin tenants**, **Upgrade**, **Auth** + **`/lowcode/auth/callback`** + részletes útvonalak (workflow / run / entity / records, nem létező UUID-val); CI: `scripts/e2e-smoke-ci.sh` → `npm run e2e:smoke` + **`frontend-e2e`**; lokális Windows: `scripts/e2e-smoke-ci.ps1`; közreműködői útmutató: [`CONTRIBUTING.md`](../../CONTRIBUTING.md), [`frontend/README.md`](../../frontend/README.md) — [`e2e-smoke-plan.md`](e2e-smoke-plan.md). **Opcionális seedelt E2E:** `workflow-seeded` + `entity-seeded` + `run-seeded` (`e2e/seeded-helpers.ts`) — `npm run e2e:seeded` (nem a CI smoke).
- **Iter 67+ termék:** ütem és soron következő slice-ok — [`roadmap-iter-67-product.md`](roadmap-iter-67-product.md). **67a:** globális **fejléc** — aktuális **tenant** (élő frissítés `setLowCodeSession` után); fő nav: Workflows / Runs / Entities, Auth, Admin, Upgrade; **`/`** átirányítás **`/lowcode/workflows`** (demó belépés). **67b:** **Workflows** lista — név szerinti **kliens oldali szűrő** + jobb üres állapot szövegek. **67c:** **Entities** lista — ugyanilyen név szűrő + **Workflows / All runs** linkek; **Entity records** — üres vs. szűrő-0 találat szétválasztva, „Showing X of Y”. **67d:** **Workflow runs** — **szerver oldali** szűrők (állapot, started after/before UTC), lapozás, üres állapotok; nav: **Entities**.
- Low-code **auth** (`/lowcode/auth`, `/lowcode/auth/callback`): dev token + opcionális **OIDC** (PKCE), ha a backend `spa-oidc-config` elérhető — [`oidc-jwt-bearer.md`](oidc-jwt-bearer.md); **BFF módban** (`meta.enabled && configured`): induláskor `bff/meta`, interceptor **`withCredentials`**, nincs SPA Bearer a store-ból; auth oldalon BFF login / session / logout — [`auth-bff-httponly.md`](auth-bff-httponly.md). **Dev proxy** (`frontend/proxy.conf.json`): **`changeOrigin: false`** az `/api` felé, hogy a backend `Host`-ja megegyezzen a SPA originnel (`localhost:4200`) és a BFF **`redirect_uri`** / IdP regisztráció összhangban legyen (§ *62c+ — helyi dev smoke*, § *teszt IdP regisztráció*).
- Workflow details oldalon a read-only **Viewer v2** működik (kártyák + nyilak): step típus szerinti alcím / összefoglaló, `foreach`/`switch` branch előnézet, **JSON →** ugrás a JSON szerkesztőhöz; közös `lowcode-workflow-viewer-utils` + unit teszt; a JSON/Viewer nézet váltása stabil. **Builder** (iter 58a + **58b** New workflow + **58c** natív drag&drop fogó): lépés **palette**, **↑↓** + **húzd–ejtés** sorrend, törlés, JSON szinkron — [`workflow-visual-builder.md`](workflow-visual-builder.md), `lowcode-workflow-builder-utils` + teszt (`moveBuilderStepToSlot`); **New** oldalon **Builder | JSON** váltó + Prettify/Minify a JSON nézetben; **58c+** (dependency nélkül): ~**44px** fogó / ↑↓, érintésre ajánlott **↑↓** a szövegben; **`@angular/cdk`:** dokumentált **defer** — ugyanott § *Döntés*.
Expand Down
2 changes: 1 addition & 1 deletion docs/live/03_kovetkezo_lepesek.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

## Workflow engine — ACTIVE

**ACTIVE (WIP=1):** **E2E további réteg (opcionális)** — auth / OIDC happy path, **workflow run** seedelt részletek, ha priorítás; fő navigációs smoke + **auth/callback** + részletes útvonalak (hiányzó UUID): [`e2e-smoke-plan.md`](e2e-smoke-plan.md) ✅; **seedelt workflow + entity details:** `npm run e2e:seeded` ✅; Windows **PowerShell** runner: `scripts/e2e-smoke-ci.ps1` ✅. **Minőség / API 68** — **68a–k** ✅ (workflow + entitás/rekord + futások + domainCommand — [`roadmap-iter-68-quality.md`](roadmap-iter-68-quality.md)). **Termék 67 (a–d)** ✅ — [`roadmap-iter-67-product.md`](roadmap-iter-67-product.md). További backlog: [`02_allapot.md`](02_allapot.md) · [`PROJECT_CONTEXT.md`](../PROJECT_CONTEXT.md). **66+ enterprise** (supply-chain, Gitleaks, SBOM, Dependabot, CodeQL — [`ci-codeql.md`](ci-codeql.md)) ✅; Angular **LTS upgrade** + `npm audit` kapu külön hullám — [`ci-supply-chain.md`](ci-supply-chain.md). Történeti roadmap: [`roadmap-iter-65-plus.md`](roadmap-iter-65-plus.md) · [`roadmap-iter-64-plus.md`](roadmap-iter-64-plus.md). **Integrációs tesztek (Backend.Tests)** (fő vonal kész): `AuthSpaOidcConfigTests`; `AdminObservabilityTests`; `AdminUpgradeRunsTests` / `AdminUpgradeRunsMutationTests`; `AdminInstallationTests`; `AdminAuditTests`; `AdminTenantsTests`; `BffAuthEndpointsTests` / `BffSessionBearerWorkflowTests`. **Iter 65** ✅ (**65a–c**, **PR #112–114** — [`roadmap-iter-65-plus.md`](roadmap-iter-65-plus.md) · [`api-lifecycle-headers.md`](api-lifecycle-headers.md)). **Iter 64** ✅ (**64a–e**, **PR #106–110** — [`roadmap-iter-64-plus.md`](roadmap-iter-64-plus.md); záró: **64e** **PR #110** — [`ci-dotnet-format.md`](ci-dotnet-format.md)). **Iter 63** ✅ (**63a–d**, **PR #102–105** — [`roadmap-next-iterations.md`](roadmap-next-iterations.md)). **62c+ e2e** hátrasorolva (nem blokkoló). **58c+** touch UX ✅ **PR #99** — [`workflow-visual-builder.md`](workflow-visual-builder.md). **58c+ `@angular/cdk`:** elhalasztva — ugyanott § *Döntés*. **62c+** doksi ✅ — [`auth-bff-httponly.md`](auth-bff-httponly.md) (**PR #95**, **PR #97**). **62c — BFF** ✅ **PR #93**. **62b2** ✅ [`oidc-jwt-bearer.md`](oidc-jwt-bearer.md). **62b1** ✅. **62** ✅. **61** ✅. **60–58** ✅.
**ACTIVE (WIP=1):** **E2E további réteg (opcionális)** — BFF / OIDC **happy path** (IdP round-trip), ha priorítás; seedelt **entity records** / mélyebb forgatókönyvek: [`e2e-smoke-plan.md`](e2e-smoke-plan.md) backlog; fő navigációs smoke + **auth/callback** + részletes útvonalak (hiányzó UUID) ✅; **seedelt workflow + entity + run details:** `npm run e2e:seeded` ✅; Windows **PowerShell** runner: `scripts/e2e-smoke-ci.ps1` ✅. **Minőség / API 68** — **68a–k** ✅ (workflow + entitás/rekord + futások + domainCommand — [`roadmap-iter-68-quality.md`](roadmap-iter-68-quality.md)). **Termék 67 (a–d)** ✅ — [`roadmap-iter-67-product.md`](roadmap-iter-67-product.md). További backlog: [`02_allapot.md`](02_allapot.md) · [`PROJECT_CONTEXT.md`](../PROJECT_CONTEXT.md). **66+ enterprise** (supply-chain, Gitleaks, SBOM, Dependabot, CodeQL — [`ci-codeql.md`](ci-codeql.md)) ✅; Angular **LTS upgrade** + `npm audit` kapu külön hullám — [`ci-supply-chain.md`](ci-supply-chain.md). Történeti roadmap: [`roadmap-iter-65-plus.md`](roadmap-iter-65-plus.md) · [`roadmap-iter-64-plus.md`](roadmap-iter-64-plus.md). **Integrációs tesztek (Backend.Tests)** (fő vonal kész): `AuthSpaOidcConfigTests`; `AdminObservabilityTests`; `AdminUpgradeRunsTests` / `AdminUpgradeRunsMutationTests`; `AdminInstallationTests`; `AdminAuditTests`; `AdminTenantsTests`; `BffAuthEndpointsTests` / `BffSessionBearerWorkflowTests`. **Iter 65** ✅ (**65a–c**, **PR #112–114** — [`roadmap-iter-65-plus.md`](roadmap-iter-65-plus.md) · [`api-lifecycle-headers.md`](api-lifecycle-headers.md)). **Iter 64** ✅ (**64a–e**, **PR #106–110** — [`roadmap-iter-64-plus.md`](roadmap-iter-64-plus.md); záró: **64e** **PR #110** — [`ci-dotnet-format.md`](ci-dotnet-format.md)). **Iter 63** ✅ (**63a–d**, **PR #102–105** — [`roadmap-next-iterations.md`](roadmap-next-iterations.md)). **62c+ e2e** hátrasorolva (nem blokkoló). **58c+** touch UX ✅ **PR #99** — [`workflow-visual-builder.md`](workflow-visual-builder.md). **58c+ `@angular/cdk`:** elhalasztva — ugyanott § *Döntés*. **62c+** doksi ✅ — [`auth-bff-httponly.md`](auth-bff-httponly.md) (**PR #95**, **PR #97**). **62c — BFF** ✅ **PR #93**. **62b2** ✅ [`oidc-jwt-bearer.md`](oidc-jwt-bearer.md). **62b1** ✅. **62** ✅. **61** ✅. **60–58** ✅.

> **56–57** lezárva: SQL Server EF + Helm backup — [`sqlserver-platform.md`](sqlserver-platform.md), [`k3s-home-lab.md`](k3s-home-lab.md), [`container-deploy.md`](container-deploy.md).

Expand Down
8 changes: 4 additions & 4 deletions docs/live/e2e-smoke-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Első futás előtt böngésző motor: `npm run e2e:install-browsers` (a `fronte
| `powershell -File scripts/e2e-smoke-ci.ps1` | Ugyanaz, **Windows PowerShell 5.1+** vagy **pwsh** (a repo gyökeréből; `npm` és `dotnet` a PATH-on). |
| `npm run e2e` | Összes Playwright teszt az `e2e/` alatt. Ha **nincs** `PW_NO_WEBSERVER`, a konfig megpróbálja saját `webServer` blokkal indítani a `dotnet run` + `ng serve`-et (lokálisan ez néha kényelmetlen; CI **nem** ezt használja). |
| `npm run e2e:smoke` | Csak a **smoke** fájl (`e2e/smoke.spec.ts`) — ezt futtatja a CI script is. |
| `npm run e2e:seeded` | **`workflow-seeded.spec.ts`** + **`entity-seeded.spec.ts`**: közös **`e2e/seeded-helpers.ts`** (dev-token, session); API seed → létező workflow / entity részletek (nem része a CI smoke-nak). |
| `npm run e2e:seeded` | **`workflow-seeded`**, **`entity-seeded`**, **`run-seeded`**: közös **`e2e/seeded-helpers.ts`** (dev-token, session); API seed → létező workflow / entity / **workflow run** részletek (nem része a CI smoke-nak). |
| `PW_NO_WEBSERVER=1 npm run e2e:smoke` | Csak smoke — **előbb** kézzel indítsd a 5002-es backendet és a 4200-as dev szervert két terminálban. |

**Megjegyzés (Windows):** az `ng serve` gyakran **`http://localhost:4200`**-on válaszol; a **`127.0.0.1:4200`** nem mindig ugyanaz a stacken. A Playwright **`baseURL`** és a CI script **`localhost:4200`**-at használ.
Expand All @@ -51,7 +51,7 @@ A **11–14** tesztek egy rögzített, üres adatbázisban nem létező UUID-t h

### Seedelt workflow / entity (opcionális, nem CI smoke)

A **`e2e/seeded-helpers.ts`** adja a dev-token + SPA session injektálást. A **`e2e/workflow-seeded.spec.ts`** `POST /api/workflows`-ot hív; az **`e2e/entity-seeded.spec.ts`** `POST /api/entities`-t; majd `/lowcode/workflows/{id}` illetve `/lowcode/entities/{id}` ellenőrzése (GET 200 + név a `main`-ben). **Ne** használj `127.0.0.1`-et az API base URL-hez fejlesztői módban a tenant feloldás miatt; az env **`E2E_API_BASE`** felülírhatja az alapértelmezett `http://localhost:5002`-t.
A **`e2e/seeded-helpers.ts`** adja a dev-token + SPA session injektálást. A **`workflow-seeded`** `POST /api/workflows` + részletek; **`entity-seeded`** `POST /api/entities` + részletek; **`run-seeded`** noop workflow létrehozása, majd `POST /api/workflows/{id}/runs` és `/lowcode/runs/{runId}` (GET run details 200, **Run** sor a `main`-ben). **Ne** használj `127.0.0.1`-et az API base URL-hez fejlesztői módban a tenant feloldás miatt; az env **`E2E_API_BASE`** felülírhatja az alapértelmezett `http://localhost:5002`-t.

## CI

Expand All @@ -61,11 +61,11 @@ A **`e2e/seeded-helpers.ts`** adja a dev-token + SPA session injektálást. A **
## Következő lépések (backlog)

- BFF / OIDC **happy path** (IdP round-trip, ha van stabil teszt IdP / mock).
- Seedelt **workflow run** részletek — kiterjeszthető az `e2e:seeded` mintára (`POST` futás + `/lowcode/runs/{id}`).
- Opcionális: seedelt **entity records** lista (`POST` rekord + `/lowcode/entities/{id}/records`).

## DoD (E2E iteráció — MVP)

- `package.json` script: `npm run e2e`, `npm run e2e:smoke` (CI / smoke), `npm run e2e:seeded` (opcionális seedelt workflow E2E), `npm run e2e:smoke:ui` / `npm run e2e:smoke:debug` (smoke + UI/debug), `npm run e2e:ui` / `npm run e2e:debug` (összes spec), `npm run e2e:report` (HTML riport böngészőben; lokálisan), `npm run e2e:install-browsers`.
- `package.json` script: `npm run e2e`, `npm run e2e:smoke` (CI / smoke), `npm run e2e:seeded` (opcionális seedelt workflow / entity / run E2E), `npm run e2e:smoke:ui` / `npm run e2e:smoke:debug` (smoke + UI/debug), `npm run e2e:ui` / `npm run e2e:debug` (összes spec), `npm run e2e:report` (HTML riport böngészőben; lokálisan), `npm run e2e:install-browsers`.
- CI-ben zöld **`frontend-e2e`** job.
- Új dependency: **`@playwright/test`** — governance szerint dependency review / jóváhagyás; lásd `docs/GOVERNANCE.md`.

Expand Down
49 changes: 49 additions & 0 deletions frontend/e2e/run-seeded.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { test, expect } from '@playwright/test';
import { API_BASE, injectLowCodeSession, mintDevToken } from './seeded-helpers';

const MINIMAL_DEF = '{"steps":[{"type":"noop"}]}';

test.describe('Workflow run details (seeded)', () => {
test('shows run id for workflow run started via API', async ({ page, request }) => {
const accessToken = await mintDevToken(request);

const wfName = `e2e-seeded-run-wf-${Date.now()}`;
const createWf = await request.post(`${API_BASE}/api/workflows`, {
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${accessToken}`,
},
data: { name: wfName, definitionJson: MINIMAL_DEF },
});
expect(createWf.ok(), await createWf.text()).toBeTruthy();
const wf = (await createWf.json()) as { workflowDefinitionId: string };
const wfId = wf.workflowDefinitionId;

const startRun = await request.post(`${API_BASE}/api/workflows/${wfId}/runs`, {
headers: { Authorization: `Bearer ${accessToken}` },
});
expect(startRun.ok(), await startRun.text()).toBeTruthy();
const started = (await startRun.json()) as { workflowRunId: string };
const runId = started.workflowRunId;
expect(runId).toMatch(
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,
);

await injectLowCodeSession(page, accessToken);

const getRun = page.waitForResponse(
(r) =>
r.request().method() === 'GET' &&
r.url().includes(`/api/workflows/runs/${runId}`),
);

await page.goto(`/lowcode/runs/${runId}`);

const detailsResp = await getRun;
expect(detailsResp.status(), await detailsResp.text()).toBe(200);

await expect(page.getByRole('heading', { name: 'Workflow run' })).toBeVisible();
await expect(page.getByRole('main')).toContainText(runId, { timeout: 15_000 });
await expect(page.getByRole('link', { name: '← Workflows' })).toBeVisible();
});
});
6 changes: 3 additions & 3 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
"test": "ng test",
"e2e": "playwright test",
"e2e:smoke": "playwright test e2e/smoke.spec.ts",
"e2e:seeded": "playwright test e2e/workflow-seeded.spec.ts e2e/entity-seeded.spec.ts",
"e2e:seeded:ui": "playwright test e2e/workflow-seeded.spec.ts e2e/entity-seeded.spec.ts --ui",
"e2e:seeded:debug": "playwright test e2e/workflow-seeded.spec.ts e2e/entity-seeded.spec.ts --debug",
"e2e:seeded": "playwright test e2e/workflow-seeded.spec.ts e2e/entity-seeded.spec.ts e2e/run-seeded.spec.ts",
"e2e:seeded:ui": "playwright test e2e/workflow-seeded.spec.ts e2e/entity-seeded.spec.ts e2e/run-seeded.spec.ts --ui",
"e2e:seeded:debug": "playwright test e2e/workflow-seeded.spec.ts e2e/entity-seeded.spec.ts e2e/run-seeded.spec.ts --debug",
"e2e:smoke:ui": "playwright test e2e/smoke.spec.ts --ui",
"e2e:smoke:debug": "playwright test e2e/smoke.spec.ts --debug",
"e2e:ui": "playwright test --ui",
Expand Down
Loading