diff --git a/README.md b/README.md index 43c5afe..ee282a7 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,14 @@ Assumption: - The CI/CD platform is GitHub Actions. If you need Azure DevOps, GitLab CI, or Jenkins instead, the same stages can be ported. +## Future enhancements + +The current version is intentionally focused on a local dashboard-driven workflow. The next major enhancements are: + +- CLI and CI execution mode with options such as `--ci`, `--env`, and `--file`, plus machine-readable result output like JSON and JUnit XML for pipeline use +- Response value capture and run-scoped variable reuse so one request can extract data such as tokens or IDs and pass them into later requests +- Live execution progress in the dashboard so long-running suites can stream environment, endpoint, and test updates while the run is still in progress + ## Configuration `src/ApiTestRunner.App/appsettings.json` controls: diff --git a/src/ApiTestRunner.App/wwwroot/index.html b/src/ApiTestRunner.App/wwwroot/index.html index cf5baa9..802a587 100644 --- a/src/ApiTestRunner.App/wwwroot/index.html +++ b/src/ApiTestRunner.App/wwwroot/index.html @@ -196,13 +196,10 @@

+
- -
-
-
diff --git a/src/ApiTestRunner.App/wwwroot/styles.css b/src/ApiTestRunner.App/wwwroot/styles.css index 0f40bff..44cc957 100644 --- a/src/ApiTestRunner.App/wwwroot/styles.css +++ b/src/ApiTestRunner.App/wwwroot/styles.css @@ -2,6 +2,13 @@ --app-accent: #0f766e; --app-accent-strong: #115e59; --app-accent-soft: rgba(15, 118, 110, 0.12); + --selection-panel-accent: linear-gradient(180deg, #166534, #14532d); + --selection-group-accent: linear-gradient(180deg, #15803d, #166534); + --selection-subgroup-accent: linear-gradient(180deg, #22c55e, #15803d); + --results-panel-accent: linear-gradient(180deg, #1d4ed8, #1e3a8a); + --results-environment-accent: linear-gradient(180deg, #2563eb, #1d4ed8); + --results-endpoint-accent: linear-gradient(180deg, #3b82f6, #2563eb); + --results-test-accent: linear-gradient(180deg, #60a5fa, #3b82f6); --app-pass: #15803d; --app-pass-soft: rgba(21, 128, 61, 0.12); --app-fail: #b42318; @@ -176,6 +183,32 @@ body.app-shell { background: rgba(31, 41, 55, 0.12); } +.selection-panel, +.results-panel { + position: relative; + overflow: hidden; +} + +.selection-panel::before, +.results-panel::before { + content: ""; + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 4px; + background: linear-gradient(180deg, var(--app-accent), #164e63); + border-radius: 1rem 0 0 1rem; +} + +.selection-panel::before { + background: var(--selection-panel-accent); +} + +.results-panel::before { + background: var(--results-panel-accent); +} + .panel-title { margin: 0; display: inline-flex; @@ -333,16 +366,32 @@ body.app-shell { background: var(--app-panel); } +.selection-group, +.selection-subgroup { + position: relative; +} + .preview-card { position: relative; padding: 1rem 1.05rem; } +.environment-card, +.endpoint-card, +.test-card { + position: relative; +} + .collapsible-preview-card { padding: 0; } -.preview-card::before { +.preview-card::before, +.selection-group::before, +.selection-subgroup::before, +.environment-card::before, +.endpoint-card::before, +.test-card::before { content: ""; position: absolute; left: 0; @@ -353,6 +402,26 @@ body.app-shell { border-radius: 1rem 0 0 1rem; } +.selection-group::before { + background: var(--selection-group-accent); +} + +.selection-subgroup::before { + background: var(--selection-subgroup-accent); +} + +.environment-card::before { + background: var(--results-environment-accent); +} + +.endpoint-card::before { + background: var(--results-endpoint-accent); +} + +.test-card::before { + background: var(--results-test-accent); +} + .preview-card h2 { margin: 0 0 0.2rem; font-size: 1rem; @@ -426,6 +495,14 @@ body.app-shell { .environment-header, .endpoint-header { justify-content: space-between; + align-items: center; + gap: 1rem; +} + +.environment-header > :first-child, +.endpoint-header > :first-child { + min-width: 0; + flex: 1 1 auto; } .selection-header-row { @@ -485,7 +562,6 @@ body.app-shell { } .selection-group-body { - background: linear-gradient(180deg, rgba(226, 232, 240, 0.72), rgba(241, 245, 249, 0.88)); border-top: 1px solid rgba(15, 23, 42, 0.08); } @@ -496,7 +572,13 @@ body.app-shell { gap: 0.65rem; } +.selection-test-list { + padding: 0 0.9rem 0.9rem; + border-top: 1px solid rgba(15, 23, 42, 0.08); +} + .selection-subgroup, +.selection-test-list, .endpoint-card, .test-card, .response-panel { @@ -559,13 +641,17 @@ body.app-shell { background: rgba(255, 255, 255, 0.55); } +.environment-summary-row, +.endpoint-summary-row { + padding-right: 4.9rem; +} + .selection-summary-row { - background: linear-gradient(180deg, rgba(226, 232, 240, 0.98), rgba(203, 213, 225, 0.92)); border-bottom: 1px solid rgba(15, 23, 42, 0.12); } .selection-subgroup > .selection-summary-row { - background: linear-gradient(180deg, rgba(241, 245, 249, 0.98), rgba(226, 232, 240, 0.94)); + background: transparent; } .environment-card[open] > .environment-summary-row,