TESTING PLAYBOOK

ABC Events Module โ€” Testing Playbook

Your complete guide to understanding events, testing strategies, and regression coverage

The Business

ABC Events powers everything chapters do to bring their communities together โ€” from networking receptions to technical training to board meetings. Understanding the business model helps you catch edge cases that matter.

๐ŸŽฏ What ABC Events Is Actually About

ABC Events is not a ticketing platform for consumers. It's an internal tool for chapters to manage their own events and members' participation. A chapter might host 20โ€“100 events per year โ€” some huge and formal, some small and casual. Members need to know what's happening, and chapters need visibility into who's coming and how much to collect in payment.

The module serves three audiences simultaneously: Chapters manage events, members browse and register through the portal, and National gets uniform data across all chapters for reporting and compliance. This creates some interesting constraints. For example, chapters can manually create and edit registrations in their internal interface, but the portal registration flow is more rigid because it needs to maintain data integrity across many simultaneous users.

An event is fundamentally just an occurrence with a date, a location (optional, can be virtual), and a set of activities called Functions. But it's also a revenue generator. Chapters can collect registration fees, sell sponsorships, and upsell add-ons. The system tracks all of that.

Why this matters for QA
When you test, remember you're testing for two very different users: chapter staff who know the business intimately and need powerful tools to manage edge cases, and portal members who just want a simple "find event, buy ticket, pay" experience. A bug that breaks chapter staff workflows is critical. A bug that breaks portal UX might affect signups. Both matter, but in different ways.

๐Ÿ‘ฅ Who Has Permission to Do What

Events access is controlled by staff level and explicit Events Permission. Chapter Staff Level 2 with Events Permission can create, edit, and delete events. Level 1 staff can view events. Portal users can see events without needing special permissions, but the moment they register, they're creating data in the system, and registrations respect the availability windows and capacity limits set by staff.

This matters for testing because it means the same event data can be modified through two different interfaces with different rule sets. Staff can override almost anything (manually add registrations, force payments, adjust pricing). The portal cannot. This is intentional โ€” chapter staff need flexibility โ€” but it means you need to test both paths.

Why this matters for QA
Always test permission checks: verify that staff without Events Permission cannot create events, that portal users cannot access registration admin, and that capacity limits are enforced in the portal but staff can override them in the admin interface. Also test role-based access โ€” what a Level 1 sees should not include delete buttons or pricing edits.

๐Ÿ“Š Event Value: What Members Get, What Chapters Get, What National Gets

For members, Events are simple: find events they care about, register, pay, attend, get confirmation and possibly a badge. It's straightforward value โ€” access to community and learning.

For chapters, Events are operational and financial. They can plan and execute events, see who's attending, verify payments, send communications, and report on success. They can control pricing (member vs. non-member rates, sponsor levels), set capacity limits, and handle special cases (comped tickets, invited-only events).

For National, Events create a uniform data stream. They see aggregate event numbers, attendee demographics, revenue, and adoption patterns across all chapters. This helps National understand where events are thriving and where they need to invest.

Why this matters for QA
When you test, trace the data from the portal user's action all the way through to what appears in reports. If a non-member registers for a members-only event, what happens? If a sponsor is created with a quantity of 5 attendees, do all 5 show up in the attendees list? These "happy path" variations are where bugs hide.

๐Ÿ—๏ธ The Event Structure: Event โ†’ Functions โ†’ Tickets โ†’ Registrations

Events are organized in a clean hierarchy. At the top is the Event โ€” a single named occurrence with a start date, end date, location, and a bunch of metadata (description, max registrants, event status). Many events are one-shot (a single networking happy hour), but events can span multiple days.

Under an Event are Functions โ€” the actual activities that make up the event. A multi-day conference might have Functions for "Day 1 Breakfast," "Day 1 Keynote," "Day 2 Workshops," etc. A simple networking event might have just one Function. Functions have their own dates, times, locations (can differ from the event location), and speakers.

Tickets are optional and can be tied to zero, one, or many Functions. A single-ticket event (everyone pays the same to attend) has one ticket. A dinner event might have "Gala Ticket (Table of 8)" and "Gala Sponsor Ticket." Tickets carry pricing (separate rates for members vs. non-members), capacity limits, custom fields to collect from attendees, and "included items" (other tickets bundled into a package).

Registrations are the records created when a person signs up for a ticket. One registration per ticket option selected. If a person buys two different tickets for the same event, they get two registration records. This is critical: each registration is a separate record, but attendees appear once in the attendees list regardless of how many registrations they have.

Event
Date, Location, Capacity
โ†“
Functions
Activities w/ times & locations
โ†“
Tickets
Pricing, capacity, custom fields
โ†“
Registrations
One per ticket selected
Why this matters for QA
The hierarchy is the backbone of the system, and misunderstanding it causes test failures. Remember: Functions are optional (an event doesn't need Functions to work). Tickets are optional (events can have no pricing). But Registrations are the heartbeat โ€” every test needs to verify that registrations are created correctly and capacity is tracked. Test the edge cases: what if you delete a Function that has registrations? (Can't do it โ€” correct.) What if you add a registration after an event's registration window has closed? (Staff can, portal users cannot โ€” both correct, but different.)

How It Works

Understanding the complete event system: from creation to registration, payment processing, and attendee management

โœ๏ธ Creating the Event: The Bare Minimum

Chapter staff can create an event with just three pieces of information: Event Name, Start Date, and Event Status (defaults to Active). Everything else is optional. This might sound permissive, but it's intentional โ€” staff often need to create a placeholder event quickly and fill in details later.

The optional Event Details tab lets them add event description (a rich WYSIWYG editor), end date (defaults to start date), times (12-hour format, no seconds), a chapter staff contact (dropdown of active users), an external contact (free text for off-system people), classification/sub-classification (for organization), region, max registrants (capacity), and three memo fields (general notes for staff, memo to print on confirmation, memo to print on invoice).

The event is immediately visible in the Chapter Site and (if status is Active) to portal members browsing events. Staff can edit everything at any time, and all changes are tracked in change history.

Why this matters for QA
Test that events can be created with just name and date. Test that optional fields truly are optional (don't require a location or staff contact). Test change history โ€” every edit should be recorded. Also test time field formatting: times should display in 12-hour format, and the system should reject or clean up invalid time values (like "25:00").

๐Ÿ“ Setting the Location (Physical, Virtual, or Hybrid)

Locations are managed as standalone records. A chapter can create a physical location (with address, phone, directions, contact info) and reuse it across multiple events. Locations can be marked Active or Inactive (inactive ones don't appear in dropdowns).

When assigning a location to an event, staff can pick an existing physical location, a company location (pulling from AMS company records), or leave it blank for virtual. If virtual, they enter a link/URL instead. The location info appears on event confirmations โ€” address, phone, directions for physical events; the virtual link for virtual events.

The key insight: location is optional. An event doesn't need a location to exist. This is useful for virtual or hybrid events, or for planning placeholders before the venue is locked in.

Why this matters for QA
Test that events work without locations. Test that location data (address, directions, contact info) appears correctly on confirmations. Test that changing an event's location after registrations exist still updates the confirmation correctly. Also test that inactive locations are hidden from dropdowns.

๐Ÿ”„ Adding Functions: The Event's Activities

Functions are optional components that break an event into distinct activities. A one-day networking event might have just one Function ("Networking"). A two-day conference might have Functions for each day and session. A volunteer day might have Functions for different project sites.

When adding a Function, staff sets the name (required), start/end date/time (defaults to event start/end), location (defaults to event location, can differ), and speaker. All times display in 12-hour format.

Functions can only be deleted if no registrations exist for that Function. This is a hard constraint โ€” registrations reference Functions, so you can't orphan data by deleting a Function.

Why this matters for QA
Test that Functions default to event dates and times. Test that Function dates can differ from event dates. Test the delete protection: verify that the delete button is hidden if registrations exist for a Function. Test that if you delete a Function, related tickets that reference it are unaffected (the relationship is optional, not cascading).

๐ŸŽŸ๏ธ Adding Tickets: The Pricing & Capacity Layer

Tickets are where the business logic lives. A ticket has a type (single ticket, table/team ticket, or sponsor ticket), a name, description, and pricing. Member and non-member rates can be different. There's an optional "Other" category for custom attendee types (e.g., "Student," "Government Employee") with custom pricing and description.

Max Available controls capacity. If blank, the ticket is unlimited. If set to a number (e.g., 100), portal users see "Sold Out" once 100 registrations are reached. This limit is enforced both in the portal and when staff manually add registrations in the Chapter Site.

Tickets can have a tax percentage (for physical items/swag). The tax is calculated as percentage, not flat addition. Example: $20 ticket + 5% tax = $21.00. This matters for invoice calculations.

Tickets can be tied to zero, one, or many Functions (optional). They can also bundle other tickets as "Included Items" (common for sponsor packages). For sponsor tickets and table/team tickets, you specify attendee count rules.

Tickets also have custom fields โ€” ticket-specific attributes collected from attendees during registration. A gala ticket might collect "meal preference." A conference ticket might collect "t-shirt size." These must be added before registrations occur.

Single Ticket
Standard ticket type. One person buys, one registration created. Used for most events (galas, training, networking).
Table/Team Ticket
Group ticket. Quantity = number of tables/teams. Supports "Attendees Per Table" rule (e.g., 8 people per table means quantity 1 = 8 attendees).
Sponsor Ticket
Sponsorship tier. Can bundle other tickets as included items. Auto-creates attendees per included items and quantity.
Why this matters for QA
Ticket capacity is complex. Test that Max Available is enforced when portal users checkout (they should see "Sold Out" or get a capacity error). Test that staff can override capacity in the admin interface. Test tax calculation: verify it's percentage-based, not flat. Test that custom fields don't appear in the portal unless they're marked "Add to Registration." Test that included items bundle correctly for sponsor tickets. Test that deleting a ticket is blocked if registrations exist.

โš™๏ธ Registration Availability: Windows & Capacity

Chapter staff control whether portal registration is open. They set Enable Registration (checkbox), Registration Start Date/Time, and Registration End Date/Time. When registration is disabled, portal users cannot sign up (but staff can still create registrations in the admin interface). When registration is enabled but before the start date, the portal shows the event but hides the register button. After the end date, same thing โ€” event visible, but registration closed.

There's also a Requested Invoice Due Date field that sets the default due date for invoices generated when members request an invoice instead of paying immediately.

Why this matters for QA
Test the registration window boundaries: before start date, between start and end, after end date. Verify that staff can override and register people outside the window. Test that changing the window on an existing event doesn't affect existing registrations. Test the Requested Invoice Due Date: verify it appears on generated invoices.

Tickets & Pricing

Dive into how tickets work, why the pricing model exists, and how capacity is enforced across the system.

๐Ÿ’ฐ The Pricing Model: Member vs. Non-Member vs. Other

ABC Events allows chapters to offer different pricing based on attendee type. Every ticket has a Member Price and Non-Member Price. The portal automatically applies the correct price based on whether the registered person is from a member company or not.

There's also an optional "Other" category โ€” a custom attendee type that chapters can define (e.g., "Student," "Government Employee," "Spouse"). Each Other category has a description, pricing, and is controlled by a checkbox. Chapters can define one or many Other categories per ticket, each with different pricing.

When someone registers through the portal, the system automatically selects the right price based on their company's membership status. Staff registering people in the admin interface explicitly select which category they're registering the person under.

Member Pricing
Lower price (typically). Offered to people from member companies. Encourages membership.
Non-Member Pricing
Higher price. Offered to people from non-member companies. Revenue generator.
Other Pricing
Custom categories (student, govt). Lets chapters offer special rates for specific groups.
Why this matters for QA
Test the pricing logic: register a member vs. non-member for the same ticket and verify they see different prices. Test the Other category: create a ticket with an Other category, then register someone under that category and verify the price is correct. Test that edits to member/non-member prices don't retroactively change existing registrations' prices. Test that only eligible users can select the Other category (staff manually sets this; portal users don't have a choice).

๐Ÿ“ฆ Included Items & Bundling: Sponsor Packages

Sponsor tickets typically include other tickets or benefits. The Included Items feature lets you bundle tickets together. A "Gold Sponsor" ticket might include "VIP Dinner Ticket (2)" and "Reserved Parking Pass." When someone buys the Gold Sponsor ticket, the included items are automatically added to their package.

Included items affect capacity calculations. If a sponsorship ticket includes a VIP Dinner Ticket, and VIP Dinner has a capacity of 10, the system decrements available spots appropriately. If you have 2 VIP Dinner spots left and a sponsor buys a package with 2 VIP Dinners, the next sponsor sees "0 available."

Custom fields from included items are also auto-populated. If your VIP Dinner collects "meal preference" as a custom field, sponsors buying that package will have that custom field auto-populated from the included item.

Why this matters for QA
Test that included items reduce available capacity correctly. Test that custom fields from included items appear in sponsor records. Test that if a sponsor ticket includes multiple attendees (quantity > 1), all attendees are created and show up in the attendees list. Test capacity edge case: if you have 5 Gold Sponsor spots, and each Gold includes 2 VIP Dinners, verify that booking 3 Gold Sponsors correctly leaves 1 VIP Dinner available (5 Gold ร— 2 VIP each = 10 VIP used; 10 available - 10 used = 0 left).

๐Ÿ“Š Tax Calculation: Percentage-Based, Not Flat

The tax field on a ticket is a percentage, not a flat dollar amount. This is important for invoice and payment calculations. The formula is simple: Tax Amount = Price ร— (Tax % รท 100). Example: $200 ticket with 5% tax = $200 ร— 0.05 = $10 tax, for a total of $210.

Tax is typically used for physical items or swag. A training event might have 0% tax (purely service). A gala with a silent auction basket and meal might have 5โ€“10% tax depending on local regulations.

Tax is calculated per registration record. If a person buys two tickets, each ticket's tax is calculated separately and summed. The invoice shows both the original price and tax per line item.

Why this matters for QA
Test the tax formula: verify that Tax = Price ร— Tax% (not Price + Tax%). Test with various percentages (0%, 5%, 10%) and verify the invoice shows correct totals. Test that changing tax on a ticket doesn't affect existing invoices (historical data remains unchanged). Test edge cases: 0% tax (should show $0), 100% tax (should double the price). Test that combined registrations sum tax correctly.

๐Ÿ›‘ Capacity: Max Available Enforced Everywhere

Max Available controls ticket capacity. When blank, the ticket is unlimited. When set to a number, the portal users see "Sold Out" once that many registrations exist. Portal users attempting to checkout see a capacity error if the ticket is sold out.

The critical rule: capacity is enforced both in the portal AND in the chapter admin interface. Staff cannot override capacity when adding registrations. If a ticket has 10 spots and 10 are taken, the staff member attempting to add the 11th registration gets a validation error and cannot proceed.

Capacity is also checked at checkout time in the portal. If you add a ticket to your cart and then other shoppers fill the remaining spots before you checkout, your checkout fails with a specific capacity error. This prevents overselling but means cart items are not reservations โ€” they're just placeholders.

Why this matters for QA
Test capacity enforcement in the portal: add a ticket to cart, trigger a capacity fill by another user, then attempt checkout and verify the error. Test staff registration: try to add a registration via the admin interface when capacity is full and verify it's blocked. Test the "Sold Out" state: verify that the portal shows "Sold Out" or similar indicator once capacity is reached. Test capacity changes: if you increase Max Available after some registrations, verify that the additional spots become available for new registrations.

Registration Flow

How people sign up for events โ€” whether through the portal or via chapter staff โ€” and what gets recorded in the system.

๐Ÿ‘ค Portal Registration: Steps 1โ€“4

Portal users follow a linear registration flow. Step 1 (Contact Information): The system displays Email, First Name, Last Name, and Company fields. If the user is logged in, these auto-populate from their contact record and can be edited (edits apply to the registration only, not the database). If not logged in, the user must log in or create an account โ€” guest checkout is not allowed. After authentication, fields auto-populate, and the user proceeds.

Step 2 (Select Ticket Options): A table shows available tickets with name, description, price (member/non-member as applicable), included attendees, available spots, and a quantity selector. Sponsor tickets with included items auto-decrement the available spots count. Users select quantities and proceed.

Step 3 (Registration Information): A summary of selected options appears at the top. Below that, expandable sections for each ticket option allow users to enter attendee details. Custom fields specific to each ticket appear inline. The first attendee auto-populates with the registrant's info (editable). Remaining attendees default to "Reserved Attendee" if not entered. All fields except Additional Info are required for the first attendee. Each ticket option creates a separate registration record, so a person buying two different tickets creates two registrations. JIRA ONLY ยท ABC-2713 JIRA ONLY ยท ABC-2707

Step 4 (Summary & Payment): The system displays a summary of all registrations with total price, quantity, and included items. Users choose a payment option: Pay Now (immediate credit card or ACH), Request Invoice (create unpaid registration and generate invoice), or Add to Cart (hold for multi-event checkout). Portal changes to read-only at this step (confirming the selections before payment).

Why this matters for QA
Test the portal registration flow end-to-end in multiple scenarios: member vs. non-member, with custom fields, with included items. Test that Step 1 auto-population works correctly and that logged-in edits affect only the registration, not the database. Test Step 3 attendee logic: verify that multiple attendees in a table ticket all create separate registration records but the primary attendee is recorded correctly. Test that custom fields appear and persist correctly. Test Step 4 payment options: verify each option leads to the correct downstream behavior.

๐Ÿข Chapter-Side Registration: Full Control

Chapter staff can create registrations directly in the Chapter Site, bypassing the portal's step-by-step flow. The Add Registration form shows the full picture at once: registrant (individual + company with type-ahead and add-new capability), ticket selection, custom fields, and payment info.

Unlike the portal, staff explicitly set the payee type (company vs. individual), the specific payee entity, payment status, and registration source (a dropdown lookup, not free text). They can also record notes and a PO number for corporate payments.

The key differences: staff can create registrations outside the availability window (the registration window doesn't apply to admin-created registrations), but capacity limits still apply โ€” staff cannot exceed Max Available. Staff also cannot directly enter payment details on the registration form; instead, they use the "Mark Paid" button to navigate to the invoice, where they record payment.

Why this matters for QA
Test staff registration creation in various scenarios: new individual/company, existing contact, outside the registration window. Verify that capacity limits are enforced. Test that adding a new individual or company on the fly works correctly and creates properly formed AMS records. Test that contact edits during registration create new individuals/companies vs. updating existing ones as expected. Test the "Mark Paid" flow: verify it navigates to the associated invoice.

๐Ÿ“‹ Registration Records vs. Attendees: Why the Distinction Matters

This is subtle but critical. A Registration is a record created per ticket option selected. If you buy two different tickets, you get two registrations. If you're the primary attendee in a sponsor ticket with quantity 5, five registrations are created (one per attendee in the package), but they all reference you as the company/registrant.

An Attendee is a person actually attending the event. The attendees list shows each person once, regardless of how many registrations they have. This prevents duplication. If you register for both the Gala Ticket and the After-Party Ticket, you appear once in the attendees list with both tickets shown.

Sponsor auto-creation compounds this. When you create a sponsor record with a quantity of 3 attendees, three registration records are auto-created: one for the sponsor's primary attendee (registrant), and two "Reserved Attendees." All three appear in the attendees list. JIRA ONLY ยท ABC-2865

Why this matters for QA
Test the registration vs. attendee distinction: create a person with multiple ticket registrations and verify they appear once in the attendees list. Test sponsor auto-creation: create a sponsor with quantity > 1, then check the attendees list โ€” all attendees should be present and show the sponsor badge. Test the critical rule: if a person has five registrations (one sponsor with 5 attendees), the attendees tab shows them once, but the registrations tab shows five records. Edge case: delete a sponsor's registration โ€” verify it removes only that specific registration, not all of them.

๐Ÿ‘ฅ Reserved Attendees: Placeholder Names

"Reserved Attendee" is a placeholder. When a table ticket or sponsor ticket is created with multiple attendees and staff doesn't specify a name, "Reserved Attendee" is used. Staff can edit these later through the attendees tab or through the registration. Portal users can also update attendee information in the "My Events" section until the registration window closes. JIRA ONLY ยท ABC-2704 JIRA ONLY ยท ABC-3314

Why this matters for QA
Test that Reserved Attendee is the default for unnamed attendees. Test that it can be overwritten. Test that the portal's My Events section allows updating attendee info before the registration window closes, and blocks edits after. Verify that Reserved Attendee appears correctly on confirmations and badges.

๐Ÿ’ผ Sponsor Auto-Creation: From Ticket to Attendees

When a sponsor record is created or updated, attendees are auto-created based on the sponsor ticket quantity and included items. The primary attendee defaults to the sponsor's registrant info. Additional attendees are set as "Reserved Attendee" and can be named later.

If the sponsor quantity is increased, existing attendee data is preserved and new attendees are added. If decreased, the system warns before removing attendees. Custom fields from included items are auto-populated.

The sponsor attendee flag is set automatically, making it easy to identify sponsor vs. regular attendees in reports and filtering.

Why this matters for QA
Test sponsor creation: create a sponsor with quantity 3 and verify three attendees are created. Test updating: increase quantity to 5 and verify two new attendees are added with existing data preserved. Test decreasing: verify the warning appears and attendees are removed safely. Test custom fields: if included items have custom fields, verify they're auto-populated on sponsor attendees. Test deletion: verify sponsors can only be deleted if status=open AND no invoice AND no individual registered as an attendee. JIRA ONLY ยท ABC-2865

Getting Paid

How members pay for events, how invoices are generated, and what happens after payment is recorded.

๐Ÿ’ณ Payment Options: Three Paths

Portal users have three options at the end of Step 4: Pay Now, Request Invoice, or Add to Cart.

Pay Now takes the user to a payment screen with two methods: credit card (via configured gateway like Authorize.net) or ACH (automated clearing house transfer). Payment processes immediately, and the registration is marked Paid. An invoice is auto-generated as a paid invoice (transaction record).

Request Invoice creates a registration marked "unpaid" and auto-generates an unpaid invoice. The event has a "Requested Invoice Due Date" field that sets the due date for these invoices. Members can view and pay the invoice later through the portal or directly.

Add to Cart holds the tickets without creating registrations. Multiple events can be added to the cart, and checkout processes all items at once. Cart items do NOT create registrations until checkout is complete. If a ticket sells out while items are in the cart, the checkout fails with a capacity error.

Why this matters for QA
Test all three payment paths. For Pay Now, verify that immediate payment updates the registration status and generates a paid invoice. For Request Invoice, verify that the unpaid invoice is created with the correct due date. For Add to Cart, test the critical rule: cart items don't create registrations until checkout. Test the capacity edge case: fill a ticket while another user has it in cart, then verify checkout fails for that cart item. Test the invoice Due Date: change the Requested Invoice Due Date on the event and verify new invoices use the new date (old invoices retain the old date).

๐Ÿ“œ Invoice Generation: Automatic & Complete

Invoices are auto-generated in two scenarios: when a member requests an invoice during registration, or when a payment is completed (Pay Now). The invoice is generated with all details pulled from the registration: event name, ticket name, price, quantity, tax, registrant, payee, and total.

Zero-dollar invoices are created for free events. This might seem odd, but it's important for consistent reporting and accounting. A free event still needs an invoice record to track the transaction.

Invoice numbers are auto-generated in a standard format. Invoice status tracks whether payment is pending or complete. All invoices track invoice date, due date, and payment date/method.

Why this matters for QA
Test invoice generation in all scenarios: Pay Now, Request Invoice, free events, paid events. Verify that zero-dollar invoices are created correctly for free events. Verify that invoice numbers are unique and sequential. Test that invoices show correct line items (ticket name, price, quantity, tax). Test that editing a registration after invoice creation doesn't retroactively change the invoice (invoices are point-in-time records). Test that if a person makes multiple registrations, each gets its own invoice (or a single invoice if checkout bundles them).

๐Ÿข Chapter-Side Payment Recording

Chapter staff don't directly enter payment information on the registration form. Instead, they use the "Mark Paid" button on a registration, which navigates to the associated event invoice. From there, they record payment: credit card (via configured gateway), check (manual entry), cash (manual entry), or other method.

Once payment is recorded, the registration status and invoice status both update to Paid. Payment date and method are recorded.

Why this matters for QA
Test the Mark Paid flow: verify it navigates to the correct invoice. Test payment recording: verify that recording payment updates both the registration and invoice status. Test offline payments: verify that staff can record check/cash payments with full audit trail. Test that once an invoice is paid, portal users see it as paid in their invoice list.

๐Ÿ“ง Communications After Payment

When payment is recorded (any method โ€” online or manual), the system sends a Payment Confirmation email. When a registration is completed via portal (request invoice), a Registration Confirmation email is sent immediately. These are customizable per-event templates (not system-wide). The templates support WYSIWYG editing and can include event details, registration summary, and payment instructions.

Chapters can also manually send an unpaid invoice reminder to selected invoices via the Invoice list.

Why this matters for QA
Test that emails are sent at the correct times: Registration Confirmation on portal completion, Payment Confirmation on any payment. Test customization: verify that event-level templates are used and can be edited. Test the unpaid invoice reminder: verify it sends to selected invoices. Test email content: verify that event-specific details and links are correctly rendered.

Coupons & Discounts

How chapters offer discounts through coupon codes and manual discounts, and how portal users apply them.

๐ŸŽŸ๏ธ Coupon Codes: Percentage or Dollar Amount

Chapters can create coupon codes for events. Each coupon has an alphanumeric code (unique per chapter, no spaces), discount type (percentage or fixed dollar), discount value, event scope, usage limits, and expiration date.

Event Scope controls where the coupon applies: All Events (every ticket in the chapter), Selected Events (multi-select dropdown), or Selected Event Tickets (pick an event, then specific tickets within it). This gives flexibility โ€” a "Summer Promotion" code might apply to all events, while "Gala VIP Discount" applies only to the gala's sponsor ticket.

Usage Limits: Max Usage Count (blank = unlimited, numeric = maximum total uses across all users), and One-Time-Per-User (if checked, each person can use once, preventing multiple uses by the same individual).

Expiration Date: Optional date picker. The coupon status auto-transitions to Expired when the date passes. Expired coupons cannot be applied in the portal.

Why this matters for QA
Test coupon creation with various scopes and limits. Test percentage vs. dollar discounts: verify the discount is applied correctly (dollar amount is subtracted; percentage is calculated). Test usage limits: verify that a coupon with Max Usage 5 stops working after 5 uses. Test one-time-per-user: attempt to use the same coupon twice with the same account and verify a proper error message (not a 500 error). Test expiration: use a coupon before expiration, then verify it's rejected after. Test scope: create a coupon for selected events/tickets and verify it's not available for other tickets.

โœ‚๏ธ Portal Coupon Application: Restricted to Logged-In Users

During portal checkout, members can apply coupon codes via a text input field with an Apply button. The system validates the code in real-time and displays discount details: original price, discount amount, and final price.

Non-members must log in to apply coupons. This is a security measure โ€” it prevents malicious code sharing and ensures discounts are only available to legitimate members. If a non-member attempts to apply a coupon without logging in, they're prompted to log in first.

One-time-per-user validation returns a proper error message (not a 500 error) when the same user attempts a second use. The message should clearly explain that the coupon has been used and cannot be used again.

Users can remove a coupon before final checkout if they change their mind.

Why this matters for QA
Test coupon application in the portal: apply a valid coupon and verify the discount appears. Test non-member restriction: attempt to apply a coupon as a non-member without logging in and verify the login prompt. Test one-time-per-user: apply once, complete checkout, then log back in and attempt to apply the same coupon to a different event and verify the error message. Test expired coupons: attempt to apply an expired code and verify rejection. Test invalid codes: attempt random codes and verify rejection. Test that removal works: apply a coupon, then remove it and verify the original price reappears.

๐Ÿ› ๏ธ Manual Discounts: Staff-Side Override

Chapter staff can manually apply discounts during registration creation in the Chapter Site. They select discount type (percentage or dollar), discount value, and optional notes (e.g., "loyalty discount," "staff courtesy"). The system auto-calculates the discounted price and preserves the original price for reporting. The staff member who applied the discount is tracked (audit trail).

Why this matters for QA
Test manual discount entry: create a registration with a manual discount and verify the math (percentage or dollar deduction). Test that the original price is preserved (appears on invoice/registration). Test that the staff member's name is recorded. Test that edits to the discount are tracked in history.

๐Ÿ“Š Discount Reporting: Visibility & Tracking

The registrations tab shows discount-related columns: Discount Applied (Coupon Code, Manual Discount, or blank), Discount Amount (dollar), and Discounted Price (final price). This allows staff to review discount history at a glance.

Metabase reporting provides aggregate discount analytics: total usage count, revenue impact, usage by event, member vs. non-member split, and usage timeline.

Why this matters for QA
Test that discount columns appear correctly on the registrations tab. Test that filtering/sorting by discount works. Test that reporting accurately reflects applied discounts. Test edge cases: registrations with no discount should show blank or $0; multiple registrations with discounts should sum correctly in reports.

The Portal

How members experience events โ€” browsing, registering, and managing their registrations online.

๐Ÿ”“ Public Access Without Login

The portal events area is accessible at `/portal/events` without requiring login. Members can browse events, see details, and view pricing. Only current and upcoming events are displayed (past events are hidden). The URL can be shared publicly, making it easy for chapters to promote events to non-members too.

Portal access depends on the portal being enabled; if the portal is disabled for a chapter, the public events area is not accessible.

Why this matters for QA
Test the public access path: navigate directly to the portal events URL without logging in and verify events are visible. Test that past events don't appear. Test the disable scenario: disable the portal and verify the URL returns an error or redirect. Test mobile responsiveness: browse events on various screen sizes.

๐Ÿ‘๏ธ Three View Modes: List, Grid, Calendar

The browse events screen offers three ways to view events: List View (tabular), Grid View (cards), and Calendar View (month navigation). Users can switch between views, and the chapter has a default view setting in Manage Portal Settings (defaults to List, Grid, or Calendar). Users can switch after landing on the event list.

All views support search (full-text across event names and descriptions) and filtering by Location and Classification (only classifications for upcoming events are shown).

Why this matters for QA
Test all three views: verify they display the same events but in different layouts. Test the default view setting: change it on the chapter and verify the portal defaults to the new view. Test switching between views: verify the event list is preserved. Test search and filtering: verify they work in all views. Test that the calendar view correctly shows event dates and allows month navigation.

๐Ÿ” Login & Registration: Authentication Gatekeeper

Browsing and viewing event details require no login. But clicking Register on an event requires authentication. If the user is not logged in, they're prompted to log in or create a new account. Guest checkout is not allowed.

After authentication, the portal registration flow begins at Step 1. If the user is already logged in, they skip the login step and go directly to Step 1.

First-time users creating an account go through email verification. Once verified, their contact record is created and they proceed to Step 1.

Why this matters for QA
Test the browse โ†’ register โ†’ login flow: verify that clicking Register without being logged in prompts for login. Test login: log in and verify you proceed directly to Step 1. Test new account creation: create a new account and verify email verification is required. Test that guest checkout is blocked (no option to skip login).

๐ŸŽฏ Portal Registration Step 1: Contact Information

If logged in, Email, First Name, Last Name, and Company auto-populate from the contact record and can be edited. Edits apply to the registration only, not the database. If not logged in, the user logs in or creates an account first.

If the contact's company is not a member/prospect, a Prospect record is auto-created with Prospect Level = Hot, Company Status = Active, and Prospect Source Type = "Event Web Registration."

Why this matters for QA
Test Step 1 auto-population for logged-in users. Verify that edits don't change the database record. Test that non-member companies trigger prospect creation. Test that the prospect record has the correct source type and level. Test that changing the company field creates a new prospect if the new company is a non-member.

โœ๏ธ Portal Registration Step 3: Attendee Details & Custom Fields

A summary of selected options appears at the top. Below that, for each ticket option, an expandable section allows attendee entry. Custom fields specific to each ticket display inline. The first attendee auto-populates with the registrant's info (editable). Remaining attendees default to "Reserved Attendee" if not entered. All fields except Additional Info are required for the first attendee.

Each ticket option creates a separate registration record. So if you buy Ticket A and Ticket B, you get two registrations.

Why this matters for QA
Test that each ticket option's section is independently expandable. Test that custom fields appear for the correct ticket. Test that the first attendee auto-populates and can be edited. Test that required fields are enforced (error if missing). Test that Reserved Attendee is the default for additional attendees. Test that submitting Step 3 creates the correct number of registrations per ticket selected.

๐Ÿ’ผ My Events: Post-Registration Management

Portal users with admin (Level 3) permission can view their registered events in the "My Events" section. The section shows registered events with ticket type and a "Manage Attendee Info" option. Until the registration window closes, users can update attendee information (names, custom fields). After the window closes, edits are blocked.

This allows members to finalize attendee names (e.g., moving people from "Reserved Attendee" to actual names) without re-registering.

Why this matters for QA
Test My Events visibility: verify only registered events appear. Test attendee info editing: update a Reserved Attendee's name and verify it persists. Test the registration window boundary: edit before the window closes, then attempt to edit after and verify the edit is blocked. Test that editing applies to the registration only, not the individual's global record.

๐ŸŽญ Portal Event Landing Page: Promotional Hub

When a portal user views an event, they see the event name, date(s), location (address or virtual link), and description (rich WYSIWYG content). A "Register" button drives the registration flow. Event descriptions can include columns, formatting, HTML, tables, links, and images, allowing chapters to create rich marketing content.

Why this matters for QA
Test event landing page rendering: verify that description WYSIWYG content renders correctly. Test location display: verify address and phone for physical events, link for virtual events. Test that the Register button initiates the login flow (if not logged in) or goes directly to Step 1 (if logged in). Test edge cases: events with no description, no location, multi-day events (verify both dates show).

Glossary

Quick reference for key terms in the ABC Events module.

๐Ÿ“– Key Terminology

Attendee: A person actually attending the event. May be a registrant or an included person from a sponsor package. Appears once in the attendees list regardless of how many tickets they hold.

Cart Item: A ticket held in a shopping cart before checkout. Does not create a registration until checkout is complete. Capacity is rechecked at checkout time.

Chapter Staff: Primary system users who manage event lifecycle, registrations, payments, and reporting. Requires Level 2+ with Events Permission to create/edit events.

Custom Field: A ticket-specific attribute collected from attendees during registration (e.g., meal preference, shirt size). Must be added before registrations occur.

Event: A single or multi-day occurrence (social/educational, in-person/virtual/hybrid, recurring/one-time) created by chapters for their members.

Event Classification: A category assigned to events for filtering and organization in the portal.

Function: An activity or component within an event (e.g., Dinner, Keynote, Workshop). Optional; events can exist without functions.

Included Items: Tickets bundled with another ticket (primarily sponsor packages). Auto-decrement capacity and auto-populate custom fields.

Invoice: A document generated for payment collection. Auto-created on Request Invoice or Pay Now. Also created as $0 invoices for free events.

Max Available: Ticket capacity limit. When blank, unlimited. When set, portal shows "Sold Out" once reached. Enforced in both portal and admin interface.

Member: A company with active ABC membership. Members see discounted pricing in the portal.

My Events: Portal section where authenticated users view registered events and update attendee info until the registration window closes.

Non-Member: A person or company without ABC membership. Sees higher pricing in the portal.

Payee: The individual or company responsible for payment on a registration or sponsor record.

Portal: Member-facing web interface for browsing events, registering, and managing registrations.

Prospect: A company not yet a member but interested in ABC. Auto-created when a non-member registers for an event (Level = Hot, Status = Active, Source = "Event Web Registration").

Registrant: The person who completes the registration process for a ticket.

Registration (Process): The workflow for signing up (Steps 1โ€“4: contact info, ticket selection, attendee details, payment).

Registration (Record): A distinct data record created per ticket option selected. Multiple tickets = multiple registrations per person.

Reserved Attendee: A placeholder name for attendee spots not yet assigned to a specific individual. Can be updated later by staff or by the member in My Events.

Sponsor: A company providing financial/in-kind support to an event, typically purchasing a sponsorship ticket with included items.

Sponsor Attendee: An attendee included in a sponsor package. Primary attendee defaults to sponsor's info; additional attendees default to "Reserved Attendee."

Sponsor Ticket: A special ticket type for sponsorships. Can include multiple attendees and bundle other tickets as included items.

Table/Team Ticket: A group ticket type. Quantity = number of tables/teams. Supports "Attendees Per Table" rules (e.g., 8 people per table).

Ticket: An optional ticket tied to an event function with defined pricing (member/non-member/other). Has capacity, custom fields, and optional inclusion in bundled packages.

Ticket Type: Category (single ticket, table/team ticket, or sponsor ticket) determining pricing and attendee rules.

Test Strategy

Testing approach, priority areas, regression strategy, test data needs

โ–ถ
Test Scope & Priority Areas

Core Testing Domains: Event lifecycle (BREAD), function/ticket management, registration flows (portal + chapter admin), payment/invoicing, coupon validation, sponsor auto-creation, attendee deduplication.

  • Portal registration Steps 1-4 (contact, ticket selection, attendee info, payment options)
  • Chapter admin registration creation, edit, delete, custom fields, status management
  • Payment flows: Pay Now, Request Invoice, Add to Cart โ†’ Checkout
  • Capacity enforcement (Max Available, cart items, checkout validation)
  • Coupon validation, scope testing, one-time-per-user rules
  • Sponsor attendee auto-creation (ABC-2865) with quantity/delete edge cases
  • Portal views (list, grid, calendar), public access without login
  • Invoice badges (Parent, Viewing, Latest)
  • Copy event with date calculations, auto-population on Step 1
Regression Checkpoints: Always verify field isolation (portal edits apply to registration only, NOT database record), tax calculations (Price ร— Tax% not flat), cart items do NOT create registrations until checkout, attendee shows once in Attendees tab despite multiple tickets, and delete constraints (event only if no registrations, function only if no registrations for function, sponsor only if open + no invoice + no individual attendee).
โ–ถ
Test Data & Environment Setup

Required Test Data: Mix of member/non-member companies, active chapter users, payment gateway configured (or mock), locations (physical, virtual, company), event classifications, coupons (various discount types, scopes, usage limits), and events at different stages (future, ongoing, past).

  • Test member company with portal-enabled contacts
  • Non-member/prospect companies to test company creation during registration
  • Sponsor companies and individual sponsors for ABC-2865 testing
  • Multiple events with various function/ticket configurations (single, table/team, sponsor tickets with included items)
  • Coupons with percentage and dollar-amount discounts, all-events scope, and selected-event scope
  • Active registration windows and closed windows
  • Custom fields at various stages (before registration, after registration)
  • Existing attendees and registrations for capacity testing
Pro Tip: Use data-driven testing tools to quickly generate multiple events/registrations with different configurations. Automate repetitive capacity/quota checks.
โ–ถ
Critical Business Rules to Test

Non-Negotiable Rules (Test First):

  • Delete Constraints: Event (no registrations), Function (no registrations for function), Ticket (no registrations), Sponsor (status=open AND no invoice AND no individual attendee)
  • Max Available Enforcement: Enforced BOTH in portal AND chapter admin when adding registrants
  • Cart Capacity: Cart items โ‰  registrations until checkout. Capacity checked at checkout time; items can become unavailable while in cart.
  • Tax Calculation: Price ร— Tax% = tax amount (NOT flat addition). Example: $20 + 5% tax = $21.00
  • Coupon Security: Non-members must log in. One-time-per-user returns proper error (not 500).
  • Custom Fields: Must be added to ticket BEFORE registration to capture during workflow
  • Attendee Dedup: Attendee shows once in Attendees table despite multiple tickets/sponsors
  • Contact Field Isolation: Portal Step 1 edits apply to registration only, NOT to individual database record

Business Rules & Gotchas

Critical validation rules, edge cases, and system behavior you must understand for comprehensive testing

โ–ถ
Create & Browse Events

What to Test: Event creation with required/optional fields, default values, validation on start/end dates, time format (12-hour HH:MM), and browse filtering by name/status/date range.

  • Create event with minimum data (Event Name, Start Date)
  • Verify defaults (End Date = Start Date, Event Status = Active, times display 12-hour format)
  • Add optional fields (Chapter Staff dropdown from active users, Other Event Contact text field, Classification, Sub Classification, Region)
  • Test end date before start date validation
  • Browse events with various filters (Status, Date Range)
  • Verify Max Registrants controls capacity
  • Sort results by Start Date column
Edge Cases: Chapter Staff dropdown only shows active chapter users. Edit event with no registrations changes data without restriction. Adding functions/tickets after event creation does not affect event-level settings.
โ–ถ
Edit & Delete Events

What to Test: Event editing, change history tracking, and deletion constraints.

  • Edit all event fields (name, dates, times, staff, contact, classification, region)
  • Verify changes recorded in Change History with date/user timestamp
  • Attempt to delete event with no registrations (should succeed)
  • Attempt to delete event with registrations (Delete button hidden or error shown)
  • Verify Delete confirmation dialog
Critical Rule: Event can only be deleted if no registrations exist. This cascades through all functions and tickets.
โ–ถ
Event Classifications & Locations

What to Test: Classification CRUD, location assignment, virtual/physical location handling, and confirmation displays.

  • Create/edit classifications and sub-classifications
  • Use classifications in event creation (dropdown populated correctly)
  • Create physical locations with address, phone, individual contact info
  • Create company locations and virtual event links
  • Set location to Inactive and verify it does not appear in dropdown
  • Assign location to event and verify on Event Details
  • Change location during event edit
  • Create event without location (optional field)
  • Verify location details (name, address, phone, directions) appear on registration confirmation
Virtual Event Testing: For virtual/hybrid events, verify URL/link is stored correctly and appears on confirmation instead of address. Directions field should still be available for hybrid setup notes.
โ–ถ
Copy Event Scenarios

What to Test: Copy event with date calculations, function date auto-calculation, and registrant copy options.

  • Copy event from Browse screen
  • Choose new start/end dates for copied event
  • Verify system auto-calculates new function dates based on date difference (e.g., if original function was Day 1 at 9am, and original event dates were shifted 7 days, new function should shift 7 days)
  • Copy with registrants = No (default) โ€” verify no registrations copied
  • Copy with registrants = Yes โ€” verify registrations and attendees copied with new event
  • Verify all pricing, functions, tickets, custom fields, and sponsor info copied
  • Copy event that has occurred (past event) โ€” should work without restrictions
Date Calculation Formula: New Function Date = Original Function Date + (New Event Start Date - Original Event Start Date). Test with events spanning multiple days.

Functions & Tickets

Ticket type edge cases, max available capacity, custom fields timing, included items, badges

โ–ถ
Functions Management

What to Test: Add/edit/delete functions, date inheritance, speaker field, location override.

  • Add function to event (defaults to event date/time)
  • Edit function dates/times independently of event
  • Verify time format displays 12-hour (HH:MM, no seconds)
  • Override location for function (defaults to event location, can change)
  • Add speaker text field (optional)
  • Delete function with no registrations (succeeds)
  • Delete function with registrations for that function (button hidden or error)
  • Verify function appears in ticket association list
โ–ถ
Ticket Types: Single, Table/Team, Sponsor

What to Test: Three ticket types with distinct behaviors.

  • Single Ticket: One registrant per ticket purchased. Price per individual.
  • Table/Team Ticket: Quantity = number of tables. "Attendees Per Table" field controls group size. Each table gets its own attendees for custom field capture.
  • Sponsor Ticket: Includes multiple attendees via "Included Items" (other tickets bundled). Quantity affects total attendees created. See ABC-2865 tests below.
Testing Table/Team: Purchase 2 tables of 8 = 16 attendees total. Custom fields should prompt for each attendee. Capacity rules apply per individual (not per table).
โ–ถ
Ticket Pricing, Tax, Max Available

What to Test: Member/non-member pricing, "Other" category, tax calculation, max available enforcement.

  • Create ticket with member pricing (e.g., $50)
  • Create ticket with non-member pricing (e.g., $75)
  • Enable "Other" checkbox and set custom category name (e.g., "Guest") and price
  • Test tax field: Verify $20 ticket + 5% tax = $21.00 (NOT $25)
  • Set Max Available = 10 and verify capacity enforcement in both portal AND chapter admin
  • Fill capacity to 10, attempt to add 11th (fails with capacity error)
  • Verify ticket hides when Max Available reached in portal browse
  • Leave Max Available blank and verify no capacity limit
Tax Calculation Rule: Tax is percentage-based: Price ร— Tax% = Tax Amount. Not a flat-rate addition. Always test with various price/tax combinations.
โ–ถ
Custom Fields: Timing & Capture

What to Test: Custom field creation, "Add to Registration" checkbox, attendee auto-capture, timing constraints.

  • CRITICAL: Add custom field to ticket BEFORE any registrations. Fields must exist to capture during registration workflow.
  • Create custom field with "Add to Registration" checked (type: text or selection)
  • Selection fields allow multiple options โ€” verify options appear in registration form
  • Leave "Add to Registration" unchecked โ€” field collected outside system (manual entry)
  • Register for ticket with custom field โ€” verify field appears and captures attendee value
  • Attempt to add custom field AFTER registrations exist โ€” system shows warning
  • Manage Attendees for Custom Field โ€” can edit values, add/remove attendees
  • Export custom field data to Excel
Add to Registration Flag: If checked, attendee auto-populates field during registration (shows in Step 3). If unchecked, staff manually gathers info outside system.
โ–ถ
Included Items & Sponsor Attendee Auto-Creation JIRA ONLY ยท ABC-2865

What to Test: Included items configuration, sponsor attendee auto-creation, quantity changes, delete conditions.

  • Add Included Items to Sponsor Ticket: Multi-select list of other tickets. Quantity per each (e.g., 2x Dinner Ticket, 1x Cocktail Hour)
  • Create Sponsor: System auto-creates attendees: primary attendee (sponsor contact info), additional attendees (Quantity - 1) as "Reserved Attendee"
  • Custom Fields from Included Items: All custom fields from included tickets auto-populate for attendees
  • Quantity Increase: Existing attendee data preserved; new attendees added as "Reserved Attendee"
  • Quantity Decrease: System warns before removing attendees (e.g., "Decreasing from 5 to 3 will delete 2 attendees")
  • Delete Sponsor Constraint: Can only delete if status=open AND no invoice AND no individual attendee registered
ABC-2865 Scope: Sponsor attendee auto-creation preserves existing on increase, warns on decrease, prevents deletion of sponsored events, and auto-populates custom fields from included items.
โ–ถ
Tickets Management & Copy

What to Test: Ticket copy, function association, "Include $0 on Invoice" flag.

  • Copy ticket โ€” default name becomes "[ticket name] - copy"
  • All ticket data (pricing, tax, custom fields, included items) copied to new ticket
  • Associate ticket with zero, one, or multiple functions (optional)
  • "Include $0 on Invoice" checkbox: checked = $0 items show on invoice, unchecked = hidden
  • Delete ticket with no registrations (succeeds)
  • Delete ticket with registrations (button hidden or error)
โ–ถ
Badges (Print & Preview)

What to Test: Badge printing options, custom field values, sponsor logos, filtering.

  • Stock options: 10/8/6 per card stock, 8 per sticky label
  • Sort by Company or By Individual
  • Badge content: Name, City/State, Member Since date
  • Optional custom field value on badge (ticket-specific field)
  • Optional sponsor logo on badge
  • Filters: Company, Individual, Ticket, Custom Field
  • Preview columns: Checkbox, Company, Individual, Registration Status, Ticket, Custom Field
  • Print and export preview
โ–ถ
Registration Availability Control

What to Test: Enable/disable registration, date/time windows, override behavior.

  • "Enable Registration" checkbox controls whether registrations open to portal
  • Registration Start Date/Time โ€” registrations not available before this
  • Registration End Date/Time โ€” registrations close at this time
  • Unchecking "Enable Registration" disables all portal registrations regardless of dates
  • Chapter Staff can still create registrations in Chapter Site even if portal registration closed
โ–ถ
Chapter Admin: Add & Edit Registration

What to Test: Registration creation form, field validation, auto-update rules, payment info read-only, workflow.

  • Keep Company Checkbox: Checked = pre-fill company on next Add (workflow optimization)
  • Registrant Selection: Type-ahead individual lookup (auto-complete + add new modal)
  • Company Selection: Type-ahead company lookup (auto-complete + add new modal)
  • Individual Fields: Informal Name, Email, Phone/Ext, Mobile, Title
  • Auto-Update Rule: If new contact info entered, individual record auto-updates in AMS
  • Ticket Selection: Select Ticket dropdown. Description/Price/Tax auto-fill. Quantity field. Total auto-calculates.
  • Registration Source: Dropdown from lookup table (not free text). Required field.
  • Payee Type: Default = company. Can select individual.
  • Payee Company/Individual: Type-ahead selectors
  • Payment Status: Open/Paid/etc. dropdown
  • PO Number: Optional field for corporate payments
  • Note: Internal notes field
  • Registration window controls, keep company checkbox, add new individual/company, auto-update rules, payment info read-only

    โ–ถ
    Registration Availability Control

    What to Test: Enable/disable registration, date/time windows, override behavior.

    • "Enable Registration" checkbox controls whether registrations open to portal
    • Registration Start Date/Time โ€” registrations not available before this
    • Registration End Date/Time โ€” registrations close at this time
    • Unchecking "Enable Registration" disables all portal registrations regardless of dates
    • Chapter Staff can still create registrations in Chapter Site even if portal registration closed
    โ–ถ
    Chapter Admin: Add & Edit Registration

    What to Test: Registration creation form, field validation, auto-update rules, payment info read-only, workflow.

    • Keep Company Checkbox: Checked = pre-fill company on next Add (workflow optimization)
    • Registrant Selection: Type-ahead individual lookup (auto-complete + add new modal)
    • Company Selection: Type-ahead company lookup (auto-complete + add new modal)
    • Individual Fields: Informal Name, Email, Phone/Ext, Mobile, Title
    • Auto-Update Rule: If new contact info entered, individual record auto-updates in AMS
    • Ticket Selection: Select Ticket dropdown. Description/Price/Tax auto-fill. Quantity field. Total auto-calculates.
    • Registration Source: Dropdown from lookup table (not free text). Required field.
    • Payee Type: Default = company. Can select individual.
    • Payee Company/Individual: Type-ahead selectors
    • Payment Status: Open/Paid/etc. dropdown
    • PO Number: Optional field for corporate payments
    • Note: Internal notes field
    READ-ONLY Fields: Payment Status, Reg Paid Date, Payment Type, CC fields. To record payment, use "Mark Paid" which navigates to the associated event invoice.
    โ–ถ
    Add New Individual & Company Modals

    What to Test: Quick individual/company creation during registration workflow.

    • Add Individual: First Name (required), Last Name (required), Company (type-ahead), Title (optional), Email (optional). Creates new record associated with selected company.
    • Add Company: Company Name (required), Phone (optional), Email (optional). Created as prospect: Level=Hot, Status=Active.
    • Source Type for new company: "Event Web Registration"
    • Code for new company: "Event"
    New Company Context: When a contact's company is not a member/prospect, a prospect record is auto-created with specific values to track lead source for sales follow-up.
    โ–ถ
    Custom Fields in Registration

    What to Test: Custom field capture and management during registration.

    • View all custom fields applicable based on tickets purchased
    • Display: Ticket Name, Custom Field Name, Field Value (editable)
    • Attendees auto-added during registration capture
    • Can manually edit field values for each attendee
    โ–ถ
    Browse & Manage Registrations

    What to Test: Registration filtering, status management, deletion constraints.

    • Filters: Open, Not Attending, Paid, Comped, All, Function, Member, Non-Member, Company, Individual
    • Columns: Company, Individual (defaults to "reserved attendee"), Registration Date, Status, Payee, Paid Date, Paid Type, Ticket Name, Ticket Price, Tax, Quantity, Total Price, Includes, Included In, Region, Web Registered (Y/N), Invoice #
    • Actions: Add Registration, Edit, Manage Custom Fields, Update Status, Mark Paid (modal), Mark Not Attending, Delete (only if payment status is "open")
    • Delete Constraint: Only open (unpaid) registrations can be deleted

Sponsors & Attendees

Sponsor attendee auto-creation edge cases, quantity changes, delete conditions, attendee dedup logic

โ–ถ
Browse & Add Sponsors

What to Test: Sponsor creation, attendee auto-creation, included items handling.

  • Browse Sponsors Tab: Filters (Open, Paid, Sponsor Ticket, Company). Columns show company, individual, date, status, payee, ticket, total, includes, web registered, invoice #.
  • Add Sponsor: Company (required, type-ahead + add new), Individual (optional), Contact Fields (Email, Phone/Ext, Mobile, Title)
  • Sponsor Logo: Upload or select from company logos
  • Ticket Selection: Sponsor Ticket dropdown, Description/Price/Tax auto-fill, Quantity, Tax, Total
  • Payment Info: Same structure as registration (Payee Type, Status, Payment Info, etc.)
  • Included Items: Multi-select tickets bundled with sponsor ticket. Quantity per each.
Attendee Auto-Creation: JIRA ONLY ยท ABC-2865 When sponsor is created/updated, attendees auto-created. Primary attendee = sponsor contact. Remaining attendees = "Reserved Attendee" placeholders. Quantity increase preserves existing data; decrease warns before deletion.
โ–ถ
Delete Sponsor Conditions

What to Test: Sponsor deletion constraints (three conditions must ALL be met).

  • Sponsor status must be = "Open" (not Paid or Comped)
  • Sponsor must have NO associated invoice
  • Sponsor must have NO individual attendees registered (reserved attendees OK)
All Three Must Be True: If ANY condition fails (status not open, invoice exists, individual registered), delete button hidden or error shown. Test each condition independently.
โ–ถ
Browse Attendees & Deduplication

What to Test: Attendee deduplication despite multiple registrations/sponsors.

  • CRITICAL RULE: Attendee shows ONCE in table despite multiple tickets or multiple sponsors
  • Filters: Company, Status, Ticket, Sponsor Attendee (Y/N), Attendee Name
  • Columns: First Name ("Reserved Attendee" if unnamed), Last Name, Email, Company (with Company Status), Payment Status, Tickets (comma-separated), Sponsor Attendee (Y/N), Additional Information
  • Color Coding: Payment Status shows green/red. Sponsor Attendee shows green/red.
  • Actions: Edit (modal with all registration fields), Mark Not Attending, Export to Excel
Dedup Testing Scenario: Register John for Dinner Ticket and Golf Ticket. Create Sponsor with John as primary attendee for included Cocktail Ticket. Browse Attendees โ€” John appears ONCE with "Tickets: Dinner, Golf, Cocktail (via Sponsor)".

Payment & Cart

Pay Now vs Request Invoice vs Cart, capacity during cart, zero-dollar invoices, gateway failures, invoice badges

โ–ถ
Portal Registration Step 4: Payment Options

What to Test: Three payment paths: Pay Now, Request Invoice, Add to Cart.

  • Registration Summary Display: Ticket Name, Price, Quantity, # Attendees, Included Items, Total
  • Pay Now: Credit Card or ACH (via chapter-configured gateway). Immediate payment. Marks registration as Paid.
  • Request Invoice: Creates unpaid registration, auto-generates unpaid invoice. Member can pay later. Controlled by chapter setting "Allow invoice requests during portal event registration" (event-level override).
  • Add to Cart: Holds for multi-event checkout. Item visible in cart with Remove button.
Cart Behavior: Cart items do NOT create registrations until checkout completes. If ticket capacity fills while item in cart, checkout fails with capacity error.
โ–ถ
Shopping Cart Workflow

What to Test: Cart capacity validation, multi-event checkout, item management.

  • Add multiple tickets from same event to cart
  • Add tickets from different events to cart (single cart for all)
  • Cart Contents Display: Ticket Name, Price, Included Attendees, Included Items, Quantity, Subtotal, Remove button
  • Order Summary: Total with tax, Proceed to Checkout button
  • CRITICAL: Cart items โ‰  registrations until checkout completes
  • Capacity Check at Checkout: If ticket capacity filled while item in cart, checkout fails with capacity error message (not silent failure)
  • Remove item from cart before checkout
  • Proceed to Checkout โ†’ payment gateway (CC/ACH selection)
Capacity Test Scenario: Add 5 tickets to cart (Max Available=10, 7 already sold). Later, 4 more registrations completed. Cart now has 11 total. Checkout should fail with capacity message.
โ–ถ
Invoice Generation & Payment Recording

What to Test: Invoice creation, zero-dollar invoices, payment recording, gateway failures.

  • Pay Now Flow: Payment processed immediately. Registration marked Paid. Invoice created and marked Paid.
  • Request Invoice Flow: Registration created as "unpaid". Unpaid invoice auto-generated. Member views/prints invoice. Can pay later via portal link.
  • Zero-Dollar Invoices: Free events generate zero-dollar invoices (ensures consistent reporting)
  • Invoice Number: Auto-generated in standard format upon creation
  • Gateway Failures: If payment gateway returns error (timeout, declined card, etc.), registration remains "unpaid" and no invoice created. Error message displayed to user.
  • Duplicate Prevention: Double-click on Proceed to Checkout blocked (client-side or server-side guard)
โ–ถ
Chapter Admin: Mark Paid & Payment Entry

What to Test: Staff payment entry workflow and constraints.

  • "Mark Paid" on registration navigates to associated event invoice in new tab
  • Paid invoice screen allows payment entry (Credit Card via gateway or Cash/Check manual)
  • Payment info recorded: amount, date, method
  • Registration status updated to Paid
  • Contact history updated with Dues History entry
  • Confirmation email sent to chapter (CC/BCC per config) and member
โ–ถ
Invoice Badges & Versions

What to Test: Invoice badge updates and version tracking.

  • 'Parent' Badge: Unchanged (original invoice in version chain)
  • 'Current' Badge Renamed to 'Viewing': Current badge renamed for clarity when viewing specific invoice version
  • New 'Latest' Badge: Applied to newest invoice version in chain
  • Verify badges appear correctly on Event Invoices tab (event-level view)
  • Verify badges remain consistent across module-level Event Invoices view
โ–ถ
Browse Event Invoices & Management

What to Test: Invoice viewing, filtering, status management.

  • Module-Level View: Filters (Member/Non-Member, Company, Event, Status, Payment Date Range). Columns: Invoice #, Invoice Date, Company, Event, Event Start Date, Registrant, Amount, Payment Status, Payment Date, Due Date.
  • Event-Level View: Same as above but scoped to single event. Invoice badges visible (Parent, Viewing, Latest).
  • Actions: Send Unpaid Invoice Email (batch), View Invoice detail, Export PDF/Excel, Print-to-Mail
  • Clickable Invoice # opens detail view
  • Invoice PDF export and print functionality

Coupon & Discounts

Coupon validation edge cases, scope testing, usage limits, one-time-per-user, expiration, manual discounts

โ–ถ
Coupon Code Configuration

What to Test: Create coupons with various scopes, discounts, and usage rules.

  • Coupon Code: Alphanumeric, unique per chapter, no spaces
  • Discount Type: Percentage (0-100%) or Fixed Dollar Amount
  • Event Scope: All Events (default), Selected Events (multi-select), Selected Event Tickets (multi-select specific tickets within event)
  • Usage Limits: Max Usage Count (blank=unlimited, numeric=max total uses), One-time-per-user checkbox
  • Expiration Date: Optional date picker. Auto-transitions status to Expired when date passes.
  • Status: Active (default) or Inactive (cannot be applied if inactive)
Scope Testing: Test coupon applied to all events, to selected events only, and to selected tickets within an event. Verify scope validation during checkout.
โ–ถ
Portal Coupon Application & Validation

What to Test: Coupon validation rules, security, error handling.

  • Text input field with Apply button during checkout
  • Real-time validation with error/success messages
  • Display: Original price, Discount amount, Final price after discount
  • Can remove coupon before final checkout
  • Non-Member Requirement: Must log in to apply coupons (security measure)
  • One-time-per-user Validation: Returns proper error message (not 500 error) when same user attempts second use
  • Verify Max Usage Count enforced (prevent overage)
  • Verify expired coupons rejected with clear message
  • Verify scope rules enforced (coupon not applicable to selected ticket shown as error)
Security Rule: Non-members must be logged in to use coupons. Never allow anonymous coupon application.
โ–ถ
Manual Discount (Chapter Admin)

What to Test: Staff discount application during registration creation.

  • Discount Type: Percentage or Fixed Dollar Amount
  • Discount Value: Numeric
  • Discount Reason/Notes: Optional internal notes (e.g., "loyalty discount", "staff courtesy")
  • Auto-calculates discounted price, preserves original price for reporting
  • Tracks which staff member applied discount (audit trail)
โ–ถ
Discount Reporting & Tracking

What to Test: Discount visibility and audit trail.

  • Registration Tab Additional Columns: Discount Applied ("Coupon Code" or "Manual Discount" or blank), Discount Amount, Discounted Price
  • Coupon Code Usage Reporting (Metabase): Total usage count, revenue impact, usage by event, member vs non-member split, usage timeline
  • Export discounted prices and amounts for accounting reconciliation

Scenario Thinking

Cross-functional scenarios, what-if analysis, and integration testing patterns

โ–ถ
End-to-End Registration Flows

Scenario 1: Basic Registration with Single Ticket

  • Create event with one ticket type
  • Browse event on portal (public access)
  • Register (login required)
  • Cart holds ticket, not yet registration
  • Proceed to checkout โ†’ registration created, payment captured
  • Attendee now listed in event registrations

Scenario 2: Multiple Ticket Types with Capacity

  • Event has 2 ticket types: Standard ($50, qty 30) and VIP ($100, qty 10)
  • Register 29 Standard tickets
  • Try to add 2 more Standard (exceeds capacity) โ†’ cart validation fails at checkout
  • Switch to VIP, add 1 VIP ticket โ†’ succeeds (VIP has capacity)
  • Checkout: Mixed ticket order created, both counts decremented

Scenario 3: Coupons with One-Time Use

  • Create one-time use coupon: 20% off, used by User A
  • User B tries coupon โ†’ proper error (not 500)
  • Create multi-use coupon (uses remaining = 3)
  • User B, C, D each use it โ†’ succeeds 3 times, 4th user gets error
โ–ถ
Event Lifecycle Transitions

Scenario 1: Create Event with Functions, Then Delete

  • Create event, add 2 functions with tickets
  • Delete event: Can only delete if NO registrations across all functions
  • If even one registration exists: Delete blocked, proper error message

Scenario 2: Copy Event with All Settings

  • Source event: 3 functions, 5 ticket types, coupons, sponsors
  • Copy event: New event ID, same structure, fresh registration lists
  • Coupons and sponsors are NOT copied (new event must configure independently)
  • Capacity numbers reset to original configuration
โ–ถ
Payment & Tax Edge Cases

Scenario 1: Tax Calculation with Coupons

  • Ticket price $100, tax rate 8%, coupon 10% off
  • Subtotal before tax: $100 ร— 0.9 = $90
  • Tax applied: $90 ร— 0.08 = $7.20
  • Total: $97.20
  • Tax is NOT applied to coupon discount itself

Scenario 2: Multiple Coupons on Single Order

  • Only one coupon allowed per registration/checkout
  • If user applies coupon during cart, switching coupons replaces the original
  • Order history shows which coupon was applied
โ–ถ
Sponsor Auto-Attendee Creation

Scenario: Sponsor with Multiple Attendee Seats

  • Add Sponsor: Company XYZ, Quantity 3 (reserved seats)
  • System auto-creates 3 attendee records, all linked to Company XYZ
  • Attendees appear in event registration list as system-generated
  • If sponsor removed: Attendees can be deleted or kept as orphaned records (depends on business rule)
  • Sponsor attendees may have special permissions or badge tracking in portal
โ–ถ
Portal Registration with Field Isolation

Scenario: User Edits Email During Portal Registration

  • User logged in as john@example.com, email in database
  • During portal registration, user edits email to john.smith@example.com
  • Registration is created with john.smith@example.com
  • User's database record still shows john@example.com (not updated)
  • Portal edits are registration-specific, not persistent

Scenario: New Prospect Auto-Creation

  • User's company not a current member/prospect
  • Registration triggers auto-create: new prospect record with Level=Hot, Status=Active
  • Source Type: "Event Web Registration"
  • Prospect code auto-generated based on event

Regression Checklists

Organized by feature area to ensure complete coverage across all modules

โ–ถ
Event Management Checklist
  • โ˜ Create new event with all required fields
  • โ˜ Edit event details (name, description, dates, location)
  • โ˜ Delete event with no registrations
  • โ˜ Attempt delete with registrations (should fail with proper error)
  • โ˜ Copy event to create duplicate structure
  • โ˜ Browse events list with sorting/filtering
  • โ˜ Set event status (Draft, Published, Cancelled)
  • โ˜ Verify event visibility on portal based on status
  • โ˜ Event dates and time zones respected
  • โ˜ Event location dropdown populated correctly
  • โ˜ Event classification filtering works on portal
โ–ถ
Function Management Checklist
  • โ˜ Add function to event
  • โ˜ Function requires name and date
  • โ˜ Function date cannot be before event date
  • โ˜ Edit function details
  • โ˜ Delete function with no registrations
  • โ˜ Delete function with registrations (should fail)
  • โ˜ Add multiple functions to single event
  • โ˜ Functions display correctly in registration flow
  • โ˜ Function order can be customized (if applicable)
  • โ˜ Function registration counts tracked independently
โ–ถ
Ticket Type Checklist
  • โ˜ Create ticket type with price
  • โ˜ Create ticket type with capacity limit
  • โ˜ Ticket price is required field
  • โ˜ Price must be numeric and >= 0
  • โ˜ Capacity defaults to unlimited if not set
  • โ˜ Edit ticket price and capacity
  • โ˜ Delete ticket with no registrations
  • โ˜ Delete ticket with registrations (should fail)
  • โ˜ Multiple ticket types on same function
  • โ˜ Ticket capacity enforcement at checkout
  • โ˜ Available quantity shows correctly on portal
  • โ˜ Sold out tickets display proper message
โ–ถ
Cart & Checkout Checklist
  • โ˜ Cart created but registration not created until checkout
  • โ˜ Add ticket to cart
  • โ˜ Adjust quantity in cart
  • โ˜ Remove item from cart
  • โ˜ Apply coupon code to cart
  • โ˜ Verify coupon discount calculated correctly
  • โ˜ Tax calculated on subtotal after coupon
  • โ˜ Total price = (subtotal - coupon) ร— (1 + tax rate)
  • โ˜ Can remove coupon from cart
  • โ˜ Switch coupons (old one replaced)
  • โ˜ Checkout with valid cart โ†’ registration created
  • โ˜ Checkout with expired coupon โ†’ proper error
  • โ˜ Checkout with used one-time coupon โ†’ proper error
  • โ˜ Checkout with capacity exceeded โ†’ proper error
  • โ˜ Payment processing succeeds
  • โ˜ Payment failure is handled gracefully
  • โ˜ Cart persists across sessions (if allowed)
โ–ถ
Registration & Attendee Checklist
  • โ˜ Registration created after checkout
  • โ˜ Registrant email recorded correctly
  • โ˜ Registrant name split into first/last
  • โ˜ Attendee record created for each registration
  • โ˜ Attendee status reflects registration (confirmed, cancelled, etc.)
  • โ˜ Multiple registrations on same event tracked independently
  • โ˜ Registration deletion removes associated attendee(s)
  • โ˜ Registration capacity counts deducted from ticket availability
  • โ˜ Edit registrant contact information (email, name, phone)
  • โ˜ Download attendee list with all fields
  • โ˜ Badge/check-in functionality working
  • โ˜ Email confirmations sent to registrants
โ–ถ
Coupon Management Checklist
  • โ˜ Create coupon with discount percentage
  • โ˜ Create coupon with one-time use restriction
  • โ˜ Create coupon with limited use count (3 uses remaining)
  • โ˜ Create coupon with expiration date
  • โ˜ Edit coupon details and restrictions
  • โ˜ Apply coupon to specific event or all events
  • โ˜ Apply coupon during registration (portal)
  • โ˜ One-time use coupon error on second attempt (not 500)
  • โ˜ Limited use coupon error when uses exhausted
  • โ˜ Expired coupon error message
  • โ˜ Invalid coupon code error message
  • โ˜ Coupon discount reflected in order total
  • โ˜ Coupon usage tracked in admin reports
  • โ˜ Delete unused coupon
  • โ˜ Cannot delete coupon with usage history (or archived instead)
โ–ถ
Sponsor Management Checklist
  • โ˜ Add sponsor to event
  • โ˜ Specify sponsor quantity (reserved seats)
  • โ˜ System auto-creates attendee records per quantity
  • โ˜ Edit sponsor details and quantity
  • โ˜ Remove sponsor from event
  • โ˜ Sponsor attendees appear in registration list
  • โ˜ Sponsor attendees marked as system-generated
  • โ˜ Multiple sponsors on same event tracked correctly
  • โ˜ Sponsor attendee count deducted from available capacity
  • โ˜ Sponsor details visible on event (if public-facing)
โ–ถ
Portal Experience Checklist
  • โ˜ Public access to event portal (/portal/events)
  • โ˜ Portal disabled โ†’ events not accessible
  • โ˜ List view displays events in table format
  • โ˜ Grid view displays events as cards
  • โ˜ Calendar view displays events by month
  • โ˜ Default view setting respected
  • โ˜ View switcher works across all three modes
  • โ˜ Event search by name and description
  • โ˜ Location filter shows only applicable locations
  • โ˜ Classification filter shows only current/upcoming classifications
  • โ˜ Only current and upcoming events displayed (past hidden)
  • โ˜ Register button requires authentication
  • โ˜ Portal Step 1: Contact information auto-populated if logged in
  • โ˜ Portal Step 1: Users can edit contact fields for registration
  • โ˜ Portal Step 1: Changes do not persist to database
  • โ˜ Portal Step 2: Select tickets and quantities
  • โ˜ Portal Step 3: Apply coupons if applicable
  • โ˜ Portal Step 4: Review and confirm registration
  • โ˜ Portal registration confirmation email sent
  • โ˜ New prospect auto-created if company not in system
โ–ถ
Tax & Payment Checklist
  • โ˜ Tax rate configured at chapter/event level
  • โ˜ Tax is percentage-based (not flat amount)
  • โ˜ Tax applied to subtotal AFTER coupon discount
  • โ˜ Tax calculation: (subtotal - coupon) ร— (1 + tax%)
  • โ˜ Payment gateway integration working
  • โ˜ Payment processing successful for valid cards
  • โ˜ Payment failure handled with user-friendly error
  • โ˜ Payment method persisted if user allows
  • โ˜ Multiple payment attempts tracked
  • โ˜ Refund processing available
  • โ˜ Partial refund handling
  • โ˜ Transaction receipt sent to email
  • โ˜ Transaction tracked in order history
โ–ถ
Data Integrity & Permissions Checklist
  • โ˜ Event owner can edit own events
  • โ˜ Other users cannot edit events they don't own
  • โ˜ Read-only access for viewers
  • โ˜ Delete permission restricted to owners/admins
  • โ˜ Registrations linked to correct events
  • โ˜ No orphaned registrations in database
  • โ˜ Capacity counts accurate after multiple operations
  • โ˜ Discount calculations consistent
  • โ˜ Tax calculations consistent
  • โ˜ Historical records preserved for audit
  • โ˜ No data loss during event/function/ticket deletion
  • โ˜ No duplicate registrations
  • โ˜ No race conditions with concurrent checkouts

Environment & Data Setup

Test environment configuration and data prerequisites for comprehensive testing

โ–ถ
Test Environment Requirements

Sandbox Environment Setup:

  • ABC Events module installed and activated
  • Event portal enabled (not disabled)
  • Payment gateway sandbox configured (Stripe test keys, etc.)
  • SMTP configured for email notifications
  • Chapter/organization configured with location and classification settings
  • Test user accounts created with various permission levels:
    • Event Admin (can create/edit/delete events)
    • Event Viewer (read-only access)
    • Portal User (can register for events)
    • Anonymous/Portal Visitor (public event access)
  • Test email inbox configured for capturing notifications
  • Test payment cards provisioned (Stripe test cards)
โ–ถ
Data Prerequisites

Base Data to Create:

  • Locations: New York, Los Angeles, Chicago, Denver, Remote
  • Classifications: Training, Networking, Executive, Virtual, Hybrid
  • Test Companies:
    • Member Company (existing in system)
    • Prospect Company (for auto-creation testing)
    • Non-member Company (for prospect auto-creation)
  • Test Contacts:
    • Admin User (can create events)
    • Regular User (can register)
    • Multiple contacts at same company (for sponsor testing)
  • Base Event Templates (for copying tests):
    • Simple Event (1 function, 1 ticket type)
    • Complex Event (3 functions, 5 ticket types, sponsors, coupons)
    • Capacity-Limited Event (small quantities to test overflow)
โ–ถ
Test Data Reset Procedures

Between Test Cycles:

  • Delete all test events created during the cycle (not template events)
  • Clear all test registrations and cart data
  • Reset coupon usage counts to original limits
  • Reset ticket capacity counts if modified
  • Clear email notification queue (optional, depending on test isolation)

Database Cleanup:

  • Preserve base data (locations, classifications, template companies)
  • Remove all orphaned registrations
  • Clear event history logs older than 30 days (if applicable)
  • Verify no duplicate records in critical tables

API Testing Data:

  • Create API token for automated testing
  • Provision test API endpoints for event creation/reading
  • Verify API rate limits don't interfere with test cycles
โ–ถ
Test Data Scenarios to Prepare

Regression Cycle Setup:

  • Event 1: Basic Registration
    • Name: "Basic Training Event"
    • 1 function, 1 ticket type ($50)
    • Capacity: 50
    • Location: New York
    • Classification: Training
  • Event 2: Multi-Function with Multiple Tickets
    • Name: "Executive Networking Summit"
    • 3 functions (Opening, Sessions, Dinner)
    • 3 ticket types: Early Bird ($80, qty 25), Regular ($100, qty 40), VIP ($150, qty 10)
    • Location: Chicago
    • Classification: Executive
  • Event 3: With Coupons and Sponsors
    • Name: "Virtual Learning Workshop"
    • 1 function, 2 ticket types
    • Coupons: EARLYBIRD (20% off, 1-use), PARTNER (15% off, 5-use), EXPIRED (expired date)
    • Sponsors: 3 companies with reserved seats
    • Classification: Virtual
โ–ถ
Performance & Load Testing Data

Capacity Tests:

  • Event with 1000+ registrations (concurrent checkout stress)
  • Event with 50+ functions and 100+ ticket types (UI responsiveness)
  • Portal search with 10,000+ events (search performance)

Data Volume Tests:

  • Large coupon lists (500+ coupons across multiple events)
  • Large sponsor lists (100+ sponsors per event)
  • Historical data archives (2+ years of event data)

Concurrent User Tests:

  • 100 simultaneous registrations on same event
  • Multiple users applying same coupon simultaneously
  • Capacity exhaustion race condition detection