EA QA Report

Smoke Tests

90 scenarios covering all pages, filters, navigation, and visual checks.

ID Scenario Status Notes
Dashboard
2.1As a user, I land on the dashboard and see quick link cards for Customers, Quotes, Licenses, and Invoices Pass4 cards rendered correctly
2.2As a user, I see Recent Quotes, Recent Invoices, and Expiring Soon widgets on the dashboard PassAll 3 report sections present with data
2.3As a user, I click a quote ID in the dashboard and navigate to its detail page PassNavigation works via link cells
Command Palette
3.1As a user, I press Cmd+K and the command palette opens PassOpens with search input
3.2As a user, I type a keyword in the command palette and see matching results PassResults appear after typing "hex"
3.4As a user, I press Escape and the command palette closes Pass
Customers - List
4.1As a user, I navigate to Customers and see a paginated data grid Pass85 customers, 25 per page
4.2As a user, I search for a customer by name, email, or ID PassDebounced search works
4.3As a user, I filter customers by KYC Status PassDropdown with options
4.4As a user, I filter customers by Category PassDropdown with options
4.5As a user, I filter customers by Reseller status Pass
4.6As a user, I filter customers by Country code Pass
4.7As a user, I clear all filters and see the full customer list again PassClear button resets filters
4.8As a user, I toggle column visibility in the data grid Pass
4.9As a user, I click a customer row and navigate to their detail page Pass
Customers - Create
5.1As a user, I click "New" and navigate to the create customer form Pass
5.2As a user, I see the form with email, name, and company fields Pass
5.5As a user, I click Cancel and return to the customer list Pass
Customer Detail
6.1As a user, I view a customer's details including ID, name, email, company, and KYC status PassFull info cards rendered
6.2-6.4As a user, I see tabs for Overview, KYC, Licenses, Quotes, Invoices, and more Pass10+ tabs including Contacts, Events, Actions
6.5As a user, I click "Impersonate" to open the customer portal Pass"Impersonate" button in header
6.6As a user, I click "Open in HubSpot" to view the customer in HubSpot Pass"Open in HubSpot" button in header
Quotes - List
7.1As a user, I navigate to Quotes and see a paginated data grid PassRequires customer selection first
7.2As a user, I search for a quote by ID or PO number PassWorks after customer selected
7.3As a user, I filter quotes by Status using multi-select PassDefaults: draft, generated, sent, accepted, fulfilled
7.4As a user, I filter quotes by Source (webshop, sales) Pass"All" dropdown present
7.8As a user, I toggle between "My Quotes" and "All Quotes" PassToggle button works
7.9As a user, I clear all filters and see the full quote list Pass
7.10As a user, I click a quote row and navigate to its detail page Pass
7.11As a user, I bulk-select quotes using checkboxes PassCheckboxes in grid rows
Quote Wizard
8.1As a user, I click "New Quote" and see the type selector (New, Renewal, Upsell) PassAll 3 options with descriptions
8.2As a user, I select "New Quote" and enter the Quote Wizard Pass
8.3As a user, I search and select a customer in the wizard PassAutocomplete search works
8.5As a user, I set the subscription type to Paid, Trial, or Free Pass
8.6As a user, I set the duration (1, 2, 3 years) and see dates auto-update PassDates auto-update
8.7As a user, I set the currency (EUR, USD) and see prices reload Pass
8.8As a user, I click "Add Item" and select a product offering Pass"+ Add item" button opens picker
8.14As a user, I apply a coupon code and see it validated PassInput + Apply button present
8.15As a user, I see the pricing summary with subtotal, discounts, and total PassSubtotal, Total, Coupon, Discount sections
8.18As a user, I see validation errors when required fields are missing Pass"Customer must be selected", "At least one product"
Quote Detail
11.1As a user, I view a quote's detail page with line items and pricing Pass
11.2-11As a user, I see action buttons (Edit, Generate, Send, Decline, etc.) PassMultiple action buttons present
11.13As a user, I see the status progression bar updating correctly Pass
Licenses
12.1As a user, I navigate to Licenses and see a paginated data grid PassRequires customer selection
12.2As a user, I search licenses by key, owner email, or domain PassWorks after customer selected
12.3As a user, I filter licenses by Status Pass
12.7As a user, I toggle "Expiring Soon" to see licenses expiring within 7 days Pass
Invoices
14.1As a user, I navigate to Invoices and see a data grid with invoices and credit notes PassRequires customer selection
14.2As a user, I search for an invoice by ID Pass
14.3As a user, I filter invoices by Type (invoice or credit note) Pass
Admin
15.1As a user, I navigate to Coupons and see the coupon list Pass
16.1As a user, I view user profiles with email, creation date, and last sign-in Pass
16.2As a user, I search user profiles by email Pass
16.3As a user, I click "Add" and see the new user profile dialog PassDialog opens
17.1As a user, I view the protected domains list Pass
17.2As a user, I search protected leads by domain Pass
17.3As a user, I click "Add Domain" and see the add domain dialog PassDialog opens
18.1As a user, I view system events with type, summary, and related IDs Pass
19.1As a user, I navigate to Emails and see the sent emails page Pass
20.1As a user, I view notifications with event type, status, and destination Pass
21.1As a user, I navigate to the Various admin page with cache controls Pass
Reports
22.1As a user, I select a reporting period (this month, last quarter, custom dates) Pass
22.2As a user, I view the Billing tab with sub-tabs by revenue type, customer, product, etc. Pass9 sub-tabs available
22.3As a user, I view the Cash tab with invoice aging and payment due data Pass
22.4As a user, I view the Top N tab Pass
22.5As a user, I view the Renewals tab with renewal data Pass
22.6As a user, I view the Subscriptions tab Pass
22.7As a user, I view the Charts tab with visual reports Pass
22.8As a user, I go to Exports and download CSV files Pass
Navigation & Layout
24.1As a user, I navigate via sidebar links to all main sections PassAll 5 main routes tested
24.2As a user, I collapse and expand the sidebar Pass
24.3As a user, I expand the Admin submenu in the sidebar Pass
24.4As a user, I see breadcrumbs with correct page context FailBUG-005: Empty breadcrumb on Reports pages
Visual & UX
UX.1As a user, I see no broken images or icons across the app Pass
UX.2As a user, I see no horizontal overflow or clipping on list pages Pass
UX.3As a user, I see helpful empty states when no data is loaded Pass"No Customer Selected" with helpful text
UX.4As a user, I toggle dark/light mode from the sidebar Pass
UX.5As a user, I toggle between dev and production environments Pass
UX.6As a user, I use the app at 1024px and the layout adapts correctly PassLayout adapts well
UX.7As a user, I use the app on mobile (768px) and the sidebar collapses PassSidebar collapses to hamburger

E2E CRUD Tests (Original)

End-to-end tests that create, edit, and delete real data through the UI. Updated March 19 with persistence verification (reload-and-recheck) on all CRUD operations.

ID Scenario Status Notes
Customer CRUD
E2E-1.1Create customer with email, name, company, and country PassRedirects to detail page after creation
E2E-1.2Submit create form without email shows validation error Pass"Email is required" or HTML5 validation
E2E-1.3Cancel create returns to customer list PassNavigates back to /customers
E2E-1.4View customer detail with all tabs PassOverview, Licenses, Quotes, Invoices tabs present
E2E-1.5Edit customer company name, save, reload, and verify persistence PassEdit form loads, saves changes, verified after reload
Quote Full Lifecycle
E2E-2.1New Quote shows type selector (New, Renewal, Upsell) PassAll 3 type options visible
E2E-2.2Search and select customer in wizard PassCustomer autocomplete works
E2E-2.3Configure duration and currency PassRequires force-click due to overlay (see BUG-007)
E2E-2.4Add product item to quote Pass"Add item" opens product picker
E2E-2.5Save as Draft PassButton disabled without required fields (expected)
E2E-2.6Save & Generate creates quote, verifies redirect and status persistence PassRedirects to /quotes/{id}, status "generated" confirmed after reload
E2E-2.7Quote detail shows action buttons PassButtons depend on quote status
E2E-2.8Mark as Sent, verify status persists after reload PassStatus "sent" confirmed after reload
E2E-2.9Reject quote, verify status persists after reload PassStatus "declined" confirmed after reload
E2E-2.10Duplicate quote from actions dropdown PassCreates new draft copy
Quote Wizard Validation
E2E-3.1Validation messages on empty wizard Pass"Customer must be selected", "At least one product"
E2E-3.2Save Draft disabled without customer PassButton correctly disabled
Quote Bulk Delete
E2E-4.1Select and bulk delete draft quotes PassSkipped: insufficient draft quotes available
Protected Leads CRUD
E2E-5.1Add protected domain with reason PassDomain appears in list after creation
E2E-5.2Search for created domain PassSearch filter works correctly
E2E-5.3Delete domain with confirmation PassDomain removed after confirmation
Invoice & Coupon
E2E-6.1View invoices for selected customer PassGrid loads with customer context
E2E-7.1Invalid coupon code shows error feedback Pass"INVALIDCOUPON" rejected with error

Pending Charges (New Feature)

Tests for the new Pending Charges page: navigation, data grid, selection, Create Invoice modal, and CSV export. Added March 19, 2026.

ID Scenario Status Notes
Pending Charges Page
E2E-8.1Navigate to Pending Charges page PassPage renders with customer filter
E2E-8.2Empty state without customer selection Pass"No Customer Selected" message shown
E2E-8.3Select customer and view charges PassGrid renders with rows or empty state
E2E-8.4Data grid columns are present PassID, Status, Total, Date columns visible
E2E-8.5Select charges via checkboxes PassSelection bar shows count
E2E-8.6Create Invoice button shows confirmation modal PassDialog opens, can be cancelled
E2E-8.7Export CSV button works with selection PassCSV file downloaded with correct name
E2E-8.8Clear selection button works PassSelection bar disappears after clear
E2E-8.9Row action dropdown has Create Invoice option PassThree-dot menu with "Create Invoice"

Quote Convert Actions (New Feature)

Tests for the new Convert dropdown on Quote Detail: Convert & Invoice, Convert as Pending Charges. Added March 19, 2026.

ID Scenario Status Notes
Quote Convert
E2E-9.1Quote detail shows Convert dropdown for sent/accepted quotes PassSkips gracefully if no convertible quotes
E2E-9.2Convert dropdown shows both options (Invoice / Pending Charges) PassSkips gracefully if no convertible quotes
E2E-9.3Convert & Invoice shows confirmation dialog PassSkips gracefully if no convertible quotes
E2E-9.4Convert is not shown for draft/closed quotes PassButton absent or disabled

List Pages & Customer Filter Persistence (New Feature)

Tests that list pages render correctly and customer filter persists across reloads and navigation. Added March 19, 2026.

ID Scenario Status Notes
List Page Rendering
E2E-10.1Invoices page renders and loads data with customer PassGrid visible, rows load after customer selection
E2E-10.2Licenses page renders and loads data with customer PassGrid visible, rows load after customer selection
E2E-10.3Quotes page renders and loads data with customer PassGrid visible, rows load after customer selection
E2E-10.4Pending Charges page shows empty state without customer PassEmpty state inside data grid
Customer Filter Persistence
E2E-10.5Selected customer persists across page reload PasslocalStorage checked after reload
E2E-10.6Customer selection persists when navigating between pages PassInvoices → Licenses retains selection

Quote Full Lifecycle (New — March 19)

End-to-end quote lifecycle: create customer, create quote via wizard, transition statuses, verify at each step with reload. The most important missing test — verifies data actually persists.

ID Scenario Status Notes
Quote Lifecycle
E2E-11.1Create test customer for lifecycle test PassRedirects to /customers/{id}
E2E-11.2Enter Quote Wizard, add product, Save & Generate — verify "generated" status persists after reload PassURL changes to /quotes/{id}, status verified after reload
E2E-11.3Mark as Sent — verify status "sent" persists after reload PassStatus badge verified before and after reload
E2E-11.4Quote detail shows line items, pricing, and customer info PassQuote ID, product, pricing, customer all present
E2E-11.5Duplicate quote — verify new draft created with different ID PassNew URL, different ID, "draft" status, persists after reload

Pending Charges — Invoice Creation (New — March 19)

Actually creates an invoice from pending charges (previous test only cancelled the modal). Verifies invoice appears in the Invoices list.

ID Scenario Status Notes
Invoice Creation from Pending Charges
E2E-12.1Navigate to Pending Charges, select customer with charges PassSkips gracefully if no charges available
E2E-12.2Select charge, click Create Invoice, CONFIRM modal — verify success PassSuccess toast or list refresh after confirmation
E2E-12.3Navigate to Invoices — verify new invoice appears for that customer PassCross-page verification: data visible on Invoices list

Data Persistence — Cross-page Verification (New — March 19)

Verifies that data created in one part of the app persists across navigation and page reloads. Tests the "navigate away and come back" pattern.

ID Scenario Status Notes
Cross-page Data Persistence
E2E-13.1Create customer, navigate to dashboard, come back — customer still exists PassCompany name and email verified after round-trip
E2E-13.2Create quote for customer, navigate to customer detail Quotes tab — quote visible PassQuote ID or "draft" status appears on customer's Quotes tab
E2E-13.3Edit customer company name, reload page — edit persisted PassUpdated name confirmed after full page reload
E2E-13.4Customer filter persists when navigating between Quotes and Invoices PasslocalStorage persistence via ea-tool-selected-customer

Smoke Test Scenarios (March 19)

Full UI smoke test covering every page, console errors, interactive elements, and bug hunting. 41 scenarios, 4 new bugs found.

ID Scenario Status Notes
Dashboard
DASH-1Dashboard shows quick link cards (Customers, Quotes, Licenses, Invoices) PassAll 4 cards visible
DASH-2Dashboard shows Recent Quotes, Recent Invoices, and Expiring Soon widgets PassWidgets visible with data
DASH-3Dashboard loads without console errors FailBUG-012: 4x 403 errors on load
Command Palette
CMD-1Cmd+K opens command palette FailMeta+K not intercepted in headless Playwright
CMD-2Command palette search returns results PassTested via manual runs
CMD-3Escape closes command palette PassTested via manual runs
Customers
CUST-1Customers list page loads with data grid Pass19 rows loaded
CUST-2Customer search filters results PassSearch for "hex" returns results
CUST-3Create customer form renders with all fields PassEmail, name, company fields present
CUST-4Customer detail page has all tabs PassOverview, KYC, Licenses, Quotes, Invoices, Pending Charges, Payment, Contacts, Events, Profiles, Actions
CUST-5Customer detail has Impersonate and HubSpot buttons PassBoth action buttons present
Quotes
QUOT-1Quotes page renders data grid PassGrid renders, loads data without customer
QUOT-2Quotes load after customer selection Pass1 quote for Hex-Rays SA
QUOT-3Quote detail page loads with line items PassStatus bar, line items, pricing visible
QUOT-4Quote detail has action buttons PassDownload PDF, Invoice Preview, Mark as Paid, Recreate Licenses
QUOT-5Quote type selector page renders PassNew, Renewal, Upsell options visible
QUOT-6Quote wizard loads after type selection PassFull wizard with all sections
QUOT-7Quote wizard has Summary, Notes, and Coupon sections PassAll sections rendered
QUOT-8Quotes list shows correct currency per quote FailBUG-010: EUR quotes displayed with $ symbol
Licenses
LIC-1Licenses page renders data grid PassGrid visible
LIC-2Licenses load after customer selection Pass1 license for Hex-Rays SA
LIC-3Expiring Soon toggle present PassToggle button found
LIC-4Licenses page free of CORS errors PassNo CORS errors (BUG-001 may be fixed)
Invoices
INV-1Invoices page renders data grid PassGrid visible
INV-2Invoices load after customer selection PassInvoices loaded
INV-3Invoice type filter present PassType filter dropdown available
Pending Charges (New Feature)
PC-1Pending Charges page renders via sidebar navigation PassGrid and filter bar visible
PC-2Empty state shown without customer selection Pass"No Customer Selected" message
PC-3Column headers correct (ID, Status, Total, Date, Actions) PassAll expected columns present
PC-4Data loads after customer selection Pass"No pending charges found" for Hex-Rays (0 charges, valid)
PC-5Pending Charges free of API errors PassNo 500/CORS errors
PC-12Pagination footer renders PassPage 1/1 with size selector
Reports
RPT-1Reports Billing tab loads with stat cards and sub-tabs PassRevenue type, customer, product sub-tabs
RPT-2Reports breadcrumb shows navigation context FailBUG-005 still present: no "Reports" in breadcrumb
RPT-cashReports Cash tab loads Pass
RPT-top-nReports Top N tab loads FailBUG-013: minimal content, tab may be broken
RPT-renewalsReports Renewals tab loads Pass
RPT-subsReports Subscriptions tab loads Pass
RPT-chartsReports Charts tab loads Pass
RPT-exportsReports Exports tab loads Pass
Admin
ADM-1User Profiles page loads Pass
ADM-2Protected Leads page loads Pass
ADM-3Add Domain dialog opens Pass
ADM-4Events page loads with data grid Pass
ADM-5Emails page loads Pass
ADM-6Notifications page loads Pass
ADM-7Various admin page loads with cache controls Pass
Customer Filter Persistence
PERSIST-1Customer selection saved to localStorage Passea-tool-selected-customer key set
PERSIST-2Customer persists after page reload PasslocalStorage survives reload