Skip to main content
Audience: QA, developers, and operators validating the multi-tenant identity system. Use this checklist before deploying to staging or production. Staging behavior may differ (e.g. different domains, CORS, SAML config).

Overview

This document provides an exhaustive list of scenarios and edge cases to test for the multi-tenant setup. It complements the Multi-Tenant Identity & SSO architecture guide.

1. Domain Selection & lastTenant Persistence

#ScenarioStepsExpected
1.1First-time domain selectionVisit www → click “Go to Meridian” → select RPIRedirect to rpi.meridian.study/events-dashboard; lastTenant = rpi
1.2Auto-redirect with lastTenantVisit www with lastTenant = rpi in localStorageImmediate redirect to rpi.meridian.study (same path)
1.3lastTenant with path preservationVisit www/events-dashboard with lastTenant = rpiRedirect to rpi.meridian.study/events-dashboard
1.4lastTenant with query stringVisit www/login?invite=xyz with lastTenant = tvcogRedirect to tvcog.meridian.study/login?invite=xyz
1.5Invalid/stale lastTenantSet lastTenant = “invalid” or removed tenantNo auto-redirect; show select-school or landing
1.6Switch tenant, then return to wwwRPI → visit www → select TVCOG → later visit wwwAuto-redirect to tvcog (lastTenant updated)

2. Login & Registration

#ScenarioStepsExpected
2.1Register on tenant AVisit rpi → register with emailAccount in RPI DB; can log in on RPI
2.2Login on tenant AVisit rpi → login with credentialsAccess RPI app
2.3Same email, different tenant (new tenant)Logged in on RPI → log out → visit tvcog → login with same emailCreate new tenant user on TVCOG or join-tenant flow
2.4Same email, different tenant (SSO)Logged in on RPI (SAML/OAuth) → visit tvcog → login with same IdPSSO; same global user, new tenant membership
2.5Login via www flowVisit www → “Sign in” → select-school → pick RPI → loginLand on rpi/login and complete login
2.6Register via www flowVisit www → “Create account” → select-school → pick RPI → registerLand on rpi/register and complete registration

3. Logout & Cross-Tenant Auth

#ScenarioStepsExpected
3.1Logout on tenant A, login on tenant B (same credentials)RPI logged in → logout → tvcog → login same emailLogin succeeds; TVCOG session independent
3.2Logout on tenant A, login on tenant B (same OAuth)RPI logged in via Google → logout → tvcog → login with GoogleOAuth; may auto-join TVCOG if global user exists
3.3Logout on tenant A, return to wwwRPI logged in → logout → visit wwwSee landing or select-school; no tenant session
3.4Logout, switch domain, login (same account)RPI logged in → logout → select-school → pick TVCOG → login same emailTVCOG login works; no RPI session

4. Session & Token Behavior

#ScenarioStepsExpected
4.1Token on wrong tenantCopy rpi session cookie → use on tvcogRejected or treated as unauthenticated
4.2Expired token on tenantRPI session expires → navigateRefresh or redirect to login
4.3Global user, no tenant membershipGlobal user exists, visit tenant where they have no membershipJoin-tenant or “no access” flow
4.4Multiple sessions across tenantsRPI logged in → open tvcog in new tab → loginBoth sessions valid; global user, two tenant memberships

5. www vs Tenant Subdomain

#ScenarioStepsExpected
5.1Root on tenant subdomainVisit rpi.meridian.study/Redirect to rpi.meridian.study/events-dashboard
5.2Root on wwwVisit www.meridian.study/Landing (or auto-redirect if lastTenant set)
5.3Tenant path on wwwVisit www.meridian.study/events-dashboard (no lastTenant)Redirect to select-school?next=/events-dashboard
5.4Tenant path on www (with lastTenant)Visit www.meridian.study/events-dashboard with lastTenantAuto-redirect to tenant/events-dashboard
5.5Landing on tenantVisit rpi.meridian.study/landingLanding page (if route exists) or 404

6. Landing & Public Pages

#ScenarioStepsExpected
6.1Landing analytics on wwwVisit www → use landingAnalytics to platform DB (not tenant)
6.2Android tester signup on wwwVisit www/mobile → join Android betaSignup stored in platform DB
6.3Log-visit on wwwFirst visit to wwwVisit logged in platform DB
6.4”Get started” from landingwww → “Get started”select-school or tenant redirect

7. Tenant Selector (Login/Register)

#ScenarioStepsExpected
7.1Change tenant from loginOn rpi/login → “Change”Go to select-school?next=/login; after pick, back to login
7.2Change tenant from registerOn tvcog/register → “Change”Go to select-school?next=/register; after pick, back to register
7.3Tenant banner visibilityOn rpi/loginBanner shows institution name and “Change”
7.4Tenant banner on wwwOn www (if login/register reachable)Banner hidden (no tenant)

8. Staging-Specific

#ScenarioStepsExpected
8.1Staging domain vs productionUse staging host (e.g. staging.meridian.study or different subdomains)Tenant resolution works for staging hosts
8.2localhost + devTenantOverrideSet devTenantOverride = rpi → visit localhostBehaves like rpi; X-Tenant sent
8.3localhost without overrideVisit localhost (no devTenantOverride)Treated as www; select-school or landing
8.4localhost lastTenant auto-redirectlocalhost + lastTenant = rpiRedirect; devTenantOverride set; reload with tenant context
8.5Cookie domain on stagingLogin on staging tenant subdomainCookies scoped so auth works on staging
8.6CORS on stagingAPI calls from staging frontendCORS allows staging origin
8.7SAML on stagingSSO on staging tenantIdP configured for staging callback URL

9. Edge Cases & Errors

#ScenarioStepsExpected
9.1Direct tenant URL, no sessionVisit rpi.meridian.study/events-dashboard (logged out)Login or public view, no crash
9.2Select-school with ?next=Visit select-school?next=/event/123After pick, redirect to tenant/event/123
9.3Removed tenant in lastTenantlastTenant = “oldtenant” (no longer valid)No redirect; fall back to select-school or landing
9.4localStorage disabledDisable localStorageGraceful fallback; no lastTenant; select-school when needed
9.5AuthContext redirect loopLogged in on www, path not allowedRedirect to tenant or select-school, no infinite loop
9.6Platform admin cross-tenantPlatform admin on tenant ACan access tenant A; verify no cross-tenant data leak

10. SAML / SSO (if applicable)

#ScenarioStepsExpected
10.1SAML login on tenantrpi → “Sign in with SSO”SAML flow; callback to rpi; tenant user created/linked
10.2SAML same user, new tenantRPI via SAML → tvcog → SAML same IdPGlobal user; new tenant membership
10.3SAML wrong tenant in assertionMisconfigured SAML (wrong tenant in response)Rejected or corrected by provider config

Quick Reference: Staging Checklist

Use this as a quick pass/fail checklist before deployment:
□ 1.1–1.6  Domain selection & lastTenant
□ 2.1–2.6  Login & registration
□ 3.1–3.4  Logout & cross-tenant
□ 4.1–4.4  Session & token
□ 5.1–5.5  www vs tenant
□ 6.1–6.4  Landing & public
□ 7.1–7.4  Tenant selector
□ 8.1–8.7  Staging-specific
□ 9.1–9.6  Edge cases
□ 10.1–10.3 SAML (if applicable)

Multi-tenant identity & SSO

Architecture this checklist validates: global users, memberships, cookies.

Authentication overview

Login methods and token behavior referenced in login and session scenarios.

Session management

Refresh, revocation, and multi-device rules to exercise while testing.

SAML

IdP configuration and SAML-specific expectations for section 10.

Testing

Automated route tests and CI commands that complement manual staging passes.

Deployment

Staging vs production domains, TLS, and cookie behavior called out in section 8.