Skip to content

feat: Wizard component — templates, 117 tests, Playwright coverage#554

Merged
csharpfritz merged 14 commits into
FritzAndFriends:devfrom
csharpfritz:feature/wizard-component
May 21, 2026
Merged

feat: Wizard component — templates, 117 tests, Playwright coverage#554
csharpfritz merged 14 commits into
FritzAndFriends:devfrom
csharpfritz:feature/wizard-component

Conversation

@csharpfritz
Copy link
Copy Markdown
Collaborator

Summary

Implements the Wizard component with full feature coverage for the v0.20 release.

What's included

Component features:

  • Multi-step navigation with automatic button state (Start/Step/Finish/Complete)
  • Sidebar navigation with AllowReturn enforcement
  • All navigation events: OnNextButtonClick, OnPreviousButtonClick, OnFinishButtonClick, OnCancelButtonClick, OnSideBarButtonClick, OnActiveStepChanged
  • Custom navigation templates: StartNavigationTemplate, StepNavigationTemplate, FinishNavigationTemplate
  • SideBarTemplate for custom sidebar rendering
  • HeaderTemplate for custom header content
  • FinishCompleteButtonText with FinishButtonText fallback
  • Full styling support via TableItemStyle properties

Testing:

  • 117 bUnit tests (Callbacks, StepTypes, EdgeCases, Navigation) across net8/9/10
  • 9 Playwright acceptance tests (smoke + 4 interactive + 5 template)
  • 6 intentionally skipped tests documenting unimplemented behaviors

Samples:

  • 11 sample demos covering every feature on /ControlSamples/Wizard

Documentation:

  • Complete Wizard.md with property tables, events, step types, and usage examples

Infrastructure:

  • .github/workflows/nuget-preview.yml for auto-publishing previews on merge to dev
  • version.json bumped to 0.20.0

csharpfritz and others added 13 commits May 20, 2026 18:36
- Fix Wizard HTML output to match Web Forms: border='0', height:100%,
  nested navigation table with cellspacing/cellpadding
- Change navigation buttons to type='submit' (matching Web Forms)
- Add static SSR form-based navigation: hidden __wizard_step field
  persists state across postbacks, __wizard_action field carries button
  clicks via named submit buttons
- ProcessPendingNavigation defers until enough steps register

ZavaLoanPortal Build 2026 demo:
- Add /dev/login endpoint for acceptance test authentication
- Use native <form> with @formname for proper SSR form handling
- Set AutoGenerateColumns='false' on GridView (no DB available)
- Add try-catch around DB calls for resilience without SQL Server
- 11 Playwright acceptance tests (navigation, auth, wizard steps)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Bump version.json to 0.20.0 for Wizard release
- Add nuget-preview.yml workflow for auto-publish on merge to dev
- Switch ZavaLoanPortal to NuGet package reference (0.20.0-preview.*)
- Add EmptyDataText to ZavaLoanPortal GridView

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ld entries

Session: 2026-05-21T01-19Z-wizard-validation
Requested by: Copilot CLI (Scribe)

Changes:
- Archived 4 decisions older than 7 days to decisions-archive.md
- Merged 22 inbox decisions into decisions.md (22 files deleted)
- Deduplication applied (exact duplicates removed)
- decisions.md reduced from 64,797 → 46,159 bytes
- Orchestration log and session log written
- Beast and Bishop history files summarized and archived
…ation tests

- Wire StartNavigationTemplate, StepNavigationTemplate, FinishNavigationTemplate, SideBarTemplate
- Honor FinishCompleteButtonText with FinishButtonText fallback
- Add Callbacks.razor, StepTypes.razor, EdgeCases.razor test files
- Add Wizard smoke test and 4 interactive Playwright tests
- Update Wizard documentation

117 passing tests (6 skipped for unimplemented behaviors)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Session: 2026-05-21T12-26-wizard-samples-tests
Spawned agents: Cyclops (samples), Colossus (tests)
Merged by: Scribe

Changes:
- Merged 3 inbox decisions into decisions.md (wizard finish button precedence, playwright locator scoping, unsupported behaviors QA)
- Updated Cyclops history.md with team update on finish button label precedence
- Updated Colossus history.md with team update on playwright locator scoping decision
- Updated Rogue history.md with team update on QA gap documentation approach
- No decisions archived (all entries post 2026-04-21 cutoff)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add 5 sample demos: FinishCompleteButtonText, SideBarTemplate,
  StartNavigationTemplate, StepNavigationTemplate, FinishNavigationTemplate
- Add 5 Playwright acceptance tests for template features
- All demos use data-audit-control Wizard-7 through Wizard-11

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Wizard_FinishCompleteButtonText: was clicking forward twice (past Finish
  to Complete step where nav is hidden). Now clicks once to reach Finish.
- Wizard_FinishNavigationTemplate: same issue — stop at Finish step (idx 1)
  instead of advancing to Complete (idx 2).
- Wizard_StepNavigationTemplate: add explicit wait for hidden input value
  change to handle Blazor Server render latency on CI.

All three tests now use WaitForAsync on the step hidden input to ensure
the component has re-rendered before asserting.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…, single-step nav hiding

- Sidebar now renders table/tr/td structure matching Web Forms DataList output
- Added ARIA attributes: role='navigation' on sidebar, role='tabpanel' on step content
- Single-step wizard hides navigation buttons (HasNavigationTarget check)
- Added MoveTo(int) API for programmatic step navigation
- Added GetHistory() API exposing navigation history
- WizardStep implements IDisposable for dynamic removal
- Programmatic ActiveStepIndex changes fire OnActiveStepChanged
- 49 passing tests, 0 skipped

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The td[align='right'].Last selector was ambiguous after the sidebar
table structure change — nested button tds also match. Use the
td[role='navigation'][aria-label='Wizard navigation'] selector instead
which precisely targets the navigation container.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…aries

- Wizard sample page was missing @rendermode InteractiveServer, causing
  @OnClick handlers to be inert under static SSR (root cause of 3 CI
  Playwright timeouts)
- Add EnricoMi/publish-unit-test-result-action to both build.yml and
  integration-tests.yml so test results are posted as PR comments

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Wrap Wizard in <form method='post' @formname @onsubmit> for static SSR
- Navigation buttons submit the form; HandleFormSubmit reads the action
  from form data and dispatches to the appropriate handler
- Hidden field __wizard_step carries current step index across POSTs
- Sidebar links changed from <a @OnClick> to <button type='submit'>
  with named values (__sidebar_N) for SSR form submission
- Keep @OnClick handlers on buttons for interactive/bUnit compatibility
- Revert @rendermode InteractiveServer from sample page (SSR is the target)
- Update Playwright helper to use WaitForLoadStateAsync(NetworkIdle)
- Update bUnit selectors from 'a' to 'button[type=submit]' for sidebar
- Add PR test summary comments via EnricoMi/publish-unit-test-result-action
- 49 bUnit tests passing

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Change comment_mode from 'update' to 'always' (valid value for EnricoMi action)
- Add [Collection] to ConfigurationManagerTests to prevent parallel static state race
- Use ShouldNotBeNull() instead of null-forgiving operator for better diagnostics

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- WaitForAsync on input[type='hidden'] needs State=Attached (not Visible)
- Reset sample wizard step initial values to 0 for correct test flow

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@csharpfritz csharpfritz force-pushed the feature/wizard-component branch from 092d0da to f841d77 Compare May 21, 2026 17:50
Prevents flaky failures on slow CI runners where async data loading
may not complete within 2 seconds.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@csharpfritz csharpfritz force-pushed the feature/wizard-component branch from 7765397 to 480a72a Compare May 21, 2026 18:33
@csharpfritz csharpfritz merged commit 2398866 into FritzAndFriends:dev May 21, 2026
2 checks passed
@csharpfritz csharpfritz deleted the feature/wizard-component branch May 21, 2026 18:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant