A comprehensive checklist for manually testing the Fair Housing Data Mapping Tool. Each test scenario includes steps to perform, expected results, and a pass/fail checkbox.
- R environment with all dependencies installed (
devtools::load_all()succeeds) - Modern browser (Chrome, Firefox, or Safari)
- Internet connection (required for basemap tiles and address search)
- App running locally via
shiny::runApp()
- Launch the app:
devtools::load_all(); shiny::runApp() - Work through each section in order — later sections build on earlier ones
- Mark each test as Pass or Fail
- Note any unexpected behavior in the comments column
- Steps:
- Run
shiny::runApp()in the R console - Wait for the browser to open
- Run
- Expected: App loads to the Data Dashboard page. Sidebar shows "Build Your Map" with a Geography dropdown. The main area shows an empty map with a step progress indicator. No errors in the R console.
- Pass/Fail: [ ]
- Steps:
- Click the "User Guide" link in the top navigation bar
- Scroll through the content
- Verify all sections are present: Overview, Building Your Map (Steps 1-4 with tables), Reading the Map, Value Boxes, Step Progress Indicator, Tabs, R/ECAP Areas, Downloading Your Data, Sources and Notes, Tips
- Verify the two data tables (geography levels, category availability) render with purple headers and alternating row colors
- Click "Data Dashboard" to return
- Expected: User Guide page displays a centered, scrollable guide with branded headings (Oswald font, purple). Tables render correctly. Footer stays at the bottom of the viewport (not mid-page). Returning to Data Dashboard restores the previous state (map, selections, click state all preserved).
- Pass/Fail: [ ]
- Steps:
- Open the User Guide page
- Use browser DevTools responsive mode to test at: Desktop (1200px), Tablet (768px), Phone (375px)
- Expected: At desktop, content is centered with ~800px max-width. At tablet, content fills width and tables remain readable. At phone, no horizontal scroll, tables use compact padding, text is legible.
- Pass/Fail: [ ]
- Steps:
- Select Geography: State
- Select Category: Race/Ethnicity
- Select Variable: White (%)
- Expected: All U.S. states render as a choropleth in purple shades. Legend appears in the bottom-right corner. Step progress shows all steps completed (purple dots). A loading overlay briefly appears during render.
- Pass/Fail: [ ]
- Steps:
- With the State choropleth from 2.1 visible, click on California
- Expected: California gets an orange border. The left value box updates to show California's White (%) value. The right value box shows the national average. The Charts tab and Table tab are now populated.
- Pass/Fail: [ ]
- Steps:
- With California selected from 2.2, change the variable to Black (%)
- Expected: Choropleth updates with new colors. Legend updates. Value boxes update to show Black (%) values. The map does NOT re-zoom — it stays at the same extent. No full page reload. Loading overlay appears briefly.
- Pass/Fail: [ ]
- Steps:
- Change Category to Housing Problems
- Select a variable (e.g., Housing Problems - White)
- Expected: Variable dropdown resets and populates with Housing Problems variables. After selecting a variable, choropleth updates. Previous click selection (California) persists — the orange highlight remains. Value boxes temporarily show stale data until a new variable is selected, then update with the new variable's values for California. This avoids requiring a re-click after category change.
- Pass/Fail: [ ]
- Steps:
- Select Category: Race/Ethnicity, Variable: White (%)
- Click on Alabama
- Switch to the Charts tab
- Expected: Two charts appear. Top: "White (%) Trends" time-series bar chart with purple bars (Alabama) and gray bars (national average). Bottom: horizontal bar chart titled "Race/Ethnicity in Alabama - For various groups" showing bars for White, Black, Hispanic, Asian, etc. The White bar is highlighted in darker purple.
- Pass/Fail: [ ]
- Steps:
- Select Category: Disability, Variable: any available variable
- Click on any state
- Switch to the Charts tab
- Expected: Only the time-series chart appears. No category comparison chart below it (Disability does not have race/ethnicity breakdowns with multiple sibling variables).
- Pass/Fail: [ ]
- Steps:
- Start with a State-level choropleth displayed (from Section 2)
- Change Geography to County
- Expected: Previous state choropleth dims to ~30% opacity (ghosted). A selection overlay appears with text: "Select a state to view its counties". The category and variable dropdowns reset. You can still pan/zoom the ghosted map.
- Pass/Fail: [ ]
- Steps:
- From 3.1, select Focus Area: Alabama
- Overlay message updates
- Select Category: Race/Ethnicity
- Select Variable: White (%)
- Expected: After selecting Alabama, overlay updates to prompt for category. After selecting variable, overlay fades, ghosted map is replaced with Alabama county choropleth. Map zooms to Alabama extent. All counties are colored by White (%).
- Pass/Fail: [ ]
- Steps:
- With Alabama counties displayed (from 3.2), click on Jefferson County
- Expected: Jefferson County gets an orange border. Left value box shows Jefferson County's White (%) value. Right value box shows Alabama statewide average. Charts tab shows time-series with gray bars for state comparison.
- Pass/Fail: [ ]
- Steps:
- Zoom in on the Alabama county map
- Expected: City names and road labels appear on top of the choropleth polygons, helping with geographic orientation.
- Pass/Fail: [ ]
- Steps:
- Change Category to Mortgage Application and Denial
- Select a variable (e.g., Mortgage Denial Rate - Black)
- Click on a county
- Switch to Charts tab
- Expected: Choropleth updates. Category comparison chart (if shown) groups only Mortgage Denial Rate variables together — not mixed with Mortgage Application Rate variables.
- Pass/Fail: [ ]
- Steps:
- With Alabama counties displayed, change Focus Area to Illinois
- Expected: Map transitions to show Illinois counties. Previous Alabama choropleth ghosting effect may briefly appear. Category and variable selections may reset depending on availability.
- Pass/Fail: [ ]
- Steps:
- Change Geography to Tract
- Expected: Previous choropleth ghosts. Overlay prompts to select a county. Step progress shows 4 steps (Geography, Focus Area, Category, Variable).
- Pass/Fail: [ ]
- Steps:
- Select Focus Area: type "Cook" and select Cook County, IL
- Select Category: Race/Ethnicity
- Select Variable: Hispanic (%)
- Expected: ~1,300 tracts render for Cook County. Map zooms to Cook County extent. Choropleth shows Hispanic (%) distribution. Loading overlay appears during render (may take a few seconds for this many tracts).
- Pass/Fail: [ ]
- Steps:
- With Cook County tracts from 4.2, click on any tract
- Switch to Charts tab
- Expected: Time-series chart shows three bar groups per year: purple (selected tract), gray (Cook County average), light purple (Illinois statewide average). Legend distinguishes all three levels.
- Pass/Fail: [ ]
- Steps:
- Remain on the Charts tab from 4.3
- Expected: Below the time-series chart, a category comparison chart shows all Race/Ethnicity variables (White, Black, Hispanic, Asian, etc.) as horizontal bars for the selected tract. The Hispanic bar is highlighted darker.
- Pass/Fail: [ ]
- Steps:
- Change Category to Transportation
- Select any available variable
- Click on a tract
- Expected: Choropleth updates. Transportation is only available at the Tract level — switching to County or State geography should not show this category.
- Pass/Fail: [ ]
- Steps:
- Change Category to Housing Tenure
- Select any available variable
- Expected: Choropleth updates. Category comparison chart appears (if the variable has race/ethnicity breakdowns).
- Pass/Fail: [ ]
- Steps:
- Change Category to Subsidized Housing
- Select any available variable
- Click on a tract, switch to Charts tab
- Expected: Choropleth updates. Only time-series chart shows (no category comparison chart for Subsidized Housing).
- Pass/Fail: [ ]
- Steps:
- Navigate to Tract geography with a choropleth displayed (e.g., Cook County, Race/Ethnicity)
- Check the "Show R/ECAP Areas" checkbox in the sidebar
- Expected: Red dashed borders appear on qualifying R/ECAP tracts overlaid on the choropleth. The choropleth colors remain visible beneath.
- Pass/Fail: [ ]
- Steps:
- With R/ECAP overlay active from 5.1, change the variable (e.g., White (%) to Black (%))
- Expected: Choropleth updates to new variable. R/ECAP red borders remain visible on the same tracts. The overlay is re-applied after the choropleth update.
- Pass/Fail: [ ]
5.3 R/ECAP Hidden at Other Geography Levels
- Steps:
- Switch Geography to County or State
- Expected: The "Show R/ECAP Areas" checkbox is not visible in the sidebar. No red dashed borders appear on the map.
- Pass/Fail: [ ]
- Steps:
- Select State geography, Race/Ethnicity, White (%)
- Click on any state
- Switch to Table tab
- Expected: Multiple accordion panels appear, one per category (Race/Ethnicity, Housing Problems, Education, Jobs and Labor Market, Low Poverty, Environmental Health, Disability, Mortgage Application and Denial, Housing Tenure — 9 total for State). Each panel expands to show a table with metric names and year columns.
- Pass/Fail: [ ]
- Steps:
- With the Table tab open from 6.1, expand the Race/Ethnicity accordion panel
- Expected: The row for "White (%)" (the currently selected variable) is highlighted with a gold accent to distinguish it from other rows.
- Pass/Fail: [ ]
- Steps:
- With the Table tab showing all categories, turn on the "Filter to selected variable" toggle switch
- Expected: Accordion collapses to show only the Race/Ethnicity category (matching the selected variable). Within that table, only the White (%) row is displayed.
- Pass/Fail: [ ]
- Steps:
- Turn the filter toggle off
- Expected: All category accordion panels return. All rows within each table are visible again.
- Pass/Fail: [ ]
- Steps:
- Navigate to a state where no variable is selected yet (change geography, don't complete selections)
- Switch to Table tab
- Toggle the filter switch on
- Expected: The toggle has no filtering effect when no variable is selected. Tables display normally (or a prompt to click an area appears if no area has been clicked).
- Pass/Fail: [ ]
- Steps:
- Select County geography (Alabama), any category/variable, click a county, switch to Table tab
- Count the number of accordion panels
- Repeat for Tract geography
- Expected: County shows 9 categories (same as State). Tract shows 10 categories (adds Transportation, Subsidized Housing; removes Low Poverty vs State/County).
- Pass/Fail: [ ]
- Steps:
- Select State geography, Category: Housing Problems, Variable: Housing Problems - White
- Click on any state
- Switch to Table tab, expand the Housing Problems accordion
- Expected: Column headers show year-range labels (e.g., "2009-2012", "2012-2016", "2016-2020") instead of raw single years. These labels come from
data_years_lookup.csvand reflect the ACS survey period for each data point. - Pass/Fail: [ ]
- Steps:
- Select State geography, Category: Race/Ethnicity, Variable: White (%)
- Click on any state
- Switch to Table tab
- Expand the Housing Problems accordion
- Expand the Education accordion
- Expected: Housing Problems headers show year-range labels appropriate for housing variables (e.g., "2009-2012", "2012-2016", "2016-2020") — NOT the Race/Ethnicity year labels. Education headers show labels appropriate for education variables. Each category resolves year labels using a representative variable from its own category, regardless of which variable is selected on the map.
- Pass/Fail: [ ]
- Steps:
- Select State geography, Category: Race/Ethnicity, Variable: White (%)
- Click on any state
- Switch to Table tab, expand the Race/Ethnicity accordion
- Expected: Column headers show "2000", "2010", "2020" — these are 1:1 mappings (decennial census years), not year ranges. No extra blank columns appear.
- Pass/Fail: [ ]
- Steps:
- Select State geography, Category: Housing Problems, Variable: any
- Click on any state
- Switch to Table tab, expand Housing Problems
- Count the year columns
- Expected: Only columns that contain at least one non-NA value appear. There are no entirely blank year columns. For example, if Housing Problems data is only available for 3 survey periods, exactly 3 year columns appear — no empty "2010" column sitting next to populated "2009-2012" columns.
- Pass/Fail: [ ]
- Steps:
- Select State geography, Category: Jobs and Labor Market, Variable: any Job Proximity variable
- Click on any state
- Switch to Table tab, expand Jobs and Labor Market
- Expected: The table shows only year columns that have at least one value across all rows (Job Proximity and Labor Market rows combined). If a year column is populated for Labor Market rows but NA for all Job Proximity rows, the column still appears (because it has data for at least one row). Only columns that are entirely NA for every row in the table are dropped.
- Pass/Fail: [ ]
- Steps:
- Select State geography, Category: Jobs and Labor Market, Variable: a Labor Market variable (e.g., Labor Market - Black)
- Click on any state, switch to Table tab, expand Jobs and Labor Market
- Note the year column headers
- Now switch Variable to a Job Proximity variable (e.g., Job Proximity - Black)
- Return to the Table tab and check the headers again
- Expected: When a Labor Market variable is selected, the Jobs table headers reflect the Labor Market year mapping (e.g., "2009-2013", "2011-2015", "2016-2020"). When a Job Proximity variable is selected, headers switch to the Job Proximity mapping (e.g., "2013", "2017", "2023"). The within-category variable determines which year label mapping is used.
- Pass/Fail: [ ]
- Steps:
- Select any geography, category, variable
- Click on an area to populate tables
- Click the Download CSV button in the sidebar
- Expected: A CSV file downloads containing all category tables combined. Columns include Category, Metric, and one column per data year. The file opens correctly in a spreadsheet application.
- Pass/Fail: [ ]
- Steps:
- With a choropleth map displayed, click the Download PNG button
- Expected: A PNG image downloads showing the current map view with the variable title and focused geography printed above it. The image is legible and includes the legend.
- Pass/Fail: [ ]
- Steps:
- Launch the app fresh (no selections made)
- Check the download buttons in the sidebar
- Expected: Both download buttons are disabled/grayed out. CSV becomes enabled after clicking an area. PNG becomes enabled after selecting a variable and rendering a choropleth.
- Pass/Fail: [ ]
- Steps:
- Select State, Race/Ethnicity, White (%) — do not click the map
- Expected: The left (purple) value box displays: "Click on a specific state". The right (gray) comparison box shows placeholder or is empty.
- Pass/Fail: [ ]
- Steps:
- Find a geography with missing data for the selected variable (gray areas on the map)
- Click on that area
- Expected: Value box displays an appropriate message (e.g., "Not reported" or "NA") rather than crashing or showing a raw NA value.
- Pass/Fail: [ ]
- Steps:
- Select a variable that is only available at certain geography levels
- Check the comparison value box
- Expected: If the parent geography does not have data for that variable, the comparison box shows an appropriate "not available" message rather than an error.
- Pass/Fail: [ ]
- Steps:
- Select Tract geography, Cook County IL, any category/variable
- Click the search icon on the map
- Type "233 S Wacker Dr, Chicago, IL" (Willis Tower)
- Select the result
- Expected: Map zooms to the address location at zoom level 14. A red circle marker appears at the result location and persists on the map after the search bar auto-collapses. The surrounding tracts are visible with choropleth colors. You can click the tract containing the address to see its data.
- Pass/Fail: [ ]
- Steps:
- Select County geography, any state, category, variable
- Search for an address within that state
- Expected: Map zooms to the address. Red circle marker appears and persists. County boundaries remain visible. Search works at all geography levels.
- Pass/Fail: [ ]
- Steps:
- With a search marker visible on the map (from 9.1 or 9.2), change the Geography dropdown (e.g., Tract → County)
- Expected: The red circle marker disappears when geography changes. The
clearSearchMarkerJS handler removes it automatically. - Pass/Fail: [ ]
- Steps:
- Select Geography: State
- Observe the step indicator after each selection (State → Category → Variable)
- Expected: 3 dots appear. After selecting State: dot 1 is purple (completed), dot 2 is orange (current). After selecting Category: dots 1-2 purple, dot 3 orange. After selecting Variable: all 3 purple.
- Pass/Fail: [ ]
- Steps:
- Select Geography: County
- Step through: Focus Area → Category → Variable
- Expected: 4 dots appear. Each step transitions correctly: completed (purple), current (orange glow), pending (empty outline).
- Pass/Fail: [ ]
- Steps:
- Select any geography, category, variable
- Observe the "Source(s) and notes:" section below the main tabs
- Change the variable to a different one
- Expected: The sources/notes content updates to reflect the new variable's data source and methodology. A brief pulse animation signals that the content has changed.
- Pass/Fail: [ ]
- Steps:
- Render a choropleth on the Map tab
- Switch to Table tab
- Switch back to Map tab
- Expected: Map displays correctly without any white overlay or rendering artifacts. Choropleth colors, legend, and zoom level are preserved. This tests the
invalidateSize()fix. - Pass/Fail: [ ]
- Steps:
- With a choropleth displayed, rapidly click between Map, Charts, and Table tabs 5-6 times
- Expected: No crashes, no rendering glitches. Each tab displays its content correctly when you settle on it. No errors in the R console.
- Pass/Fail: [ ]
- Steps:
- With a choropleth map displayed, click the fullscreen (expand) icon on the tab card
- View the map in fullscreen
- Press Escape or click the exit fullscreen button
- Expected: Map expands to fill the browser window. All controls remain functional in fullscreen. Exiting returns to normal layout.
- Pass/Fail: [ ]
- Steps:
- Enter fullscreen mode with a choropleth displayed
- Exit fullscreen
- Pan and zoom the map
- Expected: Map renders correctly at the original size. No white gaps or misaligned tiles. Choropleth polygons display properly. The
invalidateSizecall on fullscreen exit ensures correct dimensions. - Pass/Fail: [ ]
- Steps:
- Select County geography, Focus Area: Connecticut
- Select any category/variable
- Expected: Map shows 8 historical counties (Hartford, New Haven, Fairfield, etc.) — NOT the 9 planning regions that replaced them in 2022. County boundaries align with the AFFH data. The app uses 2021-vintage geometries for Connecticut.
- Pass/Fail: [ ]
- Steps:
- Select County geography, Focus Area: District of Columbia
- Select any category/variable
- Expected: Map shows a single county polygon covering all of DC. Clicking it populates value boxes and charts normally. No errors from the single-polygon edge case.
- Pass/Fail: [ ]
- Steps:
- Select County geography, Focus Area: Alaska
- Select any category/variable
- Expected: Alaska boroughs and census areas render correctly. Names match (e.g., "Kusilvak Census Area" not "Wade Hampton Census Area"). No missing geometries.
- Pass/Fail: [ ]
- Steps:
- Quickly switch: State → County → Tract → State → County
- Make partial selections at each level
- Expected: No crashes or frozen UI. Ghosted overlays appear and disappear correctly. Dropdowns reset appropriately at each geography change. No orphaned overlay text.
- Pass/Fail: [ ]
- Steps:
- Select a variable where some geographies have no data (gray polygons on the map)
- Click on a gray polygon
- Check the tooltip, value box, and table
- Expected: Tooltip shows "Not reported." Value box handles the NA gracefully. Table shows empty or "NA" cells without errors. Charts handle the missing data without crashing.
- Pass/Fail: [ ]
- Steps:
- Select Geography: State or County (race-disaggregated Jobs variables are not available at Tract level)
- Select Category: Jobs and Labor Market
- Select a Job Proximity variable (e.g., Job Proximity - Black)
- Click an area, check the Charts tab
- Then switch to a Labor Market variable (e.g., Labor Market - Black)
- Check the Charts tab again
- Expected: The category comparison chart for Job Proximity shows only Job Proximity bars (5 groups). The chart for Labor Market shows only Labor Market bars. They do NOT mix — the
comparison_groupcolumn correctly separates them. - Pass/Fail: [ ]
- Steps:
- Select State, Race/Ethnicity, White (%)
- Hover over California
- Expected: Tooltip shows: area name ("California"), variable label ("White (%)"), and the numeric value formatted as a percentage. Tooltip is positioned near the cursor and readable. The area name should never show literal "NA" — if a name is missing, it shows "Unknown".
- Pass/Fail: [ ]
- Steps:
- Select State, Race/Ethnicity, White (%) and render the choropleth
- Change Geography to County
- Observe the map — previous state polygons should be visible but dimmed
- Verify the overlay message reads "Select a state to view its counties"
- Try panning and zooming the map while the overlay is visible
- Complete the County selections (Focus Area → Category → Variable)
- Observe the transition as the new choropleth replaces the ghosted polygons
- Expected: State polygons dim to ~30% opacity when geography changes. The selection overlay message is visible and updates as each selection is made. The map remains pan/zoomable during the ghosted state (overlay has
pointer-events: none). After completing all selections, the overlay fades out and the new County choropleth renders, fully replacing the ghosted State polygons. - Pass/Fail: [ ]
- Steps:
- Temporarily rename
data/final/AFFH_tract.parquet(e.g., add.baksuffix) - Select Tract geography, any county, any category/variable
- Observe the app behavior
- Restore the file name after testing
- Temporarily rename
- Expected: A red notification toast appears: "Data could not be loaded for Tract level. Please contact support." The app does NOT crash or show a raw R error stack trace. The app remains interactive.
- Pass/Fail: [ ]
- Steps:
- Render any choropleth map
- Open DevTools → Network tab → Block
html2canvasCDN URL - Click the Download PNG button
- Expected: A non-blocking toast notification appears: "Map capture failed. Please try again." (NOT a browser
alert()dialog). The button returns to its original state. The app remains interactive. - Pass/Fail: [ ]
- Steps:
- Select Tract geography
- Select Focus Area: Los Angeles County, CA (~2,500 tracts)
- Select any category/variable
- Time from variable selection to choropleth render
- Expected: Choropleth renders within approximately 10 seconds. Loading overlay displays during render. App remains responsive after render. No browser tab crashes.
- Pass/Fail: [ ]
- Observed time: _____ seconds
- Steps:
- With a choropleth displayed (any geography), switch variables within the same category 3-4 times
- Expected: Each variable switch re-renders the choropleth within 1-3 seconds. The map does not re-zoom or re-fetch geometry — only the colors update. Loading overlay appears briefly.
- Pass/Fail: [ ]
- Steps:
- Open the app in Google Chrome
- Perform a quick walkthrough: State choropleth, click, Charts tab, Table tab, County transition
- Expected: All features work correctly. Map renders, charts display, tables populate. No console errors.
- Pass/Fail: [ ]
- Steps:
- Open the app in Mozilla Firefox
- Perform the same quick walkthrough as 16.1
- Expected: All features work correctly. No rendering differences that affect usability.
- Pass/Fail: [ ]
- Steps:
- Open the app in Safari (macOS)
- Perform the same quick walkthrough as 16.1
- Expected: All features work correctly. Note any Safari-specific rendering quirks (Safari handles CSS animations differently).
- Pass/Fail: [ ]
| Section | Tests | Passed | Failed |
|---|---|---|---|
| 1. Initial Load & Navigation | 3 | ||
| 2. State-Level Map | 6 | ||
| 3. County-Level Map | 6 | ||
| 4. Tract-Level Map | 7 | ||
| 5. R/ECAP Highlighting | 3 | ||
| 6. Table Tab Features | 12 | ||
| 7. Download Functionality | 3 | ||
| 8. Value Boxes | 3 | ||
| 9. Address Search | 3 | ||
| 10. Step Progress Indicator | 2 | ||
| 11. Sources and Notes | 1 | ||
| 12. Tab Switching | 2 | ||
| 13. Fullscreen Mode | 2 | ||
| 14. Edge Cases | 10 | ||
| 15. Performance Checks | 2 | ||
| 16. Cross-Browser | 3 | ||
| Total | 68 |
Tester: _______________ Date: _______________ App Version/Branch: _______________ Browser: _______________ Notes: