|
| 1 | +# WingtipToys Migration Benchmark — Run 44 |
| 2 | + |
| 3 | +**Date:** 2026-05-08 |
| 4 | +**Branch:** `feature/wingtip-next-features-review` (PR #545) |
| 5 | +**Operator:** Copilot CLI + Jeffrey T. Fritz |
| 6 | + |
| 7 | +## Summary |
| 8 | + |
| 9 | +| Metric | Value | |
| 10 | +|--------|-------| |
| 11 | +| **Acceptance Tests** | **23/25 (92%)** | |
| 12 | +| **Build Errors (post-repair)** | 0 | |
| 13 | +| **Build Warnings** | 246 | |
| 14 | +| **Migration Files** | 32 → 188 | |
| 15 | +| **Migration Time** | ~24s | |
| 16 | + |
| 17 | +## Key Fixes in This Run |
| 18 | + |
| 19 | +### FormView `DataItem` Parameter (Critical Fix) |
| 20 | +FormView inherited from `DataBoundComponent<T>` which only provided `Items` (collection). Migrated pages used `<FormView DataItem="product" ...>` but `DataItem` was NOT a parameter — Blazor silently ignored it, leaving Items=null and rendering nothing. |
| 21 | + |
| 22 | +**Fix:** Added `DataItem` as a `[Parameter]` on FormView that wraps a single item into the `Items` collection. This fixed ProductDetails and all single-record FormView pages. |
| 23 | + |
| 24 | +### Content Component SSR Inline Fallback |
| 25 | +When `<Content>` is used outside a MasterPage/ContentPlaceHolder context (SSR mode), it now renders `@ChildContent` directly instead of waiting for a MasterPage that doesn't exist. |
| 26 | + |
| 27 | +### G6 — Dual `@page` Routes |
| 28 | +Pages that had route-mapped URLs (e.g., `ProductDetails/{id}`) now emit two `@page` directives: one for the original path and one preserving the Web Forms URL structure. |
| 29 | + |
| 30 | +### G7 — Redirect-Page Quarantine Bypass |
| 31 | +Pages that are pure redirect stubs are now quarantined instead of generating compile errors. |
| 32 | + |
| 33 | +## Test Results |
| 34 | + |
| 35 | +### Passing (23/25) |
| 36 | +All core shopping flows work: homepage, product listing, category filtering, product details, add to cart, remove from cart, about/contact pages. |
| 37 | + |
| 38 | +### Failing (2/25) |
| 39 | +1. **`UpdateCartQuantity_ChangesItemCount`** — ShoppingCart uses `BoundField` for Quantity (read-only text). Test expects editable `<input>`. Would need `TemplateField` with `TextBox`. |
| 40 | +2. **`RegisterAndLogin_EndToEnd`** — Auth flow timeout. Separate from BWFC library. |
| 41 | + |
| 42 | +## Unit Test Regression Check |
| 43 | + |
| 44 | +All **2904** BWFC unit tests pass across net8.0, net9.0, net10.0. No regressions from FormView DataItem or Content changes. |
| 45 | + |
| 46 | +## Screenshots |
| 47 | + |
| 48 | +### Homepage |
| 49 | + |
| 50 | + |
| 51 | +### Product List |
| 52 | + |
| 53 | + |
| 54 | +### Product Details (FormView DataItem fix) |
| 55 | + |
| 56 | + |
| 57 | +### Shopping Cart |
| 58 | + |
| 59 | + |
| 60 | +## Changes Made to BWFC Library |
| 61 | + |
| 62 | +| File | Change | |
| 63 | +|------|--------| |
| 64 | +| `src/BlazorWebFormsComponents/FormView.razor.cs` | Added `DataItem` parameter wrapping single item into `Items` | |
| 65 | +| `src/BlazorWebFormsComponents/Content.razor` | Added inline fallback rendering when no MasterPage context | |
| 66 | +| `src/BlazorWebFormsComponents/Content.razor.cs` | Added `ShouldRenderInline` property | |
| 67 | + |
| 68 | +## Progress Across Runs |
| 69 | + |
| 70 | +| Run | Tests | Score | Key Achievement | |
| 71 | +|-----|-------|-------|-----------------| |
| 72 | +| 37 | 25/25 | 100% | Baseline with manual repair | |
| 73 | +| 40 | 16/25 | 64% | Template emission fix | |
| 74 | +| 41 | 17/25 | 68% | Quarantine + stub improvements | |
| 75 | +| 42 | 17/25 | 68% | Instructions overhaul | |
| 76 | +| 43 | 17/25 | 68% | G6/G7 CLI transforms | |
| 77 | +| **44** | **23/25** | **92%** | **FormView DataItem + Content SSR** | |
0 commit comments