11. Testing and Live Verification
11.1 Automated tests — 42 new tests, all passing
Location: Shumoul.Framework.MultiTenancy.Test/Packages/ and .../FeatureReportActions/. Every new
seeder exposes a pure static ComputeSeedPlan method (matching the existing
SubscriptionFeatureSettingsGroupSeeder convention) — tested with plain in-memory collections, no
database or embedded JSON required for the decision-logic tests, plus separate tests asserting the
actual embedded JSON content.
| Test class | Covers |
|---|---|
ShumoulSubscriptionPackageSeederShould | insert/skip logic, exact-FName matching (never confuses "Shumoul Starter" with "Shumoul Finance Starter"), embedded JSON has exactly the 4 packages, never duplicates the 3 pre-existing packages |
ShumoulPlanPackageSeederShould | Monthly/Annually pricing computation, insert-missing-only |
ShumoulPackageFeatureSeederShould | insert/skip/missing-package/missing-feature logic; embedded JSON only references known tenant-operational features; exact feature count/set per package |
ShumoulPackageFeatureRuleSeederShould | insert/skip/missing-package-feature-link logic; embedded JSON has exactly the 5 Starter limits with correct RowCounter/ApplyPeriod per entity; every rule's feature is one Starter actually includes |
ShumoulFeatureReportActionSeederShould | insert/skip/missing-feature/missing-report-action logic; embedded JSON never references the Administrative Reports system; only references the 6 known tenant report systems; confirms the ProjectManagement/AccountManagement report differentiation |
ShumoulPackageSettingsGroupEntitlementShould | composes the package-feature and feature-settings-group seed data (the same join the runtime entitlement service performs) to verify the exact resolved settings-group set per package, including the Finance Starter ⊆ Finance Advanced superset relationship |
Suite result: Shumoul.Framework.MultiTenancy.Test — 1119 total (was 1077), 1113 passed, 6 failed — the
same 6 pre-existing, unrelated failures confirmed present before this task's changes too (in
TenantResolverShould, MultiTenantMiddlewareShould, EntityTypeBuilderExtensionsShould,
RouteStrategyShould — none touch Subscription/Feature/Package/Report entities). All 42 new tests
pass.
Shumoul.Application.Tests (BackEnd) — 775 total, 740 passed, 35 failed — unchanged from the
pre-task baseline (no BackEnd source changes in this task besides the PackageReference bump).
11.2 Live dev verification (dev DB only, no production writes)
For each of the four packages: fetched GET api/Subscription/Packages/pricing, resolved the correct
PlanPackageId, registered a test tenant, activated via the dev-safe token read directly from the
database, logged in (retried through the expected 423 tenant_provisioning_in_progress window),
fetched onboarding status/survey, submitted answers, generated a recommendation, and ran a root-admin
Starter Kit Preview (never Apply).
| Package | Tenant | Dev email |
|---|---|---|
| Shumoul Starter | 956470 | mohamed.alqlisi+starter-package-test@gmail.com |
| Shumoul POS | 282121 | mohamed.alqlisi+pos-package-test@gmail.com |
| Shumoul Finance Starter | 869810 | mohamed.alqlisi+finance-starter-test@gmail.com |
| Shumoul Finance Advanced | 113018 | mohamed.alqlisi+finance-advanced-test@gmail.com |
Every step succeeded for every package with the exact expected result — see Chapter 9 and Chapter 10 for the detailed outcomes. No production tenant, credential, or connection string was read, printed, or written at any point.
