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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 11 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,3 +117,14 @@ jobs:
path: src/BlazorWebFormsComponents.Analyzers.Test/TestResults/*.trx
reporter: dotnet-trx
fail-on-error: true

- name: Post test summary to PR
if: always() && github.event_name == 'pull_request'
uses: EnricoMi/publish-unit-test-result-action@v2
with:
files: |
src/BlazorWebFormsComponents.Test/TestResults/*.trx
src/BlazorWebFormsComponents.Analyzers.Test/TestResults/*.trx
check_name: Unit Tests Summary
comment_title: "🧪 Unit Test Results"
comment_mode: always
10 changes: 10 additions & 0 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,13 @@ jobs:
path: samples/AfterBlazorServerSide.Tests/TestResults/*.trx
reporter: dotnet-trx
fail-on-error: true

- name: Post test summary to PR
if: always() && github.event_name == 'pull_request'
uses: EnricoMi/publish-unit-test-result-action@v2
with:
files: |
samples/AfterBlazorServerSide.Tests/TestResults/*.trx
check_name: Integration Tests Summary
comment_title: "🎭 Integration Test Results"
comment_mode: always
69 changes: 69 additions & 0 deletions .github/workflows/nuget-preview.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Publish Preview NuGet

on:
push:
branches:
- 'dev'
paths:
- 'src/BlazorWebFormsComponents/**'
- 'Directory.Build.props'
- 'version.json'

jobs:
publish-preview:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'

- name: Install NBGV
run: dotnet tool install --global nbgv

- name: Get version from NBGV
id: version
run: |
VERSION=$(nbgv get-version -v NuGetPackageVersion)
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "📦 Publishing version: $VERSION"

- name: Restore dependencies
run: dotnet restore src/BlazorWebFormsComponents/BlazorWebFormsComponents.csproj

- name: Build
run: dotnet build src/BlazorWebFormsComponents/BlazorWebFormsComponents.csproj --configuration Release --no-restore

- name: Run tests
run: |
dotnet restore src/BlazorWebFormsComponents.Test/BlazorWebFormsComponents.Test.csproj
dotnet test src/BlazorWebFormsComponents.Test/BlazorWebFormsComponents.Test.csproj --configuration Release --verbosity normal

- name: Pack
run: dotnet pack src/BlazorWebFormsComponents/BlazorWebFormsComponents.csproj --configuration Release --no-build --output ./nupkg

- name: Push to GitHub Packages
run: dotnet nuget push ./nupkg/*.nupkg --source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" --api-key ${{ secrets.GITHUB_TOKEN }} --skip-duplicate

- name: Push to nuget.org
env:
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
if: env.NUGET_API_KEY != ''
run: dotnet nuget push ./nupkg/*.nupkg --source "https://api.nuget.org/v3/index.json" --api-key ${{ env.NUGET_API_KEY }} --skip-duplicate

- name: Summary
run: |
echo "### 📦 Preview Published" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Version:** \`${{ steps.version.outputs.version }}\`" >> $GITHUB_STEP_SUMMARY
echo "**Package:** Fritz.BlazorWebFormsComponents" >> $GITHUB_STEP_SUMMARY
echo "**Feed:** nuget.org + GitHub Packages" >> $GITHUB_STEP_SUMMARY
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -355,3 +355,6 @@ planning-docs/ASPX-MIDDLEWARE-FEASIBILITY.md
.squad/decisions/inbox/
.squad/sessions/
.squad-workstream
site/
samples/ZavaLoanPortal
samples/AfterZavaLoanPortal/watch.ps1
24 changes: 24 additions & 0 deletions .squad/agents/colossus/history.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,3 +133,27 @@ Added 5 smoke tests (Timer, UpdatePanel, UpdateProgress, ScriptManager, Substitu


📌 Team update (2026-05-07T13:17): Bishop completed GridView/ListView template emission fixes — ItemType propagation and explicit placeholder contexts now reduce acceptance-test repair surface on data-bound pages. CLI: 603/603 tests. Next: Run 41 validation — decided by Bishop

### Wizard Integration Coverage Audit (2026-05-20T21:07:06.347-04:00)
- Wizard sample page exists at `samples/AfterBlazorServerSide/Components/Pages/ControlSamples/Wizard/Wizard.razor` (not `Index.razor`).
- The Wizard sample demonstrates six scenarios: basic multi-step flow, no-sidebar mode, `AllowReturn="false"`, cancel button handling, custom navigation button text, and `HeaderTemplate` rendering.
- Sample-site navigation is driven by `samples/AfterBlazorServerSide/ComponentCatalog.cs`; Wizard is registered there under the Navigation category with route `/ControlSamples/Wizard`.
- `samples/AfterBlazorServerSide/Components/Layout/NavMenu.razor` renders links from `ComponentCatalog`, so Wizard is available in the live side navigation even though `ComponentList.razor` also contains a separate static link.
- `samples/AfterBlazorServerSide.Tests\ControlSampleTests.cs` has no Wizard smoke-test `InlineData`, and `samples/AfterBlazorServerSide.Tests\InteractiveComponentTests.cs` has no Wizard-specific interaction test.
- Running `dotnet test samples/AfterBlazorServerSide.Tests --nologo --filter "Wizard"` currently exercises CreateUserWizard coverage only; after installing Playwright Chromium, the filtered run succeeded with 1 test and still did not validate `/ControlSamples/Wizard`.
- Manual browser verification confirmed `/ControlSamples/Wizard` loads without console errors and that navigation from the site sidebar reaches the page; sample interactions on the page advanced wizard state successfully.

### Wizard Playwright Coverage Added (2026-05-20T21:19:29.902-04:00)
- Added Wizard smoke coverage by inserting `/ControlSamples/Wizard` into the Navigation control theory in `samples/AfterBlazorServerSide.Tests\ControlSampleTests.cs`.
- Added four Wizard interaction tests in `samples/AfterBlazorServerSide.Tests\InteractiveComponentTests.cs`: next-step, previous-step, sidebar navigation, and finish-to-complete flow.
- Wizard sample pages contain multiple instances of the component with repeated button labels, so Playwright locators should scope to `data-audit-control="Wizard-1"` for the basic sample to avoid ambiguous `Next`, `Previous`, and `Finish` matches.
- Key verification markers for the basic Wizard sample are `Step 1: Personal Information`, `Step 2: Preferences`, `Step 3: Review`, `Registration Complete!`, and the `Finish event fired!` success alert in `samples/AfterBlazorServerSide/Components/Pages/ControlSamples/Wizard/Wizard.razor`.
- Compile-only validation succeeded with `dotnet build samples\AfterBlazorServerSide.Tests --nologo`; tests were not executed because the task explicitly limited validation to compilation.

≡ Team update (2026-05-21T12:26): Scope Wizard Playwright locators to `data-audit-control="Wizard-N"` containers to avoid ambiguous button/sidebar text matching across six sample instances on same route. Use container-scoped locators for all interactive coverage to ensure deterministic targeting — decided by Colossus

### Wizard Template Acceptance Coverage (2026-05-21T08:26:50.933-04:00)
- Added five Wizard template-focused Playwright tests in `samples/AfterBlazorServerSide.Tests\InteractiveComponentTests.cs` for the expected `data-audit-control` wrappers `Wizard-7` through `Wizard-11`.
- For the not-yet-landed sample demos, broad assertions are safer than exact text checks: verify custom navigation/sidebar template structure exists inside the scoped Wizard wrapper instead of hard-coding Cyclops' final demo text.
- Added small Wizard-specific test helpers to reuse the page navigation pattern, collect console errors, and find the forward navigation control without matching `Previous`, `Back`, or `Cancel` labels.
- Compile validation succeeded with `dotnet build samples\AfterBlazorServerSide.Tests --nologo` after the test additions.
24 changes: 24 additions & 0 deletions .squad/agents/cyclops/history.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@

<!-- Summarized 2026-02-27 by Scribe covers M1M16 -->

### 2026-05-20T21:19:29.902-04:00: Wizard template wiring

- `src/BlazorWebFormsComponents/Wizard.razor` owns the rendered sidebar and navigation chrome; step content still comes from registered `WizardStep` children.
- `StartNavigationTemplate`, `StepNavigationTemplate`, and `FinishNavigationTemplate` should replace the default button table only for their matching effective step types.
- `SideBarTemplate` already acts as a full replacement for the built-in step links, so Wizard customization work should preserve that replacement behavior.
- `FinishCompleteButtonText` now needs to participate in the rendered Finish button label, with `FinishButtonText` preserved as the fallback for existing callers.
- Key files: `src/BlazorWebFormsComponents/Wizard.razor`, `src/BlazorWebFormsComponents/Wizard.razor.cs`, `src/BlazorWebFormsComponents.Test/Wizard/Navigation.razor`, `docs/NavigationControls/Wizard.md`.


### 2026-04-28: CLI Semantic Pattern Catalog Entries

Expand Down Expand Up @@ -74,3 +82,19 @@

≡ Team update (2026-05-07): Inbox merged, decisions consolidated — Scribe


≡ Team update (2026-05-21T12:26): Wizard finish button label precedence — FinishCompleteButtonText takes precedence over FinishButtonText for backward compatibility. Cyclops & Colossus spawned for sample templates and acceptance tests — decided by Cyclops

### 2026-05-21T08:26:50.933-04:00: Wizard sample template demonstrations

**Task:** Add missing Wizard feature demos to the server-side sample page for the newly wired navigation/sidebar template features.

**Changes delivered:**
- Added sample scenarios 7-11 in `samples/AfterBlazorServerSide/Components/Pages/ControlSamples/Wizard/Wizard.razor`.
- Demonstrated `FinishCompleteButtonText` overriding `FinishButtonText` on a finish step with a complete step following it.
- Added minimal working demos for `SideBarTemplate`, `StartNavigationTemplate`, `StepNavigationTemplate`, and `FinishNavigationTemplate` using custom button layouts and local step state.
- Verified the sample app still compiles with `dotnet build samples/AfterBlazorServerSide --nologo`.

**Key behavior:**
- The sample page can showcase step-specific templates by seeding each demo's `ActiveStepIndex` to the step type being demonstrated.
- Custom navigation templates on the sample page can drive the wizard by updating the bound `ActiveStepIndex` directly, which is enough for feature demonstrations without extra component changes.
10 changes: 10 additions & 0 deletions .squad/agents/forge/history.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,13 @@

**Deliverable:** Full gap analysis written to `.squad/decisions/inbox/forge-deptportal-analysis.md`

## Learnings

### 2026-05-20T21:07:06.347-04:00: Wizard Web Forms fidelity review

- `src/BlazorWebFormsComponents/Wizard.razor` already uses a table-based shell, but the header and navigation rows live inside a nested content table instead of the outer table layout used by ASP.NET Web Forms Wizard.
- `src/BlazorWebFormsComponents/Wizard.razor.cs` matches the core step model (`ActiveStepIndex`, `DisplaySideBar`, `HeaderText`, destination URLs, key navigation events, `WizardStepType` auto-resolution) and includes SSR form replay via `__wizard_step` and `__wizard_action` fields.
- Declared Wizard surface area overstates actual behavior: `StartNavigationTemplate`, `StepNavigationTemplate`, `FinishNavigationTemplate`, `SideBarButtonStyle`, and `FinishCompleteButtonText` exist in code/docs but are not wired into rendered markup.
- Sidebar fidelity gap: the Blazor Wizard renders flat `<a>/<span><br />` content inside one `<td>` rather than the Web Forms sidebar list/table/button structure, so CSS/JS targeting the original sidebar DOM will not match cleanly.
- Key review files for future parity checks: `src/BlazorWebFormsComponents/Wizard.razor`, `src/BlazorWebFormsComponents/Wizard.razor.cs`, `src/BlazorWebFormsComponents/WizardStep.razor.cs`, `src/BlazorWebFormsComponents.Test/Wizard/Navigation.razor`, and `docs/NavigationControls/Wizard.md`.

41 changes: 41 additions & 0 deletions .squad/agents/rogue/history.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,3 +115,44 @@ Confirmed 10/10 ComponentRef tests passing. Test coverage is complete — no fur
- L1 migration stayed at 19 seconds; build repair dropped to 63 seconds.
- Startup smoke checks for `/`, `/ProductList`, `/About`, and `/Account/Login` all returned HTTP 200 before test execution.
- Three of the four target fixes (`Entities`/`DataContext`, EDMX T4 exclusion, BLL namespace alignment) were not directly exercised by WingtipToys, so they still need another benchmark for validation.

### 2026-05-20T21:07:06.347-04:00: Wizard bUnit coverage audit

**Task:** Investigate the Wizard component's bUnit test coverage, execute the existing Wizard-filtered test run, and identify missing scenarios.

**Outcome:** `src\BlazorWebFormsComponents.Test\Wizard\Navigation.razor` is currently the only Wizard-specific test file and contains 16 `[Fact]` tests. The requested `dotnet test src\BlazorWebFormsComponents.Test --nologo --filter "Wizard"` run passed 26 tests across `net8.0`, `net9.0`, and `net10.0`; the broader count indicates the filter also matches non-folder tests such as CreateUserWizard coverage, so component-folder counts should be tracked separately from filter output.

**Coverage notes:**
- Existing Wizard coverage focuses on active-step rendering, next/previous navigation, finish and complete behavior, sidebar visibility/navigation, `AllowReturn=false`, `OnNextButtonClick`, `OnFinishButtonClick`, cancel button visibility, `HeaderText`, and `Visible=false`.
- Missing coverage includes explicit verification for all `WizardStepType` values (`Auto`, `Start`, `Step`), programmatic `ActiveStepIndex` updates and `ActiveStepIndexChanged`, `OnActiveStepChanged`, `OnPreviousButtonClick`, `OnCancelButtonClick`, `OnSideBarButtonClick`, cancel/finish destination navigation, template rendering (`HeaderTemplate`, `SideBarTemplate`, navigation templates), and edge cases such as empty, single-step, null-title, and many-step wizards.
- `Wizard.razor.cs` declares `StartNavigationTemplate`, `StepNavigationTemplate`, and `FinishNavigationTemplate`, but `Wizard.razor` never renders them; this is a high-priority QA gap because new tests should first confirm intended behavior and may expose a product bug.

**Key file paths:**
- Tests: `src\BlazorWebFormsComponents.Test\Wizard\Navigation.razor`
- Component: `src\BlazorWebFormsComponents\Wizard.razor` and `src\BlazorWebFormsComponents\Wizard.razor.cs`
- Step child: `src\BlazorWebFormsComponents\WizardStep.razor` and `src\BlazorWebFormsComponents\WizardStep.razor.cs`
- Enum/events: `src\BlazorWebFormsComponents\Enums\WizardStepType.cs`, `src\BlazorWebFormsComponents\WizardNavigationEventArgs.cs`

### 2026-05-20T21:19:29.902-04:00: Wizard callback and edge-case coverage expansion

**Task:** Add the missing Wizard bUnit coverage for callbacks, step-type behavior, and edge cases without modifying `src\BlazorWebFormsComponents.Test\Wizard\Navigation.razor`.

**Outcome:** Added three new Wizard test files — `src\BlazorWebFormsComponents.Test\Wizard\Callbacks.razor`, `src\BlazorWebFormsComponents.Test\Wizard\StepTypes.razor`, and `src\BlazorWebFormsComponents.Test\Wizard\EdgeCases.razor` — covering callback firing, `WizardStepType` rendering behavior, many-step sidebar output, and null/empty title handling. The requested validation command `dotnet test src\BlazorWebFormsComponents.Test --nologo --filter "Wizard"` passed with 123 total tests, 117 succeeded, and 6 skipped across `net8.0`, `net9.0`, and `net10.0`.

**Architecture / behavior notes:**
- `Wizard.razor.cs` raises `OnActiveStepChanged` and `ActiveStepIndexChanged` only from internal navigation handlers (`HandleNextClick`, `HandlePreviousClick`, `HandleFinishClick`, `HandleSideBarNavigation`), not from parent-driven parameter updates.
- `WizardStepType.Auto` resolves by position: first step becomes `Start`, last non-`Complete` step becomes `Finish`, and middle steps become `Step`.
- Sidebar titles fall back to `Step {index + 1}` only when `Title` is `null`; an empty string renders as empty text because the component uses the null-coalescing operator rather than `string.IsNullOrEmpty`.
- Step registration is add-only via `Wizard.AddStep()`; there is no removal path, so dynamic step removal is not currently supported.

**Known gaps captured as skipped tests:**
- Programmatic `ActiveStepIndex` parameter changes do not currently trigger `ActiveStepIndexChanged`.
- Single-step wizards still render start-step navigation instead of suppressing navigation entirely.
- Dynamic step add/remove updates are not supported by the current registration model.

**Key file paths:**
- New tests: `src\BlazorWebFormsComponents.Test\Wizard\Callbacks.razor`, `src\BlazorWebFormsComponents.Test\Wizard\StepTypes.razor`, `src\BlazorWebFormsComponents.Test\Wizard\EdgeCases.razor`
- Existing baseline test: `src\BlazorWebFormsComponents.Test\Wizard\Navigation.razor`
- Component implementation: `src\BlazorWebFormsComponents\Wizard.razor`, `src\BlazorWebFormsComponents\Wizard.razor.cs`, `src\BlazorWebFormsComponents\WizardStep.razor.cs`

≡ Team update (2026-05-21T12:26): Wizard unsupported behaviors remain explicit QA gaps — keep skipped tests for parent-driven `ActiveStepIndex` changes, single-step navigation suppression, and dynamic step add/remove. Tests serve as regression markers while gaps document product deferred behaviors for future implementation — decided by Rogue (per Jeffrey T. Fritz request)
Loading
Loading