| Server IP : 35.80.110.71 / Your IP : 216.73.216.221 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ip-172-31-21-44 6.17.0-1019-aws #19~24.04.1-Ubuntu SMP Tue Jun 23 18:53:06 UTC 2026 x86_64 User : ubuntu ( 1000) PHP Version : 8.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/elite-events-tests/results/ |
Upload File : |
<html><head><meta charset="utf-8"/><title>Elite Events Test Report</title><style type="text/css">:root {
--text-primary: #111;
--text-secondary: #4f4f4f;
--success: #006633;
--success-bright: #80ffbf;
--danger: #cc071e;
--danger-bright: #fbdfe0;
--warning: #995c00;
--warning-bright: #ffeea8;
--panel: #eee;
--border: #949494;
--disabled: #6b6b6b;
}
html,
body {
font-family: Arial, Helvetica, sans-serif;
font-size: 16px;
margin: 0;
padding: 0;
color: var(--text-primary);
}
body {
padding: 2rem 1rem;
}
.jesthtml-content {
margin: 0 auto;
max-width: 70rem;
}
header {
display: flex;
align-items: center;
}
#title {
margin: 0;
flex-grow: 1;
}
#logo {
height: 4rem;
}
#timestamp {
color: var(--text-secondary);
margin-top: 0.5rem;
}
#metadata-container {
display: flex;
flex-direction: column;
gap: 2rem;
margin-bottom: 2rem;
}
.additional-information-container {
display: flex;
flex-direction: column;
gap: 0.5rem;
color: var(--text-secondary);
}
/** SUMMARY */
#summary {
color: var(--text-primary);
display: flex;
font-family: monospace;
font-size: 1rem;
}
#summary > div {
margin-right: 0.5rem;
background: var(--panel);
padding: 1rem;
min-width: 15rem;
}
#summary > div:last-child {
margin-right: 0;
}
@media only screen and (max-width: 720px) {
#summary {
flex-direction: column;
}
#summary > div {
margin-right: 0;
margin-top: 1rem;
}
#summary > div:first-child {
margin-top: 0;
}
}
.summary-total {
font-weight: bold;
margin-bottom: 0.5rem;
}
.summary-passed {
color: var(--success);
border-left: 0.4rem solid var(--success);
padding-left: 0.5rem;
margin-bottom: 0.15rem;
}
.summary-failed,
.summary-obsolete-snapshots {
color: var(--danger);
border-left: 0.4rem solid var(--danger);
padding-left: 0.5rem;
margin-bottom: 0.15rem;
}
.summary-pending {
color: var(--warning);
border-left: 0.4rem solid var(--warning);
padding-left: 0.5rem;
margin-bottom: 0.15rem;
}
.summary-empty {
color: var(--disabled);
border-left: 0.4rem solid var(--disabled);
margin-bottom: 0.15rem;
}
.test-result {
padding: 1rem;
margin-bottom: 0.25rem;
}
.test-result:last-child {
border: 0;
}
.test-result.passed {
background-color: var(--success-bright);
color: var(--success);
}
.test-result.failed {
background-color: var(--danger-bright);
color: var(--danger);
}
.test-result.pending {
background-color: var(--warning-bright);
color: var(--warning);
}
.test-info {
display: flex;
justify-content: space-between;
}
.test-suitename {
width: 20%;
text-align: left;
font-weight: bold;
word-break: break-word;
}
.test-title {
width: 40%;
text-align: left;
font-style: italic;
}
.test-status {
width: 20%;
text-align: right;
}
.test-duration {
width: 10%;
text-align: right;
font-size: 0.85rem;
}
.failureMessages {
padding: 0 1rem;
margin-top: 1rem;
border-top: 1px dashed var(--danger);
}
.failureMessages.suiteFailure {
border-top: none;
}
.failureMsg {
white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;
}
.suite-container {
margin-bottom: 1rem;
}
.suite-info {
padding: 1rem;
background-color: var(--panel);
color: var(--text-secondary);
border: 0.15rem solid;
border-color: var(--panel);
display: flex;
align-items: center;
margin-bottom: 0.25rem;
}
.suite-info:hover {
border-color: var(--border);
cursor: pointer;
}
.suite-info .suite-path {
word-break: break-all;
flex-grow: 1;
font-family: monospace;
font-size: 1rem;
}
.suite-info .suite-time {
margin-left: 1rem;
padding: 0.2rem 0.3rem;
font-size: 0.85rem;
}
.suite-info .suite-time.warn {
background-color: var(--danger);
color: #fff;
}
.suite-info:before {
content: "\2303";
display: inline-block;
margin-right: 1rem;
transform: rotate(180deg) translateY(0.15rem);
}
.suite-container[open] .suite-info:before {
transform: rotate(0deg) translateY(0.15rem);
}
/* CONSOLE LOGS */
.suite-consolelog {
margin-bottom: 0.25rem;
padding: 1rem;
background-color: var(--panel);
}
.suite-consolelog-header {
font-weight: bold;
}
.suite-consolelog-item {
padding: 0.5rem;
}
.suite-consolelog-item pre {
margin: 0.5rem 0;
white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;
}
.suite-consolelog-item-origin {
color: var(--text-secondary);
font-weight: bold;
}
.suite-consolelog-item-message {
color: var(--text-primary);
font-size: 1rem;
padding: 0 0.5rem;
}
/* OBSOLETE SNAPSHOTS */
.suite-obsolete-snapshots {
margin-bottom: 0.25rem;
padding: 1rem;
background-color: var(--danger-bright);
color: var(--danger);
}
.suite-obsolete-snapshots-header {
font-weight: bold;
}
.suite-obsolete-snapshots-item {
padding: 0.5rem;
}
.suite-obsolete-snapshots-item pre {
margin: 0.5rem 0;
white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;
}
.suite-obsolete-snapshots-item-message {
color: var(--text-primary);
font-size: 1rem;
padding: 0 0.5rem;
}
</style></head><body><main class="jesthtml-content"><header><h1 id="title">Elite Events Test Report</h1></header><section id="metadata-container"><div id="timestamp">Started: 2026-01-05 20:22:22</div><div id="summary"><div id="suite-summary"><div class="summary-total">Suites (308)</div><div class="summary-passed ">307 passed</div><div class="summary-failed ">1 failed</div><div class="summary-pending summary-empty">0 pending</div></div><div id="test-summary"><div class="summary-total">Tests (7313)</div><div class="summary-passed ">7306 passed</div><div class="summary-failed ">4 failed</div><div class="summary-pending ">3 pending</div></div></div></section><details id="suite-1" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\orders\__tests__\route.test.ts</div><div class="suite-time warn">7.363s</div></summary><div class="suite-tests"><div class="test-result pending"><div class="test-info"><div class="test-suitename">POST /api/orders > Rate limiting</div><div class="test-title">returns 429 when rate limit exceeded</div><div class="test-status">pending</div><div class="test-duration"> </div></div></div><div class="test-result pending"><div class="test-info"><div class="test-suitename">GET /api/orders > Rate limiting</div><div class="test-title">returns 429 when rate limit exceeded</div><div class="test-status">pending</div><div class="test-duration"> </div></div></div></div></details><details id="suite-2" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\orders\__tests__\[id].test.ts</div><div class="suite-time warn">5.609s</div></summary><div class="suite-tests"><div class="test-result pending"><div class="test-info"><div class="test-suitename">GET /api/orders/[id] > Rate limiting</div><div class="test-title">returns 429 when rate limit exceeded</div><div class="test-status">pending</div><div class="test-duration"> </div></div></div></div></details><details id="suite-3" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\cron\slo-check\__tests__\route.test.ts</div><div class="suite-time warn">6.464s</div></summary><div class="suite-tests"><div class="test-result failed"><div class="test-info"><div class="test-suitename">SLO Check Cron Job > POST /api/cron/slo-check</div><div class="test-title">calls checkAndAlertSLOs with correct config</div><div class="test-status">failed</div><div class="test-duration">0.009s</div></div><div class="failureMessages"> <pre class="failureMsg">Error: expect(jest.fn()).toHaveBeenCalledWith(...expected)
Expected: {"alertOnCritical": true, "alertOnWarning": false, "enabled": true}
Number of calls: 0
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\cron\slo-check\__tests__\route.test.ts:125:37)
at processTicksAndRejections (node:internal/process/task_queues:105:5)</pre></div></div><div class="test-result failed"><div class="test-info"><div class="test-suitename">SLO Check Cron Job > POST /api/cron/slo-check</div><div class="test-title">returns alert details in response</div><div class="test-status">failed</div><div class="test-duration">0.023s</div></div><div class="failureMessages"> <pre class="failureMsg">Error: expect(received).toMatchObject(expected)
- Expected - 13
+ Received + 1
Object {
- "alertsResolved": 1,
- "alertsSkipped": 1,
- "alertsTriggered": 2,
- "breachingSLOs": ArrayContaining [
- ObjectContaining {
- "name": "API Availability",
- },
- ObjectContaining {
- "name": "Latency P95",
- },
- ],
- "slosChecked": 6,
- "success": true,
+ "error": "Unauthorized",
}
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\cron\slo-check\__tests__\route.test.ts:162:20)
at processTicksAndRejections (node:internal/process/task_queues:105:5)</pre></div></div><div class="test-result failed"><div class="test-info"><div class="test-suitename">SLO Check Cron Job > POST /api/cron/slo-check</div><div class="test-title">returns 500 on error</div><div class="test-status">failed</div><div class="test-duration">0.009s</div></div><div class="failureMessages"> <pre class="failureMsg">Error: expect(received).toBe(expected) // Object.is equality
Expected: 500
Received: 401
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\cron\slo-check\__tests__\route.test.ts:183:31)
at processTicksAndRejections (node:internal/process/task_queues:105:5)</pre></div></div><div class="test-result failed"><div class="test-info"><div class="test-suitename">SLO Check Cron Job > GET /api/cron/slo-check</div><div class="test-title">delegates to POST handler</div><div class="test-status">failed</div><div class="test-duration">0.007s</div></div><div class="failureMessages"> <pre class="failureMsg">Error: expect(received).toBe(expected) // Object.is equality
Expected: 200
Received: 401
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\cron\slo-check\__tests__\route.test.ts:202:31)
at processTicksAndRejections (node:internal/process/task_queues:105:5)</pre></div></div></div></details><details id="suite-4" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\dev-tools\__tests__\markdown-parser.test.ts</div><div class="suite-time warn">10.228s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Markdown Parser > parseMarkdownFile</div><div class="test-title">should parse an existing markdown file</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Markdown Parser > parseMarkdownFile</div><div class="test-title">should return null for non-existent file</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Markdown Parser > getPlans</div><div class="test-title">should return plans grouped by active and archived</div><div class="test-status">passed</div><div class="test-duration">0.936s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Markdown Parser > getPlans</div><div class="test-title">should have active plans with status active</div><div class="test-status">passed</div><div class="test-duration">0.47s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Markdown Parser > getPlans</div><div class="test-title">should have archived plans with status archived</div><div class="test-status">passed</div><div class="test-duration">0.431s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Markdown Parser > getPlanBySlug</div><div class="test-title">should find an existing plan by slug</div><div class="test-status">passed</div><div class="test-duration">0.495s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Markdown Parser > getPlanBySlug</div><div class="test-title">should return null for non-existent plan slug</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Markdown Parser > getGuides</div><div class="test-title">should return an array of guides</div><div class="test-status">passed</div><div class="test-duration">0.484s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Markdown Parser > getGuideBySlug</div><div class="test-title">should find an existing guide by slug</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Markdown Parser > getGuideBySlug</div><div class="test-title">should return null for non-existent guide slug</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-5" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Input\__tests__\Input.test.tsx</div><div class="suite-time warn">6.858s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Basic Rendering - Text Input</div><div class="test-title">renders text input by default</div><div class="test-status">passed</div><div class="test-duration">0.177s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Basic Rendering - Text Input</div><div class="test-title">renders with label</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Basic Rendering - Text Input</div><div class="test-title">links label to input with htmlFor</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Basic Rendering - Text Input</div><div class="test-title">generates unique id when not provided</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Basic Rendering - Text Input</div><div class="test-title">forwards ref to input element</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Input Types</div><div class="test-title">renders as text input when as='input'</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Input Types</div><div class="test-title">renders different input types</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Input Types</div><div class="test-title">renders select dropdown when as='select'</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Input Types</div><div class="test-title">renders select with chevron icon</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Input Types</div><div class="test-title">renders textarea when as='textarea'</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Input Types</div><div class="test-title">passes rows attribute to textarea</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Sizes</div><div class="test-title">renders small size with correct padding</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Sizes</div><div class="test-title">renders medium size with correct padding</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Sizes</div><div class="test-title">renders large size with correct padding</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Sizes</div><div class="test-title">defaults to medium size</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Sizes</div><div class="test-title">applies size to select element</div><div class="test-status">passed</div><div class="test-duration">0.25s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Sizes</div><div class="test-title">applies size to textarea element</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Validation States</div><div class="test-title">renders default state with gray border</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Validation States</div><div class="test-title">renders success state with green border</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Validation States</div><div class="test-title">renders error state with red border</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Validation States</div><div class="test-title">renders warning state with yellow border</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Validation States</div><div class="test-title">error prop overrides state prop</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Error and Helper Text</div><div class="test-title">displays error message</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Error and Helper Text</div><div class="test-title">error message has correct styling</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Error and Helper Text</div><div class="test-title">error message has role='alert'</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Error and Helper Text</div><div class="test-title">displays helper text when no error</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Error and Helper Text</div><div class="test-title">helper text has correct styling</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Error and Helper Text</div><div class="test-title">hides helper text when error is present</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Error and Helper Text</div><div class="test-title">links error message to input with aria-describedby</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Error and Helper Text</div><div class="test-title">links helper text to input with aria-describedby</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Error and Helper Text</div><div class="test-title">sets aria-invalid when in error state</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Error and Helper Text</div><div class="test-title">does not set aria-invalid when no error</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Icons</div><div class="test-title">renders left icon</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Icons</div><div class="test-title">renders right icon</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Icons</div><div class="test-title">renders both left and right icons</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Icons</div><div class="test-title">adds left padding when left icon is present</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Icons</div><div class="test-title">adds right padding when right icon is present</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Icons</div><div class="test-title">icons are non-interactive (pointer-events-none)</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Icons</div><div class="test-title">does not render icons for select element</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Icons</div><div class="test-title">does not render icons for textarea</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Required Field</div><div class="test-title">shows asterisk when required</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Required Field</div><div class="test-title">sets required attribute on input</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Required Field</div><div class="test-title">sets required attribute on select</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Required Field</div><div class="test-title">sets required attribute on textarea</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Required Field</div><div class="test-title">does not show asterisk when not required</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Full Width</div><div class="test-title">renders full width container when fullWidth is true</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Full Width</div><div class="test-title">input element is always full width</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Disabled State</div><div class="test-title">disables input when disabled prop is true</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Disabled State</div><div class="test-title">applies disabled styles</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Disabled State</div><div class="test-title">disables select element</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Disabled State</div><div class="test-title">disables textarea element</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > User Interaction</div><div class="test-title">handles onChange for text input</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > User Interaction</div><div class="test-title">handles onChange for select</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > User Interaction</div><div class="test-title">handles onChange for textarea</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > User Interaction</div><div class="test-title">updates input value</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > User Interaction</div><div class="test-title">handles focus and blur events</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Placeholder</div><div class="test-title">displays placeholder text</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Placeholder</div><div class="test-title">placeholder has correct styling</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Placeholder</div><div class="test-title">select does not support placeholder</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Custom className</div><div class="test-title">merges custom className with base classes</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Custom className</div><div class="test-title">allows className override on select</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > HTML Attributes</div><div class="test-title">forwards name attribute</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > HTML Attributes</div><div class="test-title">forwards min and max for number input</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > HTML Attributes</div><div class="test-title">forwards maxLength attribute</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > HTML Attributes</div><div class="test-title">forwards autoComplete attribute</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > HTML Attributes</div><div class="test-title">forwards pattern attribute</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > HTML Attributes</div><div class="test-title">forwards data attributes</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Accessibility</div><div class="test-title">has no accessibility violations (text input)</div><div class="test-status">passed</div><div class="test-duration">0.205s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Accessibility</div><div class="test-title">has no accessibility violations (select)</div><div class="test-status">passed</div><div class="test-duration">0.27s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Accessibility</div><div class="test-title">has no accessibility violations (textarea)</div><div class="test-status">passed</div><div class="test-duration">0.14s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Accessibility</div><div class="test-title">has no accessibility violations (with error)</div><div class="test-status">passed</div><div class="test-duration">0.1s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Accessibility</div><div class="test-title">has no accessibility violations (with icons)</div><div class="test-status">passed</div><div class="test-duration">0.09s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Edge Cases</div><div class="test-title">handles empty select options</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Edge Cases</div><div class="test-title">handles very long error messages</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Edge Cases</div><div class="test-title">handles transitions between states</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Edge Cases</div><div class="test-title">handles controlled component pattern</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Combination Tests</div><div class="test-title">renders all props together correctly</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Input Component > Combination Tests</div><div class="test-title">combines error and all other features</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div></div></details><details id="suite-6" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\__tests__\ProductList.test.tsx</div><div class="suite-time warn">17.292s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Basic Rendering</div><div class="test-title">renders loading state initially</div><div class="test-status">passed</div><div class="test-duration">0.187s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Basic Rendering</div><div class="test-title">renders product list after loading</div><div class="test-status">passed</div><div class="test-duration">0.19s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Basic Rendering</div><div class="test-title">renders header with title and add button</div><div class="test-status">passed</div><div class="test-duration">0.114s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Basic Rendering</div><div class="test-title">displays total product count</div><div class="test-status">passed</div><div class="test-duration">0.134s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Table Display</div><div class="test-title">renders table with correct headers</div><div class="test-status">passed</div><div class="test-duration">0.215s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Table Display</div><div class="test-title">displays product SKUs</div><div class="test-status">passed</div><div class="test-duration">0.102s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Table Display</div><div class="test-title">displays dash for empty SKU</div><div class="test-status">passed</div><div class="test-duration">0.139s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Table Display</div><div class="test-title">displays category titles</div><div class="test-status">passed</div><div class="test-duration">0.126s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Table Display</div><div class="test-title">displays stock quantities</div><div class="test-status">passed</div><div class="test-duration">0.105s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Table Display</div><div class="test-title">displays image counts</div><div class="test-status">passed</div><div class="test-duration">0.099s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Table Display</div><div class="test-title">shows 'No image' for products without images</div><div class="test-status">passed</div><div class="test-duration">0.095s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Action Buttons</div><div class="test-title">renders Edit button for each product</div><div class="test-status">passed</div><div class="test-duration">0.412s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Action Buttons</div><div class="test-title">Edit buttons have correct aria-labels</div><div class="test-status">passed</div><div class="test-duration">0.207s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Action Buttons</div><div class="test-title">renders Delete button for each product</div><div class="test-status">passed</div><div class="test-duration">0.163s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Action Buttons</div><div class="test-title">Add Product button opens modal</div><div class="test-status">passed</div><div class="test-duration">0.136s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Search Functionality</div><div class="test-title">renders search input</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Search Functionality</div><div class="test-title">renders search button</div><div class="test-status">passed</div><div class="test-duration">0.083s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Search Functionality</div><div class="test-title">updates search input on change</div><div class="test-status">passed</div><div class="test-duration">0.578s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Search Functionality</div><div class="test-title">triggers search on form submit</div><div class="test-status">passed</div><div class="test-duration">0.637s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Search Functionality</div><div class="test-title">shows Clear button when search is active via URL</div><div class="test-status">passed</div><div class="test-duration">0.172s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Search Functionality</div><div class="test-title">clears search input on clear button click</div><div class="test-status">passed</div><div class="test-duration">0.484s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Delete Functionality</div><div class="test-title">calls confirmDelete when Delete is clicked</div><div class="test-status">passed</div><div class="test-duration">0.392s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Delete Functionality</div><div class="test-title">does not delete when confirmation is cancelled</div><div class="test-status">passed</div><div class="test-duration">0.267s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Delete Functionality</div><div class="test-title">deletes product when confirmation is accepted</div><div class="test-status">passed</div><div class="test-duration">0.39s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Delete Functionality</div><div class="test-title">removes product from list after successful delete</div><div class="test-status">passed</div><div class="test-duration">0.311s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Empty State</div><div class="test-title">shows empty state when no products</div><div class="test-status">passed</div><div class="test-duration">0.096s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Empty State</div><div class="test-title">shows hint when empty with active search</div><div class="test-status">passed</div><div class="test-duration">0.083s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Error Handling</div><div class="test-title">shows error message on fetch failure</div><div class="test-status">passed</div><div class="test-duration">0.14s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Error Handling</div><div class="test-title">shows error message on network error</div><div class="test-status">passed</div><div class="test-duration">0.147s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Pagination</div><div class="test-title">does not show pagination for single page</div><div class="test-status">passed</div><div class="test-duration">0.137s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Pagination</div><div class="test-title">shows pagination for multiple pages</div><div class="test-status">passed</div><div class="test-duration">0.173s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Pagination</div><div class="test-title">navigates to next page</div><div class="test-status">passed</div><div class="test-duration">0.224s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Pagination</div><div class="test-title">navigates to previous page</div><div class="test-status">passed</div><div class="test-duration">0.234s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">1.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Accessibility</div><div class="test-title">table has proper structure</div><div class="test-status">passed</div><div class="test-duration">0.293s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Image Display</div><div class="test-title">displays product thumbnail</div><div class="test-status">passed</div><div class="test-duration">0.177s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductList Component > Image Display</div><div class="test-title">displays first image for products with multiple images</div><div class="test-status">passed</div><div class="test-duration">0.17s</div></div></div></div></details><details id="suite-7" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\shop\ShopSidebar\__tests__\SizeDropdown.test.tsx</div><div class="suite-time warn">19.408s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SizeDropdown > Rendering</div><div class="test-title">renders the dropdown with title</div><div class="test-status">passed</div><div class="test-duration">0.248s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SizeDropdown > Rendering</div><div class="test-title">renders all size options</div><div class="test-status">passed</div><div class="test-duration">0.084s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SizeDropdown > Rendering</div><div class="test-title">renders toggle button with aria-label</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SizeDropdown > Rendering</div><div class="test-title">renders radio inputs for each size</div><div class="test-status">passed</div><div class="test-duration">0.923s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SizeDropdown > Dropdown toggle</div><div class="test-title">is expanded by default</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SizeDropdown > Dropdown toggle</div><div class="test-title">collapses when toggle button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.256s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SizeDropdown > Dropdown toggle</div><div class="test-title">expands when collapsed and toggle is clicked</div><div class="test-status">passed</div><div class="test-duration">0.487s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SizeDropdown > Dropdown toggle</div><div class="test-title">toggles when clicking the header area</div><div class="test-status">passed</div><div class="test-duration">0.296s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SizeDropdown > Size selection</div><div class="test-title">has M selected by default (first option has bg-blue)</div><div class="test-status">passed</div><div class="test-duration">0.138s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SizeDropdown > Size selection</div><div class="test-title">allows selecting different sizes via radio buttons</div><div class="test-status">passed</div><div class="test-duration">0.291s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SizeDropdown > Size selection</div><div class="test-title">only allows one size selected at a time (radio behavior)</div><div class="test-status">passed</div><div class="test-duration">0.297s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SizeDropdown > Accessibility</div><div class="test-title">radio inputs are screen reader accessible</div><div class="test-status">passed</div><div class="test-duration">0.081s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SizeDropdown > Accessibility</div><div class="test-title">all radios share the same name for grouping</div><div class="test-status">passed</div><div class="test-duration">0.073s</div></div></div></div></details><details id="suite-8" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\checkout\__tests__\Checkout.test.tsx</div><div class="suite-time warn">20.132s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Empty Cart State</div><div class="test-title">renders empty cart message when cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.196s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Empty Cart State</div><div class="test-title">shows Continue Shopping button when cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.307s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Empty Cart State</div><div class="test-title">redirects to shop when Continue Shopping is clicked</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Empty Cart State</div><div class="test-title">does not show form when cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Session Handling</div><div class="test-title">redirects to signin when not logged in</div><div class="test-status">passed</div><div class="test-duration">0.176s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Session Handling</div><div class="test-title">does not redirect when logged in</div><div class="test-status">passed</div><div class="test-duration">0.079s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Rendering</div><div class="test-title">renders checkout form with all sections</div><div class="test-status">passed</div><div class="test-duration">0.074s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Rendering</div><div class="test-title">renders shipping address selector</div><div class="test-status">passed</div><div class="test-duration">0.067s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Rendering</div><div class="test-title">renders billing address selector</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Rendering</div><div class="test-title">renders notes textarea</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Rendering</div><div class="test-title">renders submit button</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Rendering</div><div class="test-title">renders all child components</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Rendering</div><div class="test-title">shows login component when user is not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.081s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Rendering</div><div class="test-title">hides login component when user is authenticated</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Cart Display</div><div class="test-title">displays cart items in order summary</div><div class="test-status">passed</div><div class="test-duration">0.112s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Cart Display</div><div class="test-title">displays correct item subtotal</div><div class="test-status">passed</div><div class="test-duration">0.107s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Cart Display</div><div class="test-title">calculates and displays correct total</div><div class="test-status">passed</div><div class="test-duration">0.099s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Cart Display</div><div class="test-title">displays multiple cart items</div><div class="test-status">passed</div><div class="test-duration">0.064s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Submission - Success</div><div class="test-title">submits form with valid data</div><div class="test-status">passed</div><div class="test-duration">0.143s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Submission - Success</div><div class="test-title">shows loading spinner during submission</div><div class="test-status">passed</div><div class="test-duration">0.073s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Submission - Success</div><div class="test-title">shows success toast on successful order</div><div class="test-status">passed</div><div class="test-duration">0.149s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Submission - Success</div><div class="test-title">redirects to order confirmation page after successful order</div><div class="test-status">passed</div><div class="test-duration">0.157s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Submission - Success</div><div class="test-title">clears cart after successful order</div><div class="test-status">passed</div><div class="test-duration">0.142s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Submission - Error Handling</div><div class="test-title">shows error message on failed submission</div><div class="test-status">passed</div><div class="test-duration">0.156s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Submission - Error Handling</div><div class="test-title">shows error toast on failed submission</div><div class="test-status">passed</div><div class="test-duration">0.112s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Submission - Error Handling</div><div class="test-title">allows retry after error</div><div class="test-status">passed</div><div class="test-duration">0.203s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Form Submission - Error Handling</div><div class="test-title">shows default error message when API returns no error</div><div class="test-status">passed</div><div class="test-duration">0.184s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Event Tracking</div><div class="test-title">tracks checkout initiation on mount</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Event Tracking</div><div class="test-title">does not track checkout initiation when cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Event Tracking</div><div class="test-title">tracks purchase completion on successful order</div><div class="test-status">passed</div><div class="test-duration">0.256s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Notes Field</div><div class="test-title">allows entering optional notes</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Notes Field</div><div class="test-title">submits form without notes (optional field)</div><div class="test-status">passed</div><div class="test-duration">0.152s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Accessibility</div><div class="test-title">has no accessibility violations (empty cart)</div><div class="test-status">passed</div><div class="test-duration">0.188s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Accessibility</div><div class="test-title">has no accessibility violations (with cart items)</div><div class="test-status">passed</div><div class="test-duration">0.458s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Accessibility</div><div class="test-title">has proper form label</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkout Component > Accessibility</div><div class="test-title">error message has role alert</div><div class="test-status">passed</div><div class="test-duration">0.134s</div></div></div></div></details><details id="suite-9" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\account\MyAccount\__tests__\AddressModal.test.tsx</div><div class="suite-time warn">20.472s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Rendering</div><div class="test-title">renders modal when isOpen is true</div><div class="test-status">passed</div><div class="test-duration">0.596s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Rendering</div><div class="test-title">does not render modal when isOpen is false</div><div class="test-status">passed</div><div class="test-duration">0.138s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Rendering</div><div class="test-title">shows 'Edit Address' title when editing existing address</div><div class="test-status">passed</div><div class="test-duration">0.133s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Rendering</div><div class="test-title">shows 'Add New Address' title for new address</div><div class="test-status">passed</div><div class="test-duration">0.123s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Rendering</div><div class="test-title">renders all form fields</div><div class="test-status">passed</div><div class="test-duration">0.102s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Rendering</div><div class="test-title">shows Delete button only when editing</div><div class="test-status">passed</div><div class="test-duration">0.23s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Rendering</div><div class="test-title">does not show Delete button for new address</div><div class="test-status">passed</div><div class="test-duration">0.188s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Form population</div><div class="test-title">populates form with existing address data</div><div class="test-status">passed</div><div class="test-duration">0.181s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Form population</div><div class="test-title">resets form when address changes to null</div><div class="test-status">passed</div><div class="test-duration">0.15s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > User interactions</div><div class="test-title">allows editing street address</div><div class="test-status">passed</div><div class="test-duration">0.122s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > User interactions</div><div class="test-title">allows toggling isDefault checkbox</div><div class="test-status">passed</div><div class="test-duration">0.199s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > User interactions</div><div class="test-title">calls onClose when Cancel button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.194s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > User interactions</div><div class="test-title">calls onClose when close button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.213s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Form submission</div><div class="test-title">submits new address with POST request</div><div class="test-status">passed</div><div class="test-duration">0.438s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Form submission</div><div class="test-title">submits updated address with PATCH request</div><div class="test-status">passed</div><div class="test-duration">0.288s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Form submission</div><div class="test-title">calls onSuccess after successful submission</div><div class="test-status">passed</div><div class="test-duration">0.252s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Form submission</div><div class="test-title">shows success message after successful submission</div><div class="test-status">passed</div><div class="test-duration">0.433s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Error handling</div><div class="test-title">shows error message on failed submission</div><div class="test-status">passed</div><div class="test-duration">0.445s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Delete functionality</div><div class="test-title">calls DELETE endpoint when delete button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.18s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AddressModal > Address type selection</div><div class="test-title">allows selecting address type</div><div class="test-status">passed</div><div class="test-duration">0.26s</div></div></div></div></details><details id="suite-10" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\shop\ShopDetails\__tests__\index.test.tsx</div><div class="suite-time warn">20.691s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Initial Rendering</div><div class="test-title">renders product title</div><div class="test-status">passed</div><div class="test-duration">0.333s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Initial Rendering</div><div class="test-title">renders product price display</div><div class="test-status">passed</div><div class="test-duration">0.208s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Initial Rendering</div><div class="test-title">renders discount badge</div><div class="test-status">passed</div><div class="test-duration">0.136s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Initial Rendering</div><div class="test-title">renders star rating with review count</div><div class="test-status">passed</div><div class="test-duration">0.125s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Initial Rendering</div><div class="test-title">renders in stock indicator</div><div class="test-status">passed</div><div class="test-duration">0.096s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Initial Rendering</div><div class="test-title">renders promotional messages</div><div class="test-status">passed</div><div class="test-duration">0.178s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Empty Product State</div><div class="test-title">shows 'Please add product' message when product is empty</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Empty Product State</div><div class="test-title">does not render product sections when product is empty</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Image Gallery</div><div class="test-title">renders main preview image</div><div class="test-status">passed</div><div class="test-duration">0.102s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Image Gallery</div><div class="test-title">renders all thumbnail images</div><div class="test-status">passed</div><div class="test-duration">0.079s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Image Gallery</div><div class="test-title">changes preview image when thumbnail is clicked</div><div class="test-status">passed</div><div class="test-duration">0.177s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Image Gallery</div><div class="test-title">highlights active thumbnail</div><div class="test-status">passed</div><div class="test-duration">0.1s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Image Gallery</div><div class="test-title">opens preview modal when expand button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.457s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Product Options - Color</div><div class="test-title">renders color selection section</div><div class="test-status">passed</div><div class="test-duration">0.134s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Product Options - Color</div><div class="test-title">handles color interaction</div><div class="test-status">passed</div><div class="test-duration">0.136s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Product Options - Color</div><div class="test-title">has default color state</div><div class="test-status">passed</div><div class="test-duration">0.149s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Product Options - Storage</div><div class="test-title">renders storage options section</div><div class="test-status">passed</div><div class="test-duration">0.08s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Product Options - Storage</div><div class="test-title">handles storage selection</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Product Options - Storage</div><div class="test-title">has default storage state</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Product Options - Type</div><div class="test-title">component renders without type options (removed feature)</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Product Options - Type</div><div class="test-title">component renders correctly</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Product Options - SIM</div><div class="test-title">component renders without SIM options (removed feature)</div><div class="test-status">passed</div><div class="test-duration">0.163s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Product Options - SIM</div><div class="test-title">component renders correctly</div><div class="test-status">passed</div><div class="test-duration">0.09s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Quantity Controls</div><div class="test-title">renders quantity controls with default value 1</div><div class="test-status">passed</div><div class="test-duration">0.107s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Quantity Controls</div><div class="test-title">increases quantity when plus button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.292s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Quantity Controls</div><div class="test-title">decreases quantity when minus button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.311s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Quantity Controls</div><div class="test-title">does not decrease quantity below 1</div><div class="test-status">passed</div><div class="test-duration">0.181s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Action Buttons</div><div class="test-title">renders Add to Cart button</div><div class="test-status">passed</div><div class="test-duration">0.09s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Action Buttons</div><div class="test-title">renders wishlist button</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Tabs Navigation</div><div class="test-title">renders all tab headers</div><div class="test-status">passed</div><div class="test-duration">0.083s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Tabs Navigation</div><div class="test-title">shows Description tab by default</div><div class="test-status">passed</div><div class="test-duration">0.079s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Tabs Navigation</div><div class="test-title">switches to Additional Information tab when clicked</div><div class="test-status">passed</div><div class="test-duration">0.122s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Tabs Navigation</div><div class="test-title">switches to Reviews tab when clicked</div><div class="test-status">passed</div><div class="test-duration">0.15s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Tabs Navigation</div><div class="test-title">handles tab selection</div><div class="test-status">passed</div><div class="test-duration">0.091s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Tabs Navigation</div><div class="test-title">handles tab content switching</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Product Description Tab</div><div class="test-title">renders product description when available</div><div class="test-status">passed</div><div class="test-duration">0.101s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Product Description Tab</div><div class="test-title">renders product details component</div><div class="test-status">passed</div><div class="test-duration">0.075s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Additional Information Tab</div><div class="test-title">renders specifications table</div><div class="test-status">passed</div><div class="test-duration">0.125s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Reviews Tab</div><div class="test-title">renders review section when product has ID</div><div class="test-status">passed</div><div class="test-duration">0.132s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Reviews Tab</div><div class="test-title">does not render review section when product has no ID</div><div class="test-status">passed</div><div class="test-duration">0.091s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Additional Sections</div><div class="test-title">renders Recently Viewed Items section</div><div class="test-status">passed</div><div class="test-duration">0.079s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Additional Sections</div><div class="test-title">renders Newsletter section</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > LocalStorage Integration</div><div class="test-title">saves product to localStorage on load</div><div class="test-status">passed</div><div class="test-duration">0.084s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > LocalStorage Integration</div><div class="test-title">handles localStorage interaction</div><div class="test-status">passed</div><div class="test-duration">0.079s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > LocalStorage Integration</div><div class="test-title">handles product updates</div><div class="test-status">passed</div><div class="test-duration">0.128s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopDetails Component > Form Behavior</div><div class="test-title">prevents form submission default behavior</div><div class="test-status">passed</div><div class="test-duration">0.096s</div></div></div></div></details><details id="suite-11" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\checkout\__tests__\Shipping.test.tsx</div><div class="suite-time warn">20.743s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Rendering</div><div class="test-title">renders toggle button</div><div class="test-status">passed</div><div class="test-duration">0.236s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Rendering</div><div class="test-title">renders chevron-down icon</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Rendering</div><div class="test-title">form fields are hidden by default</div><div class="test-status">passed</div><div class="test-duration">0.072s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Rendering</div><div class="test-title">has proper container styling</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Dropdown Toggle</div><div class="test-title">expands form when toggle is clicked</div><div class="test-status">passed</div><div class="test-duration">0.346s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Dropdown Toggle</div><div class="test-title">collapses form when toggle is clicked again</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Dropdown Toggle</div><div class="test-title">rotates chevron icon when expanded</div><div class="test-status">passed</div><div class="test-duration">0.07s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Dropdown Toggle</div><div class="test-title">resets chevron rotation when collapsed</div><div class="test-status">passed</div><div class="test-duration">0.098s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Dropdown Toggle</div><div class="test-title">toggle has cursor-pointer class</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Form Fields - When Expanded</div><div class="test-title">renders all form fields</div><div class="test-status">passed</div><div class="test-duration">0.129s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Form Fields - When Expanded</div><div class="test-title">country/region is a select dropdown</div><div class="test-status">passed</div><div class="test-duration">0.124s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Form Fields - When Expanded</div><div class="test-title">country/region has correct options</div><div class="test-status">passed</div><div class="test-duration">0.309s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Form Fields - When Expanded</div><div class="test-title">renders two street address inputs</div><div class="test-status">passed</div><div class="test-duration">0.064s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Form Fields - When Expanded</div><div class="test-title">primary street address is required</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Form Fields - When Expanded</div><div class="test-title">secondary street address is optional</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Form Fields - When Expanded</div><div class="test-title">town/city input is required</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Form Fields - When Expanded</div><div class="test-title">country input is optional</div><div class="test-status">passed</div><div class="test-duration">0.079s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Form Fields - When Expanded</div><div class="test-title">phone input is required</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Form Fields - When Expanded</div><div class="test-title">email input is required and has email type</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Form Fields - When Expanded</div><div class="test-title">has proper input styling</div><div class="test-status">passed</div><div class="test-duration">0.073s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > User Interactions - When Expanded</div><div class="test-title">allows selecting country/region</div><div class="test-status">passed</div><div class="test-duration">0.087s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > User Interactions - When Expanded</div><div class="test-title">allows entering street address</div><div class="test-status">passed</div><div class="test-duration">0.081s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > User Interactions - When Expanded</div><div class="test-title">allows entering apartment/unit</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > User Interactions - When Expanded</div><div class="test-title">allows entering town/city</div><div class="test-status">passed</div><div class="test-duration">0.074s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > User Interactions - When Expanded</div><div class="test-title">allows entering country</div><div class="test-status">passed</div><div class="test-duration">0.11s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > User Interactions - When Expanded</div><div class="test-title">allows entering phone number</div><div class="test-status">passed</div><div class="test-duration">0.072s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > User Interactions - When Expanded</div><div class="test-title">allows entering email address</div><div class="test-status">passed</div><div class="test-duration">0.087s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Required Field Indicators</div><div class="test-title">marks required fields appropriately</div><div class="test-status">passed</div><div class="test-duration">0.083s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Dropdown State Management</div><div class="test-title">starts in collapsed state</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Dropdown State Management</div><div class="test-title">shows form when expanded</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Dropdown State Management</div><div class="test-title">multiple toggle clicks work correctly</div><div class="test-status">passed</div><div class="test-duration">0.075s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Accessibility</div><div class="test-title">has no accessibility violations (collapsed)</div><div class="test-status">passed</div><div class="test-duration">0.561s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Accessibility</div><div class="test-title">has no accessibility violations (expanded)</div><div class="test-status">passed</div><div class="test-duration">0.43s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Accessibility</div><div class="test-title">all inputs have associated labels when expanded</div><div class="test-status">passed</div><div class="test-duration">0.099s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Accessibility</div><div class="test-title">toggle is keyboard accessible</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Icon Behavior</div><div class="test-title">chevron has correct size</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Icon Behavior</div><div class="test-title">chevron has rotation transition class</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Edge Cases</div><div class="test-title">handles very long input values when expanded</div><div class="test-status">passed</div><div class="test-duration">0.091s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Edge Cases</div><div class="test-title">handles special characters in input when expanded</div><div class="test-status">passed</div><div class="test-duration">0.07s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Edge Cases</div><div class="test-title">handles email with special characters when expanded</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Edge Cases</div><div class="test-title">rapid toggle clicks work correctly</div><div class="test-status">passed</div><div class="test-duration">0.158s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Edge Cases</div><div class="test-title">preserves form values when toggling</div><div class="test-status">passed</div><div class="test-duration">0.116s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Component Structure</div><div class="test-title">has proper container structure</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Component Structure</div><div class="test-title">toggle has proper styling</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Component Structure</div><div class="test-title">form container has padding classes</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Default Values</div><div class="test-title">all text inputs start empty</div><div class="test-status">passed</div><div class="test-duration">0.114s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Shipping Component > Default Values</div><div class="test-title">select dropdown has default first option</div><div class="test-status">passed</div><div class="test-duration">0.078s</div></div></div></div></details><details id="suite-12" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\__tests__\ProductForm.test.tsx</div><div class="suite-time warn">21.501s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Basic Rendering</div><div class="test-title">renders form with all required fields</div><div class="test-status">passed</div><div class="test-duration">0.367s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Basic Rendering</div><div class="test-title">renders category options</div><div class="test-status">passed</div><div class="test-duration">0.103s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Basic Rendering</div><div class="test-title">renders Create Product button for new products</div><div class="test-status">passed</div><div class="test-duration">0.252s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Basic Rendering</div><div class="test-title">renders Update Product button when editing</div><div class="test-status">passed</div><div class="test-duration">0.134s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Initial Data Population</div><div class="test-title">populates form with initial data when editing</div><div class="test-status">passed</div><div class="test-duration">0.102s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Initial Data Population</div><div class="test-title">shows image upload widget when editing existing product</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Initial Data Population</div><div class="test-title">does not show image section for new products</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Form Interactions</div><div class="test-title">updates form fields on change</div><div class="test-status">passed</div><div class="test-duration">0.762s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Form Interactions</div><div class="test-title">updates price field on change</div><div class="test-status">passed</div><div class="test-duration">0.298s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Form Interactions</div><div class="test-title">selects category from dropdown</div><div class="test-status">passed</div><div class="test-duration">0.174s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Form Validation</div><div class="test-title">shows validation error for empty title</div><div class="test-status">passed</div><div class="test-duration">0.502s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Form Validation</div><div class="test-title">shows validation error for empty price</div><div class="test-status">passed</div><div class="test-duration">0.399s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Form Validation</div><div class="test-title">shows validation error for missing category</div><div class="test-status">passed</div><div class="test-duration">0.685s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Form Validation</div><div class="test-title">clears field error when user types</div><div class="test-status">passed</div><div class="test-duration">0.6s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Form Submission</div><div class="test-title">calls onSubmit with form data on valid submission</div><div class="test-status">passed</div><div class="test-duration">1.304s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Form Submission</div><div class="test-title">shows success message after successful submission</div><div class="test-status">passed</div><div class="test-duration">1.092s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Form Submission</div><div class="test-title">shows error message on submission failure</div><div class="test-status">passed</div><div class="test-duration">1.116s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Form Submission</div><div class="test-title">clears localStorage on successful submission</div><div class="test-status">passed</div><div class="test-duration">1.123s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Auto-save Functionality</div><div class="test-title">saves form data to localStorage</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Auto-save Functionality</div><div class="test-title">uses different storage key for edit mode</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Auto-save Functionality</div><div class="test-title">loads saved data from localStorage</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Discounted Price Handling</div><div class="test-title">allows empty discounted price</div><div class="test-status">passed</div><div class="test-duration">1.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Discounted Price Handling</div><div class="test-title">uses discounted price when provided</div><div class="test-status">passed</div><div class="test-duration">1.185s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.502s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Accessibility</div><div class="test-title">all form fields have labels</div><div class="test-status">passed</div><div class="test-duration">0.167s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Accessibility</div><div class="test-title">validation errors are announced</div><div class="test-status">passed</div><div class="test-duration">0.169s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Edge Cases</div><div class="test-title">handles empty categories array</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Edge Cases</div><div class="test-title">handles very long product title</div><div class="test-status">passed</div><div class="test-duration">0.094s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductForm Component > Edge Cases</div><div class="test-title">handles decimal stock values</div><div class="test-status">passed</div><div class="test-duration">0.999s</div></div></div></div></details><details id="suite-13" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\validation\__tests__\dev-ticket-schemas.test.ts</div><div class="suite-time">4.345s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketTypeSchema</div><div class="test-title">should accept valid ticket types</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketTypeSchema</div><div class="test-title">should reject invalid ticket types</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketStatusSchema</div><div class="test-title">should accept valid statuses</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketStatusSchema</div><div class="test-title">should reject invalid statuses</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketPrioritySchema</div><div class="test-title">should accept valid priorities</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketPrioritySchema</div><div class="test-title">should reject invalid priorities</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketSeveritySchema</div><div class="test-title">should accept valid severities</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketSeveritySchema</div><div class="test-title">should reject invalid severities</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > MilestoneStatusSchema</div><div class="test-title">should accept valid milestone statuses</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > MilestoneStatusSchema</div><div class="test-title">should reject invalid milestone statuses</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > SprintStatusSchema</div><div class="test-title">should accept valid sprint statuses</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > SprintStatusSchema</div><div class="test-title">should reject invalid sprint statuses</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > TicketLinkTypeSchema</div><div class="test-title">should accept valid link types</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > TicketLinkTypeSchema</div><div class="test-title">should reject invalid link types</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > BulkDevTicketActionSchema</div><div class="test-title">should accept valid bulk actions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > BulkDevTicketActionSchema</div><div class="test-title">should reject invalid bulk actions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketSchema</div><div class="test-title">should validate correct ticket data</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketSchema</div><div class="test-title">should apply default priority of MEDIUM</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketSchema</div><div class="test-title">should reject title less than 5 characters</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketSchema</div><div class="test-title">should reject title more than 200 characters</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketSchema</div><div class="test-title">should reject description less than 10 characters</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketSchema</div><div class="test-title">should reject description more than 10000 characters</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketSchema</div><div class="test-title">should accept valid optional fields</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketSchema</div><div class="test-title">should reject invalid CUID format for projectId</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketSchema</div><div class="test-title">should reject negative estimatedHours</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketSchema</div><div class="test-title">should reject storyPoints less than 1</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketSchema</div><div class="test-title">should reject storyPoints greater than 100</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketSchema</div><div class="test-title">should coerce date strings to Date objects</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevTicketSchema</div><div class="test-title">should accept partial updates</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevTicketSchema</div><div class="test-title">should accept status updates</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevTicketSchema</div><div class="test-title">should accept nullable fields</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevTicketSchema</div><div class="test-title">should reject invalid PR URL format</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevTicketSchema</div><div class="test-title">should accept valid PR URL</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevTicketSchema</div><div class="test-title">should reject negative actualHours</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevTicketSchema</div><div class="test-title">should accept zero actualHours</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > AssignDevTicketSchema</div><div class="test-title">should accept valid assignee ID</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > AssignDevTicketSchema</div><div class="test-title">should accept null to unassign</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > AssignDevTicketSchema</div><div class="test-title">should reject zero assignee ID</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > AssignDevTicketSchema</div><div class="test-title">should reject negative assignee ID</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevCommentSchema</div><div class="test-title">should validate correct comment data</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevCommentSchema</div><div class="test-title">should apply default isInternal of false</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevCommentSchema</div><div class="test-title">should accept isInternal true</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevCommentSchema</div><div class="test-title">should reject empty content</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevCommentSchema</div><div class="test-title">should reject content exceeding 10000 characters</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTimeEntrySchema</div><div class="test-title">should validate correct time entry data</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTimeEntrySchema</div><div class="test-title">should reject zero hours</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTimeEntrySchema</div><div class="test-title">should reject negative hours</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTimeEntrySchema</div><div class="test-title">should reject hours exceeding 24</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTimeEntrySchema</div><div class="test-title">should accept optional description</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTimeEntrySchema</div><div class="test-title">should reject description exceeding 500 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTimeEntrySchema</div><div class="test-title">should coerce date strings to Date objects</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevProjectSchema</div><div class="test-title">should validate correct project data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevProjectSchema</div><div class="test-title">should apply default color</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevProjectSchema</div><div class="test-title">should reject name less than 2 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevProjectSchema</div><div class="test-title">should reject name exceeding 100 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevProjectSchema</div><div class="test-title">should reject key less than 2 characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevProjectSchema</div><div class="test-title">should reject key exceeding 10 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevProjectSchema</div><div class="test-title">should reject key not starting with a letter</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevProjectSchema</div><div class="test-title">should reject lowercase key</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevProjectSchema</div><div class="test-title">should reject key with special characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevProjectSchema</div><div class="test-title">should accept valid uppercase alphanumeric key</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevProjectSchema</div><div class="test-title">should reject invalid hex color</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevProjectSchema</div><div class="test-title">should reject invalid hex format</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevProjectSchema</div><div class="test-title">should accept valid hex color</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevProjectSchema</div><div class="test-title">should accept partial updates</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevProjectSchema</div><div class="test-title">should accept nullable fields</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevProjectSchema</div><div class="test-title">should accept isActive flag</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevMilestoneSchema</div><div class="test-title">should validate correct milestone data</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevMilestoneSchema</div><div class="test-title">should reject name less than 2 characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevMilestoneSchema</div><div class="test-title">should reject name exceeding 100 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevMilestoneSchema</div><div class="test-title">should accept optional dates</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevMilestoneSchema</div><div class="test-title">should coerce date strings</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevMilestoneSchema</div><div class="test-title">should accept partial updates</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevMilestoneSchema</div><div class="test-title">should accept status updates</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevMilestoneSchema</div><div class="test-title">should accept nullable dates</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevSprintSchema</div><div class="test-title">should validate correct sprint data</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevSprintSchema</div><div class="test-title">should reject end date before start date</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevSprintSchema</div><div class="test-title">should reject same start and end date</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevSprintSchema</div><div class="test-title">should accept optional goal</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevSprintSchema</div><div class="test-title">should reject goal exceeding 500 characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevSprintSchema</div><div class="test-title">should accept partial updates</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevSprintSchema</div><div class="test-title">should validate date relationship when both provided</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevSprintSchema</div><div class="test-title">should allow single date update without validation</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > UpdateDevSprintSchema</div><div class="test-title">should accept status updates</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevLabelSchema</div><div class="test-title">should validate correct label data</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevLabelSchema</div><div class="test-title">should apply default color</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevLabelSchema</div><div class="test-title">should reject name less than 2 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevLabelSchema</div><div class="test-title">should reject name exceeding 50 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevLabelSchema</div><div class="test-title">should reject invalid hex color</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketLinkSchema</div><div class="test-title">should validate correct link data</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > CreateDevTicketLinkSchema</div><div class="test-title">should reject invalid CUID</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketFilterSchema</div><div class="test-title">should accept single status value</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketFilterSchema</div><div class="test-title">should accept array of statuses</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketFilterSchema</div><div class="test-title">should accept unassigned literal</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketFilterSchema</div><div class="test-title">should coerce numeric assigneeId</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketFilterSchema</div><div class="test-title">should accept date filters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketFilterSchema</div><div class="test-title">should accept search string</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketFilterSchema</div><div class="test-title">should reject search exceeding 100 characters</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketSortSchema</div><div class="test-title">should apply default values</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketSortSchema</div><div class="test-title">should accept valid sort fields</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > DevTicketSortSchema</div><div class="test-title">should accept valid directions</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > BulkDevTicketActionInputSchema</div><div class="test-title">should validate correct bulk action data</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > BulkDevTicketActionInputSchema</div><div class="test-title">should reject empty ticketIds array</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > BulkDevTicketActionInputSchema</div><div class="test-title">should accept optional value</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > BulkDevTicketActionInputSchema</div><div class="test-title">should accept string, number, or array value</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > PaginationSchema</div><div class="test-title">should apply default values</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > PaginationSchema</div><div class="test-title">should coerce string values to numbers</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > PaginationSchema</div><div class="test-title">should reject page less than 1</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > PaginationSchema</div><div class="test-title">should reject limit less than 1</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > PaginationSchema</div><div class="test-title">should reject limit exceeding 100</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Validation Schemas > PaginationSchema</div><div class="test-title">should accept limit of exactly 100</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></details><details id="suite-14" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\checkout\__tests__\Billing.test.tsx</div><div class="suite-time warn">23.024s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Rendering</div><div class="test-title">renders billing details heading</div><div class="test-status">passed</div><div class="test-duration">0.306s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Rendering</div><div class="test-title">renders all form fields</div><div class="test-status">passed</div><div class="test-duration">0.301s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Rendering</div><div class="test-title">renders Create an Account checkbox</div><div class="test-status">passed</div><div class="test-duration">0.314s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Rendering</div><div class="test-title">renders check icon for checkbox</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Fields</div><div class="test-title">firstName input has correct attributes</div><div class="test-status">passed</div><div class="test-duration">0.081s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Fields</div><div class="test-title">lastName input has correct attributes</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Fields</div><div class="test-title">companyName input is optional</div><div class="test-status">passed</div><div class="test-duration">0.114s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Fields</div><div class="test-title">country/region is a select dropdown</div><div class="test-status">passed</div><div class="test-duration">0.187s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Fields</div><div class="test-title">country/region has correct options</div><div class="test-status">passed</div><div class="test-duration">0.506s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Fields</div><div class="test-title">renders two street address inputs</div><div class="test-status">passed</div><div class="test-duration">0.098s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Fields</div><div class="test-title">primary street address is required</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Fields</div><div class="test-title">secondary street address is optional</div><div class="test-status">passed</div><div class="test-duration">0.16s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Fields</div><div class="test-title">town/city input is required</div><div class="test-status">passed</div><div class="test-duration">0.22s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Fields</div><div class="test-title">country input is optional</div><div class="test-status">passed</div><div class="test-duration">0.148s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Fields</div><div class="test-title">phone input is required</div><div class="test-status">passed</div><div class="test-duration">0.141s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Fields</div><div class="test-title">email input is required and has email type</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > User Interactions</div><div class="test-title">allows entering text in firstName field</div><div class="test-status">passed</div><div class="test-duration">0.086s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > User Interactions</div><div class="test-title">allows entering text in lastName field</div><div class="test-status">passed</div><div class="test-duration">0.08s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > User Interactions</div><div class="test-title">allows entering text in companyName field</div><div class="test-status">passed</div><div class="test-duration">0.102s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > User Interactions</div><div class="test-title">allows selecting country/region</div><div class="test-status">passed</div><div class="test-duration">0.182s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > User Interactions</div><div class="test-title">allows entering street address</div><div class="test-status">passed</div><div class="test-duration">0.082s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > User Interactions</div><div class="test-title">allows entering apartment/unit</div><div class="test-status">passed</div><div class="test-duration">0.09s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > User Interactions</div><div class="test-title">allows entering town/city</div><div class="test-status">passed</div><div class="test-duration">0.213s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > User Interactions</div><div class="test-title">allows entering phone number</div><div class="test-status">passed</div><div class="test-duration">0.106s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > User Interactions</div><div class="test-title">allows entering email address</div><div class="test-status">passed</div><div class="test-duration">0.064s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > User Interactions</div><div class="test-title">allows checking the Create Account checkbox</div><div class="test-status">passed</div><div class="test-duration">0.102s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > User Interactions</div><div class="test-title">allows unchecking the Create Account checkbox</div><div class="test-status">passed</div><div class="test-duration">0.087s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Layout</div><div class="test-title">renders first and last name in FormRow (two-column layout)</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Layout</div><div class="test-title">uses custom input styling</div><div class="test-status">passed</div><div class="test-duration">0.11s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Required Field Indicators</div><div class="test-title">marks required fields appropriately</div><div class="test-status">passed</div><div class="test-duration">0.282s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Checkbox Behavior</div><div class="test-title">checkbox starts unchecked</div><div class="test-status">passed</div><div class="test-duration">0.198s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Checkbox Behavior</div><div class="test-title">checkbox has correct ID for label association</div><div class="test-status">passed</div><div class="test-duration">0.108s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Checkbox Behavior</div><div class="test-title">checkbox label is clickable</div><div class="test-status">passed</div><div class="test-duration">0.074s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.888s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Accessibility</div><div class="test-title">all inputs have associated labels</div><div class="test-status">passed</div><div class="test-duration">0.246s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Accessibility</div><div class="test-title">checkbox has accessible label</div><div class="test-status">passed</div><div class="test-duration">0.108s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Accessibility</div><div class="test-title">checkbox is keyboard accessible</div><div class="test-status">passed</div><div class="test-duration">0.145s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Field Grouping</div><div class="test-title">wraps all inputs in a white background container</div><div class="test-status">passed</div><div class="test-duration">0.092s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Form Field Grouping</div><div class="test-title">has proper shadow styling on form container</div><div class="test-status">passed</div><div class="test-duration">0.065s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Edge Cases</div><div class="test-title">handles very long input values</div><div class="test-status">passed</div><div class="test-duration">0.078s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Edge Cases</div><div class="test-title">handles special characters in input</div><div class="test-status">passed</div><div class="test-duration">0.087s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Edge Cases</div><div class="test-title">handles email with special characters</div><div class="test-status">passed</div><div class="test-duration">0.069s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Edge Cases</div><div class="test-title">multiple rapid checkbox clicks work correctly</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Component Structure</div><div class="test-title">renders heading with correct styling</div><div class="test-status">passed</div><div class="test-duration">0.075s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Billing Component > Component Structure</div><div class="test-title">renders in proper container structure</div><div class="test-status">passed</div><div class="test-duration">0.134s</div></div></div></div></details><details id="suite-15" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\redux\features\__tests__\supportSlice.test.ts</div><div class="suite-time">2.794s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Chatbot Actions</div><div class="test-title">should toggle chatbot</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Chatbot Actions</div><div class="test-title">should open chatbot</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Chatbot Actions</div><div class="test-title">should close chatbot</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Chatbot Actions</div><div class="test-title">should add chatbot message</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Chatbot Actions</div><div class="test-title">should add multiple chatbot messages</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Chatbot Actions</div><div class="test-title">should clear chatbot messages</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Ticket Filter Actions</div><div class="test-title">should set ticket filters</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Ticket Filter Actions</div><div class="test-title">should clear ticket filters</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Ticket Filter Actions</div><div class="test-title">should set ticket page</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Article Filter Actions</div><div class="test-title">should set article category</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Article Filter Actions</div><div class="test-title">should clear article category</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Article Filter Actions</div><div class="test-title">should set article search</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Article Filter Actions</div><div class="test-title">should clear article filters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Article Filter Actions</div><div class="test-title">should set article page</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > UI Actions</div><div class="test-title">should set active ticket</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > UI Actions</div><div class="test-title">should clear active ticket</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Ticket Selection Actions</div><div class="test-title">should select ticket</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Ticket Selection Actions</div><div class="test-title">should not duplicate selected ticket</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Ticket Selection Actions</div><div class="test-title">should deselect ticket</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Ticket Selection Actions</div><div class="test-title">should toggle ticket selection</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Ticket Selection Actions</div><div class="test-title">should select all tickets</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Ticket Selection Actions</div><div class="test-title">should deselect all tickets</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Unread Count Actions</div><div class="test-title">should set unread count</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Unread Count Actions</div><div class="test-title">should increment unread count</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Unread Count Actions</div><div class="test-title">should decrement unread count</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Unread Count Actions</div><div class="test-title">should not decrement below zero</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Unread Count Actions</div><div class="test-title">should clear unread count</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Update Ticket In List</div><div class="test-title">should update ticket in list</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Update Ticket In List</div><div class="test-title">should update current ticket if matching</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Update Ticket In List</div><div class="test-title">should not update non-matching ticket</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Clear Error Actions</div><div class="test-title">should clear tickets error</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Clear Error Actions</div><div class="test-title">should clear articles error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Clear Error Actions</div><div class="test-title">should clear chatbot error</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Clear Error Actions</div><div class="test-title">should clear stats error</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Reset Support</div><div class="test-title">should reset to initial state</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectTickets returns tickets</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectCurrentTicket returns current ticket</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectTicketFilters returns filters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectTicketPagination returns pagination</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectTicketsLoading returns loading state</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectTicketLoading returns single ticket loading state</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectTicketsError returns error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectMyTickets returns my tickets</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectMyTicketsPagination returns pagination</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectMyTicketsLoading returns loading state</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectMyTicketsError returns error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectArticles returns articles</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectArticlesLoading returns loading state</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectArticlesError returns error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectArticleFilters returns filters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectArticlePagination returns pagination</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectChatbotOpen returns chatbot open state</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectChatbotMessages returns messages</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectChatbotLoading returns loading state</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectChatbotError returns error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectStats returns stats</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectStatsLoading returns loading state</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectStatsError returns error</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectActiveTicketId returns active ticket ID</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectSelectedTicketIds returns selected IDs</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Selectors</div><div class="test-title">selectUnreadCount returns unread count</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Derived Selectors</div><div class="test-title">selectOpenTicketsCount counts open and in-progress tickets</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Derived Selectors</div><div class="test-title">selectHighPriorityTicketsCount counts high and urgent tickets</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Derived Selectors</div><div class="test-title">selectSelectedTicketsCount counts selected tickets</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Derived Selectors</div><div class="test-title">selectAllTicketsSelected returns true when all selected</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Derived Selectors</div><div class="test-title">selectAllTicketsSelected returns false when not all selected</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Derived Selectors</div><div class="test-title">selectAllTicketsSelected returns false when no tickets</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Derived Selectors</div><div class="test-title">selectHasActiveFilters returns true when filters exist</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Derived Selectors</div><div class="test-title">selectHasActiveFilters returns false when no filters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Derived Selectors</div><div class="test-title">selectHasActiveFilters detects search filter</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Derived Selectors</div><div class="test-title">selectHasActiveFilters detects priority filter</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Derived Selectors</div><div class="test-title">selectHasActiveFilters detects category filter</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchTickets</div><div class="test-title">should handle fetchTickets.pending</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchTickets</div><div class="test-title">should handle fetchTickets.fulfilled</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchTickets</div><div class="test-title">should handle fetchTickets.rejected</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchTicket</div><div class="test-title">should handle fetchTicket.pending</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchTicket</div><div class="test-title">should handle fetchTicket.fulfilled</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchTicket</div><div class="test-title">should handle fetchTicket.rejected</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchMyTickets</div><div class="test-title">should handle fetchMyTickets.pending</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchMyTickets</div><div class="test-title">should handle fetchMyTickets.fulfilled</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchMyTickets</div><div class="test-title">should handle fetchMyTickets.rejected</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchArticles</div><div class="test-title">should handle fetchArticles.pending</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchArticles</div><div class="test-title">should handle fetchArticles.fulfilled</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchArticles</div><div class="test-title">should handle fetchArticles.rejected</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchStats</div><div class="test-title">should handle fetchStats.pending</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchStats</div><div class="test-title">should handle fetchStats.fulfilled</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - fetchStats</div><div class="test-title">should handle fetchStats.rejected</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - sendChatbotMessage</div><div class="test-title">should handle sendChatbotMessage.pending</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - sendChatbotMessage</div><div class="test-title">should handle sendChatbotMessage.fulfilled</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - sendChatbotMessage</div><div class="test-title">should handle sendChatbotMessage.rejected</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - sendChatbotMessage</div><div class="test-title">should add user message with correct timestamp</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - sendChatbotMessage</div><div class="test-title">should add bot message with suggested articles</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support Slice > Async Thunks - sendChatbotMessage</div><div class="test-title">should add bot message with quick actions</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-16" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\support\__tests__\ticket-utils.test.ts</div><div class="suite-time">3.485s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > generateTicketNumber</div><div class="test-title">should generate ticket number with correct prefix and format</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > generateTicketNumber</div><div class="test-title">should generate sequential ticket numbers</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > generateTicketNumber</div><div class="test-title">should pad ticket numbers with leading zeros</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > generateTicketNumber</div><div class="test-title">should handle large ticket numbers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > generateTicketNumber</div><div class="test-title">should handle database errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.133s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isValidStatusTransition</div><div class="test-title">should allow valid transition from OPEN to IN_PROGRESS</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isValidStatusTransition</div><div class="test-title">should allow valid transition from OPEN to RESOLVED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isValidStatusTransition</div><div class="test-title">should allow valid transition from IN_PROGRESS to AWAITING_CUSTOMER</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isValidStatusTransition</div><div class="test-title">should allow valid transition from RESOLVED to CLOSED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isValidStatusTransition</div><div class="test-title">should allow valid transition from RESOLVED to IN_PROGRESS (reopening)</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isValidStatusTransition</div><div class="test-title">should allow valid transition from CLOSED to OPEN (reopening)</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isValidStatusTransition</div><div class="test-title">should reject invalid transition from OPEN to CLOSED</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isValidStatusTransition</div><div class="test-title">should reject invalid transition from CANCELLED to any status</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isValidStatusTransition</div><div class="test-title">should reject invalid transition from CLOSED to RESOLVED</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isValidStatusTransition</div><div class="test-title">should reject transition to same status</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getSLADeadline</div><div class="test-title">should calculate correct deadline for URGENT priority first response</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getSLADeadline</div><div class="test-title">should calculate correct deadline for URGENT priority resolution</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getSLADeadline</div><div class="test-title">should calculate correct deadline for HIGH priority first response</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getSLADeadline</div><div class="test-title">should calculate correct deadline for HIGH priority resolution</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getSLADeadline</div><div class="test-title">should calculate correct deadline for MEDIUM priority first response</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getSLADeadline</div><div class="test-title">should calculate correct deadline for MEDIUM priority resolution</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getSLADeadline</div><div class="test-title">should calculate correct deadline for LOW priority first response</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getSLADeadline</div><div class="test-title">should calculate correct deadline for LOW priority resolution</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getSLADeadline</div><div class="test-title">should use current date if fromDate is not provided</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isSLABreached > First Response SLA</div><div class="test-title">should return true if first response was after deadline</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isSLABreached > First Response SLA</div><div class="test-title">should return false if first response was within deadline</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isSLABreached > First Response SLA</div><div class="test-title">should check current time if no first response yet</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isSLABreached > First Response SLA</div><div class="test-title">should return false if current time is within deadline</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isSLABreached > Resolution SLA</div><div class="test-title">should return true if resolved after deadline</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isSLABreached > Resolution SLA</div><div class="test-title">should return false if resolved within deadline</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isSLABreached > Resolution SLA</div><div class="test-title">should check current time if not yet resolved</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isSLABreached > Resolution SLA</div><div class="test-title">should return false if current time is within resolution deadline</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isSLABreached > Different Priority Levels</div><div class="test-title">should handle LOW priority SLA correctly</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > isSLABreached > Different Priority Levels</div><div class="test-title">should handle MEDIUM priority SLA correctly</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getTimeUntilSLABreach</div><div class="test-title">should return positive time remaining before first response deadline</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getTimeUntilSLABreach</div><div class="test-title">should return negative time if first response deadline is breached</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getTimeUntilSLABreach</div><div class="test-title">should calculate time based on actual first response time if available</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getTimeUntilSLABreach</div><div class="test-title">should return positive time remaining before resolution deadline</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getTimeUntilSLABreach</div><div class="test-title">should return negative time if resolution deadline is breached</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getTimeUntilSLABreach</div><div class="test-title">should calculate time based on actual resolution time if available</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should build empty where clause for empty filters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should filter by single status</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should filter by multiple statuses</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should filter by single priority</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should filter by multiple priorities</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should filter by single category</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should filter by multiple categories</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should filter by assignedToId</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should filter by unassigned tickets (assignedToId null)</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should filter by userId</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should filter by search term with OR conditions</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should filter by dateFrom</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should filter by dateTo</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should filter by date range</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > buildTicketWhereClause</div><div class="test-title">should combine multiple filters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > createTicketHistory</div><div class="test-title">should create ticket history entry</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > createTicketHistory</div><div class="test-title">should handle null values</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > createTicketHistory</div><div class="test-title">should handle database errors</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > recordTicketCreation</div><div class="test-title">should record ticket creation in history</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > recordTicketCreation</div><div class="test-title">should handle null userId</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > recordStatusChange</div><div class="test-title">should record status change in history</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > recordPriorityChange</div><div class="test-title">should record priority change in history</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > recordAssignment</div><div class="test-title">should record ticket assignment with ASSIGNED action</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > recordAssignment</div><div class="test-title">should record ticket unassignment with UNASSIGNED action</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > recordAssignment</div><div class="test-title">should record reassignment from one agent to another</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getAgentTickets</div><div class="test-title">should retrieve all tickets for an agent</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getAgentTickets</div><div class="test-title">should filter tickets by single status</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getAgentTickets</div><div class="test-title">should filter tickets by multiple statuses</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getAgentTickets</div><div class="test-title">should return empty array if agent has no tickets</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getAgentTickets</div><div class="test-title">should handle database errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getUnassignedTickets</div><div class="test-title">should retrieve unassigned tickets with OPEN or IN_PROGRESS status</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getUnassignedTickets</div><div class="test-title">should return empty array if no unassigned tickets</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getTicketsAtRisk</div><div class="test-title">should retrieve tickets at risk of SLA breach</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getTicketsAtRisk</div><div class="test-title">should filter out tickets with more than 1 hour remaining</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > getTicketsAtRisk</div><div class="test-title">should return empty array if no tickets at risk</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > autoAssignTicket</div><div class="test-title">should assign ticket to available agent with capacity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > autoAssignTicket</div><div class="test-title">should find agents with matching specialty or no specialty</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > autoAssignTicket</div><div class="test-title">should return null if no agents available</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > autoAssignTicket</div><div class="test-title">should return null if all agents at max capacity</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > autoAssignTicket</div><div class="test-title">should assign to agent with lowest active ticket count</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > formatTicketSummary</div><div class="test-title">should format ticket summary correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > formatTicketSummary</div><div class="test-title">should handle different statuses</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > calculateAgentResponseTime</div><div class="test-title">should calculate average response time in seconds</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > calculateAgentResponseTime</div><div class="test-title">should return null if agent has no responded tickets</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > calculateAgentResponseTime</div><div class="test-title">should handle single ticket correctly</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > calculateAgentResolutionTime</div><div class="test-title">should calculate average resolution time in seconds</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > calculateAgentResolutionTime</div><div class="test-title">should return null if agent has no resolved tickets</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > calculateAgentResolutionTime</div><div class="test-title">should handle single ticket correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Ticket Utility Functions > calculateAgentResolutionTime</div><div class="test-title">should round to nearest second</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></details><details id="suite-17" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\search.test.ts</div><div class="suite-time">2.902s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > calculateAverageRating > empty reviews</div><div class="test-title">should return 0 average and 0 total for empty array</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > calculateAverageRating > single review</div><div class="test-title">should return rating as average for single review</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > calculateAverageRating > single review</div><div class="test-title">should handle rating of 1</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > calculateAverageRating > multiple reviews</div><div class="test-title">should calculate correct average for multiple reviews</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > calculateAverageRating > multiple reviews</div><div class="test-title">should round to 1 decimal place</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > calculateAverageRating > multiple reviews</div><div class="test-title">should handle all 5-star reviews</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > calculateAverageRating > multiple reviews</div><div class="test-title">should handle all 1-star reviews</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > calculateAverageRating > multiple reviews</div><div class="test-title">should handle mixed ratings</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > calculateAverageRating > rounding behavior</div><div class="test-title">should round 4.25 to 4.3</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > calculateAverageRating > rounding behavior</div><div class="test-title">should round 4.24 to 4.2</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > calculateAverageRating > rounding behavior</div><div class="test-title">should handle average that rounds to whole number</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > calculateAverageRating > edge cases</div><div class="test-title">should handle very large number of reviews</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > calculateAverageRating > edge cases</div><div class="test-title">should handle alternating ratings</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > basic search</div><div class="test-title">should return products with default parameters</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > basic search</div><div class="test-title">should search by query string</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > basic search</div><div class="test-title">should handle empty query</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > filtering</div><div class="test-title">should filter by categories</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > filtering</div><div class="test-title">should filter by price range</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > filtering</div><div class="test-title">should filter by minimum price only</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > filtering</div><div class="test-title">should filter by stock availability</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > filtering</div><div class="test-title">should filter by minimum rating</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > filtering</div><div class="test-title">should combine multiple filters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > sorting</div><div class="test-title">should sort by newest (default)</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > sorting</div><div class="test-title">should sort by price ascending</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > sorting</div><div class="test-title">should sort by price descending</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > sorting</div><div class="test-title">should sort by popularity</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > sorting</div><div class="test-title">should sort by rating</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > pagination</div><div class="test-title">should paginate results</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > pagination</div><div class="test-title">should calculate pagination metadata</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > pagination</div><div class="test-title">should handle first page</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > pagination</div><div class="test-title">should handle last page</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > result transformation</div><div class="test-title">should calculate average rating for products</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > result transformation</div><div class="test-title">should include review count</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > result transformation</div><div class="test-title">should transform product data correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > search term tracking</div><div class="test-title">should track search terms</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > search term tracking</div><div class="test-title">should normalize search terms</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > search term tracking</div><div class="test-title">should not track empty queries</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > search term tracking</div><div class="test-title">should continue on tracking error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > error handling</div><div class="test-title">should throw error on search failure</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchProducts > error handling</div><div class="test-title">should log error details</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getSearchSuggestions</div><div class="test-title">should return suggestions for query</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getSearchSuggestions</div><div class="test-title">should limit suggestions</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getSearchSuggestions</div><div class="test-title">should return empty array for short query</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getSearchSuggestions</div><div class="test-title">should return empty array for empty query</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getSearchSuggestions</div><div class="test-title">should deduplicate suggestions</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getSearchSuggestions</div><div class="test-title">should handle errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getFilterOptions</div><div class="test-title">should return filter options</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getFilterOptions</div><div class="test-title">should handle null price values</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getFilterOptions</div><div class="test-title">should throw error on failure</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getPopularSearchTerms</div><div class="test-title">should return popular search terms</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getPopularSearchTerms</div><div class="test-title">should limit results</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getPopularSearchTerms</div><div class="test-title">should handle errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getTrendingSearchTerms</div><div class="test-title">should return trending search terms from last 7 days</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getTrendingSearchTerms</div><div class="test-title">should limit results</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getTrendingSearchTerms</div><div class="test-title">should handle errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getSearchAnalytics</div><div class="test-title">should return search analytics</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getSearchAnalytics</div><div class="test-title">should handle zero searches</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getSearchAnalytics</div><div class="test-title">should handle errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > clearOldSearchTerms</div><div class="test-title">should delete old search terms</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > clearOldSearchTerms</div><div class="test-title">should use default days if not provided</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > clearOldSearchTerms</div><div class="test-title">should handle errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchByCategory</div><div class="test-title">should search by category ID</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > searchByCategory</div><div class="test-title">should accept additional search params</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getRelatedSearchTerms</div><div class="test-title">should return related search terms</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getRelatedSearchTerms</div><div class="test-title">should limit results</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getRelatedSearchTerms</div><div class="test-title">should return empty array for short query</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > getRelatedSearchTerms</div><div class="test-title">should handle errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > checkZeroResultSearches</div><div class="test-title">should check and update zero-result searches</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > checkZeroResultSearches</div><div class="test-title">should not update if still no results</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">search utility > checkZeroResultSearches</div><div class="test-title">should handle errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></details><details id="suite-18" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\admin.test.ts</div><div class="suite-time">2.637s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > isAdmin</div><div class="test-title">returns true when user is admin</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > isAdmin</div><div class="test-title">returns false when user is customer</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > isAdmin</div><div class="test-title">returns false when user not found</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > isAdmin</div><div class="test-title">returns false when role is undefined</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > isAdmin</div><div class="test-title">returns false when role is null</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > isAdmin</div><div class="test-title">handles different user IDs</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getAdminByEmail</div><div class="test-title">returns admin user when found</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getAdminByEmail</div><div class="test-title">returns null when user not found</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getAdminByEmail</div><div class="test-title">returns null when user is not admin</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getAdminByEmail</div><div class="test-title">handles user with null name</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getAllAdmins</div><div class="test-title">returns all admin users</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getAllAdmins</div><div class="test-title">returns empty array when no admins found</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getAllAdmins</div><div class="test-title">handles admins with null names</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > promoteToAdmin</div><div class="test-title">promotes user to admin successfully</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > promoteToAdmin</div><div class="test-title">returns false on error</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > promoteToAdmin</div><div class="test-title">handles database errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > demoteToCustomer</div><div class="test-title">demotes admin to customer successfully</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > demoteToCustomer</div><div class="test-title">returns false on error</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > demoteToCustomer</div><div class="test-title">handles database errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getSystemStats</div><div class="test-title">returns complete system statistics</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getSystemStats</div><div class="test-title">handles zero revenue</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getSystemStats</div><div class="test-title">handles system with no users</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getSystemStats</div><div class="test-title">handles large numbers</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getActivityLog</div><div class="test-title">returns recent activity with default limit</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getActivityLog</div><div class="test-title">respects custom limit</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getActivityLog</div><div class="test-title">filters users by CUSTOMER role only</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getActivityLog</div><div class="test-title">handles empty results</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getFlaggedContent</div><div class="test-title">returns low-rated products and suspicious reviews</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getFlaggedContent</div><div class="test-title">queries for low ratings (2 or less)</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getFlaggedContent</div><div class="test-title">detects spam keywords in reviews</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getFlaggedContent</div><div class="test-title">limits results to 10 items</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getFlaggedContent</div><div class="test-title">handles no flagged content</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getUserInsights</div><div class="test-title">returns complete user insights</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getUserInsights</div><div class="test-title">returns null when user not found</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getUserInsights</div><div class="test-title">handles user with no orders</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getUserInsights</div><div class="test-title">handles user with no reviews</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getUserInsights</div><div class="test-title">rounds monetary values to 2 decimal places</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getUserInsights</div><div class="test-title">rounds rating to 1 decimal place</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > getUserInsights</div><div class="test-title">handles empty cart and wishlist</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > bulkUpdateProductStatus</div><div class="test-title">updates multiple products successfully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > bulkUpdateProductStatus</div><div class="test-title">updates only stock</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > bulkUpdateProductStatus</div><div class="test-title">updates only price</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > bulkUpdateProductStatus</div><div class="test-title">updates discounted price</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > bulkUpdateProductStatus</div><div class="test-title">returns 0 when no products match</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > bulkUpdateProductStatus</div><div class="test-title">handles empty product ID array</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > bulkUpdateProductStatus</div><div class="test-title">updates all three fields simultaneously</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > generateComplianceReport</div><div class="test-title">generates complete compliance report</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > generateComplianceReport</div><div class="test-title">handles 100% compliance</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > generateComplianceReport</div><div class="test-title">handles 0% compliance</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > generateComplianceReport</div><div class="test-title">rounds compliance rates correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > Error handling</div><div class="test-title">handles database errors in isAdmin</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > Error handling</div><div class="test-title">handles database errors in getSystemStats</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">admin utilities > Error handling</div><div class="test-title">handles database errors in bulkUpdateProductStatus</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-19" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\account\MyAccount\__tests__\PasswordForm.test.tsx</div><div class="suite-time warn">26.386s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordForm > Rendering</div><div class="test-title">renders form with all password fields</div><div class="test-status">passed</div><div class="test-duration">0.828s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordForm > Rendering</div><div class="test-title">renders with title</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordForm > Rendering</div><div class="test-title">renders password fields with type=password</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordForm > Rendering</div><div class="test-title">shows helper text for new password field</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordForm > Loading state</div><div class="test-title">shows loading state when saving</div><div class="test-status">passed</div><div class="test-duration">0.145s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordForm > Loading state</div><div class="test-title">shows normal state when not saving</div><div class="test-status">passed</div><div class="test-duration">0.098s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordForm > User interactions</div><div class="test-title">allows typing in password fields</div><div class="test-status">passed</div><div class="test-duration">2.608s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordForm > Form submission</div><div class="test-title">calls onSubmit with password values when form is valid</div><div class="test-status">passed</div><div class="test-duration">1.886s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordForm > Form submission</div><div class="test-title">does not call onSubmit when passwords do not match</div><div class="test-status">passed</div><div class="test-duration">1.943s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordForm > Validation</div><div class="test-title">shows error when new password does not meet requirements</div><div class="test-status">passed</div><div class="test-duration">0.508s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordForm > Validation</div><div class="test-title">shows error when passwords do not match after submit</div><div class="test-status">passed</div><div class="test-duration">2.059s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordForm > Required fields</div><div class="test-title">marks all password fields as required</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordForm > Accessibility</div><div class="test-title">has proper labels for password fields</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div></div></details><details id="suite-20" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\notifications.test.ts</div><div class="suite-time">2.715s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > createNotification</div><div class="test-title">creates a notification with all fields</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > createNotification</div><div class="test-title">creates a notification without link</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > createNotification</div><div class="test-title">handles different notification types</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > getUserNotifications</div><div class="test-title">returns paginated notifications with default options</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > getUserNotifications</div><div class="test-title">handles pagination correctly</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > getUserNotifications</div><div class="test-title">filters unread notifications when unreadOnly is true</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > getUserNotifications</div><div class="test-title">handles custom page size</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > getUserNotifications</div><div class="test-title">converts null link to undefined</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > markNotificationAsRead</div><div class="test-title">marks a notification as read</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > markAllNotificationsAsRead</div><div class="test-title">marks all unread notifications as read for a user</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > markAllNotificationsAsRead</div><div class="test-title">returns zero count when no unread notifications</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > deleteNotification</div><div class="test-title">deletes a notification by ID</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > getNotificationPreferences</div><div class="test-title">returns existing preferences</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > getNotificationPreferences</div><div class="test-title">creates default preferences if none exist</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > updateNotificationPreferences</div><div class="test-title">updates existing preferences</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > updateNotificationPreferences</div><div class="test-title">creates preferences if none exist</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > sendOrderNotification</div><div class="test-title">sends PROCESSING notification</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > sendOrderNotification</div><div class="test-title">sends SHIPPED notification</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > sendOrderNotification</div><div class="test-title">sends DELIVERED notification</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > sendOrderNotification</div><div class="test-title">sends CANCELLED notification</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > sendOrderNotification</div><div class="test-title">handles unknown order status</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > sendOrderNotification</div><div class="test-title">creates notification even when orders preference is disabled</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > sendReviewRequestNotification</div><div class="test-title">sends review request notification</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > sendReviewRequestNotification</div><div class="test-title">throws error when reviews preference is disabled</div><div class="test-status">passed</div><div class="test-duration">0.12s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > sendBackInStockNotification</div><div class="test-title">sends back in stock notification</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > sendBackInStockNotification</div><div class="test-title">throws error when stock preference is disabled</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > sendBackInStockNotification</div><div class="test-title">throws error when product not found</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > sendPromoNotification</div><div class="test-title">sends promotional notification</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > sendPromoNotification</div><div class="test-title">throws error when promotions preference is disabled</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > getUnreadCount</div><div class="test-title">returns count of unread notifications</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > getUnreadCount</div><div class="test-title">returns zero when no unread notifications</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > deleteOldNotifications</div><div class="test-title">deletes read notifications older than default 30 days</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > deleteOldNotifications</div><div class="test-title">deletes read notifications older than custom days</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > deleteOldNotifications</div><div class="test-title">returns zero count when no old notifications</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > bulkCreateNotifications</div><div class="test-title">creates notifications for all users when no preferences exist</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > bulkCreateNotifications</div><div class="test-title">filters users based on notification preferences</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > bulkCreateNotifications</div><div class="test-title">handles order notifications with shipping type</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > bulkCreateNotifications</div><div class="test-title">returns zero when user list is empty</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > bulkCreateNotifications</div><div class="test-title">returns all skipped when all users have preference disabled</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > bulkCreateNotifications</div><div class="test-title">includes users without preferences (default enabled)</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > bulkCreateNotifications</div><div class="test-title">handles review notifications correctly</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > bulkCreateNotifications</div><div class="test-title">handles stock notifications correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > notifyWishlistUsersBackInStock</div><div class="test-title">notifies all wishlist users with stock notifications enabled</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > notifyWishlistUsersBackInStock</div><div class="test-title">returns zero when no users have wishlisted the product</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > notifyWishlistUsersBackInStock</div><div class="test-title">returns zero when all wishlist users have stock notifications disabled</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notification System > notifyWishlistUsersBackInStock</div><div class="test-title">calls sendBackInStockNotification for each eligible user</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-21" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\validation\__tests__\support-schemas.test.ts</div><div class="suite-time">3.808s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketStatusSchema</div><div class="test-title">should accept valid statuses</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketStatusSchema</div><div class="test-title">should reject invalid statuses</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketPrioritySchema</div><div class="test-title">should accept valid priorities</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketPrioritySchema</div><div class="test-title">should reject invalid priorities</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketCategorySchema</div><div class="test-title">should accept valid categories</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketCategorySchema</div><div class="test-title">should reject invalid categories</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > MessageSenderTypeSchema</div><div class="test-title">should accept valid sender types</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > MessageSenderTypeSchema</div><div class="test-title">should reject invalid sender types</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should validate correct ticket data</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should reject empty email</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should reject invalid email format</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should reject email exceeding 255 characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should reject empty customer name</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should reject customer name exceeding 100 characters</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should reject subject less than 5 characters</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should reject subject exceeding 200 characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should reject description less than 20 characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should reject description exceeding 5000 characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should accept optional orderId</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should accept optional productId</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should reject zero orderId</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should reject negative productId</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateTicketSchema</div><div class="test-title">should accept various valid email formats</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateTicketSchema</div><div class="test-title">should accept partial updates</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateTicketSchema</div><div class="test-title">should accept status updates</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateTicketSchema</div><div class="test-title">should accept priority updates</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateTicketSchema</div><div class="test-title">should accept nullable assignedToId</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateTicketSchema</div><div class="test-title">should accept positive assignedToId</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateTicketSchema</div><div class="test-title">should reject zero assignedToId</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateTicketSchema</div><div class="test-title">should accept tags within limit</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateTicketSchema</div><div class="test-title">should reject tags exceeding 500 characters</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateTicketSchema</div><div class="test-title">should accept internalNotes within limit</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateTicketSchema</div><div class="test-title">should reject internalNotes exceeding 5000 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > AssignTicketSchema</div><div class="test-title">should accept positive assignee ID</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > AssignTicketSchema</div><div class="test-title">should accept null to unassign</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > AssignTicketSchema</div><div class="test-title">should reject zero assignee ID</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > AssignTicketSchema</div><div class="test-title">should reject negative assignee ID</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateMessageSchema</div><div class="test-title">should validate correct message data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateMessageSchema</div><div class="test-title">should apply default isInternal of false</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateMessageSchema</div><div class="test-title">should accept isInternal true</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateMessageSchema</div><div class="test-title">should reject empty content</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateMessageSchema</div><div class="test-title">should reject content exceeding 10000 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateMessageSchema</div><div class="test-title">should accept content at maximum length</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should validate correct article data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should apply default isPublished of false</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should accept isPublished true</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject title less than 5 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject title exceeding 200 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject slug less than 3 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject slug exceeding 200 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject invalid slug format with uppercase</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject slug with spaces</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject slug with underscores</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should accept valid slug with hyphens</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject content less than 50 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject content exceeding 50000 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject summary less than 20 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject summary exceeding 500 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject empty category</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject category exceeding 100 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject empty keywords</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateArticleSchema</div><div class="test-title">should reject keywords exceeding 500 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateArticleSchema</div><div class="test-title">should accept partial updates</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateArticleSchema</div><div class="test-title">should accept isPublished updates</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateArticleSchema</div><div class="test-title">should enforce slug format rules</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateArticleSchema</div><div class="test-title">should accept valid slug update</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateCannedResponseSchema</div><div class="test-title">should validate correct canned response data</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateCannedResponseSchema</div><div class="test-title">should reject title less than 3 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateCannedResponseSchema</div><div class="test-title">should reject title exceeding 100 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateCannedResponseSchema</div><div class="test-title">should reject shortcut less than 2 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateCannedResponseSchema</div><div class="test-title">should reject shortcut exceeding 50 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateCannedResponseSchema</div><div class="test-title">should reject shortcut with uppercase letters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateCannedResponseSchema</div><div class="test-title">should reject shortcut with spaces</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateCannedResponseSchema</div><div class="test-title">should reject shortcut with underscores</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateCannedResponseSchema</div><div class="test-title">should accept valid shortcut with hyphens</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateCannedResponseSchema</div><div class="test-title">should reject content less than 10 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateCannedResponseSchema</div><div class="test-title">should reject content exceeding 5000 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateCannedResponseSchema</div><div class="test-title">should reject empty category</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > CreateCannedResponseSchema</div><div class="test-title">should reject category exceeding 100 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateCannedResponseSchema</div><div class="test-title">should accept partial updates</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateCannedResponseSchema</div><div class="test-title">should enforce shortcut format rules</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > UpdateCannedResponseSchema</div><div class="test-title">should accept valid shortcut update</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > SubmitSurveySchema</div><div class="test-title">should validate correct survey data</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > SubmitSurveySchema</div><div class="test-title">should reject rating less than 1</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > SubmitSurveySchema</div><div class="test-title">should reject rating greater than 5</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > SubmitSurveySchema</div><div class="test-title">should accept all valid ratings 1-5</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > SubmitSurveySchema</div><div class="test-title">should accept optional feedback</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > SubmitSurveySchema</div><div class="test-title">should reject feedback exceeding 2000 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > SubmitSurveySchema</div><div class="test-title">should accept optional boolean fields</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > ChatbotMessageSchema</div><div class="test-title">should validate correct message</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > ChatbotMessageSchema</div><div class="test-title">should reject empty message</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > ChatbotMessageSchema</div><div class="test-title">should reject message exceeding 1000 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > ChatbotMessageSchema</div><div class="test-title">should accept message at maximum length</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > ArticleHelpfulSchema</div><div class="test-title">should accept helpful true</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > ArticleHelpfulSchema</div><div class="test-title">should accept helpful false</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > ArticleHelpfulSchema</div><div class="test-title">should require helpful field</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should accept single status value</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should accept array of statuses</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should accept single priority value</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should accept array of priorities</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should apply default pagination values</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should coerce string page to number</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should transform assignedToId null string</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should coerce assignedToId to number</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should accept date filters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should coerce date strings</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should accept search query</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should reject search exceeding 200 characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should reject limit exceeding 100</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should accept valid sort fields</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > TicketFilterSchema</div><div class="test-title">should accept valid sort orders</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > ArticleFilterSchema</div><div class="test-title">should accept category filter</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > ArticleFilterSchema</div><div class="test-title">should transform isPublished string to boolean</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > ArticleFilterSchema</div><div class="test-title">should apply default pagination values</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > ArticleFilterSchema</div><div class="test-title">should accept search query</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > ArticleFilterSchema</div><div class="test-title">should reject search exceeding 200 characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > BulkTicketActionSchema</div><div class="test-title">should validate correct bulk action data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > BulkTicketActionSchema</div><div class="test-title">should reject empty ticketIds array</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > BulkTicketActionSchema</div><div class="test-title">should accept all valid actions</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > BulkTicketActionSchema</div><div class="test-title">should accept optional value</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > BulkTicketActionSchema</div><div class="test-title">should accept string value</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > BulkTicketActionSchema</div><div class="test-title">should accept number value</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > BulkTicketActionSchema</div><div class="test-title">should accept null value</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > FileUploadSchema</div><div class="test-title">should validate correct file upload data</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > FileUploadSchema</div><div class="test-title">should reject empty fileName</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > FileUploadSchema</div><div class="test-title">should reject fileName exceeding 255 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > FileUploadSchema</div><div class="test-title">should reject empty fileType</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > FileUploadSchema</div><div class="test-title">should reject fileType exceeding 100 characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > FileUploadSchema</div><div class="test-title">should reject zero fileSize</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > FileUploadSchema</div><div class="test-title">should reject negative fileSize</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > FileUploadSchema</div><div class="test-title">should reject fileSize exceeding 10MB</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Support System Validation Schemas > FileUploadSchema</div><div class="test-title">should accept fileSize at exactly 10MB</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-22" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\promotions\__tests__\engine.test.ts</div><div class="suite-time">4.561s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > Empty cart handling</div><div class="test-title">should return zero discount for empty cart</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > PERCENTAGE_OFF promotions</div><div class="test-title">should calculate percentage discount correctly</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > PERCENTAGE_OFF promotions</div><div class="test-title">should respect minimum purchase requirement</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > PERCENTAGE_OFF promotions</div><div class="test-title">should apply discount when minimum purchase is met</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > PERCENTAGE_OFF promotions</div><div class="test-title">should cap discount at maximum discount limit</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > PERCENTAGE_OFF promotions</div><div class="test-title">should scale item discounts proportionally when capped</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > FIXED_AMOUNT_OFF promotions</div><div class="test-title">should calculate fixed amount discount correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > FIXED_AMOUNT_OFF promotions</div><div class="test-title">should not exceed cart total for fixed discount</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > BOGO promotions</div><div class="test-title">should calculate buy-one-get-one 100% discount</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > BOGO promotions</div><div class="test-title">should calculate buy-one-get-one 50% discount</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > BOGO promotions</div><div class="test-title">should calculate multiple BOGO sets</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > BOGO promotions</div><div class="test-title">should not give discount when quantity is insufficient</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > BOGO promotions</div><div class="test-title">should return zero discount when no bogoConfig</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > BUNDLE promotions</div><div class="test-title">should calculate bundle discount with fixed bundle price</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > BUNDLE promotions</div><div class="test-title">should calculate multiple bundle sets</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > BUNDLE promotions</div><div class="test-title">should return zero when bundle products not in cart</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > BUNDLE promotions</div><div class="test-title">should return zero when no bundleConfig</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > BUNDLE promotions</div><div class="test-title">should use discount type when bundlePrice not set</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > TIERED promotions</div><div class="test-title">should apply correct tier based on quantity</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > TIERED promotions</div><div class="test-title">should apply highest tier for large quantities</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > TIERED promotions</div><div class="test-title">should return zero when quantity below minimum tier</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > TIERED promotions</div><div class="test-title">should return zero when no tieredConfig</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > FREE_SHIPPING promotions</div><div class="test-title">should set freeShipping flag</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > FREE_GIFT promotions</div><div class="test-title">should add free gift items</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > FREE_GIFT promotions</div><div class="test-title">should handle multiple free gift quantities</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > FREE_GIFT promotions</div><div class="test-title">should return zero when no freeGiftConfig</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > FLASH_SALE, SEASONAL, FIRST_PURCHASE promotions</div><div class="test-title">should use standard discount for FLASH_SALE type</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > FLASH_SALE, SEASONAL, FIRST_PURCHASE promotions</div><div class="test-title">should use standard discount for SEASONAL type</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > FLASH_SALE, SEASONAL, FIRST_PURCHASE promotions</div><div class="test-title">should use standard discount for FIRST_PURCHASE type</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > Target type filtering</div><div class="test-title">should apply discount to specific products only</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > Target type filtering</div><div class="test-title">should apply discount to specific categories only</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > Target type filtering</div><div class="test-title">should return zero for specific products when no targetProducts</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > Target type filtering</div><div class="test-title">should return zero for specific categories when no targetCategories</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > Target type filtering</div><div class="test-title">should handle SHIPPING target type</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > Target type filtering</div><div class="test-title">should handle CART_TOTAL target type</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > Target type filtering</div><div class="test-title">should handle unknown target type</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - calculateDiscount > Target type filtering</div><div class="test-title">should handle unknown promotion type</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should return error for non-existent promo code</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should return error for inactive promo code</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should return error for expired promo code</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should return error when code usage limit reached</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should return error when promotion not started</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should return error when promotion expired</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should return error when promotion usage limit reached</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should return error when customer usage limit reached</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should return error when minimum purchase not met</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should return error when conditions not met</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should return error when discount is zero</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should successfully apply valid promo code</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should normalize promo code</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - applyPromoCode</div><div class="test-title">should handle errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - findApplicablePromotions</div><div class="test-title">should return empty array for empty cart</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - findApplicablePromotions</div><div class="test-title">should find applicable promotions</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - findApplicablePromotions</div><div class="test-title">should filter out inactive promotions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - findApplicablePromotions</div><div class="test-title">should filter out promotions with usage limit reached</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - findApplicablePromotions</div><div class="test-title">should filter out promotions with customer limit reached</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - findApplicablePromotions</div><div class="test-title">should filter out promotions not meeting minimum purchase</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - findApplicablePromotions</div><div class="test-title">should handle errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - validateConditions</div><div class="test-title">should return true when no conditions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - validateConditions</div><div class="test-title">should validate conditions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - validateConditions</div><div class="test-title">should return false when conditions fail</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - getBestPromotion</div><div class="test-title">should return null when no non-stackable promotions</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - getBestPromotion</div><div class="test-title">should return best non-stackable promotion</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - stackPromotions</div><div class="test-title">should return empty result for empty promotions</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - stackPromotions</div><div class="test-title">should stack stackable promotions</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - stackPromotions</div><div class="test-title">should use best non-stackable promotion over stackable ones</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - stackPromotions</div><div class="test-title">should merge free shipping flags</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - stackPromotions</div><div class="test-title">should create savings breakdown</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - recordUsage</div><div class="test-title">should record promotion usage</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - recordUsage</div><div class="test-title">should record promo code usage when provided</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - recordUsage</div><div class="test-title">should handle errors and log them</div><div class="test-status">passed</div><div class="test-duration">0.264s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - Edge Cases > Promotion message generation</div><div class="test-title">should use displayName when available</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - Edge Cases > Promotion message generation</div><div class="test-title">should generate message for free items</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - Edge Cases > Promotion message generation</div><div class="test-title">should generate message for free shipping</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - Edge Cases > Promotion message generation</div><div class="test-title">should generate default discount message</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - Edge Cases > Complex stacking scenarios</div><div class="test-title">should handle promotion with zero discount after recalculation</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - Edge Cases > Complex stacking scenarios</div><div class="test-title">should combine free items from multiple promotions</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - Edge Cases > BOGO with specific get product</div><div class="test-title">should use get product price when specified</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - Edge Cases > Promotion applicability checks</div><div class="test-title">should check if promotion applies to products in cart</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - Edge Cases > Promotion applicability checks</div><div class="test-title">should check if promotion applies to categories in cart</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - Edge Cases > Promotion applicability checks</div><div class="test-title">should filter promotions with failing conditions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - Edge Cases > Promotion applicability checks</div><div class="test-title">should filter promotions with no actual benefit</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PromotionEngine - Edge Cases > Promotion applicability checks</div><div class="test-title">should handle unknown target types in applicability check</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-23" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\checkout\__tests__\StripePaymentForm.test.tsx</div><div class="suite-time warn">7.4s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Rendering</div><div class="test-title">renders card element</div><div class="test-status">passed</div><div class="test-duration">0.14s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Rendering</div><div class="test-title">renders order summary</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Rendering</div><div class="test-title">renders submit button with correct amount</div><div class="test-status">passed</div><div class="test-duration">0.182s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Rendering</div><div class="test-title">renders security message</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Rendering</div><div class="test-title">disables button when Stripe is not loaded</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Form submission</div><div class="test-title">shows error when Stripe is not loaded</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Form submission</div><div class="test-title">shows error when card element not found</div><div class="test-status">passed</div><div class="test-duration">0.181s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Form submission</div><div class="test-title">handles createPaymentMethod error</div><div class="test-status">passed</div><div class="test-duration">0.131s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Form submission</div><div class="test-title">handles missing payment method</div><div class="test-status">passed</div><div class="test-duration">0.105s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Form submission</div><div class="test-title">handles confirmCardPayment error</div><div class="test-status">passed</div><div class="test-duration">0.11s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Form submission</div><div class="test-title">successfully processes payment</div><div class="test-status">passed</div><div class="test-duration">0.142s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Form submission</div><div class="test-title">calls API to confirm payment on server</div><div class="test-status">passed</div><div class="test-duration">0.126s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Form submission</div><div class="test-title">handles payment not completed status</div><div class="test-status">passed</div><div class="test-duration">0.095s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Form submission</div><div class="test-title">continues even if server confirmation fails</div><div class="test-status">passed</div><div class="test-duration">0.13s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Loading state</div><div class="test-title">shows loading spinner while processing</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StripePaymentForm > Error display</div><div class="test-title">displays error message when payment fails</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div></div></details><details id="suite-24" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\account\MyAccount\__tests__\AccountDetailsTab.test.tsx</div><div class="suite-time warn">8.159s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Rendering</div><div class="test-title">renders ProfileForm component</div><div class="test-status">passed</div><div class="test-duration">0.287s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Rendering</div><div class="test-title">renders PasswordForm component</div><div class="test-status">passed</div><div class="test-duration">0.096s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Rendering</div><div class="test-title">renders both Save Changes buttons</div><div class="test-status">passed</div><div class="test-duration">0.33s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Profile message display</div><div class="test-title">shows success profile message</div><div class="test-status">passed</div><div class="test-duration">0.081s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Profile message display</div><div class="test-title">shows error profile message</div><div class="test-status">passed</div><div class="test-duration">0.069s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Profile message display</div><div class="test-title">does not show profile message when null</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Profile message display</div><div class="test-title">applies success styling to success message</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Profile message display</div><div class="test-title">applies error styling to error message</div><div class="test-status">passed</div><div class="test-duration">0.118s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Password message display</div><div class="test-title">shows success password message</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Password message display</div><div class="test-title">shows error password message</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Password message display</div><div class="test-title">does not show password message when null</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Both messages display</div><div class="test-title">can show both profile and password messages simultaneously</div><div class="test-status">passed</div><div class="test-duration">0.07s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Props passing</div><div class="test-title">passes userProfile to ProfileForm</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Props passing</div><div class="test-title">passes savingPassword to PasswordForm</div><div class="test-status">passed</div><div class="test-duration">0.106s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountDetailsTab > Null userProfile handling</div><div class="test-title">handles null userProfile gracefully</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div></div></details><details id="suite-25" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\account\MyAccount\__tests__\ProfileForm.test.tsx</div><div class="suite-time warn">12.238s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > Rendering</div><div class="test-title">renders form with all fields</div><div class="test-status">passed</div><div class="test-duration">0.455s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > Rendering</div><div class="test-title">renders with user profile data</div><div class="test-status">passed</div><div class="test-duration">0.093s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > Rendering</div><div class="test-title">renders with empty values when userProfile is null</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > Rendering</div><div class="test-title">handles user with only first name</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > Rendering</div><div class="test-title">handles user with multiple last names</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > Loading state</div><div class="test-title">shows non-loading state when not saving</div><div class="test-status">passed</div><div class="test-duration">0.086s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > Loading state</div><div class="test-title">button shows loading indicator when savingProfile is true</div><div class="test-status">passed</div><div class="test-duration">0.089s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > User interactions</div><div class="test-title">allows editing first name</div><div class="test-status">passed</div><div class="test-duration">0.347s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > User interactions</div><div class="test-title">allows editing last name</div><div class="test-status">passed</div><div class="test-duration">0.371s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > User interactions</div><div class="test-title">allows editing phone number</div><div class="test-status">passed</div><div class="test-duration">0.543s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > User interactions</div><div class="test-title">allows selecting country</div><div class="test-status">passed</div><div class="test-duration">0.206s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > Form submission</div><div class="test-title">calls onSubmit with combined name and phone</div><div class="test-status">passed</div><div class="test-duration">0.186s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > Form submission</div><div class="test-title">calls onSubmit with updated values</div><div class="test-status">passed</div><div class="test-duration">1.283s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > Form submission</div><div class="test-title">calls onSubmit with null phone when empty</div><div class="test-status">passed</div><div class="test-duration">0.172s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > Form submission</div><div class="test-title">trims outer whitespace from combined name</div><div class="test-status">passed</div><div class="test-duration">0.16s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProfileForm > Profile updates</div><div class="test-title">updates form when userProfile changes</div><div class="test-status">passed</div><div class="test-duration">0.099s</div></div></div></div></details><details id="suite-26" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\admin\monitoring\__tests__\ErrorDashboard.test.tsx</div><div class="suite-time warn">29.787s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > stats cards rendering</div><div class="test-title">renders all stats cards with correct values</div><div class="test-status">passed</div><div class="test-duration">0.663s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > stats cards rendering</div><div class="test-title">formats large numbers with locale string</div><div class="test-status">passed</div><div class="test-duration">0.219s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > stats cards rendering</div><div class="test-title">renders stats cards with zero values</div><div class="test-status">passed</div><div class="test-duration">0.261s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > top errors section</div><div class="test-title">renders top errors list</div><div class="test-status">passed</div><div class="test-duration">0.295s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > top errors section</div><div class="test-title">displays error count badge</div><div class="test-status">passed</div><div class="test-duration">0.385s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > top errors section</div><div class="test-title">displays category badge for each error</div><div class="test-status">passed</div><div class="test-duration">0.35s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > top errors section</div><div class="test-title">shows empty state when no top errors</div><div class="test-status">passed</div><div class="test-duration">0.201s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > top errors section</div><div class="test-title">calls resolve API when resolve button clicked</div><div class="test-status">passed</div><div class="test-duration">1.401s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > top errors section</div><div class="test-title">shows success toast after resolving error</div><div class="test-status">passed</div><div class="test-duration">0.631s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > top errors section</div><div class="test-title">removes resolved error from top errors list</div><div class="test-status">passed</div><div class="test-duration">0.552s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > top errors section</div><div class="test-title">handles resolve API error gracefully</div><div class="test-status">passed</div><div class="test-duration">0.472s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > error table</div><div class="test-title">renders loading state initially</div><div class="test-status">passed</div><div class="test-duration">0.129s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > error table</div><div class="test-title">renders error rows after loading</div><div class="test-status">passed</div><div class="test-duration">0.412s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > error table</div><div class="test-title">renders empty state when no errors</div><div class="test-status">passed</div><div class="test-duration">0.271s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > error table</div><div class="test-title">displays level badge with correct styling</div><div class="test-status">passed</div><div class="test-duration">0.274s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > sorting</div><div class="test-title">renders sortable table headers</div><div class="test-status">passed</div><div class="test-duration">0.305s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > sorting</div><div class="test-title">renders initial sort state (createdAt desc)</div><div class="test-status">passed</div><div class="test-duration">0.098s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > row expansion</div><div class="test-title">renders clickable error rows</div><div class="test-status">passed</div><div class="test-duration">0.222s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > row expansion</div><div class="test-title">shows error details on first error</div><div class="test-status">passed</div><div class="test-duration">0.375s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > selection and bulk actions</div><div class="test-title">toggles error selection on checkbox click</div><div class="test-status">passed</div><div class="test-duration">0.611s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > selection and bulk actions</div><div class="test-title">shows bulk action bar when items selected</div><div class="test-status">passed</div><div class="test-duration">0.617s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > selection and bulk actions</div><div class="test-title">selects all visible errors when select all clicked</div><div class="test-status">passed</div><div class="test-duration">0.566s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > selection and bulk actions</div><div class="test-title">clears selection when clear button clicked</div><div class="test-status">passed</div><div class="test-duration">0.69s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > selection and bulk actions</div><div class="test-title">calls bulk resolve API with selected fingerprints</div><div class="test-status">passed</div><div class="test-duration">0.766s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > export functionality</div><div class="test-title">opens CSV export in new window</div><div class="test-status">passed</div><div class="test-duration">0.309s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > export functionality</div><div class="test-title">opens JSON export in new window</div><div class="test-status">passed</div><div class="test-duration">0.551s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > refresh functionality</div><div class="test-title">makes initial fetch on mount</div><div class="test-status">passed</div><div class="test-duration">0.107s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > refresh functionality</div><div class="test-title">renders refresh button in action bar</div><div class="test-status">passed</div><div class="test-duration">0.425s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDashboard > error handling</div><div class="test-title">shows error toast when fetch fails</div><div class="test-status">passed</div><div class="test-duration">0.136s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatCard</div><div class="test-title">renders with default variant</div><div class="test-status">passed</div><div class="test-duration">0.1s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatCard</div><div class="test-title">renders with warning variant</div><div class="test-status">passed</div><div class="test-duration">0.082s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatCard</div><div class="test-title">renders with error variant</div><div class="test-status">passed</div><div class="test-duration">0.175s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LevelBadge</div><div class="test-title">renders error level with red styling</div><div class="test-status">passed</div><div class="test-duration">0.432s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LevelBadge</div><div class="test-title">renders warn level with yellow styling</div><div class="test-status">passed</div><div class="test-duration">0.356s</div></div></div></div></details><details id="suite-27" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\ecommerce\__tests__\orders.test.ts</div><div class="suite-time">3.081s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateOrderTotals</div><div class="test-title">should calculate totals for a simple order</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateOrderTotals</div><div class="test-title">should include shipping for orders under threshold</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateOrderTotals</div><div class="test-title">should apply discount correctly</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateOrderTotals</div><div class="test-title">should not allow discount to exceed subtotal</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateOrderTotals</div><div class="test-title">should handle negative discount amounts</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateOrderTotals</div><div class="test-title">should handle empty items array</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateOrderTotals</div><div class="test-title">should handle custom tax rate</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateOrderTotals</div><div class="test-title">should ignore items with invalid prices or quantities</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateOrderTotals</div><div class="test-title">should round calculations to 2 decimal places</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateOrderTotals</div><div class="test-title">should calculate free shipping threshold correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateOrderTotals</div><div class="test-title">should charge shipping just below threshold</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateOrderTotals</div><div class="test-title">should handle discount affecting shipping threshold</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateLineItemTotal</div><div class="test-title">should calculate line item total</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateLineItemTotal</div><div class="test-title">should handle decimal prices</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateLineItemTotal</div><div class="test-title">should round to 2 decimal places</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateLineItemTotal</div><div class="test-title">should return 0 for negative price</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateLineItemTotal</div><div class="test-title">should return 0 for negative quantity</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateLineItemTotal</div><div class="test-title">should handle zero quantity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateDiscountAmount</div><div class="test-title">should calculate discount from percentage</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateDiscountAmount</div><div class="test-title">should handle decimal percentages</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateDiscountAmount</div><div class="test-title">should round to 2 decimal places</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateDiscountAmount</div><div class="test-title">should return 0 for negative subtotal</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateDiscountAmount</div><div class="test-title">should return 0 for negative percentage</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateDiscountAmount</div><div class="test-title">should return 0 for percentage over 100</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateDiscountAmount</div><div class="test-title">should handle 0% discount</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > calculateDiscountAmount</div><div class="test-title">should handle 100% discount</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderItems</div><div class="test-title">should validate valid order items</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderItems</div><div class="test-title">should reject empty items array</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderItems</div><div class="test-title">should reject null or undefined items</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderItems</div><div class="test-title">should reject items with invalid product ID</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderItems</div><div class="test-title">should reject items with zero quantity</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderItems</div><div class="test-title">should reject items with negative quantity</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderItems</div><div class="test-title">should reject items with negative price</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderItems</div><div class="test-title">should collect multiple errors for multiple invalid items</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderItems</div><div class="test-title">should accept price of 0</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateShippingAddress</div><div class="test-title">should validate valid shipping address</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateShippingAddress</div><div class="test-title">should reject empty address</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateShippingAddress</div><div class="test-title">should reject null address</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateShippingAddress</div><div class="test-title">should reject invalid JSON</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateShippingAddress</div><div class="test-title">should reject short street address</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateShippingAddress</div><div class="test-title">should reject short city</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateShippingAddress</div><div class="test-title">should reject short state</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateShippingAddress</div><div class="test-title">should reject invalid zip code format</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateShippingAddress</div><div class="test-title">should accept extended zip code format</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateShippingAddress</div><div class="test-title">should reject short country</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderData</div><div class="test-title">should validate valid order data</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderData</div><div class="test-title">should reject invalid user ID</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderData</div><div class="test-title">should reject negative user ID</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderData</div><div class="test-title">should reject invalid items</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderData</div><div class="test-title">should reject invalid shipping address</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderData</div><div class="test-title">should reject negative discount</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderData</div><div class="test-title">should accept zero discount</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateOrderData</div><div class="test-title">should collect multiple validation errors</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > canTransitionStatus</div><div class="test-title">should allow PROCESSING to SHIPPED</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > canTransitionStatus</div><div class="test-title">should allow PROCESSING to CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > canTransitionStatus</div><div class="test-title">should allow SHIPPED to DELIVERED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > canTransitionStatus</div><div class="test-title">should allow SHIPPED to CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > canTransitionStatus</div><div class="test-title">should not allow DELIVERED to any status</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > canTransitionStatus</div><div class="test-title">should not allow CANCELLED to any status</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > canTransitionStatus</div><div class="test-title">should not allow PROCESSING to DELIVERED</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > canTransitionStatus</div><div class="test-title">should not allow SHIPPED to PROCESSING</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > getAllowedStatusTransitions</div><div class="test-title">should return allowed transitions for PROCESSING</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > getAllowedStatusTransitions</div><div class="test-title">should return allowed transitions for SHIPPED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > getAllowedStatusTransitions</div><div class="test-title">should return empty array for DELIVERED</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > getAllowedStatusTransitions</div><div class="test-title">should return empty array for CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateStatusTransition</div><div class="test-title">should validate allowed transition</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateStatusTransition</div><div class="test-title">should reject same status transition</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateStatusTransition</div><div class="test-title">should reject invalid transition</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validateStatusTransition</div><div class="test-title">should provide helpful error message with allowed transitions</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > formatOrderNumber</div><div class="test-title">should format order number with padding</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > formatOrderNumber</div><div class="test-title">should handle large order numbers</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > formatOrderNumber</div><div class="test-title">should handle very large order numbers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > parseOrderNumber</div><div class="test-title">should parse valid order number</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > parseOrderNumber</div><div class="test-title">should parse large order numbers</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > parseOrderNumber</div><div class="test-title">should return null for invalid format</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isOrderCancellable</div><div class="test-title">should return true for PROCESSING</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isOrderCancellable</div><div class="test-title">should return true for SHIPPED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isOrderCancellable</div><div class="test-title">should return false for DELIVERED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isOrderCancellable</div><div class="test-title">should return false for CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isOrderModifiable</div><div class="test-title">should return true for PROCESSING</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isOrderModifiable</div><div class="test-title">should return false for SHIPPED</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isOrderModifiable</div><div class="test-title">should return false for DELIVERED</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isOrderModifiable</div><div class="test-title">should return false for CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > getOrderStatusDisplay</div><div class="test-title">should return display text for PROCESSING</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > getOrderStatusDisplay</div><div class="test-title">should return display text for SHIPPED</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > getOrderStatusDisplay</div><div class="test-title">should return display text for DELIVERED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > getOrderStatusDisplay</div><div class="test-title">should return display text for CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > getOrderStatusColor</div><div class="test-title">should return color for PROCESSING</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > getOrderStatusColor</div><div class="test-title">should return color for SHIPPED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > getOrderStatusColor</div><div class="test-title">should return color for DELIVERED</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > getOrderStatusColor</div><div class="test-title">should return color for CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validatePromoCode</div><div class="test-title">should validate valid promo code</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validatePromoCode</div><div class="test-title">should accept alphanumeric codes</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validatePromoCode</div><div class="test-title">should reject empty code</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validatePromoCode</div><div class="test-title">should reject code with whitespace</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validatePromoCode</div><div class="test-title">should reject code too short</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validatePromoCode</div><div class="test-title">should reject code too long</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validatePromoCode</div><div class="test-title">should reject lowercase letters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > validatePromoCode</div><div class="test-title">should reject special characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isPromoCodeExpired</div><div class="test-title">should return false for future date</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isPromoCodeExpired</div><div class="test-title">should return true for past date</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isPromoCodeExpired</div><div class="test-title">should handle dates very close to now</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isPromoCodeLimitReached</div><div class="test-title">should return false when under limit</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isPromoCodeLimitReached</div><div class="test-title">should return true when at limit</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isPromoCodeLimitReached</div><div class="test-title">should return true when over limit</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isPromoCodeLimitReached</div><div class="test-title">should return false for null limit (unlimited)</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > isPromoCodeLimitReached</div><div class="test-title">should handle zero limit</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > createOrder</div><div class="test-title">should create order with valid data</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > createOrder</div><div class="test-title">should include billing address if provided</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > createOrder</div><div class="test-title">should use shipping address as billing if not provided</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > createOrder</div><div class="test-title">should include promo code if provided</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > createOrder</div><div class="test-title">should throw error for invalid order data</div><div class="test-status">passed</div><div class="test-duration">0.153s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > createOrder</div><div class="test-title">should create order items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > updateOrderStatus</div><div class="test-title">should update order status when transition is valid</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > updateOrderStatus</div><div class="test-title">should throw error if order not found</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > updateOrderStatus</div><div class="test-title">should throw error for invalid status transition</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > updateOrderStatus</div><div class="test-title">should work with transaction client</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > cancelOrder</div><div class="test-title">should cancel PROCESSING order</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > cancelOrder</div><div class="test-title">should cancel SHIPPED order</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > cancelOrder</div><div class="test-title">should throw error if order not found</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > cancelOrder</div><div class="test-title">should throw error for DELIVERED order</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > cancelOrder</div><div class="test-title">should throw error for already CANCELLED order</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > cancelOrder</div><div class="test-title">should work with transaction client</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > Constants</div><div class="test-title">should have correct TAX_RATE</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > Constants</div><div class="test-title">should have correct FREE_SHIPPING_THRESHOLD</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > Constants</div><div class="test-title">should have correct STANDARD_SHIPPING_COST</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Utilities > Constants</div><div class="test-title">should have correct ORDER_STATUS_TRANSITIONS</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-28" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\integrations\__tests__\stripe.test.ts</div><div class="suite-time warn">29.777s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > getStripeClient</div><div class="test-title">should initialize Stripe client with API key</div><div class="test-status">passed</div><div class="test-duration">0.587s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > getStripeClient</div><div class="test-title">should throw error when STRIPE_SECRET_KEY is not set</div><div class="test-status">passed</div><div class="test-duration">0.502s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > getStripeClient</div><div class="test-title">should throw error when STRIPE_SECRET_KEY is empty string</div><div class="test-status">passed</div><div class="test-duration">0.341s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > getStripeClient</div><div class="test-title">should return same instance on multiple calls (singleton pattern)</div><div class="test-status">passed</div><div class="test-duration">0.309s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > getStripeClient</div><div class="test-title">should handle different API key formats</div><div class="test-status">passed</div><div class="test-duration">0.746s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > STRIPE_CONFIG</div><div class="test-title">should have correct default currency</div><div class="test-status">passed</div><div class="test-duration">0.301s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > STRIPE_CONFIG</div><div class="test-title">should have card as payment method</div><div class="test-status">passed</div><div class="test-duration">0.452s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > STRIPE_CONFIG</div><div class="test-title">should have valid success URL with session_id placeholder</div><div class="test-status">passed</div><div class="test-duration">0.502s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > STRIPE_CONFIG</div><div class="test-title">should have valid cancel URL</div><div class="test-status">passed</div><div class="test-duration">0.504s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > STRIPE_CONFIG</div><div class="test-title">should handle missing NEXTAUTH_URL gracefully</div><div class="test-status">passed</div><div class="test-duration">0.46s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > STRIPE_CONFIG</div><div class="test-title">should be immutable (readonly)</div><div class="test-status">passed</div><div class="test-duration">0.385s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > toStripeCents</div><div class="test-title">should convert dollars to cents correctly</div><div class="test-status">passed</div><div class="test-duration">0.347s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > toStripeCents</div><div class="test-title">should round to nearest cent</div><div class="test-status">passed</div><div class="test-duration">0.387s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > toStripeCents</div><div class="test-title">should handle zero correctly</div><div class="test-status">passed</div><div class="test-duration">0.39s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > toStripeCents</div><div class="test-title">should handle negative amounts</div><div class="test-status">passed</div><div class="test-duration">0.356s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > toStripeCents</div><div class="test-title">should handle large amounts</div><div class="test-status">passed</div><div class="test-duration">0.587s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > toStripeCents</div><div class="test-title">should handle very small amounts</div><div class="test-status">passed</div><div class="test-duration">0.472s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > toStripeCents</div><div class="test-title">should handle fractional cents correctly</div><div class="test-status">passed</div><div class="test-duration">0.328s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > fromStripeCents</div><div class="test-title">should convert cents to dollars correctly</div><div class="test-status">passed</div><div class="test-duration">0.733s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > fromStripeCents</div><div class="test-title">should handle zero correctly</div><div class="test-status">passed</div><div class="test-duration">0.563s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > fromStripeCents</div><div class="test-title">should handle negative amounts</div><div class="test-status">passed</div><div class="test-duration">0.805s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > fromStripeCents</div><div class="test-title">should handle large amounts</div><div class="test-status">passed</div><div class="test-duration">0.477s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > fromStripeCents</div><div class="test-title">should handle single cent</div><div class="test-status">passed</div><div class="test-duration">0.58s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > fromStripeCents</div><div class="test-title">should be inverse of toStripeCents for whole dollars</div><div class="test-status">passed</div><div class="test-duration">0.72s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > fromStripeCents</div><div class="test-title">should handle decimal precision correctly</div><div class="test-status">passed</div><div class="test-duration">0.36s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should format StripeCardError correctly</div><div class="test-status">passed</div><div class="test-duration">0.605s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should handle StripeCardError logic for empty message</div><div class="test-status">passed</div><div class="test-duration">0.513s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should format StripeRateLimitError correctly</div><div class="test-status">passed</div><div class="test-duration">0.503s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should format StripeInvalidRequestError correctly</div><div class="test-status">passed</div><div class="test-duration">0.421s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should format StripeAPIError correctly</div><div class="test-status">passed</div><div class="test-duration">0.345s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should format StripeConnectionError correctly</div><div class="test-status">passed</div><div class="test-duration">0.438s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should format StripeAuthenticationError correctly</div><div class="test-status">passed</div><div class="test-duration">0.255s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should format unknown StripeError type with default message</div><div class="test-status">passed</div><div class="test-duration">0.327s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should format generic Error objects</div><div class="test-status">passed</div><div class="test-duration">0.38s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should handle unknown error types</div><div class="test-status">passed</div><div class="test-duration">0.261s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should handle null error</div><div class="test-status">passed</div><div class="test-duration">0.274s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should handle undefined error</div><div class="test-status">passed</div><div class="test-duration">0.427s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should handle object without message</div><div class="test-status">passed</div><div class="test-duration">0.483s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > formatStripeError</div><div class="test-title">should prioritize Stripe error formatting over Error formatting</div><div class="test-status">passed</div><div class="test-duration">0.346s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > Round-trip conversions</div><div class="test-title">should maintain precision for standard amounts</div><div class="test-status">passed</div><div class="test-duration">0.328s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > Type safety</div><div class="test-title">should export functions with correct signatures</div><div class="test-status">passed</div><div class="test-duration">0.676s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > Type safety</div><div class="test-title">should handle numeric edge cases</div><div class="test-status">passed</div><div class="test-duration">0.333s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > Integration scenarios</div><div class="test-title">should handle typical checkout flow amount conversions</div><div class="test-status">passed</div><div class="test-duration">0.395s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > Integration scenarios</div><div class="test-title">should handle refund scenarios</div><div class="test-status">passed</div><div class="test-duration">0.483s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stripe Utilities > Integration scenarios</div><div class="test-title">should format multiple error types in sequence</div><div class="test-status">passed</div><div class="test-duration">0.313s</div></div></div></div></details><details id="suite-29" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\__tests__\cart\Cart.test.tsx</div><div class="suite-time warn">6.726s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Empty Cart State</div><div class="test-title">renders empty cart message when cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.096s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Empty Cart State</div><div class="test-title">displays empty cart icon when cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Empty Cart State</div><div class="test-title">shows 'Continue Shopping' link when cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.163s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Empty Cart State</div><div class="test-title">does not render cart items section when empty</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Cart with Items</div><div class="test-title">renders cart heading when cart has items</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Cart with Items</div><div class="test-title">renders all cart items</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Cart with Items</div><div class="test-title">renders correct number of cart items</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Cart with Items</div><div class="test-title">renders 'Clear Shopping Cart' button</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Cart with Items</div><div class="test-title">renders order summary section</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Cart with Items</div><div class="test-title">renders discount section</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Cart with Items</div><div class="test-title">does not show empty cart message when items exist</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Cart Table Structure</div><div class="test-title">renders table headers with correct labels</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Cart Table Structure</div><div class="test-title">maintains proper table structure with responsive design classes</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Single Item Edge Cases</div><div class="test-title">handles single item in cart</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Single Item Edge Cases</div><div class="test-title">handles many items in cart (performance)</div><div class="test-status">passed</div><div class="test-duration">0.107s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Component Integration</div><div class="test-title">renders main section when cart has items</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Component Integration</div><div class="test-title">passes correct cart items to SingleItem components</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Styling and Layout</div><div class="test-title">applies correct background colors for sections</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Styling and Layout</div><div class="test-title">applies responsive padding and spacing</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Accessibility</div><div class="test-title">has proper button roles for Clear Shopping Cart</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Accessibility</div><div class="test-title">has proper link role for Continue Shopping</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Accessibility</div><div class="test-title">provides semantic HTML structure with sections</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Conditional Rendering</div><div class="test-title">shows cart content only when items exist</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Conditional Rendering</div><div class="test-title">shows empty state only when no items exist</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Component > Conditional Rendering</div><div class="test-title">transitions from filled to empty state correctly</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div></div></details><details id="suite-30" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\cart\Wishlist\__tests__\SingleItem.test.tsx</div><div class="suite-time warn">6.876s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > rendering</div><div class="test-title">should render product title</div><div class="test-status">passed</div><div class="test-duration">0.153s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > rendering</div><div class="test-title">should render product thumbnail</div><div class="test-status">passed</div><div class="test-duration">0.249s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > rendering</div><div class="test-title">should render price display</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > rendering</div><div class="test-title">should render original price with strikethrough when discounted</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > rendering</div><div class="test-title">should render remove button</div><div class="test-status">passed</div><div class="test-duration">0.08s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > rendering</div><div class="test-title">should render add to cart button</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > rendering</div><div class="test-title">should show out of stock status</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > remove from wishlist</div><div class="test-title">should remove item from wishlist when remove button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.131s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > remove from wishlist</div><div class="test-title">should dispatch removeFromWishlistAsync with correct id</div><div class="test-status">passed</div><div class="test-duration">0.145s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > add to cart</div><div class="test-title">should add item to cart when add to cart button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.094s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > add to cart</div><div class="test-title">should add item with quantity 1</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > add to cart</div><div class="test-title">should preserve item data when adding to cart</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > price display variants</div><div class="test-title">should handle item with no discount</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist SingleItem > price display variants</div><div class="test-title">should show both prices for discounted item</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div></div></details><details id="suite-31" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\ecommerce\__tests__\inventory.test.ts</div><div class="suite-time">3.404s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getOrCreateInventory</div><div class="test-title">should return existing inventory record</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getOrCreateInventory</div><div class="test-title">should create inventory record if it doesn't exist</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getOrCreateInventory</div><div class="test-title">should throw error if product doesn't exist</div><div class="test-status">passed</div><div class="test-duration">0.152s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > recordStockMovement</div><div class="test-title">should record stock IN movement</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > recordStockMovement</div><div class="test-title">should record stock OUT movement</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > recordStockMovement</div><div class="test-title">should record stock ADJUSTMENT movement</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > recordStockMovement</div><div class="test-title">should throw error for zero or negative quantity</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > recordStockMovement</div><div class="test-title">should throw error when OUT movement causes negative inventory</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > recordStockMovement</div><div class="test-title">should notify wishlist users when product comes back in stock</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > recordStockMovement</div><div class="test-title">should not notify wishlist users if product was already in stock</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > recordStockMovement</div><div class="test-title">should handle notification errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getStockMovementHistory</div><div class="test-title">should return movement history with default limit</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getStockMovementHistory</div><div class="test-title">should respect custom limit</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getStockMovementHistory</div><div class="test-title">should convert null values to undefined</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > decreaseStockOnOrder</div><div class="test-title">should decrease stock with order information</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > increaseStockOnReturn</div><div class="test-title">should increase stock with return information</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getLowStockAlerts</div><div class="test-title">should return products at or below reorder level</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getLowStockAlerts</div><div class="test-title">should return empty array when no low stock items</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getLowStockAlerts</div><div class="test-title">should include zero stock items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > isProductInStock</div><div class="test-title">should return true when product has stock</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > isProductInStock</div><div class="test-title">should return false when product is out of stock</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getProductStock</div><div class="test-title">should return current stock quantity</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > updateReorderLevel</div><div class="test-title">should update existing inventory reorder level</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > updateReorderLevel</div><div class="test-title">should create inventory if it doesn't exist</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > updateReorderLevel</div><div class="test-title">should throw error for negative reorder level</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > updateReorderLevel</div><div class="test-title">should allow zero reorder level</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > bulkUpdateStock</div><div class="test-title">should successfully update multiple products</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > bulkUpdateStock</div><div class="test-title">should collect errors for failed updates</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > bulkUpdateStock</div><div class="test-title">should handle all updates failing</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > bulkUpdateStock</div><div class="test-title">should handle empty update list</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getInventorySummary</div><div class="test-title">should return complete inventory summary</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getInventorySummary</div><div class="test-title">should handle empty inventory</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > syncInventoryWithProducts</div><div class="test-title">should sync all products with inventory</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > syncInventoryWithProducts</div><div class="test-title">should create inventory records with default reorder level</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > syncInventoryWithProducts</div><div class="test-title">should handle no products</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getOutOfStockProducts</div><div class="test-title">should return all out of stock products</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > getOutOfStockProducts</div><div class="test-title">should return empty array when all products in stock</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > reserveStock</div><div class="test-title">should reserve stock when sufficient quantity available</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > reserveStock</div><div class="test-title">should throw error when insufficient stock to reserve</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > reserveStock</div><div class="test-title">should allow reserving exact available quantity</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > releaseReservedStock</div><div class="test-title">should release reserved stock</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > Edge cases and integration scenarios</div><div class="test-title">should handle concurrent stock movements correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > Edge cases and integration scenarios</div><div class="test-title">should handle products at exactly zero stock</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Inventory Management > Edge cases and integration scenarios</div><div class="test-title">should handle very large stock quantities</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-32" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\admin\monitoring\ErrorDetailPanel.test.tsx</div><div class="suite-time warn">12.315s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailPanel</div><div class="test-title">renders panel</div><div class="test-status">passed</div><div class="test-duration">0.228s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailPanel</div><div class="test-title">fetches error details on mount</div><div class="test-status">passed</div><div class="test-duration">0.328s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailPanel</div><div class="test-title">displays error message after loading</div><div class="test-status">passed</div><div class="test-duration">0.133s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailPanel</div><div class="test-title">displays badges</div><div class="test-status">passed</div><div class="test-duration">0.096s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailPanel</div><div class="test-title">has three tabs</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailPanel</div><div class="test-title">calls onClose when close button clicked</div><div class="test-status">passed</div><div class="test-duration">0.14s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailPanel</div><div class="test-title">calls onClose when backdrop clicked</div><div class="test-status">passed</div><div class="test-duration">0.194s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailPanel</div><div class="test-title">calls onClose when Escape key pressed</div><div class="test-status">passed</div><div class="test-duration">0.197s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailPanel</div><div class="test-title">shows resolve button for open errors</div><div class="test-status">passed</div><div class="test-duration">0.172s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailPanel</div><div class="test-title">shows ignore button</div><div class="test-status">passed</div><div class="test-duration">0.102s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailPanel</div><div class="test-title">shows snooze button</div><div class="test-status">passed</div><div class="test-duration">0.127s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailPanel</div><div class="test-title">switches between tabs</div><div class="test-status">passed</div><div class="test-duration">0.286s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailPanel</div><div class="test-title">shows reopen button for resolved errors</div><div class="test-status">passed</div><div class="test-duration">0.109s</div></div></div></div></details><details id="suite-33" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\shop\__tests__\ShopWithSidebar.test.tsx</div><div class="suite-time warn">7.06s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Initial Rendering</div><div class="test-title">renders sidebar with filters</div><div class="test-status">passed</div><div class="test-duration">0.279s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Initial Rendering</div><div class="test-title">renders product grid</div><div class="test-status">passed</div><div class="test-duration">0.11s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Initial Rendering</div><div class="test-title">renders view toggle buttons (grid/list)</div><div class="test-status">passed</div><div class="test-duration">0.217s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Initial Rendering</div><div class="test-title">renders Clear All filters button</div><div class="test-status">passed</div><div class="test-duration">0.081s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Loading State</div><div class="test-title">shows loading skeleton while fetching products</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Loading State</div><div class="test-title">hides loading skeleton after products load</div><div class="test-status">passed</div><div class="test-duration">0.069s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Product Fetching</div><div class="test-title">fetches products on mount</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Product Fetching</div><div class="test-title">fetches categories on mount</div><div class="test-status">passed</div><div class="test-duration">0.076s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Product Fetching</div><div class="test-title">displays fetched products</div><div class="test-status">passed</div><div class="test-duration">0.102s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Product Fetching</div><div class="test-title">passes correct pagination parameters</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Error Handling</div><div class="test-title">handles product fetch failure gracefully</div><div class="test-status">passed</div><div class="test-duration">0.123s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Error Handling</div><div class="test-title">handles error recovery</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Error Handling</div><div class="test-title">handles categories fetch failure gracefully</div><div class="test-status">passed</div><div class="test-duration">0.154s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Empty State</div><div class="test-title">handles empty product list</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Product Display Count</div><div class="test-title">displays product count section</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Search Query Display</div><div class="test-title">handles search query in URL</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Search Query Display</div><div class="test-title">passes search query to API</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > View Toggle (Grid/List)</div><div class="test-title">defaults to grid view</div><div class="test-status">passed</div><div class="test-duration">0.067s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > View Toggle (Grid/List)</div><div class="test-title">switches to list view when list button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.124s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > View Toggle (Grid/List)</div><div class="test-title">switches back to grid view when grid button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.211s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Category Filtering</div><div class="test-title">filters products by category when category is selected</div><div class="test-status">passed</div><div class="test-duration">0.118s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Category Filtering</div><div class="test-title">updates URL when category is selected</div><div class="test-status">passed</div><div class="test-duration">0.143s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Category Filtering</div><div class="test-title">loads category from URL parameter</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Category Filtering</div><div class="test-title">clears category filter when Clear All is clicked</div><div class="test-status">passed</div><div class="test-duration">0.074s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Pagination</div><div class="test-title">shows pagination when total products > 9</div><div class="test-status">passed</div><div class="test-duration">0.249s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Pagination</div><div class="test-title">does not show pagination when total products <= 9</div><div class="test-status">passed</div><div class="test-duration">0.072s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Pagination</div><div class="test-title">fetches next page when pagination button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.251s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Pagination</div><div class="test-title">handles first page state</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Pagination</div><div class="test-title">handles last page state</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Sidebar Toggle (Mobile)</div><div class="test-title">renders sidebar toggle button</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Sidebar Toggle (Mobile)</div><div class="test-title">toggles sidebar visibility when button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.136s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Sorting Options</div><div class="test-title">renders sorting dropdown with options</div><div class="test-status">passed</div><div class="test-duration">0.069s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Sorting Options</div><div class="test-title">includes Latest Products option</div><div class="test-status">passed</div><div class="test-duration">0.082s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Sorting Options</div><div class="test-title">includes Best Selling option</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Sorting Options</div><div class="test-title">includes Old Products option</div><div class="test-status">passed</div><div class="test-duration">0.075s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Sticky Menu Behavior</div><div class="test-title">adds sticky class when scrolled past threshold</div><div class="test-status">passed</div><div class="test-duration">0.107s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > URL Synchronization</div><div class="test-title">syncs category filter from URL on mount</div><div class="test-status">passed</div><div class="test-duration">0.07s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > URL Synchronization</div><div class="test-title">preserves search query when updating category</div><div class="test-status">passed</div><div class="test-duration">0.145s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopWithSidebar Component > Accessibility</div><div class="test-title">has proper button labels for navigation</div><div class="test-status">passed</div><div class="test-duration">0.079s</div></div></div></div></details><details id="suite-34" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\shared\ErrorBoundary\__tests__\ErrorBoundary.test.tsx</div><div class="suite-time warn">10.475s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorBoundary > Basic functionality</div><div class="test-title">renders children when no error</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorBoundary > Basic functionality</div><div class="test-title">catches errors and displays fallback UI</div><div class="test-status">passed</div><div class="test-duration">0.676s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorBoundary > Basic functionality</div><div class="test-title">uses custom fallback ReactNode when provided</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorBoundary > Basic functionality</div><div class="test-title">uses custom fallback function when provided</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorBoundary > Basic functionality</div><div class="test-title">calls onError callback when error occurs</div><div class="test-status">passed</div><div class="test-duration">0.095s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorBoundary > Basic functionality</div><div class="test-title">logs error with context</div><div class="test-status">passed</div><div class="test-duration">0.065s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorBoundary > Basic functionality</div><div class="test-title">uses ERROR_BOUNDARY context when not provided</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorBoundary > Basic functionality</div><div class="test-title">reports error to backend by default</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorBoundary > Basic functionality</div><div class="test-title">does not report to backend when reportToBackend is false</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorBoundary > Basic functionality</div><div class="test-title">displays error ID</div><div class="test-status">passed</div><div class="test-duration">0.095s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorBoundary > Basic functionality</div><div class="test-title">resets error state when Try Again is clicked</div><div class="test-status">passed</div><div class="test-duration">0.119s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorBoundary > Variant: minimal</div><div class="test-title">shows minimal error UI</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorBoundary > getDerivedStateFromError</div><div class="test-title">sets hasError to true and stores error</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutErrorBoundary</div><div class="test-title">renders children when no error</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutErrorBoundary</div><div class="test-title">shows checkout-specific error UI</div><div class="test-status">passed</div><div class="test-duration">0.14s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutErrorBoundary</div><div class="test-title">shows reassurance about no charges</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutErrorBoundary</div><div class="test-title">provides Try Again button</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutErrorBoundary</div><div class="test-title">provides Return to Cart link</div><div class="test-status">passed</div><div class="test-duration">0.123s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutErrorBoundary</div><div class="test-title">logs error with CHECKOUT context</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AdminErrorBoundary</div><div class="test-title">renders children when no error</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AdminErrorBoundary</div><div class="test-title">shows admin-specific error UI</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AdminErrorBoundary</div><div class="test-title">provides Reload Page button</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AdminErrorBoundary</div><div class="test-title">has toggle for technical details</div><div class="test-status">passed</div><div class="test-duration">0.089s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AdminErrorBoundary</div><div class="test-title">logs error with ADMIN context</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopErrorBoundary</div><div class="test-title">renders children when no error</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopErrorBoundary</div><div class="test-title">shows shop-specific error UI</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopErrorBoundary</div><div class="test-title">provides Refresh Page button</div><div class="test-status">passed</div><div class="test-duration">0.104s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShopErrorBoundary</div><div class="test-title">logs error with SHOP context</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div></div></details><details id="suite-35" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\auth\__tests__\signup.test.ts</div><div class="suite-time warn">7.682s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Successful signup</div><div class="test-title">creates user with valid data</div><div class="test-status">passed</div><div class="test-duration">0.074s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Successful signup</div><div class="test-title">hashes password before storage</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Successful signup</div><div class="test-title">creates user without name (optional field)</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Validation errors</div><div class="test-title">rejects invalid email format</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Validation errors</div><div class="test-title">rejects password shorter than 6 characters</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Validation errors</div><div class="test-title">rejects mismatched passwords</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Validation errors</div><div class="test-title">rejects missing email</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Validation errors</div><div class="test-title">rejects missing password</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Duplicate email handling</div><div class="test-title">rejects duplicate email</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Rate limiting</div><div class="test-title">enforces rate limit after 5 requests</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Rate limiting</div><div class="test-title">includes rate limit headers in response</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.106s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Error handling</div><div class="test-title">returns 500 on bcrypt error</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Error handling</div><div class="test-title">returns 500 on user creation error</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Email verification</div><div class="test-title">generates verification token</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Email verification</div><div class="test-title">sends verification email after signup</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Email verification</div><div class="test-title">includes emailVerificationRequired flag in response</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Email verification</div><div class="test-title">succeeds even if email sending fails</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Email normalization</div><div class="test-title">converts email to lowercase for storage</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Email normalization</div><div class="test-title">checks for existing user with case-insensitive email</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Password validation edge cases</div><div class="test-title">accepts password with special characters</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Password validation edge cases</div><div class="test-title">accepts long password</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Password validation edge cases</div><div class="test-title">rejects password with exactly 5 characters</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Password validation edge cases</div><div class="test-title">accepts password with exactly 6 characters (minimum)</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Name field validation</div><div class="test-title">accepts name with spaces</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Name field validation</div><div class="test-title">accepts name with special characters</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Response security</div><div class="test-title">does not include password in response</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > Response security</div><div class="test-title">does not include verificationToken in response</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > IP-based rate limiting</div><div class="test-title">rate limits based on x-forwarded-for header</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/signup > IP-based rate limiting</div><div class="test-title">rate limits based on x-real-ip header when x-forwarded-for is missing</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-36" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\__tests__\dashboard.test.ts</div><div class="suite-time warn">7.574s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/dashboard > Authentication & Authorization</div><div class="test-title">requires authentication</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/dashboard > Authentication & Authorization</div><div class="test-title">requires admin role</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/dashboard > Authentication & Authorization</div><div class="test-title">allows admin access</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/dashboard > Dashboard sections</div><div class="test-title">returns all sections by default</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/dashboard > Dashboard sections</div><div class="test-title">returns only overview section when requested</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/dashboard > Dashboard sections</div><div class="test-title">returns only orders section when requested</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/dashboard > Dashboard sections</div><div class="test-title">returns only sales section when requested</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/dashboard > Dashboard sections</div><div class="test-title">returns only products section when requested</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/dashboard > Dashboard sections</div><div class="test-title">returns only customers section when requested</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/dashboard > Error handling</div><div class="test-title">returns 500 on analytics error</div><div class="test-status">passed</div><div class="test-duration">0.093s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/dashboard > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-37" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\checkout\__tests__\PaymentForm.test.tsx</div><div class="suite-time warn">37.976s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Rendering</div><div class="test-title">renders payment method options</div><div class="test-status">passed</div><div class="test-duration">0.582s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Rendering</div><div class="test-title">renders form with aria-label</div><div class="test-status">passed</div><div class="test-duration">0.5s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Rendering</div><div class="test-title">renders submit button with correct amount</div><div class="test-status">passed</div><div class="test-duration">0.161s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Rendering</div><div class="test-title">shows credit card fields by default</div><div class="test-status">passed</div><div class="test-duration">0.171s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Payment method selection</div><div class="test-title">selects credit card by default</div><div class="test-status">passed</div><div class="test-duration">0.362s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Payment method selection</div><div class="test-title">switches to paypal</div><div class="test-status">passed</div><div class="test-duration">0.412s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Payment method selection</div><div class="test-title">switches to apple pay</div><div class="test-status">passed</div><div class="test-duration">0.518s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Credit card form validation</div><div class="test-title">formats card number with spaces</div><div class="test-status">passed</div><div class="test-duration">1.21s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Credit card form validation</div><div class="test-title">limits expiry month to 2 digits</div><div class="test-status">passed</div><div class="test-duration">0.393s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Credit card form validation</div><div class="test-title">limits expiry year to 2 digits</div><div class="test-status">passed</div><div class="test-duration">0.391s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Credit card form validation</div><div class="test-title">limits CVC to 4 digits</div><div class="test-status">passed</div><div class="test-duration">0.31s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Credit card form validation</div><div class="test-title">shows validation errors when card is invalid</div><div class="test-status">passed</div><div class="test-duration">2.214s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Form submission</div><div class="test-title">calls processPayment with correct data for credit card</div><div class="test-status">passed</div><div class="test-duration">2.342s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Form submission</div><div class="test-title">calls onSuccess when payment succeeds</div><div class="test-status">passed</div><div class="test-duration">2.38s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Form submission</div><div class="test-title">calls onError when payment fails</div><div class="test-status">passed</div><div class="test-duration">2.871s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Form submission</div><div class="test-title">handles payment exception</div><div class="test-status">passed</div><div class="test-duration">1.874s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Form submission</div><div class="test-title">skips card validation for PayPal</div><div class="test-status">passed</div><div class="test-duration">0.387s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Loading state</div><div class="test-title">shows loading spinner while processing</div><div class="test-status">passed</div><div class="test-duration">2.201s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PaymentForm > Error handling</div><div class="test-title">displays error message when payment fails</div><div class="test-status">passed</div><div class="test-duration">2.465s</div></div></div></div></details><details id="suite-38" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\StarRating\__tests__\StarRating.test.tsx</div><div class="suite-time warn">6.756s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > rendering</div><div class="test-title">should render 5 stars by default</div><div class="test-status">passed</div><div class="test-duration">0.306s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > rendering</div><div class="test-title">should render custom number of stars</div><div class="test-status">passed</div><div class="test-duration">0.096s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > rendering</div><div class="test-title">should have correct aria-label</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > rating display</div><div class="test-title">should display full stars correctly</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > rating display</div><div class="test-title">should display half star correctly</div><div class="test-status">passed</div><div class="test-duration">0.07s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > rating display</div><div class="test-title">should clamp rating to 0 if negative</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > rating display</div><div class="test-title">should clamp rating to maxStars if above</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > rating display</div><div class="test-title">should show 0 rating correctly</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > rating display</div><div class="test-title">should handle default rating</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > review count</div><div class="test-title">should show review count when provided and showCount is true</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > review count</div><div class="test-title">should show count by default when reviewCount is provided</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > review count</div><div class="test-title">should hide count when showCount is false</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > review count</div><div class="test-title">should not show count when reviewCount is undefined</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > review count</div><div class="test-title">should show zero review count</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > sizes</div><div class="test-title">should apply small size</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > sizes</div><div class="test-title">should apply medium size (default)</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > sizes</div><div class="test-title">should apply large size</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > interactive mode</div><div class="test-title">should not render buttons when not interactive</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > interactive mode</div><div class="test-title">should render buttons when interactive</div><div class="test-status">passed</div><div class="test-duration">0.133s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > interactive mode</div><div class="test-title">should call onRatingChange when star is clicked in interactive mode</div><div class="test-status">passed</div><div class="test-duration">0.095s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > interactive mode</div><div class="test-title">should call onRatingChange with correct value for each star</div><div class="test-status">passed</div><div class="test-duration">0.106s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > interactive mode</div><div class="test-title">should not call onRatingChange when not interactive</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > accessibility</div><div class="test-title">should have aria-label on each star button in interactive mode</div><div class="test-status">passed</div><div class="test-duration">0.08s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > accessibility</div><div class="test-title">should have role=img on star container</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > custom className</div><div class="test-title">should apply custom className</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > tooltip</div><div class="test-title">should show tooltip on hover when not interactive</div><div class="test-status">passed</div><div class="test-duration">0.116s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > tooltip</div><div class="test-title">should not show tooltip when interactive</div><div class="test-status">passed</div><div class="test-duration">0.24s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > tooltip</div><div class="test-title">should hide tooltip on mouse leave</div><div class="test-status">passed</div><div class="test-duration">0.172s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > tooltip</div><div class="test-title">should format rating with one decimal place in tooltip</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > tooltip</div><div class="test-title">should show correct tooltip for 0 rating</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRating > tooltip</div><div class="test-title">should show correct tooltip for max rating</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRatingCompact</div><div class="test-title">should render with small size</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRatingCompact</div><div class="test-title">should not show count</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRatingCompact</div><div class="test-title">should accept size prop override</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRatingCompact</div><div class="test-title">should handle default rating</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRatingWithCount</div><div class="test-title">should always show count</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRatingWithCount</div><div class="test-title">should show zero review count</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRatingWithCount</div><div class="test-title">should use medium size by default</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRatingWithCount</div><div class="test-title">should accept size prop</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StarRatingWithCount</div><div class="test-title">should handle default values</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div></div></details><details id="suite-39" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\product\ProductCard\__tests__\ProductCard.test.tsx</div><div class="suite-time warn">8.897s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > grid variant (default)</div><div class="test-title">should render product title</div><div class="test-status">passed</div><div class="test-duration">0.269s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > grid variant (default)</div><div class="test-title">should render product image</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > grid variant (default)</div><div class="test-title">should render star rating</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > grid variant (default)</div><div class="test-title">should render price display</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > grid variant (default)</div><div class="test-title">should render quick view button by default</div><div class="test-status">passed</div><div class="test-duration">0.232s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > grid variant (default)</div><div class="test-title">should render add to cart button by default</div><div class="test-status">passed</div><div class="test-duration">0.089s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > grid variant (default)</div><div class="test-title">should render wishlist button by default</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > grid variant (default)</div><div class="test-title">should link to product details page</div><div class="test-status">passed</div><div class="test-duration">0.132s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > list variant</div><div class="test-title">should render with list layout</div><div class="test-status">passed</div><div class="test-duration">0.093s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > list variant</div><div class="test-title">should show all action buttons in list variant</div><div class="test-status">passed</div><div class="test-duration">0.133s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > featured variant</div><div class="test-title">should render with featured layout</div><div class="test-status">passed</div><div class="test-duration">0.071s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > action button visibility</div><div class="test-title">should hide quick view button when showQuickView is false</div><div class="test-status">passed</div><div class="test-duration">0.14s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > action button visibility</div><div class="test-title">should hide add to cart button when showAddToCart is false</div><div class="test-status">passed</div><div class="test-duration">0.074s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > action button visibility</div><div class="test-title">should hide wishlist button when showWishlist is false</div><div class="test-status">passed</div><div class="test-duration">0.171s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > action button visibility</div><div class="test-title">should hide rating when showRating is false</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > action button interactions</div><div class="test-title">should open quick view modal when quick view button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.119s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > action button interactions</div><div class="test-title">should add product to cart when add to cart button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.126s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > action button interactions</div><div class="test-title">should add product to wishlist when wishlist button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.175s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > image handling</div><div class="test-title">should show placeholder when image fails to load</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > image handling</div><div class="test-title">should use placeholder when no preview images available</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > price display</div><div class="test-title">should show discounted price when available</div><div class="test-status">passed</div><div class="test-duration">0.079s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > price display</div><div class="test-title">should show only regular price when no discount</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCard > custom className</div><div class="test-title">should apply custom className</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCardGrid</div><div class="test-title">should render with grid variant</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCardGrid</div><div class="test-title">should pass through all props except variant</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCardList</div><div class="test-title">should render with list variant</div><div class="test-status">passed</div><div class="test-duration">0.069s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCardList</div><div class="test-title">should pass through all props except variant</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCardFeatured</div><div class="test-title">should render with featured variant</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCardFeatured</div><div class="test-title">should pass through all props except variant</div><div class="test-status">passed</div><div class="test-duration">0.078s</div></div></div></div></details><details id="suite-40" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\__tests__\auth\Signin.test.tsx</div><div class="suite-time warn">11.318s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Signin Component</div><div class="test-title">renders signin form</div><div class="test-status">passed</div><div class="test-duration">0.618s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Signin Component</div><div class="test-title">displays validation errors for empty fields</div><div class="test-status">passed</div><div class="test-duration">0.437s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Signin Component</div><div class="test-title">validates email format using HTML5 validation</div><div class="test-status">passed</div><div class="test-duration">0.103s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Signin Component</div><div class="test-title">displays validation error for empty password</div><div class="test-status">passed</div><div class="test-duration">0.161s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Signin Component</div><div class="test-title">submits form with valid credentials</div><div class="test-status">passed</div><div class="test-duration">0.281s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Signin Component</div><div class="test-title">redirects to home page on successful signin</div><div class="test-status">passed</div><div class="test-duration">0.121s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Signin Component</div><div class="test-title">displays error message on signin failure</div><div class="test-status">passed</div><div class="test-duration">0.158s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Signin Component</div><div class="test-title">disables submit button while submitting</div><div class="test-status">passed</div><div class="test-duration">0.226s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Signin Component</div><div class="test-title">has proper form accessibility attributes</div><div class="test-status">passed</div><div class="test-duration">0.105s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Signin Component</div><div class="test-title">displays error with proper ARIA attributes</div><div class="test-status">passed</div><div class="test-duration">0.183s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Signin Component</div><div class="test-title">contains link to signup page</div><div class="test-status">passed</div><div class="test-duration">0.138s</div></div></div></div></details><details id="suite-41" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\user\addresses\[id]\__tests__\route.test.ts</div><div class="suite-time warn">9.065s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/addresses/[id] > Rate limiting</div><div class="test-title">returns 429 when rate limit exceeded</div><div class="test-status">passed</div><div class="test-duration">0.125s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/addresses/[id] > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/addresses/[id] > Authentication</div><div class="test-title">returns 401 when session exists but user.id is missing</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/addresses/[id] > Validation</div><div class="test-title">returns 400 for invalid address ID</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/addresses/[id] > Successful retrieval</div><div class="test-title">returns address for authenticated user</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/addresses/[id] > Successful retrieval</div><div class="test-title">returns 404 when address not found</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/addresses/[id] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.09s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Validation</div><div class="test-title">returns 400 for invalid address ID</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Validation</div><div class="test-title">returns 400 for invalid address data</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Successful update</div><div class="test-title">updates address successfully</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Successful update</div><div class="test-title">handles setting address as default</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Successful update</div><div class="test-title">returns 404 when address not found</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Error handling</div><div class="test-title">returns 500 on database error during findFirst</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Error handling</div><div class="test-title">returns 500 on database error during update</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Error handling</div><div class="test-title">returns 500 on transaction error when setting default</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Error handling</div><div class="test-title">returns 429 when rate limit exceeded</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Additional validation tests</div><div class="test-title">validates optional street field constraints</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Additional validation tests</div><div class="test-title">validates optional city field constraints</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Additional validation tests</div><div class="test-title">validates optional zipCode field constraints</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Additional validation tests</div><div class="test-title">allows updating multiple fields at once</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/user/addresses/[id] > Additional validation tests</div><div class="test-title">handles updating address type when setting as default</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/user/addresses/[id] > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/user/addresses/[id] > Validation</div><div class="test-title">returns 400 for invalid address ID</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/user/addresses/[id] > Validation</div><div class="test-title">returns 404 for non-existent address ID</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/user/addresses/[id] > Validation</div><div class="test-title">returns 429 when rate limit exceeded</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/user/addresses/[id] > Successful deletion</div><div class="test-title">deletes address successfully</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/user/addresses/[id] > Successful deletion</div><div class="test-title">returns 404 when address not found</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/user/addresses/[id] > Error handling</div><div class="test-title">returns 500 on database error during findFirst</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/user/addresses/[id] > Error handling</div><div class="test-title">returns 500 on database error during delete operation</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div></div></details><details id="suite-42" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\alerts\AlertConfigForm\__tests__\AlertConfigForm.test.tsx</div><div class="suite-time warn">11.294s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > rendering</div><div class="test-title">renders form with all sections</div><div class="test-status">passed</div><div class="test-duration">0.374s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > rendering</div><div class="test-title">renders all form fields</div><div class="test-status">passed</div><div class="test-duration">0.327s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > rendering</div><div class="test-title">renders action buttons</div><div class="test-status">passed</div><div class="test-duration">0.39s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > rendering</div><div class="test-title">shows update button when editing</div><div class="test-status">passed</div><div class="test-duration">0.199s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > default values</div><div class="test-title">sets default values for new config</div><div class="test-status">passed</div><div class="test-duration">0.145s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > initial values</div><div class="test-title">populates form with initial values</div><div class="test-status">passed</div><div class="test-duration">0.151s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > validation</div><div class="test-title">shows error when name is empty</div><div class="test-status">passed</div><div class="test-duration">0.329s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > validation</div><div class="test-title">shows error when scope is empty</div><div class="test-status">passed</div><div class="test-duration">0.664s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > validation</div><div class="test-title">shows error when warning >= critical threshold</div><div class="test-status">passed</div><div class="test-duration">0.818s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > form submission</div><div class="test-title">calls onSubmit with form values</div><div class="test-status">passed</div><div class="test-duration">1.074s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > cancel</div><div class="test-title">calls onCancel when cancel button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.229s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > loading state</div><div class="test-title">disables buttons when loading</div><div class="test-status">passed</div><div class="test-duration">0.218s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > loading state</div><div class="test-title">shows loading spinner when loading</div><div class="test-status">passed</div><div class="test-duration">0.084s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > notification channels</div><div class="test-title">toggles notification channels</div><div class="test-status">passed</div><div class="test-duration">0.873s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > metric type selection</div><div class="test-title">updates threshold labels based on metric type</div><div class="test-status">passed</div><div class="test-duration">0.237s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigForm > className</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.095s</div></div></div></div></details><details id="suite-43" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\services\__tests__\order.service.test.ts</div><div class="suite-time warn">9.815s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getById</div><div class="test-title">returns order with items when found</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getById</div><div class="test-title">returns null when order not found</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getByUserId</div><div class="test-title">returns orders with pagination for user</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getByUserId</div><div class="test-title">uses default pagination when not provided</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getByUserId</div><div class="test-title">calculates correct skip for pagination</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getOrders</div><div class="test-title">applies userId filter when provided</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getOrders</div><div class="test-title">applies status filter when provided</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getOrders</div><div class="test-title">applies date range filters when provided</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getOrders</div><div class="test-title">returns empty result with no filters</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > create</div><div class="test-title">creates order with valid data</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > create</div><div class="test-title">uses billing address from shipping when not provided</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > create</div><div class="test-title">uses separate billing address when provided</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > create</div><div class="test-title">throws error for invalid order data</div><div class="test-status">passed</div><div class="test-duration">0.382s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > create</div><div class="test-title">throws error when database fails</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > updateStatus</div><div class="test-title">updates status for valid transition</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > updateStatus</div><div class="test-title">throws error when order not found</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > updateStatus</div><div class="test-title">throws error for invalid status transition</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > cancel</div><div class="test-title">cancels PROCESSING order</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > cancel</div><div class="test-title">cancels SHIPPED order</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > cancel</div><div class="test-title">throws error when order not found</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > cancel</div><div class="test-title">throws error for DELIVERED order</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > cancel</div><div class="test-title">throws error for CANCELLED order</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > calculateTotals</div><div class="test-title">calculates correct totals for single item</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > calculateTotals</div><div class="test-title">calculates correct totals for multiple items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > calculateTotals</div><div class="test-title">applies discount correctly</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > calculateTotals</div><div class="test-title">returns zero totals for empty items</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > calculateTotals</div><div class="test-title">caps discount at subtotal</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > calculateLineItem</div><div class="test-title">calculates line item total correctly</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > calculateLineItem</div><div class="test-title">returns 0 for negative values</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > calculateDiscount</div><div class="test-title">calculates percentage discount correctly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > calculateDiscount</div><div class="test-title">returns 0 for invalid inputs</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validateItems</div><div class="test-title">validates correct items</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validateItems</div><div class="test-title">fails for empty items</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validateItems</div><div class="test-title">fails for invalid product ID</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validateItems</div><div class="test-title">fails for invalid quantity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validateItems</div><div class="test-title">fails for negative price</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validateAddress</div><div class="test-title">validates correct address</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validateAddress</div><div class="test-title">fails for empty address</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validateAddress</div><div class="test-title">fails for invalid JSON</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validateAddress</div><div class="test-title">fails for missing required fields</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validateAddress</div><div class="test-title">fails for invalid zip code format</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validatePromoCode</div><div class="test-title">validates correct promo code</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validatePromoCode</div><div class="test-title">fails for empty code</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validatePromoCode</div><div class="test-title">fails for too short code</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validatePromoCode</div><div class="test-title">fails for lowercase letters</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > validatePromoCode</div><div class="test-title">fails for special characters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > isPromoExpired</div><div class="test-title">returns true for past date</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > isPromoExpired</div><div class="test-title">returns false for future date</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > isPromoLimitReached</div><div class="test-title">returns true when limit reached</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > isPromoLimitReached</div><div class="test-title">returns false when limit not reached</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > isPromoLimitReached</div><div class="test-title">returns false when limit is null (unlimited)</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > canTransition</div><div class="test-title">allows valid transitions</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > canTransition</div><div class="test-title">disallows invalid transitions</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getAllowedTransitions</div><div class="test-title">returns allowed transitions for PROCESSING</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getAllowedTransitions</div><div class="test-title">returns empty array for DELIVERED</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getAllowedTransitions</div><div class="test-title">returns empty array for CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > isCancellable</div><div class="test-title">returns true for PROCESSING</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > isCancellable</div><div class="test-title">returns true for SHIPPED</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > isCancellable</div><div class="test-title">returns false for DELIVERED</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > isCancellable</div><div class="test-title">returns false for CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > isModifiable</div><div class="test-title">returns true only for PROCESSING</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > formatNumber</div><div class="test-title">formats order ID with leading zeros</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > parseNumber</div><div class="test-title">parses valid order number</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > parseNumber</div><div class="test-title">returns null for invalid format</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getStatusDisplay</div><div class="test-title">returns human-readable status</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > getStatusColor</div><div class="test-title">returns correct color for each status</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > constants</div><div class="test-title">exports TAX_RATE</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > constants</div><div class="test-title">exports FREE_SHIPPING_THRESHOLD</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderService > constants</div><div class="test-title">exports STANDARD_SHIPPING_COST</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-44" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\account\MyAccount\__tests__\AccountSidebar.test.tsx</div><div class="suite-time warn">10.526s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > Rendering</div><div class="test-title">renders user name from session</div><div class="test-status">passed</div><div class="test-duration">0.285s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > Rendering</div><div class="test-title">renders member since date</div><div class="test-status">passed</div><div class="test-duration">0.079s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > Rendering</div><div class="test-title">renders fallback user name when session has no name</div><div class="test-status">passed</div><div class="test-duration">0.116s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > Rendering</div><div class="test-title">renders loading text when memberSince is empty</div><div class="test-status">passed</div><div class="test-duration">0.099s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > Rendering</div><div class="test-title">renders all menu items</div><div class="test-status">passed</div><div class="test-duration">0.597s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > Rendering</div><div class="test-title">renders logout button</div><div class="test-status">passed</div><div class="test-duration">0.143s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > Rendering</div><div class="test-title">renders user avatar image</div><div class="test-status">passed</div><div class="test-duration">0.084s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > Rendering</div><div class="test-title">does not show avatar image when session has no image</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > Active tab styling</div><div class="test-title">highlights dashboard tab when active</div><div class="test-status">passed</div><div class="test-duration">0.183s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > Active tab styling</div><div class="test-title">highlights orders tab when active</div><div class="test-status">passed</div><div class="test-duration">0.116s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > Active tab styling</div><div class="test-title">highlights addresses tab when active</div><div class="test-status">passed</div><div class="test-duration">0.155s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > Active tab styling</div><div class="test-title">highlights account-details tab when active</div><div class="test-status">passed</div><div class="test-duration">0.174s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > User interactions</div><div class="test-title">calls onTabChange when Dashboard is clicked</div><div class="test-status">passed</div><div class="test-duration">0.301s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > User interactions</div><div class="test-title">calls onTabChange when Orders is clicked</div><div class="test-status">passed</div><div class="test-duration">0.21s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > User interactions</div><div class="test-title">calls onTabChange when Downloads is clicked</div><div class="test-status">passed</div><div class="test-duration">0.151s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > User interactions</div><div class="test-title">calls onTabChange when Addresses is clicked</div><div class="test-status">passed</div><div class="test-duration">0.165s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > User interactions</div><div class="test-title">calls onTabChange when Account Details is clicked</div><div class="test-status">passed</div><div class="test-duration">0.224s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > User interactions</div><div class="test-title">calls onLogout when Logout is clicked</div><div class="test-status">passed</div><div class="test-duration">0.254s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AccountSidebar > Null session handling</div><div class="test-title">handles null session gracefully</div><div class="test-status">passed</div><div class="test-duration">0.104s</div></div></div></div></details><details id="suite-45" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\services\__tests__\chat.service.test.ts</div><div class="suite-time">3.822s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatService > startConversation</div><div class="test-title">should start a new conversation when no existing one found</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatService > startConversation</div><div class="test-title">should continue existing conversation if found</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatService > sendMessage</div><div class="test-title">should create a message successfully</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatService > sendMessage</div><div class="test-title">should update conversation status when agent sends message</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatService > assignConversation</div><div class="test-title">should assign conversation to agent</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatService > resolveConversation</div><div class="test-title">should resolve conversation and request feedback</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatService > closeConversation</div><div class="test-title">should close conversation</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatService > submitFeedback</div><div class="test-title">should submit rating and feedback</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatService > getAgentQueueStats</div><div class="test-title">should return queue statistics</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatService > transferConversation</div><div class="test-title">should transfer conversation to another agent</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatService > markMessagesAsRead</div><div class="test-title">should mark messages as read for customer</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatService > markMessagesAsRead</div><div class="test-title">should mark messages as read for agent</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-46" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\user\profile\__tests__\route.test.ts</div><div class="suite-time warn">7.847s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > GET /api/user/profile > Authentication</div><div class="test-title">returns 401 when user is not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > GET /api/user/profile > Authentication</div><div class="test-title">returns 401 when session exists but user.id is missing</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > GET /api/user/profile > Profile retrieval</div><div class="test-title">returns user profile when authenticated</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > GET /api/user/profile > Profile retrieval</div><div class="test-title">returns 404 when user is not found</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > GET /api/user/profile > Rate limiting</div><div class="test-title">returns 429 when rate limit is exceeded</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > GET /api/user/profile > Rate limiting</div><div class="test-title">includes rate limit headers when rate limit exceeded</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > GET /api/user/profile > Rate limiting</div><div class="test-title">uses x-forwarded-for header for rate limiting</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > GET /api/user/profile > Rate limiting</div><div class="test-title">uses x-real-ip header when x-forwarded-for is not available</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > GET /api/user/profile > Rate limiting</div><div class="test-title">uses 'unknown' IP when no IP headers are available</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > GET /api/user/profile > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.075s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Authentication</div><div class="test-title">returns 401 when user is not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Authentication</div><div class="test-title">returns 401 when session exists but user.id is missing</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Profile updates</div><div class="test-title">updates user name successfully</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Profile updates</div><div class="test-title">updates user phone successfully</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Profile updates</div><div class="test-title">updates both name and phone simultaneously</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Profile updates</div><div class="test-title">handles empty request body (no updates)</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Profile updates</div><div class="test-title">ignores unknown fields in request body</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Validation</div><div class="test-title">returns 400 for invalid name (too short)</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Validation</div><div class="test-title">returns 400 for invalid name (too long)</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Validation</div><div class="test-title">returns 400 for invalid phone (too short)</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Validation</div><div class="test-title">returns 400 for invalid phone (too long)</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Validation</div><div class="test-title">allows valid name at minimum length (2 chars)</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Validation</div><div class="test-title">allows valid name at maximum length (100 chars)</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Validation</div><div class="test-title">allows valid phone at minimum length (10 chars)</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Validation</div><div class="test-title">allows valid phone at maximum length (20 chars)</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Validation</div><div class="test-title">returns validation details for multiple invalid fields</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Rate limiting</div><div class="test-title">returns 429 when rate limit is exceeded</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Rate limiting</div><div class="test-title">includes rate limit headers when rate limit exceeded</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Rate limiting</div><div class="test-title">uses x-forwarded-for header for rate limiting</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Rate limiting</div><div class="test-title">uses x-real-ip header when x-forwarded-for is not available</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Rate limiting</div><div class="test-title">uses 'unknown' IP when no IP headers are available</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/profile > PATCH /api/user/profile > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div></div></details><details id="suite-47" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Modal\__tests__\Modal.test.tsx</div><div class="suite-time warn">9.97s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Visibility and Rendering</div><div class="test-title">renders when open is true</div><div class="test-status">passed</div><div class="test-duration">0.319s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Visibility and Rendering</div><div class="test-title">does not render when open is false</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Visibility and Rendering</div><div class="test-title">renders children content</div><div class="test-status">passed</div><div class="test-duration">0.129s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Visibility and Rendering</div><div class="test-title">renders backdrop element</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Title and Header</div><div class="test-title">renders title when provided</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Title and Header</div><div class="test-title">title has correct id for aria-labelledby</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Title and Header</div><div class="test-title">renders without title</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Title and Header</div><div class="test-title">renders close button by default</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Title and Header</div><div class="test-title">hides close button when showCloseButton is false</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Title and Header</div><div class="test-title">renders header only when title or close button is present</div><div class="test-status">passed</div><div class="test-duration">0.074s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Footer</div><div class="test-title">renders footer when provided</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Footer</div><div class="test-title">does not render footer when not provided</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Footer</div><div class="test-title">footer has correct styling</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Sizes</div><div class="test-title">renders small size</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Sizes</div><div class="test-title">renders medium size (default)</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Sizes</div><div class="test-title">renders large size</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Sizes</div><div class="test-title">renders xl size</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Sizes</div><div class="test-title">renders full size</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Close Functionality</div><div class="test-title">calls onClose when close button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Close Functionality</div><div class="test-title">calls onClose when Escape key is pressed</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Close Functionality</div><div class="test-title">does not close on Escape when closeOnEscape is false</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Close Functionality</div><div class="test-title">calls onClose when backdrop is clicked</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Close Functionality</div><div class="test-title">does not close on backdrop click when closeOnBackdrop is false</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Close Functionality</div><div class="test-title">does not close when clicking inside modal content</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Close Functionality</div><div class="test-title">only calls onClose once per escape press</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Keyboard Navigation</div><div class="test-title">ignores non-Escape keys</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Keyboard Navigation</div><div class="test-title">handles Escape with case sensitivity</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Body Scroll Management</div><div class="test-title">prevents body scroll when modal opens</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Body Scroll Management</div><div class="test-title">restores body scroll when modal closes</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Body Scroll Management</div><div class="test-title">restores body scroll on unmount</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Body Scroll Management</div><div class="test-title">does not set overflow if modal never opened</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > ARIA and Accessibility</div><div class="test-title">has role='dialog'</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > ARIA and Accessibility</div><div class="test-title">has aria-modal='true'</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > ARIA and Accessibility</div><div class="test-title">has aria-labelledby when title is provided</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > ARIA and Accessibility</div><div class="test-title">does not have aria-labelledby when no title</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > ARIA and Accessibility</div><div class="test-title">backdrop has aria-hidden='true'</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > ARIA and Accessibility</div><div class="test-title">close button has aria-label</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > ARIA and Accessibility</div><div class="test-title">has no accessibility violations (basic modal)</div><div class="test-status">passed</div><div class="test-duration">0.466s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > ARIA and Accessibility</div><div class="test-title">has no accessibility violations (with footer)</div><div class="test-status">passed</div><div class="test-duration">0.245s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > ARIA and Accessibility</div><div class="test-title">has no accessibility violations (no close button)</div><div class="test-status">passed</div><div class="test-duration">0.115s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Event Listener Cleanup</div><div class="test-title">removes escape key listener when modal closes</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Event Listener Cleanup</div><div class="test-title">removes escape key listener on unmount</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Complex Content</div><div class="test-title">handles complex children with forms</div><div class="test-status">passed</div><div class="test-duration">0.106s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Complex Content</div><div class="test-title">handles scrollable content</div><div class="test-status">passed</div><div class="test-duration">0.079s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Complex Content</div><div class="test-title">renders nested interactive elements</div><div class="test-status">passed</div><div class="test-duration">0.124s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > State Transitions</div><div class="test-title">transitions from closed to open</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > State Transitions</div><div class="test-title">transitions from open to closed</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > State Transitions</div><div class="test-title">updates content while remaining open</div><div class="test-status">passed</div><div class="test-duration">0.056s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Multiple Modals</div><div class="test-title">handles multiple modals</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Multiple Modals</div><div class="test-title">each modal has independent onClose</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Edge Cases</div><div class="test-title">handles empty children</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Edge Cases</div><div class="test-title">handles undefined title gracefully</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Edge Cases</div><div class="test-title">handles rapid open/close toggles</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Edge Cases</div><div class="test-title">handles onClose being called multiple times</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Styling and Animation</div><div class="test-title">applies z-index for modal layer</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Styling and Animation</div><div class="test-title">has backdrop blur effect</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Styling and Animation</div><div class="test-title">modal content has shadow</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Styling and Animation</div><div class="test-title">modal content is rounded</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Integration Tests</div><div class="test-title">full modal workflow: open, interact, close</div><div class="test-status">passed</div><div class="test-duration">0.117s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Modal Component > Integration Tests</div><div class="test-title">confirmation modal pattern</div><div class="test-status">passed</div><div class="test-duration">0.126s</div></div></div></div></details><details id="suite-48" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\product\ProductActionButtons\__tests__\ProductActionButtons.test.tsx</div><div class="suite-time warn">6.685s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Basic Rendering</div><div class="test-title">renders default actions (quickView, addToCart, wishlist)</div><div class="test-status">passed</div><div class="test-duration">0.189s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Basic Rendering</div><div class="test-title">renders custom actions</div><div class="test-status">passed</div><div class="test-duration">0.069s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Basic Rendering</div><div class="test-title">renders all available actions</div><div class="test-status">passed</div><div class="test-duration">0.076s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Basic Rendering</div><div class="test-title">renders single action</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Layout Variants</div><div class="test-title">renders horizontal layout (default)</div><div class="test-status">passed</div><div class="test-duration">0.043s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Layout Variants</div><div class="test-title">renders vertical layout</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Layout Variants</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Variant Styles</div><div class="test-title">renders icon variant (default)</div><div class="test-status">passed</div><div class="test-duration">0.193s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Variant Styles</div><div class="test-title">renders button variant with primary Add to Cart button</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Variant Styles</div><div class="test-title">renders text variant with all buttons having labels</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Variant Styles</div><div class="test-title">text variant uses primary for addToCart, secondary for others</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Action Handlers - Add to Cart</div><div class="test-title">dispatches addToCart action when Add to Cart is clicked</div><div class="test-status">passed</div><div class="test-duration">0.076s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Action Handlers - Add to Cart</div><div class="test-title">shows success toast when item added to cart</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Action Handlers - Add to Cart</div><div class="test-title">adds product with correct data structure</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Action Handlers - Wishlist</div><div class="test-title">dispatches addToWishlist action when Wishlist is clicked</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Action Handlers - Wishlist</div><div class="test-title">shows success toast when item added to wishlist</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Action Handlers - Quick View</div><div class="test-title">opens quick view modal when Quick View is clicked</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Action Handlers - Quick View</div><div class="test-title">dispatches updateQuickView action</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Action Handlers - Compare</div><div class="test-title">shows info toast for compare action (feature coming soon)</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Accessibility</div><div class="test-title">has proper aria-labels for all actions</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Accessibility</div><div class="test-title">has no accessibility violations (icon variant)</div><div class="test-status">passed</div><div class="test-duration">0.189s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Accessibility</div><div class="test-title">has no accessibility violations (button variant)</div><div class="test-status">passed</div><div class="test-duration">0.161s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Accessibility</div><div class="test-title">has no accessibility violations (text variant)</div><div class="test-status">passed</div><div class="test-duration">0.12s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Accessibility</div><div class="test-title">all buttons are keyboard accessible</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > QuickProductActions Shorthand</div><div class="test-title">renders with default quick actions</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > QuickProductActions Shorthand</div><div class="test-title">uses icon variant by default</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > QuickProductActions Shorthand</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > ProductActionsWithCart Shorthand</div><div class="test-title">renders with button variant</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > ProductActionsWithCart Shorthand</div><div class="test-title">includes quick view and wishlist as icon buttons</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Multiple Interactions</div><div class="test-title">handles rapid clicks on same action</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Multiple Interactions</div><div class="test-title">handles clicks on different actions sequentially</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Edge Cases</div><div class="test-title">handles empty actions array</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Edge Cases</div><div class="test-title">handles product with missing optional fields</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Edge Cases</div><div class="test-title">renders nothing when variant doesn't match any condition</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductActionButtons Component > Different Products</div><div class="test-title">handles different products correctly</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div></div></details><details id="suite-49" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\user\addresses\__tests__\route.test.ts</div><div class="suite-time warn">5.479s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > GET /api/user/addresses > Authentication</div><div class="test-title">returns 401 when user is not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > GET /api/user/addresses > Authentication</div><div class="test-title">returns 401 when session exists but user.id is missing</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > GET /api/user/addresses > Address retrieval</div><div class="test-title">returns all addresses for authenticated user</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > GET /api/user/addresses > Address retrieval</div><div class="test-title">filters addresses by type</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > GET /api/user/addresses > Address retrieval</div><div class="test-title">returns empty array when no addresses exist</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > GET /api/user/addresses > Rate limiting</div><div class="test-title">returns 429 when rate limit is exceeded</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > GET /api/user/addresses > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.171s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Authentication</div><div class="test-title">returns 401 when user is not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Authentication</div><div class="test-title">returns 401 when session exists but user.id is missing</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Address creation</div><div class="test-title">creates a new address successfully</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Address creation</div><div class="test-title">creates a default address and unsets other defaults</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Address creation</div><div class="test-title">accepts BILLING as valid type</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Validation</div><div class="test-title">returns 400 for invalid address data - street too short</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Validation</div><div class="test-title">returns 400 for invalid address type</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Validation</div><div class="test-title">returns 400 for missing required fields</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Validation</div><div class="test-title">validates street field length constraints</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Validation</div><div class="test-title">validates city field length constraints</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Validation</div><div class="test-title">validates state field length constraints</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Validation</div><div class="test-title">validates zipCode field length constraints</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Validation</div><div class="test-title">validates country field length constraints</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Rate limiting</div><div class="test-title">returns 429 when rate limit is exceeded</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/user/addresses > POST /api/user/addresses > Error handling</div><div class="test-title">handles database transaction errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-50" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\auth\__tests__\forgot-password.test.ts</div><div class="suite-time warn">7.234s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Successful requests</div><div class="test-title">returns success message for existing user</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Successful requests</div><div class="test-title">returns same success message for non-existent user (prevents email enumeration)</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Successful requests</div><div class="test-title">deletes existing reset tokens before creating new one</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Successful requests</div><div class="test-title">creates token with 1 hour expiration</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Validation errors</div><div class="test-title">rejects invalid email format</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Validation errors</div><div class="test-title">rejects missing email</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Validation errors</div><div class="test-title">rejects empty email</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Rate limiting</div><div class="test-title">enforces rate limit after 5 requests</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Rate limiting</div><div class="test-title">includes rate limit headers</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Error handling</div><div class="test-title">returns success even if email sending fails</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Email normalization</div><div class="test-title">converts email to lowercase for lookup</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Token security</div><div class="test-title">hashes token before storage</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Token security</div><div class="test-title">generates random token using crypto</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Database operations</div><div class="test-title">deletes all existing reset tokens for user</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Database operations</div><div class="test-title">creates token with correct user association</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Database operations</div><div class="test-title">handles database error when deleting old tokens</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Database operations</div><div class="test-title">handles database error when creating new token</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Security headers</div><div class="test-title">includes security headers in success response</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Security headers</div><div class="test-title">includes security headers in error response</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > IP extraction for rate limiting</div><div class="test-title">uses x-forwarded-for header for IP</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > IP extraction for rate limiting</div><div class="test-title">uses x-real-ip header when x-forwarded-for is missing</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > IP extraction for rate limiting</div><div class="test-title">uses unknown as fallback IP</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Email edge cases</div><div class="test-title">handles email with plus sign addressing</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Email edge cases</div><div class="test-title">handles email with subdomain</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Email edge cases</div><div class="test-title">rejects email with spaces</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Email edge cases</div><div class="test-title">rejects email without domain</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Email edge cases</div><div class="test-title">rejects email without @ symbol</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Response consistency</div><div class="test-title">returns same status code for existing and non-existing users</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/forgot-password > Response consistency</div><div class="test-title">returns same message structure for existing and non-existing users</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-51" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\FormField\__tests__\FormField.test.tsx</div><div class="suite-time warn">8.748s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormField Component > Rendering</div><div class="test-title">renders input with correct props</div><div class="test-status">passed</div><div class="test-duration">0.107s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormField Component > Rendering</div><div class="test-title">renders with label</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormField Component > Rendering</div><div class="test-title">wraps input in div with margin</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormField Component > Rendering</div><div class="test-title">forwards ref to input element</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormField Component > Rendering</div><div class="test-title">passes all props to Input component</div><div class="test-status">passed</div><div class="test-duration">0.194s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormField Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.463s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormField Component > Accessibility</div><div class="test-title">has no accessibility violations with error</div><div class="test-status">passed</div><div class="test-duration">0.204s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TextField Component > Rendering</div><div class="test-title">renders with type text by default</div><div class="test-status">passed</div><div class="test-duration">0.056s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TextField Component > Rendering</div><div class="test-title">renders with custom type</div><div class="test-status">passed</div><div class="test-duration">0.089s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TextField Component > Rendering</div><div class="test-title">forwards ref to input element</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TextField Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.243s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EmailField Component > Rendering</div><div class="test-title">renders with type email</div><div class="test-status">passed</div><div class="test-duration">0.071s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EmailField Component > Rendering</div><div class="test-title">forwards ref to input element</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EmailField Component > Rendering</div><div class="test-title">passes all props to FormField</div><div class="test-status">passed</div><div class="test-duration">0.1s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EmailField Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.104s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordField Component > Rendering</div><div class="test-title">renders with type password</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordField Component > Rendering</div><div class="test-title">forwards ref to input element</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordField Component > Rendering</div><div class="test-title">passes all props to FormField</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PasswordField Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchField Component > Rendering</div><div class="test-title">renders with type search</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchField Component > Rendering</div><div class="test-title">forwards ref to input element</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchField Component > Rendering</div><div class="test-title">passes all props to FormField</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchField Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">NumberField Component > Rendering</div><div class="test-title">renders with type number</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">NumberField Component > Rendering</div><div class="test-title">forwards ref to input element</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">NumberField Component > Rendering</div><div class="test-title">accepts min, max, step props</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">NumberField Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.126s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormGroup Component > Rendering</div><div class="test-title">renders children</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormGroup Component > Rendering</div><div class="test-title">renders label when provided</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormGroup Component > Rendering</div><div class="test-title">renders description when provided</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormGroup Component > Rendering</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormGroup Component > Rendering</div><div class="test-title">has default margin bottom</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormGroup Component > Rendering</div><div class="test-title">wraps children in space-y container</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormGroup Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.137s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormRow Component > Rendering</div><div class="test-title">renders children in a grid</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormRow Component > Rendering</div><div class="test-title">uses responsive grid columns</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormRow Component > Rendering</div><div class="test-title">applies default gap of 4</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormRow Component > Rendering</div><div class="test-title">applies custom gap</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormRow Component > Rendering</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormRow Component > Rendering</div><div class="test-title">supports different gap values</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FormRow Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.215s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Integration Tests</div><div class="test-title">renders a complete form with all field types</div><div class="test-status">passed</div><div class="test-duration">0.218s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Integration Tests</div><div class="test-title">handles form with errors</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div></div></details><details id="suite-52" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\cart\__tests__\route.test.ts</div><div class="suite-time warn">9.162s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/cart > Authentication</div><div class="test-title">requires authentication</div><div class="test-status">passed</div><div class="test-duration">0.07s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/cart > Cart retrieval</div><div class="test-title">returns cart items for authenticated user</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/cart > Cart retrieval</div><div class="test-title">returns empty array for user with no cart items</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/cart > Cart retrieval</div><div class="test-title">includes device ID from request header</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/cart > Cart retrieval</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.159s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart > Authentication</div><div class="test-title">requires authentication</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart > Adding to cart</div><div class="test-title">creates new cart item for authenticated user</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart > Adding to cart</div><div class="test-title">updates quantity for existing cart item</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart > Adding to cart</div><div class="test-title">returns 404 when product does not exist</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart > Adding to cart</div><div class="test-title">includes device ID in cart item</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart > Validation</div><div class="test-title">rejects invalid product ID</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart > Validation</div><div class="test-title">rejects zero quantity</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart > Validation</div><div class="test-title">rejects negative quantity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart > Validation</div><div class="test-title">accepts string numbers (coercion)</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-53" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\RadioGroup\__tests__\RadioGroup.test.tsx</div><div class="suite-time warn">5.838s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Rendering</div><div class="test-title">renders all options</div><div class="test-status">passed</div><div class="test-duration">0.095s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Rendering</div><div class="test-title">renders with label</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Rendering</div><div class="test-title">renders required indicator when required</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Rendering</div><div class="test-title">renders helper text</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Rendering</div><div class="test-title">renders option-level helper text</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Rendering</div><div class="test-title">uses fieldset for grouping</div><div class="test-status">passed</div><div class="test-duration">0.194s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Rendering</div><div class="test-title">forwards ref to first input element</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Selection</div><div class="test-title">shows selected option as checked</div><div class="test-status">passed</div><div class="test-duration">0.084s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Selection</div><div class="test-title">calls onChange when option is selected</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Selection</div><div class="test-title">updates selection on change</div><div class="test-status">passed</div><div class="test-duration">0.119s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Disabled State</div><div class="test-title">disables all options when disabled prop is true</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Disabled State</div><div class="test-title">disables individual options</div><div class="test-status">passed</div><div class="test-duration">0.067s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Disabled State</div><div class="test-title">does not call onChange when disabled</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Disabled State</div><div class="test-title">applies disabled cursor styles</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Error State</div><div class="test-title">displays error message</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Error State</div><div class="test-title">applies error state styling</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Error State</div><div class="test-title">hides helper text when error is present</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Error State</div><div class="test-title">sets aria-describedby to error element</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Sizes</div><div class="test-title">renders small size</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Sizes</div><div class="test-title">renders medium size (default)</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Sizes</div><div class="test-title">renders large size</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Layout</div><div class="test-title">renders vertical layout by default</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Layout</div><div class="test-title">renders horizontal layout</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > States</div><div class="test-title">applies success state</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > States</div><div class="test-title">applies warning state</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > States</div><div class="test-title">error prop overrides state prop</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Custom className</div><div class="test-title">applies custom className to fieldset</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Focus and Keyboard</div><div class="test-title">radio buttons are focusable</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Focus and Keyboard</div><div class="test-title">has focus ring classes</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.229s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Accessibility</div><div class="test-title">has no accessibility violations with error</div><div class="test-status">passed</div><div class="test-duration">0.197s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Accessibility</div><div class="test-title">has no accessibility violations when disabled</div><div class="test-status">passed</div><div class="test-duration">0.128s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Accessibility</div><div class="test-title">has no accessibility violations with required</div><div class="test-status">passed</div><div class="test-duration">0.111s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Accessibility</div><div class="test-title">uses legend for group label</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Accessibility</div><div class="test-title">sets aria-describedby for helper text</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Edge Cases</div><div class="test-title">handles empty options array</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Edge Cases</div><div class="test-title">handles single option</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Edge Cases</div><div class="test-title">handles value not in options</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RadioGroup Component > Edge Cases</div><div class="test-title">handles rapid selection changes</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div></div></details><details id="suite-54" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\icons\__tests__\Icon.test.tsx</div><div class="suite-time warn">6.302s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Basic Rendering</div><div class="test-title">renders an icon with the default size</div><div class="test-status">passed</div><div class="test-duration">0.494s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Basic Rendering</div><div class="test-title">renders an icon with a custom numeric size</div><div class="test-status">passed</div><div class="test-duration">0.343s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Basic Rendering</div><div class="test-title">renders an icon with a custom string size</div><div class="test-status">passed</div><div class="test-duration">0.345s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Basic Rendering</div><div class="test-title">renders nothing when icon is not found</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Styling</div><div class="test-title">applies className correctly</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Styling</div><div class="test-title">applies inline styles correctly</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Styling</div><div class="test-title">merges custom styles with size styles</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Rotation</div><div class="test-title">applies rotation transform when rotate prop is provided</div><div class="test-status">passed</div><div class="test-duration">0.349s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Rotation</div><div class="test-title">applies 180 degree rotation</div><div class="test-status">passed</div><div class="test-duration">0.343s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Rotation</div><div class="test-title">does not apply rotation when rotate prop is not provided</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Rotation</div><div class="test-title">preserves existing transform when rotation is added</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Accessibility</div><div class="test-title">has role='img' by default</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Accessibility</div><div class="test-title">uses icon name as aria-label by default</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Accessibility</div><div class="test-title">uses custom aria-label when provided</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Accessibility</div><div class="test-title">can be hidden from screen readers with aria-hidden</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Lazy Loading</div><div class="test-title">renders the actual icon after loading</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Named Icon Components</div><div class="test-title">Icon.Heart renders correctly</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Named Icon Components</div><div class="test-title">Icon.Cart renders correctly</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Named Icon Components</div><div class="test-title">Icon.Search renders correctly</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Named Icon Components</div><div class="test-title">Icon.Eye renders correctly</div><div class="test-status">passed</div><div class="test-duration">0.332s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Named Icon Components</div><div class="test-title">Icon.ChevronDown renders correctly with rotation</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Props Forwarding</div><div class="test-title">forwards additional SVG props</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Props Forwarding</div><div class="test-title">forwards onClick handler</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Display Style</div><div class="test-title">applies inline-block display by default</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Component > Display Style</div><div class="test-title">maintains inline-block with custom styles</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Registry Functions > getIconNames</div><div class="test-title">returns an array of all icon names</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Registry Functions > getIconNames</div><div class="test-title">includes all categories of icons</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Registry Functions > hasIcon</div><div class="test-title">returns true for valid icon names</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Registry Functions > hasIcon</div><div class="test-title">returns false for invalid icon names</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Registry Functions > hasIcon</div><div class="test-title">is case-sensitive</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Icon Registry Functions > hasIcon</div><div class="test-title">returns true for all icon names from getIconNames</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div></div></details><details id="suite-55" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\products\[productId]\__tests__\route.test.ts</div><div class="suite-time warn">9.865s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > GET /api/admin/products/[productId] > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > GET /api/admin/products/[productId] > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > GET /api/admin/products/[productId] > Authentication & Authorization</div><div class="test-title">returns 404 when user not found</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > GET /api/admin/products/[productId] > Parameter validation</div><div class="test-title">returns 400 for invalid product ID</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > GET /api/admin/products/[productId] > Parameter validation</div><div class="test-title">returns 400 for non-numeric product ID</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > GET /api/admin/products/[productId] > Successful requests</div><div class="test-title">returns product with calculated rating</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > GET /api/admin/products/[productId] > Successful requests</div><div class="test-title">returns 0 rating for product with no reviews</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > GET /api/admin/products/[productId] > Successful requests</div><div class="test-title">includes category and images in response</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > GET /api/admin/products/[productId] > Successful requests</div><div class="test-title">returns 404 when product not found</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > GET /api/admin/products/[productId] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.242s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > PUT /api/admin/products/[productId] > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > PUT /api/admin/products/[productId] > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > PUT /api/admin/products/[productId] > Parameter validation</div><div class="test-title">returns 400 for invalid product ID</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > PUT /api/admin/products/[productId] > Successful updates</div><div class="test-title">updates product with provided fields only</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > PUT /api/admin/products/[productId] > Successful updates</div><div class="test-title">updates multiple fields</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > PUT /api/admin/products/[productId] > Successful updates</div><div class="test-title">updates discountedPrice when provided</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > PUT /api/admin/products/[productId] > Successful updates</div><div class="test-title">updates sku when provided</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > PUT /api/admin/products/[productId] > Successful updates</div><div class="test-title">updates categoryId when provided</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > PUT /api/admin/products/[productId] > Successful updates</div><div class="test-title">handles stock set to 0</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > PUT /api/admin/products/[productId] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > PATCH /api/admin/products/[productId]</div><div class="test-title">uses same logic as PUT</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > DELETE /api/admin/products/[productId] > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > DELETE /api/admin/products/[productId] > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > DELETE /api/admin/products/[productId] > Parameter validation</div><div class="test-title">returns 400 for invalid product ID</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > DELETE /api/admin/products/[productId] > Successful deletion</div><div class="test-title">deletes product successfully</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/[productId] > DELETE /api/admin/products/[productId] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-56" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Skeleton\__tests__\Skeleton.test.tsx</div><div class="suite-time">4.885s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Rendering</div><div class="test-title">renders a div element</div><div class="test-status">passed</div><div class="test-duration">0.073s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Rendering</div><div class="test-title">has pulse animation</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Rendering</div><div class="test-title">has background color</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Rendering</div><div class="test-title">has loading status role</div><div class="test-status">passed</div><div class="test-duration">0.091s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Rendering</div><div class="test-title">has loading aria-label</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Rendering</div><div class="test-title">forwards ref to div element</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Dimensions</div><div class="test-title">applies width as pixels when number</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Dimensions</div><div class="test-title">applies width as string when string</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Dimensions</div><div class="test-title">applies height as pixels when number</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Dimensions</div><div class="test-title">applies height as string when string</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Dimensions</div><div class="test-title">applies both width and height</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Rounded Corners</div><div class="test-title">applies rounded-none</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Rounded Corners</div><div class="test-title">applies rounded (sm)</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Rounded Corners</div><div class="test-title">applies rounded-md (default)</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Rounded Corners</div><div class="test-title">applies rounded-lg</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Rounded Corners</div><div class="test-title">applies rounded-full</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Variants</div><div class="test-title">renders default variant</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Variants</div><div class="test-title">renders text variant with default height and full width</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Variants</div><div class="test-title">renders circular variant with rounded-full</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Variants</div><div class="test-title">renders rectangular variant with rounded-none</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Custom className</div><div class="test-title">merges custom className with default classes</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Custom style</div><div class="test-title">applies custom inline styles</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Custom style</div><div class="test-title">merges custom styles with dimension styles</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.119s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Accessibility</div><div class="test-title">has no accessibility violations with dimensions</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Skeleton Component > Accessibility</div><div class="test-title">has no accessibility violations (circular)</div><div class="test-status">passed</div><div class="test-duration">0.094s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCardSkeleton Component > Rendering</div><div class="test-title">renders without crashing</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCardSkeleton Component > Rendering</div><div class="test-title">renders image skeleton</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCardSkeleton Component > Rendering</div><div class="test-title">contains multiple skeleton elements</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductCardSkeleton Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.098s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductListSkeleton Component > Rendering</div><div class="test-title">renders default number of skeletons (6)</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductListSkeleton Component > Rendering</div><div class="test-title">renders custom number of skeletons</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductListSkeleton Component > Rendering</div><div class="test-title">renders with default 3 columns</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductListSkeleton Component > Rendering</div><div class="test-title">renders with custom columns</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductListSkeleton Component > Rendering</div><div class="test-title">renders with 2 columns</div><div class="test-status">passed</div><div class="test-duration">0.065s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductListSkeleton Component > Rendering</div><div class="test-title">renders with 1 column</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductListSkeleton Component > Rendering</div><div class="test-title">has gap between items</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductListSkeleton Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.262s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TextSkeleton Component > Rendering</div><div class="test-title">renders default 3 lines</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TextSkeleton Component > Rendering</div><div class="test-title">renders custom number of lines</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TextSkeleton Component > Rendering</div><div class="test-title">renders 1 line</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TextSkeleton Component > Rendering</div><div class="test-title">last line is shorter (60% width)</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TextSkeleton Component > Rendering</div><div class="test-title">non-last lines have full width</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TextSkeleton Component > Rendering</div><div class="test-title">uses text variant</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TextSkeleton Component > Gap</div><div class="test-title">uses default gap of 2</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TextSkeleton Component > Gap</div><div class="test-title">uses custom gap</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TextSkeleton Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.067s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AvatarSkeleton Component > Rendering</div><div class="test-title">renders with default size (40)</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AvatarSkeleton Component > Rendering</div><div class="test-title">renders with custom size</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AvatarSkeleton Component > Rendering</div><div class="test-title">is circular</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AvatarSkeleton Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardSkeleton Component > Rendering</div><div class="test-title">renders without crashing</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardSkeleton Component > Rendering</div><div class="test-title">has card styling</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardSkeleton Component > Rendering</div><div class="test-title">contains multiple skeleton elements</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardSkeleton Component > Rendering</div><div class="test-title">includes TextSkeleton for content</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardSkeleton Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.086s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Integration Tests</div><div class="test-title">renders multiple skeleton types together</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Integration Tests</div><div class="test-title">renders a loading user profile</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Integration Tests</div><div class="test-title">renders a loading product grid</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div></div></details><details id="suite-57" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\admin\monitoring\__tests__\ErrorFilterPanel.test.tsx</div><div class="suite-time warn">10.669s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">renders all filter inputs</div><div class="test-status">passed</div><div class="test-duration">0.336s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">renders category options in dropdown</div><div class="test-status">passed</div><div class="test-duration">0.092s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">renders level options in dropdown</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">calls onFiltersChange when search changes</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">calls onFiltersChange when category changes</div><div class="test-status">passed</div><div class="test-duration">0.267s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">calls onFiltersChange when level changes</div><div class="test-status">passed</div><div class="test-duration">0.256s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">displays existing filter values</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">shows clear button when filters are active</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">hides clear button when no filters are active</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">clears all filters when clear button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.173s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">disables all inputs when loading</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">disables clear button when loading</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">handles empty categories and levels gracefully</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">clears category when selecting "All Categories"</div><div class="test-status">passed</div><div class="test-duration">0.212s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorFilterPanel</div><div class="test-title">clears level when selecting "All Levels"</div><div class="test-status">passed</div><div class="test-duration">0.178s</div></div></div></div></details><details id="suite-58" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\services\__tests__\integration\product-db.integration.test.ts</div><div class="suite-time">4.526s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Complex Filtering</div><div class="test-title">filters with category and price range</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Complex Filtering</div><div class="test-title">filters with search and category</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Complex Filtering</div><div class="test-title">handles all filters combined with sorting and pagination</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Search Functionality</div><div class="test-title">searches across title, description, and category</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Search Functionality</div><div class="test-title">returns empty for short queries</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Search Functionality</div><div class="test-title">limits search results</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Related Products</div><div class="test-title">excludes current product and limits results</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Related Products</div><div class="test-title">handles no related products</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Error Recovery</div><div class="test-title">propagates database errors on getById</div><div class="test-status">passed</div><div class="test-duration">0.37s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Error Recovery</div><div class="test-title">propagates database errors on getProducts</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Error Recovery</div><div class="test-title">propagates database errors on search</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Error Recovery</div><div class="test-title">propagates database errors on getPriceRange</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Concurrent Operations</div><div class="test-title">handles multiple simultaneous getById calls</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Concurrent Operations</div><div class="test-title">handles multiple simultaneous search calls</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Data Consistency</div><div class="test-title">maintains price consistency in getById</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Data Consistency</div><div class="test-title">maintains image ordering</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Data Consistency</div><div class="test-title">calculates average rating consistently</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Batch Operations</div><div class="test-title">retrieves multiple products by IDs</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Batch Operations</div><div class="test-title">handles missing products in batch</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Batch Operations</div><div class="test-title">handles empty ID array</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Price Range</div><div class="test-title">returns correct min and max prices</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Price Range</div><div class="test-title">handles no products</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Product Existence Check</div><div class="test-title">returns true for existing product</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Product Existence Check</div><div class="test-title">returns false for non-existing product</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Pagination Edge Cases</div><div class="test-title">calculates correct total pages for exact division</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Pagination Edge Cases</div><div class="test-title">calculates correct total pages for non-exact division</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Pagination Edge Cases</div><div class="test-title">handles zero products</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Pagination Edge Cases</div><div class="test-title">handles first page correctly</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Product Service Integration Tests > Pagination Edge Cases</div><div class="test-title">handles last page correctly</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div><div class="suite-consolelog"><div class="suite-consolelog-header">Console Log</div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.integration.ts:15:11)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusHook (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:976:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:800:7)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message">Connected to test database</pre></div></div></details><details id="suite-59" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\__tests__\proxy.test.ts</div><div class="suite-time warn">7.098s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > config</div><div class="test-title">exports matcher configuration</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > config</div><div class="test-title">matcher excludes static files and API webhooks</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">adds Content-Security-Policy header</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">includes Stripe in CSP script-src</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">allows inline styles in CSP for Tailwind</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">includes Stripe frame sources in CSP</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">allows data URIs and HTTPS images</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">includes Stripe API in connect-src</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">prevents object embedding</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">restricts base URI</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">restricts form actions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">prevents framing by other sites</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">includes upgrade-insecure-requests in production</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">excludes upgrade-insecure-requests in development</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">adds X-Content-Type-Options header</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">adds X-Frame-Options header</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">adds X-XSS-Protection header</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">adds Referrer-Policy header</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">adds Permissions-Policy header</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">adds X-Permitted-Cross-Domain-Policies header</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">adds HSTS header in production</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">does not add HSTS header in development</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > security headers</div><div class="test-title">does not add HSTS header in test environment</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > non-admin routes</div><div class="test-title">allows access to public routes without authentication</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > non-admin routes</div><div class="test-title">allows access to shop routes</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > non-admin routes</div><div class="test-title">allows access to product routes</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > non-admin routes</div><div class="test-title">allows access to API routes</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > non-admin routes</div><div class="test-title">allows access to signin route</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > unauthenticated access</div><div class="test-title">redirects to signin for /admin route</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > unauthenticated access</div><div class="test-title">redirects to signin for /admin/dashboard</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > unauthenticated access</div><div class="test-title">redirects to signin for /admin/products</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > unauthenticated access</div><div class="test-title">redirects to signin for /admin/orders</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > unauthenticated access</div><div class="test-title">redirects to signin for nested admin routes</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > unauthenticated access</div><div class="test-title">includes security headers on redirect response</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > authenticated non-admin access</div><div class="test-title">redirects non-admin user to home page</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > authenticated non-admin access</div><div class="test-title">redirects non-admin from /admin/dashboard to home</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > authenticated non-admin access</div><div class="test-title">redirects non-admin from /admin/products to home</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > authenticated non-admin access</div><div class="test-title">includes security headers on redirect response</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > authenticated admin access</div><div class="test-title">allows admin access to /admin route</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > authenticated admin access</div><div class="test-title">allows admin access to /admin/dashboard</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > authenticated admin access</div><div class="test-title">allows admin access to /admin/products</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > authenticated admin access</div><div class="test-title">allows admin access to /admin/orders</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > authenticated admin access</div><div class="test-title">allows admin access to nested admin routes</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > admin route protection > authenticated admin access</div><div class="test-title">includes security headers on successful response</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > edge cases</div><div class="test-title">handles session without user object</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > edge cases</div><div class="test-title">handles session with user but no role</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > edge cases</div><div class="test-title">handles different admin route patterns</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > edge cases</div><div class="test-title">handles URLs with query parameters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > edge cases</div><div class="test-title">handles URLs with hash fragments</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > edge cases</div><div class="test-title">preserves original URL in redirect for different base URLs</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > edge cases</div><div class="test-title">handles case sensitivity in route matching</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > edge cases</div><div class="test-title">does not protect routes that only contain 'admin' in path</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > CSP variations by environment</div><div class="test-title">generates different CSP for production vs development</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">proxy middleware > multiple security headers together</div><div class="test-title">adds all security headers to a single response</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-60" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Button\__tests__\Button.test.tsx</div><div class="suite-time warn">6.881s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Rendering</div><div class="test-title">renders button with correct text</div><div class="test-status">passed</div><div class="test-duration">0.224s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Rendering</div><div class="test-title">renders as a button element by default</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Rendering</div><div class="test-title">forwards ref to the button element</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Variants</div><div class="test-title">renders primary variant with correct styles</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Variants</div><div class="test-title">renders secondary variant with correct styles</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Variants</div><div class="test-title">renders outline variant with correct styles</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Variants</div><div class="test-title">renders ghost variant with correct styles</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Variants</div><div class="test-title">renders danger variant with correct styles</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Variants</div><div class="test-title">defaults to primary variant when not specified</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Sizes</div><div class="test-title">renders small size with correct padding and touch target</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Sizes</div><div class="test-title">renders medium size with correct padding and touch target</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Sizes</div><div class="test-title">renders large size with correct padding and touch target</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Sizes</div><div class="test-title">defaults to medium size when not specified</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Full Width</div><div class="test-title">renders full width button</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Full Width</div><div class="test-title">does not add full width class when fullWidth is false</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Loading State</div><div class="test-title">shows loading spinner when loading is true</div><div class="test-status">passed</div><div class="test-duration">0.337s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Loading State</div><div class="test-title">disables button when loading</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Loading State</div><div class="test-title">hides children text when loading</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Loading State</div><div class="test-title">hides icons when loading</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Loading State</div><div class="test-title">shows content when not loading</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Icons</div><div class="test-title">renders left icon</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Icons</div><div class="test-title">renders right icon</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Icons</div><div class="test-title">renders both left and right icons</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Icons</div><div class="test-title">wraps icons in span with inline-flex class</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Disabled State</div><div class="test-title">disables button when disabled prop is true</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Disabled State</div><div class="test-title">adds disabled opacity class</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Disabled State</div><div class="test-title">adds disabled cursor class</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Disabled State</div><div class="test-title">does not call onClick when disabled</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Click Handling</div><div class="test-title">calls onClick handler when clicked</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Click Handling</div><div class="test-title">does not call onClick when loading</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Click Handling</div><div class="test-title">calls onClick with event parameter</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Custom className</div><div class="test-title">merges custom className with base classes</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Custom className</div><div class="test-title">allows className override</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > HTML Attributes</div><div class="test-title">forwards type attribute</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > HTML Attributes</div><div class="test-title">forwards aria attributes</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > HTML Attributes</div><div class="test-title">forwards data attributes</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > HTML Attributes</div><div class="test-title">forwards id attribute</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Focus and Keyboard</div><div class="test-title">is keyboard focusable</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Focus and Keyboard</div><div class="test-title">has focus ring styles</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Focus and Keyboard</div><div class="test-title">cannot be focused when disabled</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Focus and Keyboard</div><div class="test-title">has proper role for keyboard activation</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Focus and Keyboard</div><div class="test-title">maintains focus visibility for keyboard users</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Accessibility</div><div class="test-title">has no accessibility violations (primary)</div><div class="test-status">passed</div><div class="test-duration">0.247s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Accessibility</div><div class="test-title">has no accessibility violations (outline)</div><div class="test-status">passed</div><div class="test-duration">0.094s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Accessibility</div><div class="test-title">has no accessibility violations (disabled)</div><div class="test-status">passed</div><div class="test-duration">0.136s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Accessibility</div><div class="test-title">has no accessibility violations (loading)</div><div class="test-status">passed</div><div class="test-duration">0.138s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Accessibility</div><div class="test-title">has no accessibility violations (with icons)</div><div class="test-status">passed</div><div class="test-duration">0.173s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Edge Cases</div><div class="test-title">renders without children</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Edge Cases</div><div class="test-title">handles rapid clicks</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Edge Cases</div><div class="test-title">handles children as React elements</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Edge Cases</div><div class="test-title">transitions from loading to not loading</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Edge Cases</div><div class="test-title">transitions from disabled to enabled</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Combination Tests</div><div class="test-title">renders all props together correctly</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Button Component > Combination Tests</div><div class="test-title">combines variant and size correctly</div><div class="test-status">passed</div><div class="test-duration">0.19s</div></div></div></div></details><details id="suite-61" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\shop\ShopSidebar\__tests__\CategoryDropdown.test.tsx</div><div class="suite-time warn">8.38s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Rendering</div><div class="test-title">renders the dropdown with title</div><div class="test-status">passed</div><div class="test-duration">0.166s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Rendering</div><div class="test-title">renders all top-level categories</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Rendering</div><div class="test-title">displays product counts</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Rendering</div><div class="test-title">renders toggle button with proper accessibility attributes</div><div class="test-status">passed</div><div class="test-duration">0.303s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Rendering</div><div class="test-title">renders with empty categories array</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Dropdown toggle</div><div class="test-title">is expanded by default</div><div class="test-status">passed</div><div class="test-duration">0.078s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Dropdown toggle</div><div class="test-title">collapses when header is clicked</div><div class="test-status">passed</div><div class="test-duration">0.205s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Dropdown toggle</div><div class="test-title">expands when collapsed and header is clicked again</div><div class="test-status">passed</div><div class="test-duration">0.204s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Category selection</div><div class="test-title">calls onCategorySelect when category is clicked</div><div class="test-status">passed</div><div class="test-duration">0.139s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Category selection</div><div class="test-title">shows selected state for selected category</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Category selection</div><div class="test-title">shows checkbox when category is selected</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Child categories</div><div class="test-title">does not show children by default</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Child categories</div><div class="test-title">shows expand button for categories with children</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Child categories</div><div class="test-title">shows children when expanded</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Child categories</div><div class="test-title">calls onToggleExpand when expand button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.095s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Child categories</div><div class="test-title">allows selecting child categories</div><div class="test-status">passed</div><div class="test-duration">0.19s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Child categories</div><div class="test-title">displays child product counts</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Keyboard accessibility</div><div class="test-title">allows toggling expansion with Enter key</div><div class="test-status">passed</div><div class="test-duration">0.101s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Keyboard accessibility</div><div class="test-title">allows toggling expansion with Space key</div><div class="test-status">passed</div><div class="test-duration">0.064s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryDropdown > Default props</div><div class="test-title">works without optional props</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div></div></details><details id="suite-62" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\integrations\__tests__\redis.test.ts</div><div class="suite-time warn">14.101s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > CACHE_TTL configuration</div><div class="test-title">exports correct TTL values</div><div class="test-status">passed</div><div class="test-duration">0.418s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > getRedisClient</div><div class="test-title">returns Redis client when credentials are provided</div><div class="test-status">passed</div><div class="test-duration">0.286s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > getRedisClient</div><div class="test-title">returns same client instance on multiple calls (singleton)</div><div class="test-status">passed</div><div class="test-duration">0.229s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > isRedisAvailable</div><div class="test-title">returns true when Redis is configured and initialized</div><div class="test-status">passed</div><div class="test-duration">0.187s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisGet</div><div class="test-title">retrieves value from Redis</div><div class="test-status">passed</div><div class="test-duration">0.267s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisGet</div><div class="test-title">returns null when key does not exist</div><div class="test-status">passed</div><div class="test-duration">0.263s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisGet</div><div class="test-title">handles errors gracefully and returns null</div><div class="test-status">passed</div><div class="test-duration">0.387s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisGet</div><div class="test-title">retrieves different types of values</div><div class="test-status">passed</div><div class="test-duration">0.162s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisGet</div><div class="test-title">handles empty string key</div><div class="test-status">passed</div><div class="test-duration">0.18s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisGet</div><div class="test-title">handles special characters in keys</div><div class="test-status">passed</div><div class="test-duration">0.176s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisGet</div><div class="test-title">handles complex nested objects</div><div class="test-status">passed</div><div class="test-duration">0.173s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisSet</div><div class="test-title">sets value in Redis without TTL</div><div class="test-status">passed</div><div class="test-duration">0.201s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisSet</div><div class="test-title">sets value in Redis with TTL</div><div class="test-status">passed</div><div class="test-duration">0.183s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisSet</div><div class="test-title">handles errors gracefully without throwing</div><div class="test-status">passed</div><div class="test-duration">0.157s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisSet</div><div class="test-title">sets different types of values</div><div class="test-status">passed</div><div class="test-duration">0.147s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisSet</div><div class="test-title">handles TTL of 0 correctly (treated as no TTL)</div><div class="test-status">passed</div><div class="test-duration">0.308s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisSet</div><div class="test-title">handles very large TTL values</div><div class="test-status">passed</div><div class="test-duration">0.143s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisSet</div><div class="test-title">handles undefined values</div><div class="test-status">passed</div><div class="test-duration">0.15s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisDel</div><div class="test-title">deletes single key from Redis</div><div class="test-status">passed</div><div class="test-duration">0.145s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisDel</div><div class="test-title">deletes multiple keys from Redis</div><div class="test-status">passed</div><div class="test-duration">0.189s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisDel</div><div class="test-title">does nothing when no keys provided</div><div class="test-status">passed</div><div class="test-duration">0.17s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisDel</div><div class="test-title">handles errors gracefully without throwing</div><div class="test-status">passed</div><div class="test-duration">0.16s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisKeys</div><div class="test-title">retrieves keys matching pattern</div><div class="test-status">passed</div><div class="test-duration">0.154s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisKeys</div><div class="test-title">returns empty array when no keys match</div><div class="test-status">passed</div><div class="test-duration">0.156s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisKeys</div><div class="test-title">handles errors gracefully and returns empty array</div><div class="test-status">passed</div><div class="test-duration">0.208s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > redisKeys</div><div class="test-title">handles different pattern types</div><div class="test-status">passed</div><div class="test-duration">0.157s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > RedisClient wrapper operations > exists</div><div class="test-title">checks if key exists</div><div class="test-status">passed</div><div class="test-duration">0.238s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > RedisClient wrapper operations > exists</div><div class="test-title">checks multiple keys</div><div class="test-status">passed</div><div class="test-duration">0.347s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > RedisClient wrapper operations > exists</div><div class="test-title">returns 0 on error</div><div class="test-status">passed</div><div class="test-duration">0.34s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > RedisClient wrapper operations > incr</div><div class="test-title">increments key value</div><div class="test-status">passed</div><div class="test-duration">0.216s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > RedisClient wrapper operations > incr</div><div class="test-title">returns 0 on error</div><div class="test-status">passed</div><div class="test-duration">0.134s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > RedisClient wrapper operations > expire</div><div class="test-title">sets expiration on key</div><div class="test-status">passed</div><div class="test-duration">0.146s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > RedisClient wrapper operations > expire</div><div class="test-title">handles errors gracefully without throwing</div><div class="test-status">passed</div><div class="test-duration">0.152s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > Integration scenarios</div><div class="test-title">handles complete cache workflow</div><div class="test-status">passed</div><div class="test-duration">0.146s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > Integration scenarios</div><div class="test-title">handles cache invalidation pattern</div><div class="test-status">passed</div><div class="test-duration">0.164s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > Integration scenarios</div><div class="test-title">handles counter increment pattern</div><div class="test-status">passed</div><div class="test-duration">0.192s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > Integration scenarios</div><div class="test-title">handles concurrent operations</div><div class="test-status">passed</div><div class="test-duration">0.212s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > Type safety</div><div class="test-title">preserves type information for get operations</div><div class="test-status">passed</div><div class="test-duration">0.304s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - with Redis configured > Type safety</div><div class="test-title">handles null return type correctly</div><div class="test-status">passed</div><div class="test-duration">0.243s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - without Redis configured > when UPSTASH_REDIS_REST_URL is missing</div><div class="test-title">getRedisClient returns null</div><div class="test-status">passed</div><div class="test-duration">0.3s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - without Redis configured > when UPSTASH_REDIS_REST_URL is missing</div><div class="test-title">isRedisAvailable returns false</div><div class="test-status">passed</div><div class="test-duration">0.28s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - without Redis configured > when UPSTASH_REDIS_REST_URL is missing</div><div class="test-title">redisGet returns null</div><div class="test-status">passed</div><div class="test-duration">0.234s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - without Redis configured > when UPSTASH_REDIS_REST_URL is missing</div><div class="test-title">redisSet does nothing</div><div class="test-status">passed</div><div class="test-duration">0.173s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - without Redis configured > when UPSTASH_REDIS_REST_URL is missing</div><div class="test-title">redisDel does nothing</div><div class="test-status">passed</div><div class="test-duration">0.226s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redis utility - without Redis configured > when UPSTASH_REDIS_REST_URL is missing</div><div class="test-title">redisKeys returns empty array</div><div class="test-status">passed</div><div class="test-duration">0.119s</div></div></div></div></details><details id="suite-63" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\services\__tests__\integration\order-db.integration.test.ts</div><div class="suite-time warn">6.456s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Transaction Handling > Order Creation</div><div class="test-title">creates order with items atomically</div><div class="test-status">passed</div><div class="test-duration">0.133s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Transaction Handling > Order Creation</div><div class="test-title">includes promo code and discount in order</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Transaction Handling > Order Status Updates</div><div class="test-title">updates status atomically</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Error Recovery</div><div class="test-title">propagates database connection errors on getById</div><div class="test-status">passed</div><div class="test-duration">0.115s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Error Recovery</div><div class="test-title">propagates database errors on getByUserId</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Error Recovery</div><div class="test-title">handles create failure gracefully</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Error Recovery</div><div class="test-title">handles status update failure</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Error Recovery</div><div class="test-title">handles cancellation failure</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Concurrent Operation Safety</div><div class="test-title">handles simultaneous status updates</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Concurrent Operation Safety</div><div class="test-title">handles race condition on cancel</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Data Consistency</div><div class="test-title">maintains order total consistency with items</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Data Consistency</div><div class="test-title">maintains order total consistency with discount</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Order Lifecycle</div><div class="test-title">follows valid order status transitions</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Order Lifecycle</div><div class="test-title">prevents invalid status transitions</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Order Lifecycle</div><div class="test-title">allows cancellation from valid states only</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Pagination</div><div class="test-title">returns correct pagination metadata</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Pagination</div><div class="test-title">handles empty result set</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Pagination</div><div class="test-title">handles page beyond available data</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Order Service Integration Tests > Filtering</div><div class="test-title">combines multiple filters correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div><div class="suite-consolelog"><div class="suite-consolelog-header">Console Log</div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.integration.ts:15:11)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusHook (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:976:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:800:7)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message">Connected to test database</pre></div></div></details><details id="suite-64" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\alerts\AlertConfigList\__tests__\AlertConfigList.test.tsx</div><div class="suite-time warn">5.815s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > empty state</div><div class="test-title">renders empty state when no configs</div><div class="test-status">passed</div><div class="test-duration">0.238s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > rendering configs</div><div class="test-title">renders config list with configs</div><div class="test-status">passed</div><div class="test-duration">0.151s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > rendering configs</div><div class="test-title">displays metric type</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > rendering configs</div><div class="test-title">displays scope</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > rendering configs</div><div class="test-title">displays thresholds</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > rendering configs</div><div class="test-title">displays alert count</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > rendering configs</div><div class="test-title">displays singular alert count</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > rendering configs</div><div class="test-title">renders multiple configs</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > disabled configs</div><div class="test-title">shows disabled badge for disabled configs</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > disabled configs</div><div class="test-title">applies opacity to disabled configs</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > status indicators</div><div class="test-title">shows current value when available</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > active alerts preview</div><div class="test-title">shows active alerts when present</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > active alerts preview</div><div class="test-title">does not show active alerts section when no alerts</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > actions</div><div class="test-title">calls onEdit when edit button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.172s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > actions</div><div class="test-title">calls onToggle when toggle button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.082s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > actions</div><div class="test-title">shows delete confirmation when delete button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.071s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > actions</div><div class="test-title">calls onDelete when delete is confirmed</div><div class="test-status">passed</div><div class="test-duration">0.106s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > actions</div><div class="test-title">hides delete confirmation when cancel is clicked</div><div class="test-status">passed</div><div class="test-duration">0.074s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > metric labels</div><div class="test-title">displays correct label for response_time</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > metric labels</div><div class="test-title">displays correct label for p95_latency</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > metric labels</div><div class="test-title">displays correct label for error_rate</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > metric labels</div><div class="test-title">displays correct label for throughput</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertConfigList > className</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div></div></details><details id="suite-65" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\api-docs\__tests__\test-runner.test.ts</div><div class="suite-time warn">5.31s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > TestCase interface</div><div class="test-title">should allow valid test case configuration</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > TestSuite interface</div><div class="test-title">should allow valid test suite configuration</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > formatTestResults</div><div class="test-title">should format passing test results</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > formatTestResults</div><div class="test-title">should format failing test results with error details</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > formatTestResults</div><div class="test-title">should format skipped tests</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > formatTestResults</div><div class="test-title">should include setup and teardown results</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > generateJUnitReport</div><div class="test-title">should generate valid JUnit XML</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > generateJUnitReport</div><div class="test-title">should include failure elements for failed tests</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > generateJUnitReport</div><div class="test-title">should include error elements for errored tests</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > generateJUnitReport</div><div class="test-title">should include skipped element for skipped tests</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > generateJUnitReport</div><div class="test-title">should escape XML special characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > generateJUnitReport</div><div class="test-title">should aggregate totals from multiple suites</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > RunOptions interface</div><div class="test-title">should allow valid run options configuration</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > Test filtering</div><div class="test-title">should filter tests by tags correctly (model)</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > Test filtering</div><div class="test-title">should identify only tests correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Collection Test Runner > Test filtering</div><div class="test-title">should identify skipped tests correctly</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></details><details id="suite-66" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\checkout\__tests__\ShippingMethod.test.tsx</div><div class="suite-time warn">5.221s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Rendering</div><div class="test-title">renders shipping method section with title</div><div class="test-status">passed</div><div class="test-duration">0.19s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Rendering</div><div class="test-title">renders free shipping option</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Rendering</div><div class="test-title">renders FedEx shipping option</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Rendering</div><div class="test-title">renders DHL shipping option</div><div class="test-status">passed</div><div class="test-duration">0.073s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Rendering</div><div class="test-title">renders standard shipping labels</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Rendering</div><div class="test-title">renders three shipping method inputs</div><div class="test-status">passed</div><div class="test-duration">0.292s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Default State</div><div class="test-title">has free shipping selected by default</div><div class="test-status">passed</div><div class="test-duration">0.043s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Selection</div><div class="test-title">selects FedEx when clicked</div><div class="test-status">passed</div><div class="test-duration">0.164s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Selection</div><div class="test-title">selects DHL when clicked</div><div class="test-status">passed</div><div class="test-duration">0.142s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Selection</div><div class="test-title">allows switching between shipping methods</div><div class="test-status">passed</div><div class="test-duration">0.261s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Selection</div><div class="test-title">can select free shipping again after other options</div><div class="test-status">passed</div><div class="test-duration">0.214s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Layout and Styling</div><div class="test-title">has proper container styling</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Layout and Styling</div><div class="test-title">has header with border</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Layout and Styling</div><div class="test-title">renders shipping method images</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.282s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Accessibility</div><div class="test-title">has proper heading structure</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Accessibility</div><div class="test-title">labels are clickable</div><div class="test-status">passed</div><div class="test-duration">0.104s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Accessibility</div><div class="test-title">inputs are visually hidden but accessible</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Accessibility</div><div class="test-title">each option has associated label</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Price Display</div><div class="test-title">displays FedEx price correctly</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Price Display</div><div class="test-title">displays DHL price correctly</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ShippingMethod Component > Price Display</div><div class="test-title">price text has proper styling</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div></div></details><details id="suite-67" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\__tests__\shop\SearchBar.test.tsx</div><div class="suite-time warn">14.964s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchBar Component</div><div class="test-title">renders search input with placeholder</div><div class="test-status">passed</div><div class="test-duration">0.318s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchBar Component</div><div class="test-title">renders search button</div><div class="test-status">passed</div><div class="test-duration">0.065s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchBar Component</div><div class="test-title">updates input value when user types</div><div class="test-status">passed</div><div class="test-duration">0.385s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchBar Component</div><div class="test-title">fetches suggestions when query length >= 2</div><div class="test-status">passed</div><div class="test-duration">0.443s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchBar Component</div><div class="test-title">does not fetch suggestions when query length < 2</div><div class="test-status">passed</div><div class="test-duration">0.15s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchBar Component</div><div class="test-title">displays suggestions dropdown when available</div><div class="test-status">passed</div><div class="test-duration">0.408s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchBar Component</div><div class="test-title">navigates to shop page with query on form submit</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchBar Component</div><div class="test-title">selects suggestion on click and navigates</div><div class="test-status">passed</div><div class="test-duration">0.408s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchBar Component</div><div class="test-title">clears search on ESC key when input is focused</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchBar Component</div><div class="test-title">has proper accessibility attributes</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SearchBar Component</div><div class="test-title">calls onSearch callback when provided</div><div class="test-status">passed</div><div class="test-duration">0.074s</div></div></div></div></details><details id="suite-68" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\cart\CartSidebarModal\__tests__\SingleItem.test.tsx</div><div class="suite-time warn">7.692s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModal SingleItem Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.522s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModal SingleItem Component > Accessibility</div><div class="test-title">has accessible quantity controls</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModal SingleItem Component > Accessibility</div><div class="test-title">has accessible remove button</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModal SingleItem Component > Accessibility</div><div class="test-title">displays product title as accessible link</div><div class="test-status">passed</div><div class="test-duration">0.07s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModal SingleItem Component > Rendering</div><div class="test-title">renders product title</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModal SingleItem Component > Rendering</div><div class="test-title">renders quantity value</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModal SingleItem Component > Rendering</div><div class="test-title">renders line total correctly</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModal SingleItem Component > Rendering</div><div class="test-title">renders quantity label</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModal SingleItem Component > Rendering</div><div class="test-title">renders line total label</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModal SingleItem Component > Color Contrast Compliance</div><div class="test-title">uses accessible text colors for labels</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModal SingleItem Component > Interactions</div><div class="test-title">increments quantity when plus button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModal SingleItem Component > Interactions</div><div class="test-title">decrements quantity when minus button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModal SingleItem Component > Interactions</div><div class="test-title">updates quantity via input change</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div></div></details><details id="suite-69" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\products\images\__tests__\route.test.ts</div><div class="suite-time">4.412s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > POST /api/admin/products/images > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > POST /api/admin/products/images > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > POST /api/admin/products/images > Validation</div><div class="test-title">returns 400 when file is missing</div><div class="test-status">passed</div><div class="test-duration">0.083s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > POST /api/admin/products/images > Validation</div><div class="test-title">returns 400 when productId is missing</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > POST /api/admin/products/images > Validation</div><div class="test-title">returns 400 for invalid file type</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > POST /api/admin/products/images > Validation</div><div class="test-title">returns 404 when product not found</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > POST /api/admin/products/images > Successful upload</div><div class="test-title">uploads and processes image, creating both full-size and thumbnail</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > POST /api/admin/products/images > Error handling</div><div class="test-title">returns 500 on image processing error</div><div class="test-status">passed</div><div class="test-duration">0.079s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > POST /api/admin/products/images > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > DELETE /api/admin/products/images > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > DELETE /api/admin/products/images > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > DELETE /api/admin/products/images > Validation</div><div class="test-title">returns 400 when image id is missing</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > DELETE /api/admin/products/images > Validation</div><div class="test-title">returns 404 when image not found</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > DELETE /api/admin/products/images > Successful deletion</div><div class="test-title">deletes image from database and file system (both full-size and thumbnail)</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > DELETE /api/admin/products/images > Successful deletion</div><div class="test-title">returns 500 if deleteProductImage throws</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products/images > DELETE /api/admin/products/images > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-70" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\product\Reviews\__tests__\ReviewList.test.tsx</div><div class="suite-time warn">6.576s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewList > Initial data rendering</div><div class="test-title">renders with initial data without fetching</div><div class="test-status">passed</div><div class="test-duration">0.278s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewList > Initial data rendering</div><div class="test-title">displays rating distribution chart</div><div class="test-status">passed</div><div class="test-duration">0.145s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewList > Initial data rendering</div><div class="test-title">renders sort dropdown</div><div class="test-status">passed</div><div class="test-duration">0.124s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewList > Empty state</div><div class="test-title">shows empty state when no reviews exist</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewList > Loading state</div><div class="test-title">shows loading skeleton when fetching</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewList > Sorting</div><div class="test-title">fetches reviews when sort changes</div><div class="test-status">passed</div><div class="test-duration">0.444s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewList > Sorting</div><div class="test-title">has all sort options available</div><div class="test-status">passed</div><div class="test-duration">0.124s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewList > Pagination</div><div class="test-title">shows pagination when multiple pages exist</div><div class="test-status">passed</div><div class="test-duration">0.138s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewList > Pagination</div><div class="test-title">does not show pagination for single page</div><div class="test-status">passed</div><div class="test-duration">0.111s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewList > Helpful voting</div><div class="test-title">does not show helpful buttons when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.067s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewList > Helpful voting</div><div class="test-title">shows helpful buttons when authenticated</div><div class="test-status">passed</div><div class="test-duration">0.149s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewList > Custom className</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.126s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewListSkeleton</div><div class="test-title">renders skeleton UI</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewListSkeleton</div><div class="test-title">shows 5 rating distribution skeletons</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewListSkeleton</div><div class="test-title">shows 3 review card skeletons</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div></div></details><details id="suite-71" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\products\__tests__\route.integration.test.ts</div><div class="suite-time">4.747s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Products API Integration > Database Operations via ProductService</div><div class="test-title">can retrieve products with filters</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Products API Integration > Database Operations via ProductService</div><div class="test-title">can query products with price range filters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Products API Integration > Database Operations via ProductService</div><div class="test-title">can retrieve a single product by ID</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Products API Integration > Database Operations via ProductService</div><div class="test-title">returns null for non-existent product</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Products API Integration > Product Search via ProductService</div><div class="test-title">can search products by title</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Products API Integration > Product Search via ProductService</div><div class="test-title">returns empty for short search queries</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Products API Integration > Related Products via ProductService</div><div class="test-title">retrieves related products by category</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Products API Integration > Price Range via ProductService</div><div class="test-title">returns correct min and max prices</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Products API Integration > Price Range via ProductService</div><div class="test-title">handles no products gracefully</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Products API Integration > Product Existence Check via ProductService</div><div class="test-title">returns true for existing product</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Products API Integration > Product Existence Check via ProductService</div><div class="test-title">returns false for non-existing product</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Products API Integration > Error Handling</div><div class="test-title">propagates database errors</div><div class="test-status">passed</div><div class="test-duration">0.11s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Products API Integration > Error Handling</div><div class="test-title">propagates search errors</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div><div class="suite-consolelog"><div class="suite-consolelog-header">Console Log</div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.integration.ts:15:11)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusHook (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:976:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:800:7)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message">Connected to test database</pre></div></div></details><details id="suite-72" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\analytics\track\__tests__\route.test.ts</div><div class="suite-time">4.131s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > New batch event format</div><div class="test-title">tracks a batch of events successfully</div><div class="test-status">passed</div><div class="test-duration">0.078s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > New batch event format</div><div class="test-title">tracks multiple events in a batch</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > New batch event format</div><div class="test-title">validates required fields in batch events</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > New batch event format</div><div class="test-title">rejects empty events array</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > New batch event format</div><div class="test-title">includes referrer when provided</div><div class="test-status">passed</div><div class="test-duration">0.056s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Legacy event format (backwards compatibility)</div><div class="test-title">tracks a complete legacy event with all fields</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Legacy event format (backwards compatibility)</div><div class="test-title">tracks legacy event without optional label field</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Legacy event format (backwards compatibility)</div><div class="test-title">tracks legacy event without optional value field</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Legacy event format (backwards compatibility)</div><div class="test-title">tracks legacy event with minimal required fields</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Event category tracking (legacy format)</div><div class="test-title">tracks product events</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Event category tracking (legacy format)</div><div class="test-title">tracks cart events</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Event category tracking (legacy format)</div><div class="test-title">tracks checkout events</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Event category tracking (legacy format)</div><div class="test-title">tracks user engagement events</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Event category tracking (legacy format)</div><div class="test-title">tracks error events</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Invalid event format</div><div class="test-title">returns 400 for empty object</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Invalid event format</div><div class="test-title">returns 400 for invalid structure</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Error handling</div><div class="test-title">returns 500 on JSON parse error</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Error handling</div><div class="test-title">handles missing request body</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Multiple concurrent requests</div><div class="test-title">handles multiple concurrent legacy tracking requests</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Multiple concurrent requests</div><div class="test-title">handles multiple concurrent batch event requests</div><div class="test-status">passed</div><div class="test-duration">0.075s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Edge cases</div><div class="test-title">handles very long event names in batch format</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Edge cases</div><div class="test-title">handles special characters in event properties</div><div class="test-status">passed</div><div class="test-duration">0.103s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Edge cases</div><div class="test-title">handles long URLs in legacy format</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Edge cases</div><div class="test-title">handles special characters in legacy event labels</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/analytics/track > Edge cases</div><div class="test-title">handles numeric category/action in legacy format</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-73" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\checkout\__tests__\Coupon.test.tsx</div><div class="suite-time warn">11.071s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > Rendering</div><div class="test-title">renders coupon section with title</div><div class="test-status">passed</div><div class="test-duration">0.2s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > Rendering</div><div class="test-title">renders coupon input field</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > Rendering</div><div class="test-title">renders apply button</div><div class="test-status">passed</div><div class="test-duration">0.203s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > Rendering</div><div class="test-title">has proper input attributes</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > User Interaction</div><div class="test-title">allows typing in the coupon input</div><div class="test-status">passed</div><div class="test-duration">0.333s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > User Interaction</div><div class="test-title">clears input when cleared</div><div class="test-status">passed</div><div class="test-duration">0.421s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > User Interaction</div><div class="test-title">button is clickable</div><div class="test-status">passed</div><div class="test-duration">0.102s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > Layout and Styling</div><div class="test-title">has proper container styling</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > Layout and Styling</div><div class="test-title">has header with border</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > Layout and Styling</div><div class="test-title">renders input with full width</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.168s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > Accessibility</div><div class="test-title">input is focusable</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > Accessibility</div><div class="test-title">button is focusable</div><div class="test-status">passed</div><div class="test-duration">0.082s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > Accessibility</div><div class="test-title">has proper heading structure</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Coupon Component > Submit Type</div><div class="test-title">button has submit type</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div></div></details><details id="suite-74" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\contexts\__tests__\QuickViewModalContext.test.tsx</div><div class="suite-time warn">5.039s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">QuickViewModalContext > ModalProvider</div><div class="test-title">provides initial closed state</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">QuickViewModalContext > ModalProvider</div><div class="test-title">renders children</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">QuickViewModalContext > useModalContext</div><div class="test-title">throws error when used outside provider</div><div class="test-status">passed</div><div class="test-duration">0.207s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">QuickViewModalContext > useModalContext</div><div class="test-title">provides isModalOpen state</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">QuickViewModalContext > useModalContext</div><div class="test-title">provides openModal function</div><div class="test-status">passed</div><div class="test-duration">0.328s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">QuickViewModalContext > useModalContext</div><div class="test-title">provides closeModal function</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">QuickViewModalContext > Modal state management</div><div class="test-title">opens modal when openModal is called</div><div class="test-status">passed</div><div class="test-duration">0.125s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">QuickViewModalContext > Modal state management</div><div class="test-title">closes modal when closeModal is called</div><div class="test-status">passed</div><div class="test-duration">0.159s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">QuickViewModalContext > Modal state management</div><div class="test-title">can toggle modal multiple times</div><div class="test-status">passed</div><div class="test-duration">0.269s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">QuickViewModalContext > Modal state management</div><div class="test-title">calling openModal when already open keeps it open</div><div class="test-status">passed</div><div class="test-duration">0.156s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">QuickViewModalContext > Modal state management</div><div class="test-title">calling closeModal when already closed keeps it closed</div><div class="test-status">passed</div><div class="test-duration">0.101s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">QuickViewModalContext > Multiple consumers</div><div class="test-title">shares state between multiple consumers</div><div class="test-status">passed</div><div class="test-duration">0.078s</div></div></div></div></details><details id="suite-75" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\contexts\__tests__\ThemeContext.test.tsx</div><div class="suite-time warn">7.82s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > ThemeProvider</div><div class="test-title">provides default theme as system</div><div class="test-status">passed</div><div class="test-duration">0.216s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > ThemeProvider</div><div class="test-title">provides custom default theme</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > ThemeProvider</div><div class="test-title">renders children</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > useTheme</div><div class="test-title">throws error when used outside provider</div><div class="test-status">passed</div><div class="test-duration">0.242s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > useTheme</div><div class="test-title">provides theme state</div><div class="test-status">passed</div><div class="test-duration">0.084s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > useTheme</div><div class="test-title">provides resolvedTheme state</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > useTheme</div><div class="test-title">provides setTheme function</div><div class="test-status">passed</div><div class="test-duration">0.43s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > useTheme</div><div class="test-title">provides toggleTheme function</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Theme resolution</div><div class="test-title">resolves light theme correctly</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Theme resolution</div><div class="test-title">resolves dark theme correctly</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Theme resolution</div><div class="test-title">resolves system theme to light when system prefers light</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Theme resolution</div><div class="test-title">resolves system theme to dark when system prefers dark</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Theme state management</div><div class="test-title">changes to light theme when setTheme is called</div><div class="test-status">passed</div><div class="test-duration">0.115s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Theme state management</div><div class="test-title">changes to dark theme when setTheme is called</div><div class="test-status">passed</div><div class="test-duration">0.139s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Theme state management</div><div class="test-title">changes to system theme when setTheme is called</div><div class="test-status">passed</div><div class="test-duration">0.256s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Theme toggling</div><div class="test-title">toggles from light to dark</div><div class="test-status">passed</div><div class="test-duration">0.237s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Theme toggling</div><div class="test-title">toggles from dark to light</div><div class="test-status">passed</div><div class="test-duration">0.237s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Theme toggling</div><div class="test-title">toggles system theme based on resolved value</div><div class="test-status">passed</div><div class="test-duration">0.098s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Theme toggling</div><div class="test-title">can toggle multiple times</div><div class="test-status">passed</div><div class="test-duration">0.307s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > LocalStorage persistence</div><div class="test-title">saves theme preference to localStorage when setTheme is called</div><div class="test-status">passed</div><div class="test-duration">0.086s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > LocalStorage persistence</div><div class="test-title">loads saved theme from localStorage on mount</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > LocalStorage persistence</div><div class="test-title">ignores invalid saved theme from localStorage</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > LocalStorage persistence</div><div class="test-title">handles localStorage errors gracefully when saving</div><div class="test-status">passed</div><div class="test-duration">0.127s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > LocalStorage persistence</div><div class="test-title">handles localStorage errors gracefully when loading</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > System theme change listener</div><div class="test-title">listens for system theme changes when theme is system</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > System theme change listener</div><div class="test-title">does not listen for system theme changes when theme is not system</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > System theme change listener</div><div class="test-title">updates resolved theme when system preference changes</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > System theme change listener</div><div class="test-title">removes listener when unmounted</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > System theme change listener</div><div class="test-title">handles legacy addListener API</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > DOM manipulation</div><div class="test-title">sets data-theme attribute on document root</div><div class="test-status">passed</div><div class="test-duration">0.09s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > DOM manipulation</div><div class="test-title">adds theme-loaded class when mounted</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Multiple consumers</div><div class="test-title">shares state between multiple consumers</div><div class="test-status">passed</div><div class="test-duration">0.115s</div></div></div></div></details><details id="suite-76" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\shop\ShopSidebar\__tests__\GenderDropdown.test.tsx</div><div class="suite-time warn">10.444s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GenderDropdown > Rendering</div><div class="test-title">renders the dropdown with title</div><div class="test-status">passed</div><div class="test-duration">0.165s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GenderDropdown > Rendering</div><div class="test-title">renders all gender options</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GenderDropdown > Rendering</div><div class="test-title">displays product counts for each gender</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GenderDropdown > Rendering</div><div class="test-title">renders toggle button with aria-label</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GenderDropdown > Rendering</div><div class="test-title">renders with empty genders array</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GenderDropdown > Dropdown toggle</div><div class="test-title">is expanded by default</div><div class="test-status">passed</div><div class="test-duration">0.102s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GenderDropdown > Dropdown toggle</div><div class="test-title">collapses when toggle button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.121s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GenderDropdown > Dropdown toggle</div><div class="test-title">expands when collapsed and toggle is clicked</div><div class="test-status">passed</div><div class="test-duration">0.238s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GenderDropdown > Dropdown toggle</div><div class="test-title">toggles when clicking the header area</div><div class="test-status">passed</div><div class="test-duration">0.116s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GenderDropdown > Gender selection</div><div class="test-title">toggles gender selection on click</div><div class="test-status">passed</div><div class="test-duration">0.172s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GenderDropdown > Gender selection</div><div class="test-title">deselects on second click</div><div class="test-status">passed</div><div class="test-duration">0.246s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GenderDropdown > Gender selection</div><div class="test-title">allows selecting multiple genders</div><div class="test-status">passed</div><div class="test-duration">0.331s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GenderDropdown > Checkbox indicator</div><div class="test-title">shows check icon when selected</div><div class="test-status">passed</div><div class="test-duration">0.077s</div></div></div></div></details><details id="suite-77" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\cart\Cart\__tests__\OrderSummary.test.tsx</div><div class="suite-time warn">7.467s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > rendering</div><div class="test-title">should render the order summary header</div><div class="test-status">passed</div><div class="test-duration">0.136s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > rendering</div><div class="test-title">should render Product and Subtotal column headers</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > rendering</div><div class="test-title">should render Total label</div><div class="test-status">passed</div><div class="test-duration">0.086s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > rendering</div><div class="test-title">should render checkout button</div><div class="test-status">passed</div><div class="test-duration">0.183s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > empty cart</div><div class="test-title">should show $0.00 total when cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > empty cart</div><div class="test-title">should not render any product items when cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > with cart items</div><div class="test-title">should render product names</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > with cart items</div><div class="test-title">should calculate and display subtotal for each item</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > with cart items</div><div class="test-title">should calculate and display total price</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > price calculations</div><div class="test-title">should handle single item with quantity 1</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > price calculations</div><div class="test-title">should handle large quantities</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > price calculations</div><div class="test-title">should handle multiple items with various quantities</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > formatting</div><div class="test-title">should format prices with commas for large numbers</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > formatting</div><div class="test-title">should format whole dollar amounts with .00</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OrderSummary > checkout button</div><div class="test-title">should have button type and navigate to checkout</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div></div></details><details id="suite-78" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\services\__tests__\integration\cart-db.integration.test.ts</div><div class="suite-time warn">6.479s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Transaction Handling > applyCartMerge - Transaction Success</div><div class="test-title">deletes and creates items atomically</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Transaction Handling > applyCartMerge - Transaction Success</div><div class="test-title">handles empty merged items correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Transaction Handling > applyCartMerge - Transaction Failure</div><div class="test-title">throws error on transaction failure</div><div class="test-status">passed</div><div class="test-duration">0.143s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Transaction Handling > applyCartMerge - Transaction Failure</div><div class="test-title">throws error when deleteMany fails</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Transaction Handling > applyCartMerge - Transaction Failure</div><div class="test-title">throws error when createMany fails</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Concurrent Operation Safety</div><div class="test-title">handles simultaneous cart additions for same user</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Concurrent Operation Safety</div><div class="test-title">handles simultaneous cart updates</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Error Recovery</div><div class="test-title">propagates database connection errors</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Error Recovery</div><div class="test-title">propagates product not found error on addItem</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Error Recovery</div><div class="test-title">handles Prisma unique constraint error on addItem</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Error Recovery</div><div class="test-title">handles update of non-existent cart item</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Error Recovery</div><div class="test-title">handles delete of non-existent cart item</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Data Consistency</div><div class="test-title">maintains cart item data consistency after merge</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Data Consistency</div><div class="test-title">preserves cart item images during transformation</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Stale Item Management</div><div class="test-title">retrieves only stale items for user</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Stale Item Management</div><div class="test-title">marks multiple items as stale</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Service Integration Tests > Stale Item Management</div><div class="test-title">clears stale flags from all user items</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div></div><div class="suite-consolelog"><div class="suite-consolelog-header">Console Log</div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.integration.ts:15:11)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusHook (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:976:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:800:7)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message">Connected to test database</pre></div></div></details><details id="suite-79" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\PerformanceDashboard\PerformanceDashboard.test.tsx</div><div class="suite-time warn">7.688s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Rendering</div><div class="test-title">renders without crashing</div><div class="test-status">passed</div><div class="test-duration">0.242s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Rendering</div><div class="test-title">displays time range selector</div><div class="test-status">passed</div><div class="test-duration">0.108s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Rendering</div><div class="test-title">displays auto-refresh toggle</div><div class="test-status">passed</div><div class="test-duration">0.136s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Rendering</div><div class="test-title">displays refresh button</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Rendering</div><div class="test-title">displays last updated time</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Summary Cards</div><div class="test-title">displays total requests</div><div class="test-status">passed</div><div class="test-duration">0.163s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Summary Cards</div><div class="test-title">displays average response time</div><div class="test-status">passed</div><div class="test-duration">0.123s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Summary Cards</div><div class="test-title">displays P95 response time</div><div class="test-status">passed</div><div class="test-duration">0.091s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Summary Cards</div><div class="test-title">displays success rate</div><div class="test-status">passed</div><div class="test-duration">0.147s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Charts</div><div class="test-title">renders response time chart</div><div class="test-status">passed</div><div class="test-duration">0.104s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Charts</div><div class="test-title">renders request volume chart</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Charts</div><div class="test-title">renders endpoint distribution chart</div><div class="test-status">passed</div><div class="test-duration">0.153s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Charts</div><div class="test-title">renders status code chart</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Slow Requests</div><div class="test-title">displays slow requests section</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Slow Requests</div><div class="test-title">displays slow request details</div><div class="test-status">passed</div><div class="test-duration">0.077s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Interactions</div><div class="test-title">toggles auto-refresh when checkbox is clicked</div><div class="test-status">passed</div><div class="test-duration">0.267s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Interactions</div><div class="test-title">changes time range when selector is clicked</div><div class="test-status">passed</div><div class="test-duration">0.127s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Default Props</div><div class="test-title">uses default time range of 24h</div><div class="test-status">passed</div><div class="test-duration">0.094s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceDashboard > Default Props</div><div class="test-title">respects defaultTimeRange prop</div><div class="test-status">passed</div><div class="test-duration">0.106s</div></div></div></div></details><details id="suite-80" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\product\Reviews\__tests__\ReviewForm.test.tsx</div><div class="suite-time warn">7.079s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Authentication states</div><div class="test-title">shows skeleton while loading session</div><div class="test-status">passed</div><div class="test-duration">0.188s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Authentication states</div><div class="test-title">shows sign in prompt when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.279s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Authentication states</div><div class="test-title">shows form when authenticated</div><div class="test-status">passed</div><div class="test-duration">0.096s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Form rendering</div><div class="test-title">renders rating stars</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Form rendering</div><div class="test-title">renders comment textarea</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Form rendering</div><div class="test-title">renders submit button</div><div class="test-status">passed</div><div class="test-duration">0.135s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Form rendering</div><div class="test-title">shows character count</div><div class="test-status">passed</div><div class="test-duration">0.056s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Form rendering</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Form validation</div><div class="test-title">submit button is disabled when no rating is selected</div><div class="test-status">passed</div><div class="test-duration">0.07s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Form validation</div><div class="test-title">shows error when submitting without rating</div><div class="test-status">passed</div><div class="test-duration">0.117s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Form validation</div><div class="test-title">shows minimum character warning for short comments</div><div class="test-status">passed</div><div class="test-duration">0.398s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Form validation</div><div class="test-title">updates character count as user types</div><div class="test-status">passed</div><div class="test-duration">0.575s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Rating descriptions</div><div class="test-title">renders rating component</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Form submission</div><div class="test-title">submits review successfully</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Form submission</div><div class="test-title">handles API error response</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Form submission</div><div class="test-title">handles network error</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Form submission</div><div class="test-title">shows duplicate review error with toast</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewForm > Loading state</div><div class="test-title">disables form while submitting</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div></div></details><details id="suite-81" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\contexts\__tests__\CartSidebarModalContext.test.tsx</div><div class="suite-time warn">5.68s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModalContext > CartModalProvider</div><div class="test-title">provides initial closed state</div><div class="test-status">passed</div><div class="test-duration">0.168s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModalContext > CartModalProvider</div><div class="test-title">renders children</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModalContext > useCartModalContext</div><div class="test-title">throws error when used outside provider</div><div class="test-status">passed</div><div class="test-duration">0.132s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModalContext > useCartModalContext</div><div class="test-title">provides isCartModalOpen state</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModalContext > useCartModalContext</div><div class="test-title">provides openCartModal function</div><div class="test-status">passed</div><div class="test-duration">0.179s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModalContext > useCartModalContext</div><div class="test-title">provides closeCartModal function</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModalContext > Modal state management</div><div class="test-title">opens modal when openCartModal is called</div><div class="test-status">passed</div><div class="test-duration">0.21s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModalContext > Modal state management</div><div class="test-title">closes modal when closeCartModal is called</div><div class="test-status">passed</div><div class="test-duration">0.275s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModalContext > Modal state management</div><div class="test-title">can toggle modal multiple times</div><div class="test-status">passed</div><div class="test-duration">0.402s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModalContext > Modal state management</div><div class="test-title">calling openCartModal when already open keeps it open</div><div class="test-status">passed</div><div class="test-duration">0.202s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModalContext > Modal state management</div><div class="test-title">calling closeCartModal when already closed keeps it closed</div><div class="test-status">passed</div><div class="test-duration">0.107s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartSidebarModalContext > Multiple consumers</div><div class="test-title">shares state between multiple consumers</div><div class="test-status">passed</div><div class="test-duration">0.075s</div></div></div></div></details><details id="suite-82" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\contexts\__tests__\PreviewSliderContext.test.tsx</div><div class="suite-time warn">5.612s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">PreviewSliderContext > PreviewSliderProvider</div><div class="test-title">provides initial closed state</div><div class="test-status">passed</div><div class="test-duration">0.122s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PreviewSliderContext > PreviewSliderProvider</div><div class="test-title">renders children</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PreviewSliderContext > usePreviewSlider</div><div class="test-title">throws error when used outside provider</div><div class="test-status">passed</div><div class="test-duration">0.102s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PreviewSliderContext > usePreviewSlider</div><div class="test-title">provides isModalPreviewOpen state</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PreviewSliderContext > usePreviewSlider</div><div class="test-title">provides openPreviewModal function</div><div class="test-status">passed</div><div class="test-duration">0.171s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PreviewSliderContext > usePreviewSlider</div><div class="test-title">provides closePreviewModal function</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PreviewSliderContext > Preview state management</div><div class="test-title">opens preview when openPreviewModal is called</div><div class="test-status">passed</div><div class="test-duration">0.165s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PreviewSliderContext > Preview state management</div><div class="test-title">closes preview when closePreviewModal is called</div><div class="test-status">passed</div><div class="test-duration">0.17s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PreviewSliderContext > Preview state management</div><div class="test-title">can toggle preview multiple times</div><div class="test-status">passed</div><div class="test-duration">0.197s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PreviewSliderContext > Preview state management</div><div class="test-title">calling openPreviewModal when already open keeps it open</div><div class="test-status">passed</div><div class="test-duration">0.246s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PreviewSliderContext > Preview state management</div><div class="test-title">calling closePreviewModal when already closed keeps it closed</div><div class="test-status">passed</div><div class="test-duration">0.133s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PreviewSliderContext > Multiple consumers</div><div class="test-title">shares state between multiple consumers</div><div class="test-status">passed</div><div class="test-duration">0.128s</div></div></div></div></details><details id="suite-83" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\DatabasePerformance\DatabasePerformance.test.tsx</div><div class="suite-time warn">5.205s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Rendering</div><div class="test-title">renders without crashing</div><div class="test-status">passed</div><div class="test-duration">0.229s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Rendering</div><div class="test-title">displays total queries count</div><div class="test-status">passed</div><div class="test-duration">0.112s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Rendering</div><div class="test-title">displays average duration</div><div class="test-status">passed</div><div class="test-duration">0.043s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Rendering</div><div class="test-title">displays slow queries count in summary card</div><div class="test-status">passed</div><div class="test-duration">0.106s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Rendering</div><div class="test-title">displays tables hit count</div><div class="test-status">passed</div><div class="test-duration">0.065s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Summary Cards</div><div class="test-title">shows Total Queries label</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Summary Cards</div><div class="test-title">shows Avg Duration label</div><div class="test-status">passed</div><div class="test-duration">0.076s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Summary Cards</div><div class="test-title">shows Slow Queries label</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Summary Cards</div><div class="test-title">shows Tables Hit label</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Operation Breakdown</div><div class="test-title">displays all operations</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Operation Breakdown</div><div class="test-title">displays operation counts</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Operation Breakdown</div><div class="test-title">does not render operation breakdown when empty</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Queries by Table</div><div class="test-title">displays table names</div><div class="test-status">passed</div><div class="test-duration">0.1s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Queries by Table</div><div class="test-title">displays call counts for tables</div><div class="test-status">passed</div><div class="test-duration">0.094s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Queries by Table</div><div class="test-title">shows empty message when no query stats</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Slow Queries List</div><div class="test-title">displays slow query names</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Slow Queries List</div><div class="test-title">displays slow query durations</div><div class="test-status">passed</div><div class="test-duration">0.076s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Slow Queries List</div><div class="test-title">displays operation badges</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Slow Queries List</div><div class="test-title">displays table name badges</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Slow Queries List</div><div class="test-title">displays row count when available</div><div class="test-status">passed</div><div class="test-duration">0.111s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Slow Queries List</div><div class="test-title">displays failed badge for failed queries</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Slow Queries List</div><div class="test-title">shows empty message when no slow queries</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Time Period</div><div class="test-title">displays custom time period in headers</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Time Period</div><div class="test-title">uses default time period when provided</div><div class="test-status">passed</div><div class="test-duration">0.082s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Slow Threshold</div><div class="test-title">displays custom threshold in section header</div><div class="test-status">passed</div><div class="test-duration">0.043s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Empty State</div><div class="test-title">handles zero queries gracefully</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Duration Formatting</div><div class="test-title">formats sub-millisecond durations</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Duration Formatting</div><div class="test-title">formats millisecond durations</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Duration Formatting</div><div class="test-title">formats second durations</div><div class="test-status">passed</div><div class="test-duration">0.069s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Accessibility</div><div class="test-title">has accessible table structure</div><div class="test-status">passed</div><div class="test-duration">0.286s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DatabasePerformance > Accessibility</div><div class="test-title">has proper heading hierarchy</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div></div></details><details id="suite-84" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Dropdown\__tests__\Dropdown.test.tsx</div><div class="suite-time warn">5.621s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Rendering</div><div class="test-title">renders with placeholder when no value selected</div><div class="test-status">passed</div><div class="test-duration">0.149s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Rendering</div><div class="test-title">renders with custom placeholder</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Rendering</div><div class="test-title">renders selected value</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Rendering</div><div class="test-title">renders disabled state</div><div class="test-status">passed</div><div class="test-duration">0.125s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Rendering</div><div class="test-title">renders full width when fullWidth prop is true</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Opening and closing</div><div class="test-title">opens dropdown on click</div><div class="test-status">passed</div><div class="test-duration">0.089s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Opening and closing</div><div class="test-title">closes dropdown on second click</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Opening and closing</div><div class="test-title">closes dropdown when clicking outside</div><div class="test-status">passed</div><div class="test-duration">0.111s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Opening and closing</div><div class="test-title">closes dropdown when Escape is pressed</div><div class="test-status">passed</div><div class="test-duration">0.117s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Opening and closing</div><div class="test-title">does not open when disabled</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Selection</div><div class="test-title">calls onChange when option is selected</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Selection</div><div class="test-title">closes dropdown after selection</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Selection</div><div class="test-title">highlights selected option in menu</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Selection</div><div class="test-title">does not select disabled item</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Sizes</div><div class="test-title">renders small size</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Sizes</div><div class="test-title">renders medium size (default)</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Sizes</div><div class="test-title">renders large size</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > With icons</div><div class="test-title">renders items with icons</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > With icons</div><div class="test-title">shows selected item icon in trigger</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Custom trigger</div><div class="test-title">renders custom trigger</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Custom trigger</div><div class="test-title">opens dropdown when custom trigger is clicked</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Custom trigger</div><div class="test-title">custom trigger respects disabled state</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Accessibility</div><div class="test-title">has proper ARIA attributes on trigger</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Accessibility</div><div class="test-title">updates aria-expanded when opened</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Accessibility</div><div class="test-title">has proper ARIA attributes on options</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dropdown > Cleanup</div><div class="test-title">removes event listeners on unmount</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div></div></details><details id="suite-85" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\admin\monitoring\ErrorDetailsTab.test.tsx</div><div class="suite-time warn">9.59s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailsTab</div><div class="test-title">renders details tab</div><div class="test-status">passed</div><div class="test-duration">0.182s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailsTab</div><div class="test-title">displays error info</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailsTab</div><div class="test-title">shows priority selector</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailsTab</div><div class="test-title">calls onUpdate when priority changes</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailsTab</div><div class="test-title">shows team member selector when teamMembers provided</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailsTab</div><div class="test-title">displays recent occurrences</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailsTab</div><div class="test-title">shows no occurrences message when empty</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailsTab</div><div class="test-title">shows snooze info when error is snoozed</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailsTab</div><div class="test-title">shows ignored reason when error is ignored</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailsTab</div><div class="test-title">disables controls when isUpdating is true</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorDetailsTab</div><div class="test-title">shows stack trace in recent logs</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div></div></details><details id="suite-86" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useConfirm.test.tsx</div><div class="suite-time warn">6.044s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > Basic functionality</div><div class="test-title">should initially render with dialog closed</div><div class="test-status">passed</div><div class="test-duration">0.174s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > confirm function</div><div class="test-title">should open dialog when confirm is called</div><div class="test-status">passed</div><div class="test-duration">0.079s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > confirm function</div><div class="test-title">should display correct title and message</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > confirm function</div><div class="test-title">should use default confirm and cancel text</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > confirm function</div><div class="test-title">should use custom confirm and cancel text</div><div class="test-status">passed</div><div class="test-duration">0.043s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > confirm function</div><div class="test-title">should use default info variant</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > confirm function</div><div class="test-title">should use custom variant</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > Dialog interaction</div><div class="test-title">should resolve with true when confirm button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > Dialog interaction</div><div class="test-title">should resolve with false when cancel button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > Dialog interaction</div><div class="test-title">should close dialog after confirm</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > Dialog interaction</div><div class="test-title">should close dialog after cancel</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > Multiple confirmations</div><div class="test-title">should handle sequential confirmations</div><div class="test-status">passed</div><div class="test-duration">0.124s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > Multiple confirmations</div><div class="test-title">should update dialog content for new confirmation</div><div class="test-status">passed</div><div class="test-duration">0.103s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useConfirm > Edge cases</div><div class="test-title">should handle custom text with all options</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDeleteConfirm > Basic functionality</div><div class="test-title">should initially render with dialog closed</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDeleteConfirm > Basic functionality</div><div class="test-title">should open dialog with delete-specific content</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDeleteConfirm > Basic functionality</div><div class="test-title">should resolve with true when delete is confirmed</div><div class="test-status">passed</div><div class="test-duration">0.135s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDeleteConfirm > Basic functionality</div><div class="test-title">should resolve with false when delete is cancelled</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDeleteConfirm > Basic functionality</div><div class="test-title">should handle different item names</div><div class="test-status">passed</div><div class="test-duration">0.079s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDeleteConfirm > Basic functionality</div><div class="test-title">should close dialog after confirmation</div><div class="test-status">passed</div><div class="test-duration">0.086s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useClearConfirm > Basic functionality</div><div class="test-title">should initially render with dialog closed</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useClearConfirm > Basic functionality</div><div class="test-title">should open dialog with clear-specific content</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useClearConfirm > Basic functionality</div><div class="test-title">should resolve with true when clear is confirmed</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useClearConfirm > Basic functionality</div><div class="test-title">should resolve with false when clear is cancelled</div><div class="test-status">passed</div><div class="test-duration">0.065s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useClearConfirm > Basic functionality</div><div class="test-title">should handle different item names</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useClearConfirm > Basic functionality</div><div class="test-title">should close dialog after confirmation</div><div class="test-status">passed</div><div class="test-duration">0.076s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Integration tests</div><div class="test-title">should handle rapid confirmations correctly</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Integration tests</div><div class="test-title">should properly handle confirm result promise resolution</div><div class="test-status">passed</div><div class="test-duration">0.064s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Integration tests</div><div class="test-title">should properly handle cancel result promise resolution</div><div class="test-status">passed</div><div class="test-duration">0.152s</div></div></div></div></details><details id="suite-87" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\__tests__\cart\SingleItem.test.tsx</div><div class="suite-time warn">9.817s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SingleItem Component</div><div class="test-title">renders cart item with correct details</div><div class="test-status">passed</div><div class="test-duration">0.307s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SingleItem Component</div><div class="test-title">displays correct total price</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SingleItem Component</div><div class="test-title">renders product image</div><div class="test-status">passed</div><div class="test-duration">0.254s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SingleItem Component</div><div class="test-title">increases quantity when plus button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.155s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SingleItem Component</div><div class="test-title">decreases quantity when minus button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.075s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SingleItem Component</div><div class="test-title">does not decrease quantity below 1</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SingleItem Component</div><div class="test-title">removes item from cart when delete button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SingleItem Component</div><div class="test-title">updates displayed quantity immediately on increase</div><div class="test-status">passed</div><div class="test-duration">0.174s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SingleItem Component</div><div class="test-title">updates displayed quantity immediately on decrease</div><div class="test-status">passed</div><div class="test-duration">0.167s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SingleItem Component</div><div class="test-title">has proper accessibility labels on buttons</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SingleItem Component</div><div class="test-title">calculates total price correctly when quantity changes</div><div class="test-status">passed</div><div class="test-duration">0.09s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SingleItem Component</div><div class="test-title">displays placeholder image when no image is provided</div><div class="test-status">passed</div><div class="test-duration">0.104s</div></div></div></div></details><details id="suite-88" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Stepper\__tests__\Stepper.test.tsx</div><div class="suite-time warn">8.437s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Rendering</div><div class="test-title">renders all steps</div><div class="test-status">passed</div><div class="test-duration">0.258s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Rendering</div><div class="test-title">renders step descriptions</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Rendering</div><div class="test-title">renders step numbers by default</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Rendering</div><div class="test-title">renders custom icons when provided</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Rendering</div><div class="test-title">has navigation role</div><div class="test-status">passed</div><div class="test-duration">0.184s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Rendering</div><div class="test-title">has Progress aria-label</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Rendering</div><div class="test-title">forwards ref to container div</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Step States</div><div class="test-title">marks current step correctly</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Step States</div><div class="test-title">marks completed steps correctly</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Step States</div><div class="test-title">shows check icon for completed steps</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Step States</div><div class="test-title">styles current step differently</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Step States</div><div class="test-title">styles upcoming steps with gray text</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Clickable Steps</div><div class="test-title">does not call onStepClick when clickable is false</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Clickable Steps</div><div class="test-title">calls onStepClick for completed steps when clickable</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Clickable Steps</div><div class="test-title">does not call onStepClick for current step</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Clickable Steps</div><div class="test-title">does not call onStepClick for upcoming steps</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Clickable Steps</div><div class="test-title">applies hover styles to clickable completed steps</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Clickable Steps</div><div class="test-title">disables non-clickable step buttons</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Orientation</div><div class="test-title">renders horizontal layout by default</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Orientation</div><div class="test-title">renders vertical layout when specified</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Orientation</div><div class="test-title">adjusts connector line for horizontal layout</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Orientation</div><div class="test-title">adjusts connector line for vertical layout</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Show Description</div><div class="test-title">shows descriptions by default</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Show Description</div><div class="test-title">hides descriptions when showDescription is false</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Connector Lines</div><div class="test-title">renders connector lines between steps</div><div class="test-status">passed</div><div class="test-duration">0.084s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Connector Lines</div><div class="test-title">colors completed connectors with primary</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Connector Lines</div><div class="test-title">colors incomplete connectors with gray</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Connector Lines</div><div class="test-title">has aria-hidden on connectors</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Custom className</div><div class="test-title">applies custom className to container</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Step Transitions</div><div class="test-title">updates visual state when currentStep changes</div><div class="test-status">passed</div><div class="test-duration">0.09s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.369s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Accessibility</div><div class="test-title">has no accessibility violations (vertical)</div><div class="test-status">passed</div><div class="test-duration">0.249s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Accessibility</div><div class="test-title">has no accessibility violations (clickable)</div><div class="test-status">passed</div><div class="test-duration">0.221s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Accessibility</div><div class="test-title">has appropriate aria-current on current step</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Accessibility</div><div class="test-title">has appropriate aria-labels on step buttons</div><div class="test-status">passed</div><div class="test-duration">0.101s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Accessibility</div><div class="test-title">step buttons are keyboard accessible</div><div class="test-status">passed</div><div class="test-duration">0.074s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Edge Cases</div><div class="test-title">handles single step</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Edge Cases</div><div class="test-title">handles steps without descriptions</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Edge Cases</div><div class="test-title">handles currentStep at 0</div><div class="test-status">passed</div><div class="test-duration">0.098s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Edge Cases</div><div class="test-title">handles currentStep at last step</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Edge Cases</div><div class="test-title">handles currentStep beyond last step</div><div class="test-status">passed</div><div class="test-duration">0.122s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Edge Cases</div><div class="test-title">handles many steps</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Stepper Component > Focus and Keyboard Navigation</div><div class="test-title">has focus ring styles on buttons</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div></div></details><details id="suite-89" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\analytics\services\__tests__\revenue.service.test.ts</div><div class="suite-time warn">6.358s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getRevenueMetrics</div><div class="test-title">should return all revenue metrics</div><div class="test-status">passed</div><div class="test-duration">0.13s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getRevenueMetrics</div><div class="test-title">should calculate trend percentage correctly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getRevenueMetrics</div><div class="test-title">should handle zero revenue</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getRevenueTrend</div><div class="test-title">should return daily trend data</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getRevenueTrend</div><div class="test-title">should aggregate by week when granularity is week</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getRevenueTrend</div><div class="test-title">should calculate average order value for each period</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getRevenueForecast</div><div class="test-title">should return forecast with predictions</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getRevenueForecast</div><div class="test-title">should return empty predictions with insufficient data</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getRevenueForecast</div><div class="test-title">should include confidence intervals in predictions</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getRevenueByCategory</div><div class="test-title">should return revenue breakdown by category</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getRevenueByCategory</div><div class="test-title">should handle products without category</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getRevenueByCategory</div><div class="test-title">should sort categories by revenue descending</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getTopProductsByRevenue</div><div class="test-title">should return top products by revenue</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getTopProductsByRevenue</div><div class="test-title">should respect the limit parameter</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Revenue Service > getTopProductsByRevenue</div><div class="test-title">should calculate units sold correctly</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div></div></details><details id="suite-90" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\shop\ShopSidebar\__tests__\PriceDropdown.test.tsx</div><div class="suite-time warn">5.051s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Rendering</div><div class="test-title">renders the dropdown with title</div><div class="test-status">passed</div><div class="test-duration">0.248s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Rendering</div><div class="test-title">renders toggle button with proper accessibility attributes</div><div class="test-status">passed</div><div class="test-duration">0.158s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Rendering</div><div class="test-title">renders range slider</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Rendering</div><div class="test-title">displays initial min price of 0</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Rendering</div><div class="test-title">displays initial max price of 100</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Rendering</div><div class="test-title">displays dollar signs for price amounts</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Dropdown toggle</div><div class="test-title">is expanded by default</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Dropdown toggle</div><div class="test-title">collapses when toggle button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.114s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Dropdown toggle</div><div class="test-title">expands when collapsed and toggle is clicked again</div><div class="test-status">passed</div><div class="test-duration">0.167s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Dropdown toggle</div><div class="test-title">toggles when clicking the header area</div><div class="test-status">passed</div><div class="test-duration">0.095s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Price range selection</div><div class="test-title">updates min price when slider changes</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Price range selection</div><div class="test-title">updates max price when slider changes</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Price range selection</div><div class="test-title">floors the min value</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Price range selection</div><div class="test-title">ceils the max value</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Price display format</div><div class="test-title">shows min amount in correct format</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Price display format</div><div class="test-title">shows max amount in correct format</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Accessibility</div><div class="test-title">has accessible toggle button with aria-expanded</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Accessibility</div><div class="test-title">toggle button updates aria-expanded when clicked</div><div class="test-status">passed</div><div class="test-duration">0.144s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDropdown > Accessibility</div><div class="test-title">range slider has id for accessibility</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div></div></details><details id="suite-91" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\orders\__tests__\route.test.ts</div><div class="suite-time warn">7.363s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/orders > Authentication</div><div class="test-title">requires authentication</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/orders > Order creation</div><div class="test-title">creates order from cart items</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/orders > Order creation</div><div class="test-title">calculates total correctly with multiple items</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/orders > Order creation</div><div class="test-title">returns error when cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/orders > Order creation</div><div class="test-title">clears cart after order creation</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/orders > Validation</div><div class="test-title">rejects missing shipping address</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/orders > Validation</div><div class="test-title">rejects invalid shipping address fields</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/orders > Validation</div><div class="test-title">rejects missing billing address</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/orders > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.145s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/orders > Authentication</div><div class="test-title">requires authentication</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/orders > Order retrieval</div><div class="test-title">returns user's orders</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/orders > Order retrieval</div><div class="test-title">returns orders sorted by date (newest first)</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/orders > Order retrieval</div><div class="test-title">returns empty array for user with no orders</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/orders > Order retrieval</div><div class="test-title">only returns orders belonging to the authenticated user</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/orders > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div></div></details><details id="suite-92" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\products\[id]\reviews\__tests__\route.test.ts</div><div class="suite-time warn">6.349s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/[id]/reviews</div><div class="test-title">returns reviews for a product</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/[id]/reviews</div><div class="test-title">returns 400 for invalid product ID</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/[id]/reviews</div><div class="test-title">supports pagination parameters</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/[id]/reviews</div><div class="test-title">supports sorting by rating</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/[id]/reviews</div><div class="test-title">includes helpful counts in response</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/[id]/reviews</div><div class="test-title">supports sorting by rating_low</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/[id]/reviews</div><div class="test-title">supports sorting by helpful</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/[id]/reviews</div><div class="test-title">returns 400 for invalid query parameters</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/[id]/reviews</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.17s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products/[id]/reviews > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products/[id]/reviews > Authentication</div><div class="test-title">returns 404 when user not found</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products/[id]/reviews > Validation</div><div class="test-title">returns 400 when rating is missing</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products/[id]/reviews > Validation</div><div class="test-title">returns 400 when rating is out of range</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products/[id]/reviews > Validation</div><div class="test-title">returns 400 when comment is too short</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products/[id]/reviews > Business logic</div><div class="test-title">returns 404 when product not found</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products/[id]/reviews > Business logic</div><div class="test-title">returns 409 when user already reviewed product</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products/[id]/reviews > Successful creation</div><div class="test-title">creates a review successfully</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products/[id]/reviews > Successful creation</div><div class="test-title">creates a review without comment</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products/[id]/reviews > Error handling</div><div class="test-title">returns 400 for invalid product ID in POST</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products/[id]/reviews > Error handling</div><div class="test-title">returns 500 on database error during creation</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div></div></details><details id="suite-93" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\api\__tests__\errors.test.ts</div><div class="suite-time warn">6.476s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ERROR_CODES</div><div class="test-title">should have all expected error codes</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError</div><div class="test-title">should create an error with code, message, and status</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError</div><div class="test-title">should include details when provided</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">validation() creates 400 error</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">invalidId() creates 400 error with param name</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">notFound() creates 404 error</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">notFound() with ID includes ID in message</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">unauthorized() creates 401 error</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">forbidden() creates 403 error</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">adminRequired() creates 403 error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">conflict() creates 409 error</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">duplicate() creates 409 error with resource name</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">rateLimited() creates 429 error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">internal() creates 500 error</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">database() creates 500 error</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">insufficientStock() creates 422 error</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > ApiError > static factory methods</div><div class="test-title">cartEmpty() creates 422 error</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > handleApiError</div><div class="test-title">should handle ApiError instances</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > handleApiError</div><div class="test-title">should handle ZodError</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > handleApiError</div><div class="test-title">should handle generic errors</div><div class="test-status">passed</div><div class="test-duration">0.115s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > handleApiError</div><div class="test-title">should handle unknown error types</div><div class="test-status">passed</div><div class="test-duration">0.078s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > isApiError</div><div class="test-title">should return true for ApiError instances</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > isApiError</div><div class="test-title">should return false for regular errors</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > isApiError</div><div class="test-title">should return false for non-errors</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > handleValidationError</div><div class="test-title">should throw ApiError with VALIDATION_ERROR code</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > handleValidationError</div><div class="test-title">should include field details in error</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > validateBody</div><div class="test-title">should return parsed data for valid input</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > validateBody</div><div class="test-title">should throw ApiError for invalid input</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > validateBody</div><div class="test-title">should throw for missing required fields</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > validateBody</div><div class="test-title">should strip unknown fields with strict schema</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > validateQuery</div><div class="test-title">should parse URLSearchParams</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > validateQuery</div><div class="test-title">should parse plain object</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > validateQuery</div><div class="test-title">should handle optional params</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > validateQuery</div><div class="test-title">should throw ApiError for invalid query params</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > validateParams</div><div class="test-title">should return parsed params for valid input</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > validateParams</div><div class="test-title">should throw ApiError for missing params</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Error System > validateParams</div><div class="test-title">should throw ApiError for invalid params</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-94" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useAddresses.test.ts</div><div class="suite-time warn">7.406s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">initializes with loading state</div><div class="test-status">passed</div><div class="test-duration">0.119s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">does not fetch when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.14s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">fetches addresses when authenticated</div><div class="test-status">passed</div><div class="test-duration">0.194s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">handles fetch error gracefully</div><div class="test-status">passed</div><div class="test-duration">0.255s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">handles non-ok response</div><div class="test-status">passed</div><div class="test-duration">0.093s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">returns shipping addresses array</div><div class="test-status">passed</div><div class="test-duration">0.099s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">returns default shipping address</div><div class="test-status">passed</div><div class="test-duration">0.137s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">returns first shipping address when no default</div><div class="test-status">passed</div><div class="test-duration">0.119s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">returns billing addresses array</div><div class="test-status">passed</div><div class="test-duration">0.21s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">returns default billing address</div><div class="test-status">passed</div><div class="test-duration">0.192s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">returns undefined for missing address types</div><div class="test-status">passed</div><div class="test-duration">0.135s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">refreshAddresses updates addresses list</div><div class="test-status">passed</div><div class="test-duration">0.383s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">refreshAddresses handles errors</div><div class="test-status">passed</div><div class="test-duration">0.094s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">setAddressAsDefault calls API and refreshes</div><div class="test-status">passed</div><div class="test-duration">0.067s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useAddresses</div><div class="test-title">re-fetches when authentication changes</div><div class="test-status">passed</div><div class="test-duration">0.081s</div></div></div></div></details><details id="suite-95" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\admin\monitoring\__tests__\SortableTableHeader.test.tsx</div><div class="suite-time warn">6.987s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">renders column label</div><div class="test-status">passed</div><div class="test-duration">0.127s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">renders as th element</div><div class="test-status">passed</div><div class="test-duration">0.138s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">calls onSort when clicked</div><div class="test-status">passed</div><div class="test-duration">0.195s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">shows chevron-down icon when sorting descending and active</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">shows chevron-up icon when sorting ascending and active</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">shows inactive chevron when not the active sort column</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">shows active chevron when is the active sort column</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">sets aria-sort to ascending when active and ascending</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">sets aria-sort to descending when active and descending</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">sets aria-sort to none when not active column</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">has cursor-pointer style for clickability</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">passes sortKey to onSort callback</div><div class="test-status">passed</div><div class="test-duration">0.109s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">renders different labels correctly</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SortableTableHeader</div><div class="test-title">can handle rapid clicks</div><div class="test-status">passed</div><div class="test-duration">0.25s</div></div></div></div></details><details id="suite-96" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useUserProfile.test.ts</div><div class="suite-time warn">5.423s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUserProfile</div><div class="test-title">initializes with loading state</div><div class="test-status">passed</div><div class="test-duration">0.101s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUserProfile</div><div class="test-title">does not fetch when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.18s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUserProfile</div><div class="test-title">fetches profile when authenticated</div><div class="test-status">passed</div><div class="test-duration">0.169s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUserProfile</div><div class="test-title">handles fetch error gracefully</div><div class="test-status">passed</div><div class="test-duration">0.28s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUserProfile</div><div class="test-title">handles non-ok response</div><div class="test-status">passed</div><div class="test-duration">0.114s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUserProfile > updateProfile</div><div class="test-title">updates profile successfully</div><div class="test-status">passed</div><div class="test-duration">0.121s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUserProfile > updateProfile</div><div class="test-title">sets savingProfile during update</div><div class="test-status">passed</div><div class="test-duration">0.093s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUserProfile > updateProfile</div><div class="test-title">handles update error from API</div><div class="test-status">passed</div><div class="test-duration">0.101s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUserProfile > updateProfile</div><div class="test-title">handles network error during update</div><div class="test-status">passed</div><div class="test-duration">0.075s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUserProfile > updateProfile</div><div class="test-title">clears previous message before update</div><div class="test-status">passed</div><div class="test-duration">0.101s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUserProfile > setProfileMessage</div><div class="test-title">allows setting custom messages</div><div class="test-status">passed</div><div class="test-duration">0.073s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUserProfile > setProfileMessage</div><div class="test-title">allows clearing messages</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUserProfile</div><div class="test-title">re-fetches when authentication changes</div><div class="test-status">passed</div><div class="test-duration">0.136s</div></div></div></div></details><details id="suite-97" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Toast\__tests__\Toast.test.tsx</div><div class="suite-time warn">6.711s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">provides toast context to children</div><div class="test-status">passed</div><div class="test-duration">0.118s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">adds toast when addToast is called</div><div class="test-status">passed</div><div class="test-duration">0.112s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">renders toast with info variant by default</div><div class="test-status">passed</div><div class="test-duration">0.101s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">renders toast with success variant</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">renders toast with warning variant</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">renders toast with error variant</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">renders toast with title</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">removes toast automatically after default duration</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">respects custom duration</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">duration 0 defaults to 5000ms (implementation detail)</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">removes toast when close button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">can display multiple toasts</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">removes correct toast when multiple are displayed</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">has proper accessibility attributes</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastProvider</div><div class="test-title">does not render container when no toasts</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ToastContext without provider</div><div class="test-title">returns undefined when used outside provider</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-98" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\admin\monitoring\SnoozeDropdown.test.tsx</div><div class="suite-time warn">9.688s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SnoozeDropdown</div><div class="test-title">renders snooze button</div><div class="test-status">passed</div><div class="test-duration">0.193s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SnoozeDropdown</div><div class="test-title">shows Snoozed text when currently snoozed</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SnoozeDropdown</div><div class="test-title">opens dropdown on click</div><div class="test-status">passed</div><div class="test-duration">0.056s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SnoozeDropdown</div><div class="test-title">shows snooze duration options</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SnoozeDropdown</div><div class="test-title">calls onSnooze with calculated date when option selected</div><div class="test-status">passed</div><div class="test-duration">0.074s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SnoozeDropdown</div><div class="test-title">shows unsnooze option when snoozed</div><div class="test-status">passed</div><div class="test-duration">0.043s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SnoozeDropdown</div><div class="test-title">calls onSnooze with null when unsnoozed</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SnoozeDropdown</div><div class="test-title">is disabled when disabled prop is true</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SnoozeDropdown</div><div class="test-title">shows custom date picker when Custom is selected</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div></div></details><details id="suite-99" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\admin\monitoring\ErrorCommentsTab.test.tsx</div><div class="suite-time warn">9.587s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorCommentsTab</div><div class="test-title">renders comments tab</div><div class="test-status">passed</div><div class="test-duration">0.287s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorCommentsTab</div><div class="test-title">displays comments</div><div class="test-status">passed</div><div class="test-duration">0.083s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorCommentsTab</div><div class="test-title">displays comment authors</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorCommentsTab</div><div class="test-title">shows empty state when no comments</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorCommentsTab</div><div class="test-title">renders comment input</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorCommentsTab</div><div class="test-title">disables submit button when input is empty</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorCommentsTab</div><div class="test-title">enables submit button when input has content</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorCommentsTab</div><div class="test-title">calls onAddComment when form is submitted</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorCommentsTab</div><div class="test-title">clears input after successful submit</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorCommentsTab</div><div class="test-title">shows loading state when isAdding is true</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorCommentsTab</div><div class="test-title">shows load more button when hasMore is true</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorCommentsTab</div><div class="test-title">shows total count when provided</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div></div></details><details id="suite-100" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\core\__tests__\cache.test.ts</div><div class="suite-time warn">6.603s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > setCachedSync and getCachedSync</div><div class="test-title">stores and retrieves simple value</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > setCachedSync and getCachedSync</div><div class="test-title">stores and retrieves object value</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > setCachedSync and getCachedSync</div><div class="test-title">stores and retrieves array value</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > setCachedSync and getCachedSync</div><div class="test-title">stores null value</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > setCachedSync and getCachedSync</div><div class="test-title">stores boolean values</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > setCachedSync and getCachedSync</div><div class="test-title">stores number values including zero</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > setCachedSync and getCachedSync</div><div class="test-title">returns null for non-existent key</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > setCachedSync and getCachedSync</div><div class="test-title">overwrites existing value</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > TTL (Time To Live)</div><div class="test-title">uses default TTL of 5 minutes</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > TTL (Time To Live)</div><div class="test-title">accepts custom TTL in milliseconds</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > TTL (Time To Live)</div><div class="test-title">returns null for expired entry</div><div class="test-status">passed</div><div class="test-duration">0.137s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > TTL (Time To Live)</div><div class="test-title">deletes expired entry on access</div><div class="test-status">passed</div><div class="test-duration">0.103s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > clearCache</div><div class="test-title">clears specific key</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > clearCache</div><div class="test-title">clears all keys when no key provided</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > clearCache</div><div class="test-title">does nothing for non-existent key</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > getCacheStats</div><div class="test-title">returns empty stats for empty cache</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > getCacheStats</div><div class="test-title">returns correct size</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > getCacheStats</div><div class="test-title">returns all keys</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > cleanupExpiredEntries</div><div class="test-title">returns 0 when no entries expired</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > cleanupExpiredEntries</div><div class="test-title">removes expired entries</div><div class="test-status">passed</div><div class="test-duration">0.112s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > cleanupExpiredEntries</div><div class="test-title">returns 0 for empty cache</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > Edge cases</div><div class="test-title">handles empty string key</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > Edge cases</div><div class="test-title">handles empty string value</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > Edge cases</div><div class="test-title">handles special characters in key</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > Edge cases</div><div class="test-title">handles large objects</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cache utility > Type safety</div><div class="test-title">preserves type information</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-101" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useProducts.test.ts</div><div class="suite-time warn">5.149s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useProducts hook</div><div class="test-title">fetches products on mount</div><div class="test-status">passed</div><div class="test-duration">0.227s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useProducts hook</div><div class="test-title">handles fetch error</div><div class="test-status">passed</div><div class="test-duration">0.179s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useProducts hook</div><div class="test-title">handles network error</div><div class="test-status">passed</div><div class="test-duration">0.205s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useProducts hook</div><div class="test-title">builds query params from filters</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useProducts hook</div><div class="test-title">includes latest filter in query</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useProducts hook</div><div class="test-title">includes bestseller filter in query</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useProducts hook</div><div class="test-title">includes exclude filter in query</div><div class="test-status">passed</div><div class="test-duration">0.081s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useProducts hook</div><div class="test-title">provides refetch function</div><div class="test-status">passed</div><div class="test-duration">0.102s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useProducts hook</div><div class="test-title">returns pagination data</div><div class="test-status">passed</div><div class="test-duration">0.142s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useProducts hook</div><div class="test-title">handles empty products array in response</div><div class="test-status">passed</div><div class="test-duration">0.173s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useNewArrivals</div><div class="test-title">fetches latest products with default limit</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useNewArrivals</div><div class="test-title">accepts custom limit</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useBestSellers</div><div class="test-title">fetches bestseller products with default limit</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useRandomProducts</div><div class="test-title">fetches random products with exclusion</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useProductsByCategory</div><div class="test-title">fetches products by category</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProducts > useProductSearch</div><div class="test-title">fetches products by search term</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div></div></details><details id="suite-102" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\product\Reviews\__tests__\ReviewCard.test.tsx</div><div class="suite-time warn">7.103s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCard > Rendering</div><div class="test-title">renders review content correctly</div><div class="test-status">passed</div><div class="test-duration">0.409s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCard > Rendering</div><div class="test-title">renders star rating</div><div class="test-status">passed</div><div class="test-duration">0.35s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCard > Rendering</div><div class="test-title">renders user initial when no image</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCard > Rendering</div><div class="test-title">renders user image when provided</div><div class="test-status">passed</div><div class="test-duration">0.174s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCard > Rendering</div><div class="test-title">renders Anonymous for null user name</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCard > Helpful actions</div><div class="test-title">shows helpful actions when showActions is true</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCard > Helpful actions</div><div class="test-title">hides helpful actions when showActions is false</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCard > Helpful actions</div><div class="test-title">calls onHelpful with true when Yes clicked</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCard > Helpful actions</div><div class="test-title">calls onHelpful with false when No clicked</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCard > Helpful actions</div><div class="test-title">does not call onHelpful when loading</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCard > Helpful actions</div><div class="test-title">highlights Yes button when userVote is true</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCard > Helpful actions</div><div class="test-title">highlights No button when userVote is false</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCard > No comment</div><div class="test-title">does not render comment when null</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ReviewCardSkeleton</div><div class="test-title">renders loading skeleton</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div></div></details><details id="suite-103" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\alerts\AlertHistoryTable\__tests__\AlertHistoryTable.test.tsx</div><div class="suite-time warn">5.353s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > empty state</div><div class="test-title">renders empty message when no alerts</div><div class="test-status">passed</div><div class="test-duration">0.175s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > rendering table</div><div class="test-title">renders table headers</div><div class="test-status">passed</div><div class="test-duration">0.226s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > rendering table</div><div class="test-title">renders alert row</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > rendering table</div><div class="test-title">renders multiple alerts</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > severity badges</div><div class="test-title">shows critical badge for critical alerts</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > severity badges</div><div class="test-title">shows warning badge for warning alerts</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > metric units</div><div class="test-title">displays ms for response_time</div><div class="test-status">passed</div><div class="test-duration">0.091s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > metric units</div><div class="test-title">displays ms for p95_latency</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > metric units</div><div class="test-title">displays % for error_rate</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > metric units</div><div class="test-title">displays req/min for throughput</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > resolution status</div><div class="test-title">shows resolved timestamp for resolved alerts</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > resolution status</div><div class="test-title">shows acknowledged timestamp for acknowledged alerts</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > resolution status</div><div class="test-title">shows dash for active alerts</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > missing config</div><div class="test-title">shows Unknown Config when config is missing</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AlertHistoryTable > className</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div></div></details><details id="suite-104" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Select\__tests__\Select.test.tsx</div><div class="suite-time warn">5.614s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Rendering</div><div class="test-title">renders with label</div><div class="test-status">passed</div><div class="test-duration">0.23s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Rendering</div><div class="test-title">renders with visually hidden label</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Rendering</div><div class="test-title">renders placeholder when no value selected</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Rendering</div><div class="test-title">renders selected option label</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Rendering</div><div class="test-title">renders with defaultValue</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Rendering</div><div class="test-title">renders disabled state</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Rendering</div><div class="test-title">renders error message</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Rendering</div><div class="test-title">renders helper text</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Rendering</div><div class="test-title">renders hidden input with name for form submission</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > ARIA Attributes</div><div class="test-title">has correct ARIA attributes when closed</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > ARIA Attributes</div><div class="test-title">has correct ARIA attributes when open</div><div class="test-status">passed</div><div class="test-duration">0.086s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > ARIA Attributes</div><div class="test-title">options have correct ARIA attributes</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Mouse Interaction</div><div class="test-title">opens dropdown on click</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Mouse Interaction</div><div class="test-title">closes dropdown on second click</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Mouse Interaction</div><div class="test-title">selects option on click</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Mouse Interaction</div><div class="test-title">does not select disabled option on click</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Mouse Interaction</div><div class="test-title">closes on outside click</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Keyboard Navigation</div><div class="test-title">opens on Enter key</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Keyboard Navigation</div><div class="test-title">opens on Space key</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Keyboard Navigation</div><div class="test-title">opens on ArrowDown key</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Keyboard Navigation</div><div class="test-title">opens on ArrowUp key</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Keyboard Navigation</div><div class="test-title">closes on Escape key</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Keyboard Navigation</div><div class="test-title">navigates with ArrowDown key</div><div class="test-status">passed</div><div class="test-duration">0.095s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Keyboard Navigation</div><div class="test-title">navigates with ArrowUp key</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Keyboard Navigation</div><div class="test-title">navigates to first option with Home key</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Keyboard Navigation</div><div class="test-title">navigates to last option with End key</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Keyboard Navigation</div><div class="test-title">selects option on Enter key when open</div><div class="test-status">passed</div><div class="test-duration">0.07s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Keyboard Navigation</div><div class="test-title">skips disabled options when navigating</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Keyboard Navigation</div><div class="test-title">closes on Tab key</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Type-ahead Search</div><div class="test-title">filters options when typing</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Type-ahead Search</div><div class="test-title">selects matching option when closed</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Controlled vs Uncontrolled</div><div class="test-title">works as controlled component</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Controlled vs Uncontrolled</div><div class="test-title">works as uncontrolled component</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Variants</div><div class="test-title">renders default variant</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Variants</div><div class="test-title">renders minimal variant</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Variants</div><div class="test-title">renders header variant</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Accessibility</div><div class="test-title">announces selection to screen readers</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Select > Accessibility</div><div class="test-title">supports custom id</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div></div></details><details id="suite-105" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Image\__tests__\Image.test.tsx</div><div class="suite-time warn">5.545s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Rendering</div><div class="test-title">renders image with correct alt text</div><div class="test-status">passed</div><div class="test-duration">0.329s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Rendering</div><div class="test-title">renders with correct src</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Rendering</div><div class="test-title">renders container with correct classes</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Loading State</div><div class="test-title">shows skeleton when loading</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Loading State</div><div class="test-title">hides skeleton after image loads</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Loading State</div><div class="test-title">calls onLoadComplete callback</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Error State</div><div class="test-title">shows fallback on error</div><div class="test-status">passed</div><div class="test-duration">0.071s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Error State</div><div class="test-title">calls onLoadError callback</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Error State</div><div class="test-title">uses default fallback when src is null</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Aspect Ratio</div><div class="test-title">applies square aspect ratio class</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Aspect Ratio</div><div class="test-title">applies 16:9 aspect ratio class</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Aspect Ratio</div><div class="test-title">applies 4:3 aspect ratio class</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Object Fit</div><div class="test-title">applies cover object fit by default</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Object Fit</div><div class="test-title">applies contain object fit</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Placeholder Types</div><div class="test-title">applies blur placeholder</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Placeholder Types</div><div class="test-title">applies skeleton placeholder</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Placeholder Types</div><div class="test-title">no placeholder when set to none</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Dark Mode</div><div class="test-title">has dark mode skeleton classes</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Custom Classes</div><div class="test-title">merges custom className with base classes</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Accessibility</div><div class="test-title">has no accessibility violations</div><div class="test-status">passed</div><div class="test-duration">0.257s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Accessibility</div><div class="test-title">has proper alt text</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Image Component > Accessibility</div><div class="test-title">skeleton is hidden from screen readers</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HeroImage Component</div><div class="test-title">renders hero image</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HeroImage Component</div><div class="test-title">applies 16:9 aspect ratio by default</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HeroImage Component</div><div class="test-title">applies 21:9 ultrawide aspect ratio</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HeroImage Component</div><div class="test-title">uses blur placeholder by default</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThumbnailImage Component</div><div class="test-title">renders with default size (80px)</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThumbnailImage Component</div><div class="test-title">renders with custom size</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThumbnailImage Component</div><div class="test-title">shows skeleton by default</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardImage Component</div><div class="test-title">renders with medium size by default (300x300)</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardImage Component</div><div class="test-title">renders with small size (200x200)</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardImage Component</div><div class="test-title">renders with large size (400x400)</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardImage Component</div><div class="test-title">uses blur placeholder by default</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div></div><div class="suite-consolelog"><div class="suite-consolelog-header">Console Log</div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at validateProperty (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:3001:19)
at warnUnknownProperties (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:3146:9)
at validatePropertiesInDevelopment (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:19868:9)
at setInitialProperties (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:20491:7)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12662:18)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Image\__tests__\Image.test.tsx:56:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message">React does not recognize the `blurDataURL` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `blurdataurl` instead. If you accidentally passed it from a parent component, remove it from the DOM element.</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at validateProperty (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:3070:27)
at warnUnknownProperties (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:3146:9)
at validatePropertiesInDevelopment (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:19868:9)
at setInitialProperties (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:20491:7)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12662:18)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Image\__tests__\Image.test.tsx:419:11)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message">Received `true` for a non-boolean attribute `priority`.
If you want to write it to the DOM, pass a string instead: priority="true" or priority={value.toString()}.</pre></div></div></details><details id="suite-106" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\PriceDisplay\__tests__\PriceDisplay.test.tsx</div><div class="suite-time warn">5.594s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > basic rendering</div><div class="test-title">should render price</div><div class="test-status">passed</div><div class="test-duration">0.133s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > basic rendering</div><div class="test-title">should render discounted price when lower than price</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > basic rendering</div><div class="test-title">should show original price with strikethrough when discounted</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > basic rendering</div><div class="test-title">should not show discount when discountedPrice equals price</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > basic rendering</div><div class="test-title">should not show discount when discountedPrice is higher than price</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > sizes</div><div class="test-title">should apply small size styles</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > sizes</div><div class="test-title">should apply medium size styles (default)</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > sizes</div><div class="test-title">should apply large size styles</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > sizes</div><div class="test-title">should apply extra-large size styles</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > layout</div><div class="test-title">should apply horizontal layout by default</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > layout</div><div class="test-title">should apply vertical layout when specified</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > savings badge</div><div class="test-title">should not show savings by default</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > savings badge</div><div class="test-title">should show savings badge when showSavings is true</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > savings badge</div><div class="test-title">should not show savings badge when no discount</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > savings badge</div><div class="test-title">should apply correct styles to savings badge</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > percentage badge</div><div class="test-title">should not show percentage by default</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > percentage badge</div><div class="test-title">should show percentage badge when showPercentage is true</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > percentage badge</div><div class="test-title">should calculate correct percentage</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > percentage badge</div><div class="test-title">should round percentage to whole number</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > percentage badge</div><div class="test-title">should not show percentage badge when no discount</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > percentage badge</div><div class="test-title">should apply correct styles to percentage badge</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > both badges</div><div class="test-title">should show both savings and percentage when enabled</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > custom className</div><div class="test-title">should apply custom className</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > formatting</div><div class="test-title">should format large prices with commas</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > formatting</div><div class="test-title">should format very large prices</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplay > formatting</div><div class="test-title">should format whole dollar amounts</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplayCompact</div><div class="test-title">should render with small size</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplayCompact</div><div class="test-title">should show discount when provided</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplayWithSavings</div><div class="test-title">should show savings badge</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplayWithSavings</div><div class="test-title">should accept size prop</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplayWithSavings</div><div class="test-title">should not show savings when no discount</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplayWithPercentage</div><div class="test-title">should show percentage badge</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplayWithPercentage</div><div class="test-title">should accept size prop</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriceDisplayWithPercentage</div><div class="test-title">should not show percentage when no discount</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div></div></details><details id="suite-107" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\ConfirmDialog\__tests__\ConfirmDialog.test.tsx</div><div class="suite-time warn">5.25s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Rendering</div><div class="test-title">renders when isOpen is true</div><div class="test-status">passed</div><div class="test-duration">0.265s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Rendering</div><div class="test-title">does not render when isOpen is false</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Rendering</div><div class="test-title">renders default button text</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Rendering</div><div class="test-title">renders custom button text</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Variants</div><div class="test-title">renders info variant by default</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Variants</div><div class="test-title">renders danger variant</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Variants</div><div class="test-title">renders warning variant</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > User interactions</div><div class="test-title">calls onConfirm when confirm button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > User interactions</div><div class="test-title">calls onCancel when cancel button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > User interactions</div><div class="test-title">calls onCancel when clicking outside dialog</div><div class="test-status">passed</div><div class="test-duration">0.091s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > User interactions</div><div class="test-title">does not call onCancel when clicking inside dialog</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Keyboard interactions</div><div class="test-title">calls onCancel when Escape key is pressed</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Keyboard interactions</div><div class="test-title">calls onConfirm when Enter key is pressed (not on button)</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Keyboard interactions</div><div class="test-title">does not call onConfirm when Enter is pressed on a button</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Accessibility</div><div class="test-title">has proper ARIA attributes</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Accessibility</div><div class="test-title">has accessible button labels</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Accessibility</div><div class="test-title">has accessible button labels with custom text</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Accessibility</div><div class="test-title">auto-focuses confirm button when opened</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Focus trap</div><div class="test-title">traps focus within dialog</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Cleanup</div><div class="test-title">removes event listeners when dialog closes</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ConfirmDialog > Cleanup</div><div class="test-title">removes event listeners on unmount</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div></div></details><details id="suite-108" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\dev-ticket\__tests__\ticket-utils.test.ts</div><div class="suite-time warn">5.593s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition</div><div class="test-title">returns true for same status (no change)</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from OPEN status</div><div class="test-title">allows transition to IN_PROGRESS</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from OPEN status</div><div class="test-title">allows transition to BLOCKED</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from OPEN status</div><div class="test-title">allows transition to ON_HOLD</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from OPEN status</div><div class="test-title">allows transition to CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from OPEN status</div><div class="test-title">allows transition to WONT_FIX</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from OPEN status</div><div class="test-title">does not allow direct transition to COMPLETED</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from OPEN status</div><div class="test-title">does not allow direct transition to IN_REVIEW</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from OPEN status</div><div class="test-title">does not allow direct transition to TESTING</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from IN_PROGRESS status</div><div class="test-title">allows transition to IN_REVIEW</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from IN_PROGRESS status</div><div class="test-title">allows transition to TESTING</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from IN_PROGRESS status</div><div class="test-title">allows transition to COMPLETED</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from IN_PROGRESS status</div><div class="test-title">allows transition to BLOCKED</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from IN_PROGRESS status</div><div class="test-title">allows transition back to OPEN</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from COMPLETED status</div><div class="test-title">allows reopening to IN_PROGRESS</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from COMPLETED status</div><div class="test-title">allows reopening to IN_REVIEW</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from COMPLETED status</div><div class="test-title">does not allow direct transition to OPEN</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from CANCELLED status</div><div class="test-title">allows reopening to OPEN</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from CANCELLED status</div><div class="test-title">does not allow transition to IN_PROGRESS</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from WONT_FIX status</div><div class="test-title">allows reopening to OPEN</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from WONT_FIX status</div><div class="test-title">does not allow transition to IN_PROGRESS</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from BLOCKED status</div><div class="test-title">allows transition to OPEN</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from BLOCKED status</div><div class="test-title">allows transition to IN_PROGRESS</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from BLOCKED status</div><div class="test-title">allows transition to ON_HOLD</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidStatusTransition > from BLOCKED status</div><div class="test-title">does not allow direct transition to COMPLETED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > getValidNextStatuses</div><div class="test-title">returns valid transitions from OPEN</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > getValidNextStatuses</div><div class="test-title">returns valid transitions from IN_PROGRESS</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > getValidNextStatuses</div><div class="test-title">returns valid transitions from COMPLETED</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > getValidNextStatuses</div><div class="test-title">returns valid transitions from CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > EPIC category</div><div class="test-title">EPIC can only be root level (null parent)</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > EPIC category</div><div class="test-title">EPIC cannot be under another EPIC</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > EPIC category</div><div class="test-title">EPIC cannot be under PHASE</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > EPIC category</div><div class="test-title">EPIC cannot be under STORY</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > EPIC category</div><div class="test-title">EPIC cannot be under TASK</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > PHASE category</div><div class="test-title">PHASE can be under EPIC</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > PHASE category</div><div class="test-title">PHASE cannot be root level</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > PHASE category</div><div class="test-title">PHASE cannot be under another PHASE</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > PHASE category</div><div class="test-title">PHASE cannot be under STORY</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > STORY category</div><div class="test-title">STORY can be under EPIC</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > STORY category</div><div class="test-title">STORY can be under PHASE</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > STORY category</div><div class="test-title">STORY cannot be root level</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > STORY category</div><div class="test-title">STORY cannot be under another STORY</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > STORY category</div><div class="test-title">STORY cannot be under TASK</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > TASK category</div><div class="test-title">TASK can be under PHASE</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > TASK category</div><div class="test-title">TASK can be under STORY</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > TASK category</div><div class="test-title">TASK cannot be root level</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > TASK category</div><div class="test-title">TASK cannot be under EPIC directly</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > TASK category</div><div class="test-title">TASK cannot be under another TASK</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > SUBTASK category</div><div class="test-title">SUBTASK can only be under TASK</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > SUBTASK category</div><div class="test-title">SUBTASK cannot be root level</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > SUBTASK category</div><div class="test-title">SUBTASK cannot be under EPIC</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > SUBTASK category</div><div class="test-title">SUBTASK cannot be under PHASE</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > SUBTASK category</div><div class="test-title">SUBTASK cannot be under STORY</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > isValidParentChildCategory > SUBTASK category</div><div class="test-title">SUBTASK cannot be under another SUBTASK</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause</div><div class="test-title">returns empty where clause for empty filters</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > status filter</div><div class="test-title">handles single status filter</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > status filter</div><div class="test-title">handles array of statuses</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > type filter</div><div class="test-title">handles single type filter</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > type filter</div><div class="test-title">handles array of types</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > priority filter</div><div class="test-title">handles single priority filter</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > priority filter</div><div class="test-title">handles array of priorities</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > severity filter</div><div class="test-title">handles single severity filter</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > severity filter</div><div class="test-title">handles array of severities</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > category filter</div><div class="test-title">handles single category filter</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > category filter</div><div class="test-title">handles array of categories</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > parent filter</div><div class="test-title">handles root level filter</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > parent filter</div><div class="test-title">handles specific parent filter</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > assignee filter</div><div class="test-title">handles unassigned filter</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > assignee filter</div><div class="test-title">handles specific assignee filter</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > project filter</div><div class="test-title">handles project filter</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > sprint filter</div><div class="test-title">handles sprint filter</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > milestone filter</div><div class="test-title">handles milestone filter</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > reporter filter</div><div class="test-title">handles reporter filter</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > label filter</div><div class="test-title">handles single label filter</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > label filter</div><div class="test-title">handles array of labels filter</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > search filter</div><div class="test-title">searches in title, description, and ticketNumber</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > date filters</div><div class="test-title">handles createdAfter filter</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > date filters</div><div class="test-title">handles createdBefore filter</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > date filters</div><div class="test-title">handles both created date filters</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > date filters</div><div class="test-title">handles dueAfter filter</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > date filters</div><div class="test-title">handles dueBefore filter</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > soft delete filters</div><div class="test-title">excludes deleted tickets by default</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > soft delete filters</div><div class="test-title">includes deleted tickets when includeDeleted is true</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > soft delete filters</div><div class="test-title">shows only deleted tickets when onlyDeleted is true</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > hierarchy level filter</div><div class="test-title">handles hierarchy level filter</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketWhereClause > combined filters</div><div class="test-title">handles multiple filters together</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketOrderByClause</div><div class="test-title">defaults to createdAt desc when no sort provided</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketOrderByClause</div><div class="test-title">defaults to desc direction when not specified</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketOrderByClause > sort fields</div><div class="test-title">handles createdAt sort</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketOrderByClause > sort fields</div><div class="test-title">handles updatedAt sort</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketOrderByClause > sort fields</div><div class="test-title">handles priority sort</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketOrderByClause > sort fields</div><div class="test-title">handles status sort</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketOrderByClause > sort fields</div><div class="test-title">handles dueDate sort</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketOrderByClause > sort fields</div><div class="test-title">handles title sort</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketOrderByClause > sort fields</div><div class="test-title">handles ticketNumber sort</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketOrderByClause > sort fields</div><div class="test-title">handles category sort</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketOrderByClause > sort fields</div><div class="test-title">handles hierarchyLevel sort</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketOrderByClause > sort directions</div><div class="test-title">handles ascending sort</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Dev Ticket Utilities > buildTicketOrderByClause > sort directions</div><div class="test-title">handles descending sort</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div></div></details><details id="suite-109" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Badge\__tests__\Badge.test.tsx</div><div class="suite-time warn">5.534s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > rendering</div><div class="test-title">should render children content</div><div class="test-status">passed</div><div class="test-duration">0.137s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > rendering</div><div class="test-title">should render as a span element</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > variants</div><div class="test-title">should apply default variant styles</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > variants</div><div class="test-title">should apply primary variant styles</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > variants</div><div class="test-title">should apply secondary variant styles</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > variants</div><div class="test-title">should apply success variant styles</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > variants</div><div class="test-title">should apply warning variant styles</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > variants</div><div class="test-title">should apply error variant styles</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > variants</div><div class="test-title">should apply discount variant styles</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > variants</div><div class="test-title">should apply new variant styles</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > variants</div><div class="test-title">should apply featured variant styles</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > sizes</div><div class="test-title">should apply small size styles</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > sizes</div><div class="test-title">should apply medium size styles (default)</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > sizes</div><div class="test-title">should apply large size styles</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > dot indicator</div><div class="test-title">should not render dot by default</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > dot indicator</div><div class="test-title">should render dot when dot prop is true</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > dot indicator</div><div class="test-title">should apply correct dot color for variant</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > dot indicator</div><div class="test-title">should apply error dot color</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > pill shape</div><div class="test-title">should apply rounded corners by default</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > pill shape</div><div class="test-title">should apply pill shape when pill prop is true</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > custom className</div><div class="test-title">should apply custom className</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > custom className</div><div class="test-title">should merge custom className with default classes</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > ref forwarding</div><div class="test-title">should forward ref to span element</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Badge > additional props</div><div class="test-title">should pass through additional props</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DiscountBadge</div><div class="test-title">should render with discount variant</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DiscountBadge</div><div class="test-title">should render percentage when provided</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DiscountBadge</div><div class="test-title">should render children over percentage</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DiscountBadge</div><div class="test-title">should render 'Sale' when no percentage or children</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DiscountBadge</div><div class="test-title">should forward ref</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">NewBadge</div><div class="test-title">should render 'New' text</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">NewBadge</div><div class="test-title">should use new variant styles</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">NewBadge</div><div class="test-title">should accept size prop</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">NewBadge</div><div class="test-title">should accept pill prop</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">NewBadge</div><div class="test-title">should forward ref</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FeaturedBadge</div><div class="test-title">should render 'Featured' text</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FeaturedBadge</div><div class="test-title">should use featured variant styles</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FeaturedBadge</div><div class="test-title">should accept size prop</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FeaturedBadge</div><div class="test-title">should forward ref</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-110" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\admin\monitoring\PrioritySelector.test.tsx</div><div class="suite-time warn">9.929s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">PrioritySelector</div><div class="test-title">renders selector</div><div class="test-status">passed</div><div class="test-duration">0.142s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PrioritySelector</div><div class="test-title">displays current value</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PrioritySelector</div><div class="test-title">renders label when provided</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PrioritySelector</div><div class="test-title">calls onChange when selection changes</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PrioritySelector</div><div class="test-title">contains all priority options</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PrioritySelector</div><div class="test-title">is disabled when disabled prop is true</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PrioritySelector</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div></div></details><details id="suite-111" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\alerts\ActiveAlertsList\__tests__\ActiveAlertsList.test.tsx</div><div class="suite-time warn">5.903s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > empty state</div><div class="test-title">renders all clear message when no alerts</div><div class="test-status">passed</div><div class="test-duration">0.123s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > rendering alerts</div><div class="test-title">renders alert list with alerts</div><div class="test-status">passed</div><div class="test-duration">0.071s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > rendering alerts</div><div class="test-title">displays alert value and threshold</div><div class="test-status">passed</div><div class="test-duration">0.043s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > rendering alerts</div><div class="test-title">displays scope</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > rendering alerts</div><div class="test-title">renders multiple alerts</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > severity styling</div><div class="test-title">applies critical styling for critical alerts</div><div class="test-status">passed</div><div class="test-duration">0.056s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > severity styling</div><div class="test-title">applies warning styling for warning alerts</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > actions</div><div class="test-title">shows acknowledge and resolve buttons for active alerts</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > actions</div><div class="test-title">shows only resolve button for acknowledged alerts</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > actions</div><div class="test-title">calls onAcknowledge when acknowledge button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.151s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > actions</div><div class="test-title">calls onResolve when resolve button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > actions</div><div class="test-title">disables buttons while action is in progress</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > metric units</div><div class="test-title">displays ms unit for response_time</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > metric units</div><div class="test-title">displays ms unit for p95_latency</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > metric units</div><div class="test-title">displays % unit for error_rate</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > metric units</div><div class="test-title">displays req/min unit for throughput</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ActiveAlertsList > className</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div></div></details><details id="suite-112" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\loyalty\__tests__\tiers.test.ts</div><div class="suite-time warn">5.57s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getActiveTiers</div><div class="test-title">returns tiers from active program</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getActiveTiers</div><div class="test-title">returns empty array when no active program</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getActiveTiers</div><div class="test-title">returns empty array when program has no tiers</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > calculateCurrentTier</div><div class="test-title">returns null when no loyalty record</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > calculateCurrentTier</div><div class="test-title">returns Bronze tier for 0 points</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > calculateCurrentTier</div><div class="test-title">returns Silver tier for 1000 points</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > calculateCurrentTier</div><div class="test-title">returns Gold tier for 5000+ points</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > calculateCurrentTier</div><div class="test-title">returns highest qualifying tier</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > calculateCurrentTier</div><div class="test-title">returns null when no tiers available</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getTierStatus</div><div class="test-title">returns empty status when no loyalty record</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getTierStatus</div><div class="test-title">returns status for Bronze tier user</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getTierStatus</div><div class="test-title">returns status for Silver tier user</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getTierStatus</div><div class="test-title">returns status for Gold tier user (highest tier)</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getTierStatus</div><div class="test-title">calculates progress correctly near tier threshold</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getTierStatus</div><div class="test-title">returns 0 progress for new user</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > checkTierUpgrade</div><div class="test-title">returns no upgrade when no loyalty record</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > checkTierUpgrade</div><div class="test-title">upgrades from Bronze to Silver</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > checkTierUpgrade</div><div class="test-title">upgrades from Silver to Gold</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > checkTierUpgrade</div><div class="test-title">does not upgrade when already at correct tier</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > checkTierUpgrade</div><div class="test-title">upgrades from null tier to Bronze</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > checkTierUpgrade</div><div class="test-title">skips multiple tiers if points allow</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > checkTierUpgrade</div><div class="test-title">does not downgrade tiers</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getTierPerks</div><div class="test-title">returns perks for a tier</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getTierPerks</div><div class="test-title">returns empty object when tier not found</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getTierPerks</div><div class="test-title">returns empty object when tier has no perks</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > hasTierPerk</div><div class="test-title">returns true when user has the perk</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > hasTierPerk</div><div class="test-title">returns false when user does not have the perk</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > hasTierPerk</div><div class="test-title">returns false when no current tier</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > hasTierPerk</div><div class="test-title">returns false when tier has no perks</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getUsersInTier</div><div class="test-title">returns user IDs in a tier</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getUsersInTier</div><div class="test-title">returns empty array when no users in tier</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getTierDistribution</div><div class="test-title">returns distribution of users across tiers</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getTierDistribution</div><div class="test-title">excludes 'No Tier' when count is 0</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > getTierDistribution</div><div class="test-title">returns empty array when no tiers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > Error handling</div><div class="test-title">handles database errors in calculateCurrentTier</div><div class="test-status">passed</div><div class="test-duration">0.14s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > Error handling</div><div class="test-title">handles database errors in checkTierUpgrade</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Tiers > Error handling</div><div class="test-title">handles database errors in getTierStatus</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-113" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\workflows\__tests__\route.test.ts</div><div class="suite-time">4.666s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows > Authentication & Authorization</div><div class="test-title">returns 403 when user is not admin</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows > Successful retrieval</div><div class="test-title">returns paginated workflows for admin</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows > Successful retrieval</div><div class="test-title">includes stats when requested</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows > Successful retrieval</div><div class="test-title">filters by trigger type</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows > Successful retrieval</div><div class="test-title">filters by active status</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows > Successful retrieval</div><div class="test-title">handles pagination correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.096s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/workflows > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/workflows > Authentication & Authorization</div><div class="test-title">returns 403 when not admin</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/workflows > Validation</div><div class="test-title">returns 400 for missing required fields</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/workflows > Validation</div><div class="test-title">returns 400 for invalid trigger type</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/workflows > Validation</div><div class="test-title">returns 400 for empty workflow name</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/workflows > Successful creation</div><div class="test-title">creates workflow successfully</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/workflows > Successful creation</div><div class="test-title">creates workflow with all trigger types</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/workflows > Successful creation</div><div class="test-title">creates draft workflow by default</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/workflows > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-114" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\users\__tests__\route.test.ts</div><div class="suite-time warn">5.443s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Authentication & Authorization</div><div class="test-title">requires authentication</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Authentication & Authorization</div><div class="test-title">requires admin role</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Authentication & Authorization</div><div class="test-title">allows admin access</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > User listing</div><div class="test-title">returns paginated users with default settings</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > User listing</div><div class="test-title">handles custom pagination parameters</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > User listing</div><div class="test-title">includes user counts for orders, reviews, and addresses</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > User listing</div><div class="test-title">does not expose sensitive fields like password</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Filtering</div><div class="test-title">filters users by role</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Filtering</div><div class="test-title">filters users by admin role</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Filtering</div><div class="test-title">searches users by email</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Filtering</div><div class="test-title">searches users by name</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Filtering</div><div class="test-title">combines role and search filters</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Sorting</div><div class="test-title">sorts by createdAt descending by default</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Sorting</div><div class="test-title">sorts by custom field ascending</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Sorting</div><div class="test-title">sorts by name descending</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Edge cases</div><div class="test-title">handles empty user list</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Edge cases</div><div class="test-title">handles large page numbers gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Edge cases</div><div class="test-title">handles users with locked accounts</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Edge cases</div><div class="test-title">handles users with unverified emails</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Error handling</div><div class="test-title">returns 500 on database error during user fetch</div><div class="test-status">passed</div><div class="test-duration">0.132s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Error handling</div><div class="test-title">returns 500 on database error during count</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/users > Error handling</div><div class="test-title">handles unexpected errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.064s</div></div></div></div></details><details id="suite-115" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\admin\monitoring\ErrorHistoryTab.test.tsx</div><div class="suite-time warn">6.261s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorHistoryTab</div><div class="test-title">renders history tab</div><div class="test-status">passed</div><div class="test-duration">0.15s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorHistoryTab</div><div class="test-title">displays history entries</div><div class="test-status">passed</div><div class="test-duration">0.071s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorHistoryTab</div><div class="test-title">displays user email for each entry</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorHistoryTab</div><div class="test-title">shows action labels</div><div class="test-status">passed</div><div class="test-duration">0.078s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorHistoryTab</div><div class="test-title">shows new values when present</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorHistoryTab</div><div class="test-title">shows empty state when no history</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorHistoryTab</div><div class="test-title">handles SNOOZED action with date formatting</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorHistoryTab</div><div class="test-title">handles STATUS_CHANGED action</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorHistoryTab</div><div class="test-title">handles COMMENTED action</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorHistoryTab</div><div class="test-title">handles REOPENED action</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div></div></details><details id="suite-116" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\loyalty\__tests__\points.test.ts</div><div class="suite-time warn">5.023s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > calculatePointsForPurchase</div><div class="test-title">calculates base points without program</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > calculatePointsForPurchase</div><div class="test-title">calculates base points with program</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > calculatePointsForPurchase</div><div class="test-title">applies tier multiplier correctly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > calculatePointsForPurchase</div><div class="test-title">applies bonus rules correctly - active rule adds bonus points</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > calculatePointsForPurchase</div><div class="test-title">applies multiple bonus rules correctly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > calculatePointsForPurchase</div><div class="test-title">skips inactive bonus rules</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > calculatePointsForPurchase</div><div class="test-title">rounds down fractional points</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > earnPoints</div><div class="test-title">creates loyalty record if not exists</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > earnPoints</div><div class="test-title">awards points and creates transaction</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > earnPoints</div><div class="test-title">uses default description if not provided</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > expirePoints</div><div class="test-title">returns 0 when no loyalty record exists</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > expirePoints</div><div class="test-title">returns 0 when no expired transactions</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > expirePoints</div><div class="test-title">expires points and creates expiration transactions</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > adjustPoints</div><div class="test-title">creates loyalty record if not exists</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > adjustPoints</div><div class="test-title">adjusts points positively</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > adjustPoints</div><div class="test-title">adjusts points negatively</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > adjustPoints</div><div class="test-title">adjusts lifetime points when specified</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > adjustPoints</div><div class="test-title">does not adjust lifetime for negative adjustments</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > getPointsValue</div><div class="test-title">returns value based on program redemption rate</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > getPointsValue</div><div class="test-title">uses default rate when no program exists</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > getPointsValue</div><div class="test-title">rounds to 2 decimal places</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > getPointsValue</div><div class="test-title">handles zero points</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > Error handling</div><div class="test-title">handles database errors in calculatePointsForPurchase</div><div class="test-status">passed</div><div class="test-duration">0.08s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > Error handling</div><div class="test-title">handles database errors in earnPoints</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > Error handling</div><div class="test-title">handles database errors in expirePoints</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Points > Error handling</div><div class="test-title">handles database errors in adjustPoints</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-117" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\security\__tests__\rate-limit.test.ts</div><div class="suite-time warn">5.04s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > checkRateLimit</div><div class="test-title">allows first request</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > checkRateLimit</div><div class="test-title">allows requests under limit</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > checkRateLimit</div><div class="test-title">allows exactly at limit</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > checkRateLimit</div><div class="test-title">rejects after exceeding limit</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > checkRateLimit</div><div class="test-title">uses default values when not specified</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > checkRateLimit</div><div class="test-title">resets after window expires</div><div class="test-status">passed</div><div class="test-duration">0.116s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > checkRateLimit</div><div class="test-title">tracks different identifiers separately</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > checkRateLimit</div><div class="test-title">increments count on each request</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > getRateLimitInfo</div><div class="test-title">returns full limit for new identifier</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > getRateLimitInfo</div><div class="test-title">returns correct remaining count</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > getRateLimitInfo</div><div class="test-title">returns 0 remaining when exhausted</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > getRateLimitInfo</div><div class="test-title">includes reset time as ISO string</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > getRateLimitInfo</div><div class="test-title">includes retryAfter when rate limited</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > getRateLimitInfo</div><div class="test-title">returns null retryAfter when not rate limited</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > getRateLimitInfo</div><div class="test-title">returns full remaining after window expires</div><div class="test-status">passed</div><div class="test-duration">0.111s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > clearRateLimit</div><div class="test-title">clears rate limit for identifier</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > clearRateLimit</div><div class="test-title">does not affect other identifiers</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > cleanupExpiredEntries</div><div class="test-title">returns 0 when no entries expired</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > cleanupExpiredEntries</div><div class="test-title">removes expired entries</div><div class="test-status">passed</div><div class="test-duration">0.153s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > rateLimitPresets</div><div class="test-title">has signup preset (strict)</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > rateLimitPresets</div><div class="test-title">has moderate preset</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > rateLimitPresets</div><div class="test-title">has standard preset</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > rateLimitPresets</div><div class="test-title">has generous preset</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > rateLimitPresets</div><div class="test-title">presets work with checkRateLimit</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > Edge cases</div><div class="test-title">handles limit of 1</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > Edge cases</div><div class="test-title">handles limit of 0 (always rate limited)</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > Edge cases</div><div class="test-title">handles very short window</div><div class="test-status">passed</div><div class="test-duration">0.091s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Rate Limit utility > Edge cases</div><div class="test-title">handles special characters in identifier</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-118" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOCard\__tests__\SLOCard.test.tsx</div><div class="suite-time">4.901s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > rendering</div><div class="test-title">renders the component</div><div class="test-status">passed</div><div class="test-duration">0.12s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > rendering</div><div class="test-title">displays SLO name</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > rendering</div><div class="test-title">displays current value</div><div class="test-status">passed</div><div class="test-duration">0.086s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > rendering</div><div class="test-title">displays target value</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > rendering</div><div class="test-title">displays window</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > rendering</div><div class="test-title">displays status badge</div><div class="test-status">passed</div><div class="test-duration">0.092s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > rendering</div><div class="test-title">displays error budget remaining</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > status colors</div><div class="test-title">applies green styling for healthy status</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > status colors</div><div class="test-title">applies yellow styling for warning status</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > status colors</div><div class="test-title">applies red styling for critical status</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > sparkline</div><div class="test-title">does not render sparkline when no data provided</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > sparkline</div><div class="test-title">renders sparkline when data provided</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > sparkline</div><div class="test-title">renders sparklines components when data provided</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > trend indicator</div><div class="test-title">does not render trend indicator when not provided</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > trend indicator</div><div class="test-title">renders trend indicator when provided</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > trend indicator</div><div class="test-title">displays positive change for upward trend</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > trend indicator</div><div class="test-title">displays negative change for downward trend</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > trend indicator</div><div class="test-title">displays change without plus for stable trend</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > history link</div><div class="test-title">does not render history link when not provided</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > history link</div><div class="test-title">renders history link when provided</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > error budget warning</div><div class="test-title">applies red styling when budget is low (over 80% consumed)</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > error budget warning</div><div class="test-title">applies normal styling when budget is healthy</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > progress bar</div><div class="test-title">renders progress bar with correct role</div><div class="test-status">passed</div><div class="test-duration">0.205s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOCard > progress bar</div><div class="test-title">sets aria values correctly</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div></div></details><details id="suite-119" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useProductActions.test.tsx</div><div class="suite-time warn">6.521s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToCart</div><div class="test-title">should dispatch addItemToCart action</div><div class="test-status">passed</div><div class="test-duration">0.153s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToCart</div><div class="test-title">should add item with default quantity of 1</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToCart</div><div class="test-title">should add item with custom quantity</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToCart</div><div class="test-title">should track addToCart event</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToCart</div><div class="test-title">should show success toast</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToWishlist</div><div class="test-title">should dispatch addItemToWishlist action</div><div class="test-status">passed</div><div class="test-duration">0.113s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToWishlist</div><div class="test-title">should track addToWishlist event</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToWishlist</div><div class="test-title">should show success toast</div><div class="test-status">passed</div><div class="test-duration">0.09s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > showQuickView</div><div class="test-title">should dispatch updateQuickView action</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > showQuickView</div><div class="test-title">should open modal</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > viewDetails</div><div class="test-title">should dispatch updateProductDetails action</div><div class="test-status">passed</div><div class="test-duration">0.077s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > viewDetails</div><div class="test-title">should track productView event</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToCompare</div><div class="test-title">should show info toast for upcoming feature</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > Function stability</div><div class="test-title">should return stable function references for non-tracking functions</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActionsWithoutToast</div><div class="test-title">should add to cart without showing toast</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActionsWithoutToast</div><div class="test-title">should add to wishlist without showing toast</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActionsWithoutToast</div><div class="test-title">should still track events</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActionsWithoutToast</div><div class="test-title">should show quick view and open modal</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActionsWithoutToast</div><div class="test-title">should view details and track event</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-120" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useSupport.test.tsx</div><div class="suite-time warn">6.079s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePolling</div><div class="test-title">calls callback at specified interval</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePolling</div><div class="test-title">does not call callback when disabled</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePolling</div><div class="test-title">cleans up interval on unmount</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePolling</div><div class="test-title">returns manual trigger function</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePolling</div><div class="test-title">uses updated callback when changed</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePolling</div><div class="test-title">stops polling when enabled becomes false</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCreateTicket</div><div class="test-title">creates ticket successfully</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCreateTicket</div><div class="test-title">handles error on ticket creation</div><div class="test-status">passed</div><div class="test-duration">0.13s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCreateTicket</div><div class="test-title">resets state</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useSendTicketMessage</div><div class="test-title">sends message successfully</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useSendTicketMessage</div><div class="test-title">handles error when sending message</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useSendTicketMessage</div><div class="test-title">sends internal message</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUpdateTicket</div><div class="test-title">updates ticket successfully</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUpdateTicket</div><div class="test-title">handles update error</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useBulkTicketActions</div><div class="test-title">performs bulk update successfully</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useBulkTicketActions</div><div class="test-title">handles bulk update error</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useArticleVote</div><div class="test-title">submits helpful vote</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useArticleVote</div><div class="test-title">submits not helpful vote</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useArticleVote</div><div class="test-title">handles vote error</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useTicketSurvey</div><div class="test-title">submits survey successfully</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useTicketSurvey</div><div class="test-title">submits survey with just rating</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useTicketSurvey</div><div class="test-title">handles survey submission error</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-121" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\monitoring\__tests__\trackedQuery.test.ts</div><div class="suite-time">3.999s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > basic functionality</div><div class="test-title">executes query function and returns result</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > basic functionality</div><div class="test-title">records database metric for successful query</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > basic functionality</div><div class="test-title">calculates row count for array results</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > basic functionality</div><div class="test-title">does not calculate row count for non-array results</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > duration tracking</div><div class="test-title">measures query duration</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > slow query warnings</div><div class="test-title">logs warning for queries exceeding threshold</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > slow query warnings</div><div class="test-title">uses custom warn threshold when provided</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > slow query warnings</div><div class="test-title">does not warn for fast queries</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > log levels</div><div class="test-title">logs debug for all queries when logLevel is "always"</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > log levels</div><div class="test-title">does not log for successful fast queries when logLevel is "slow"</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > log levels</div><div class="test-title">does not log anything when logLevel is "never"</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > error handling</div><div class="test-title">records failed metric on query error</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > error handling</div><div class="test-title">logs error on query failure</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > error handling</div><div class="test-title">preserves original error when rethrowing</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > error handling</div><div class="test-title">handles non-Error objects in rejection</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > options</div><div class="test-title">accepts explicit operation type</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > options</div><div class="test-title">accepts explicit table name</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > options</div><div class="test-title">includes requestId when provided</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > options</div><div class="test-title">includes userId when provided</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQuery > options</div><div class="test-title">disables row count when includeRowCount is false</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQueryWithMetrics</div><div class="test-title">returns data along with metrics</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQueryWithMetrics</div><div class="test-title">returns undefined rowCount for non-array results</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQueryWithMetrics</div><div class="test-title">records metric just like trackedQuery</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">trackedQueryWithMetrics</div><div class="test-title">throws and logs error on failure</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">createQueryTracker</div><div class="test-title">creates a tracker function with context</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">createQueryTracker</div><div class="test-title">uses context warnThreshold by default</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">createQueryTracker</div><div class="test-title">allows override of warnThreshold per query</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">createQueryTracker</div><div class="test-title">tracks multiple queries with same context</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-122" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Checkbox\__tests__\Checkbox.test.tsx</div><div class="suite-time warn">5.946s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Rendering</div><div class="test-title">renders checkbox input</div><div class="test-status">passed</div><div class="test-duration">0.657s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Rendering</div><div class="test-title">renders with label</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Rendering</div><div class="test-title">renders unchecked by default</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Rendering</div><div class="test-title">renders checked when checked prop is true</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Rendering</div><div class="test-title">renders with helper text</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Rendering</div><div class="test-title">renders with error message</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Rendering</div><div class="test-title">shows error message instead of helper text when both provided</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Sizes</div><div class="test-title">renders small size</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Sizes</div><div class="test-title">renders medium size (default)</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Sizes</div><div class="test-title">renders large size</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Sizes</div><div class="test-title">applies correct label size for sm</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Sizes</div><div class="test-title">applies correct label size for lg</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > States</div><div class="test-title">applies default state border</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > States</div><div class="test-title">applies success state border</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > States</div><div class="test-title">applies error state border</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > States</div><div class="test-title">applies warning state border</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > States</div><div class="test-title">applies error state when error prop is provided</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > States</div><div class="test-title">error prop overrides state prop</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Disabled state</div><div class="test-title">renders as disabled</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Disabled state</div><div class="test-title">applies disabled styling</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Disabled state</div><div class="test-title">applies disabled cursor to label container</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Disabled state</div><div class="test-title">does not call onChange when disabled</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > User interactions</div><div class="test-title">calls onChange when clicked</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > User interactions</div><div class="test-title">calls onChange with false when unchecked</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > User interactions</div><div class="test-title">calls onChange when label is clicked</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Accessibility</div><div class="test-title">has proper aria-invalid when in error state</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Accessibility</div><div class="test-title">has aria-describedby for error</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Accessibility</div><div class="test-title">has aria-describedby for helper text</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Accessibility</div><div class="test-title">generates unique id when not provided</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Accessibility</div><div class="test-title">uses provided id</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Ref forwarding</div><div class="test-title">forwards ref to checkbox input</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Custom classNames</div><div class="test-title">applies custom className to checkbox</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Custom classNames</div><div class="test-title">applies custom labelClassName</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Checkbox > Additional props</div><div class="test-title">passes additional props to input</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div></div></details><details id="suite-123" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\analytics.test.ts</div><div class="suite-time">4.606s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getDashboardOverview</div><div class="test-title">returns cached result if available</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getDashboardOverview</div><div class="test-title">calculates metrics when cache miss</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getDashboardOverview</div><div class="test-title">calculates growth percentages correctly</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getDashboardOverview</div><div class="test-title">handles zero previous values</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getOrderMetrics</div><div class="test-title">returns correct metrics for orders</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getOrderMetrics</div><div class="test-title">handles empty orders</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getOrderMetrics</div><div class="test-title">rounds revenue to 2 decimal places</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getSalesAnalytics</div><div class="test-title">returns daily sales for specified period</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getSalesAnalytics</div><div class="test-title">determines trend correctly - up</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getSalesAnalytics</div><div class="test-title">determines trend correctly - down</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getSalesAnalytics</div><div class="test-title">determines trend correctly - stable</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getSalesAnalytics</div><div class="test-title">uses default 30 days</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getCustomerAnalytics</div><div class="test-title">calculates customer metrics correctly</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getCustomerAnalytics</div><div class="test-title">segments customers correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getCustomerAnalytics</div><div class="test-title">calculates average lifetime value</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getCustomerAnalytics</div><div class="test-title">returns top customers sorted by total spent</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">analytics > getCustomerAnalytics</div><div class="test-title">builds acquisition trend for 30 days</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-124" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useTheme.test.tsx</div><div class="suite-time warn">6.117s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > ThemeProvider</div><div class="test-title">renders children</div><div class="test-status">passed</div><div class="test-duration">0.116s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > ThemeProvider</div><div class="test-title">uses system theme as default</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > ThemeProvider</div><div class="test-title">uses custom default theme when provided</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > ThemeProvider</div><div class="test-title">loads theme from localStorage on mount</div><div class="test-status">passed</div><div class="test-duration">0.065s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > ThemeProvider</div><div class="test-title">ignores invalid localStorage values</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > useTheme</div><div class="test-title">throws error when used outside provider</div><div class="test-status">passed</div><div class="test-duration">0.201s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > useTheme</div><div class="test-title">returns current theme</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > useTheme</div><div class="test-title">returns resolved theme for light mode</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > useTheme</div><div class="test-title">returns resolved theme for dark mode</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > useTheme</div><div class="test-title">resolves system theme to light when system prefers light</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > useTheme</div><div class="test-title">resolves system theme to dark when system prefers dark</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > setTheme</div><div class="test-title">sets theme to light</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > setTheme</div><div class="test-title">sets theme to dark</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > setTheme</div><div class="test-title">sets theme to system</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > setTheme</div><div class="test-title">saves theme to localStorage</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > setTheme</div><div class="test-title">applies theme to document element</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > toggleTheme</div><div class="test-title">toggles from light to dark</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > toggleTheme</div><div class="test-title">toggles from dark to light</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > toggleTheme</div><div class="test-title">toggles from system (light) to dark</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > toggleTheme</div><div class="test-title">toggles from system (dark) to light</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > System theme changes</div><div class="test-title">listens for system theme changes when theme is system</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > System theme changes</div><div class="test-title">does not listen for system changes when theme is explicit</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Document updates</div><div class="test-title">sets data-theme attribute on document element</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Document updates</div><div class="test-title">adds theme-loaded class when mounted</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Error handling</div><div class="test-title">handles localStorage errors gracefully when loading</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ThemeContext > Error handling</div><div class="test-title">handles localStorage errors gracefully when saving</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div></div></details><details id="suite-125" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Tooltip\__tests__\Tooltip.test.tsx</div><div class="suite-time warn">5.173s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tooltip</div><div class="test-title">renders children correctly</div><div class="test-status">passed</div><div class="test-duration">0.11s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tooltip</div><div class="test-title">shows tooltip on hover</div><div class="test-status">passed</div><div class="test-duration">0.206s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tooltip</div><div class="test-title">hides tooltip on mouse leave</div><div class="test-status">passed</div><div class="test-duration">0.074s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tooltip</div><div class="test-title">shows tooltip on focus</div><div class="test-status">passed</div><div class="test-duration">0.069s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tooltip</div><div class="test-title">hides tooltip on blur</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tooltip</div><div class="test-title">renders with different positions</div><div class="test-status">passed</div><div class="test-duration">0.12s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tooltip</div><div class="test-title">does not show tooltip when content is empty</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tooltip</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.064s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tooltip</div><div class="test-title">respects delay prop</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tooltip</div><div class="test-title">clears timeout on mouse leave before delay completes</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div></div></details><details id="suite-126" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\core\__tests__\logger.test.ts</div><div class="suite-time warn">6.381s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logInfo</div><div class="test-title">should log info messages with correct format</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logInfo</div><div class="test-title">should include data when provided</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logInfo</div><div class="test-title">should handle different context values</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logWarn</div><div class="test-title">should log warning messages with correct format</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logWarn</div><div class="test-title">should include data when provided</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logError</div><div class="test-title">should log error messages with correct format</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logError</div><div class="test-title">should extract error details from Error objects</div><div class="test-status">passed</div><div class="test-duration">0.1s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logError</div><div class="test-title">should handle non-Error objects</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logError</div><div class="test-title">should handle string errors</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logDebug</div><div class="test-title">should log debug messages in development mode</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logDebug</div><div class="test-title">should not log debug messages in production mode</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logDebug</div><div class="test-title">should not log debug messages in test mode</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logDebug</div><div class="test-title">should include data in development mode</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logRequest</div><div class="test-title">should log basic request</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logRequest</div><div class="test-title">should include status code</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logRequest</div><div class="test-title">should include user ID</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logRequest</div><div class="test-title">should include duration</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logRequest</div><div class="test-title">should handle POST requests</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logAuth</div><div class="test-title">should log successful auth event</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logAuth</div><div class="test-title">should log failed auth event</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logAuth</div><div class="test-title">should handle different auth events</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logDatabase</div><div class="test-title">should log database operation</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logDatabase</div><div class="test-title">should include duration</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logRateLimit</div><div class="test-title">should log rate limit warning</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logRateLimit</div><div class="test-title">should handle user identifier</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logger object</div><div class="test-title">should expose all logging methods</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">logger > logger object</div><div class="test-title">should work when called through logger object</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div></div></details><details id="suite-127" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\EndpointPerformanceTable\EndpointPerformanceTable.test.tsx</div><div class="suite-time warn">5.094s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Rendering</div><div class="test-title">renders without crashing</div><div class="test-status">passed</div><div class="test-duration">0.175s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Rendering</div><div class="test-title">displays the table title</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Rendering</div><div class="test-title">displays endpoint names</div><div class="test-status">passed</div><div class="test-duration">0.07s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Rendering</div><div class="test-title">displays HTTP methods</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Rendering</div><div class="test-title">displays request counts</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Rendering</div><div class="test-title">displays formatted durations</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Percentiles</div><div class="test-title">shows percentile columns when showPercentiles is true</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Percentiles</div><div class="test-title">hides percentile columns when showPercentiles is false</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Percentiles</div><div class="test-title">displays percentile values when available</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Loading State</div><div class="test-title">displays loading skeleton when isLoading is true</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Empty State</div><div class="test-title">displays empty message when no endpoints</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Max Rows</div><div class="test-title">limits displayed rows when maxRows is set</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Max Rows</div><div class="test-title">shows count message when rows are limited</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointPerformanceTable > Click Handler</div><div class="test-title">calls onEndpointClick when row is clicked</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div></div></details><details id="suite-128" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\pricing\[id]\__tests__\route.test.ts</div><div class="suite-time warn">5.073s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/pricing/[id] > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/pricing/[id] > Authentication & Authorization</div><div class="test-title">returns 403 when user is not admin</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/pricing/[id] > Successful retrieval</div><div class="test-title">returns a pricing rule by id</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/pricing/[id] > Successful retrieval</div><div class="test-title">returns 404 when rule not found</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/pricing/[id] > Successful retrieval</div><div class="test-title">returns 400 for invalid id</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/pricing/[id] > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/pricing/[id] > Authentication & Authorization</div><div class="test-title">returns 403 when not admin</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/pricing/[id] > Successful update</div><div class="test-title">updates rule name</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/pricing/[id] > Successful update</div><div class="test-title">updates discount value</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/pricing/[id] > Successful update</div><div class="test-title">toggles active status</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/pricing/[id] > Successful update</div><div class="test-title">updates target products</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/pricing/[id] > Validation</div><div class="test-title">returns 400 for invalid discount type</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/pricing/[id] > Validation</div><div class="test-title">returns 400 for negative discount value</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/pricing/[id] > Validation</div><div class="test-title">returns 404 when rule not found</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/admin/pricing/[id] > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/admin/pricing/[id] > Authentication & Authorization</div><div class="test-title">returns 403 when not admin</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/admin/pricing/[id] > Successful deletion</div><div class="test-title">deletes a pricing rule</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/admin/pricing/[id] > Successful deletion</div><div class="test-title">returns 404 when rule not found</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/admin/pricing/[id] > Successful deletion</div><div class="test-title">returns 400 for invalid id</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/admin/pricing/[id] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.112s</div></div></div></div></details><details id="suite-129" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\promotions\__tests__\route.test.ts</div><div class="suite-time">4.879s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/promotions > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/promotions > Authentication & Authorization</div><div class="test-title">returns 403 when authenticated but not admin</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/promotions > Successful retrieval</div><div class="test-title">returns paginated promotions for admin</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/promotions > Successful retrieval</div><div class="test-title">filters by search term</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/promotions > Successful retrieval</div><div class="test-title">filters by promotion type</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/promotions > Successful retrieval</div><div class="test-title">filters by active status</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/promotions > Successful retrieval</div><div class="test-title">filters by expired status</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/promotions > Successful retrieval</div><div class="test-title">computes correct status for scheduled promotions</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/promotions > Successful retrieval</div><div class="test-title">handles pagination correctly</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/promotions > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.099s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/promotions > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/promotions > Authentication & Authorization</div><div class="test-title">returns 403 when not admin</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/promotions > Validation</div><div class="test-title">returns 400 for missing required fields</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/promotions > Validation</div><div class="test-title">returns 400 for invalid discount value</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/promotions > Validation</div><div class="test-title">returns 400 for invalid date range (end before start)</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/promotions > Successful creation</div><div class="test-title">creates basic promotion successfully</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/promotions > Successful creation</div><div class="test-title">creates promotion with target products</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/promotions > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-130" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\ui\Card\__tests__\Card.test.tsx</div><div class="suite-time warn">6.268s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Basic rendering</div><div class="test-title">renders children content</div><div class="test-status">passed</div><div class="test-duration">0.183s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Basic rendering</div><div class="test-title">renders with default variant (default)</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Variants</div><div class="test-title">renders default variant</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Variants</div><div class="test-title">renders bordered variant</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Variants</div><div class="test-title">renders elevated variant</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Variants</div><div class="test-title">renders ghost variant</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Variants</div><div class="test-title">renders shadow-1 variant</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Variants</div><div class="test-title">renders flat variant</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Padding</div><div class="test-title">renders with no padding</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Padding</div><div class="test-title">renders with small padding</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Padding</div><div class="test-title">renders with medium padding (default)</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Padding</div><div class="test-title">renders with large padding</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Border radius</div><div class="test-title">renders with no border radius</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Border radius</div><div class="test-title">renders with small border radius</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Border radius</div><div class="test-title">renders with medium border radius</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Border radius</div><div class="test-title">renders with large border radius (default)</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Interactive states</div><div class="test-title">renders hoverable card</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Interactive states</div><div class="test-title">renders non-hoverable card by default</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Interactive states</div><div class="test-title">renders clickable card</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Interactive states</div><div class="test-title">renders non-clickable card by default</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Custom className</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Custom className</div><div class="test-title">merges custom className with default classes</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Ref forwarding</div><div class="test-title">forwards ref to Card</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card > Additional props</div><div class="test-title">passes additional props to div</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardHeader</div><div class="test-title">renders children content</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardHeader</div><div class="test-title">applies default styles</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardHeader</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardHeader</div><div class="test-title">forwards ref</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardHeader</div><div class="test-title">passes additional props</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardBody</div><div class="test-title">renders children content</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardBody</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardBody</div><div class="test-title">forwards ref</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardBody</div><div class="test-title">passes additional props</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardFooter</div><div class="test-title">renders children content</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardFooter</div><div class="test-title">applies default styles</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardFooter</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardFooter</div><div class="test-title">forwards ref</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CardFooter</div><div class="test-title">passes additional props</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card composition</div><div class="test-title">renders full card with header, body, and footer</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card composition</div><div class="test-title">renders elevated card with hoverable effect</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Card composition</div><div class="test-title">renders bordered clickable card</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-131" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\LiveIndicator\__tests__\LiveIndicator.test.tsx</div><div class="suite-time">4.024s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > rendering</div><div class="test-title">renders the component</div><div class="test-status">passed</div><div class="test-duration">0.167s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > rendering</div><div class="test-title">displays connected status</div><div class="test-status">passed</div><div class="test-duration">0.076s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > rendering</div><div class="test-title">displays connecting status</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > rendering</div><div class="test-title">displays reconnecting status</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > rendering</div><div class="test-title">displays disconnected status</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > rendering</div><div class="test-title">displays polling status</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > last update time</div><div class="test-title">displays "just now" for recent updates</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > last update time</div><div class="test-title">displays seconds ago for updates within a minute</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > last update time</div><div class="test-title">displays minutes ago for updates within an hour</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > last update time</div><div class="test-title">does not display update time when lastUpdate is null</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > compact mode</div><div class="test-title">renders compact version</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > compact mode</div><div class="test-title">does not show LIVE text for non-connected status in compact mode</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > reconnect button</div><div class="test-title">shows reconnect button when disconnected</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > reconnect button</div><div class="test-title">calls onReconnect when button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > reconnect button</div><div class="test-title">does not show reconnect button when connected</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > reconnect button</div><div class="test-title">does not show reconnect button without callback</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > styling</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > styling</div><div class="test-title">has animation class for connected status</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > styling</div><div class="test-title">has animation class for connecting status</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">LiveIndicator > styling</div><div class="test-title">does not have animation class for disconnected status</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div></div></details><details id="suite-132" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\analytics\services\__tests__\cohort.service.test.ts</div><div class="suite-time">4.834s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cohort Service > getCohortAnalysis</div><div class="test-title">should return empty cohorts when no users exist</div><div class="test-status">passed</div><div class="test-duration">0.146s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cohort Service > getCohortAnalysis</div><div class="test-title">should calculate cohort retention correctly</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cohort Service > getCohortAnalysis</div><div class="test-title">should handle users with no orders</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cohort Service > getCohortAnalysis</div><div class="test-title">should calculate average CLV across cohorts</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cohort Service > getRetentionMatrix</div><div class="test-title">should return matrix with correct labels</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cohort Service > getRetentionMatrix</div><div class="test-title">should pad retention arrays to consistent length</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cohort Service > getCustomerSegments</div><div class="test-title">should return all segment categories</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cohort Service > getCustomerSegments</div><div class="test-title">should segment high value customers correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cohort Service > getCustomerSegments</div><div class="test-title">should identify dormant customers</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cohort Service > getCustomerSegments</div><div class="test-title">should calculate average order value per segment</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cohort Service > getCustomerSegments</div><div class="test-title">should handle customers with no orders</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-133" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useSupport.test.ts</div><div class="suite-time warn">5.192s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePolling</div><div class="test-title">calls callback at specified interval when enabled</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePolling</div><div class="test-title">does not call callback when disabled</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePolling</div><div class="test-title">cleans up interval on unmount</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePolling</div><div class="test-title">returns a manual trigger function</div><div class="test-status">passed</div><div class="test-duration">0.043s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useTickets</div><div class="test-title">dispatches fetchTickets on mount</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useTickets</div><div class="test-title">returns tickets state and actions</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useTickets</div><div class="test-title">dispatches setTicketFilters when setFilters is called</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useTickets</div><div class="test-title">dispatches clearTicketFilters when clearFilters is called</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useTicket</div><div class="test-title">dispatches fetchTicket when ticketId is provided</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useTicket</div><div class="test-title">does not dispatch when ticketId is null</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useTicket</div><div class="test-title">returns ticket state and refetch function</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useMyTickets</div><div class="test-title">dispatches fetchMyTickets on mount</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useMyTickets</div><div class="test-title">returns my tickets state</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useArticles</div><div class="test-title">dispatches fetchArticles on mount</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useArticles</div><div class="test-title">returns articles state and actions</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useArticles</div><div class="test-title">dispatches setArticleCategory when setCategory is called</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useSupportStats</div><div class="test-title">dispatches fetchStats on mount</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useSupportStats</div><div class="test-title">returns stats state</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useChatbot</div><div class="test-title">returns chatbot state and actions</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useChatbot</div><div class="test-title">dispatches toggleChatbot when toggle is called</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useChatbot</div><div class="test-title">dispatches sendChatbotMessage when sendMessage is called</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useChatbot</div><div class="test-title">does not send empty messages</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCreateTicket</div><div class="test-title">returns initial state</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCreateTicket</div><div class="test-title">creates ticket successfully</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCreateTicket</div><div class="test-title">handles creation error</div><div class="test-status">passed</div><div class="test-duration">0.107s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCreateTicket</div><div class="test-title">resets state when reset is called</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useSendTicketMessage</div><div class="test-title">sends message successfully</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useSendTicketMessage</div><div class="test-title">handles send error</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUpdateTicket</div><div class="test-title">updates ticket successfully</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useUpdateTicket</div><div class="test-title">handles update error</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useBulkTicketActions</div><div class="test-title">performs bulk update successfully</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useBulkTicketActions</div><div class="test-title">handles bulk action error</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useArticleVote</div><div class="test-title">submits helpful vote successfully</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useArticleVote</div><div class="test-title">submits not helpful vote successfully</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useArticleVote</div><div class="test-title">handles vote error</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useTicketSurvey</div><div class="test-title">submits survey successfully</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useTicketSurvey</div><div class="test-title">handles survey submission error</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div></div></details><details id="suite-134" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\api-docs\__tests__\request-chaining.test.ts</div><div class="suite-time warn">5.56s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Request Chaining > createChainFromRequests</div><div class="test-title">should create chain steps from requests</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Request Chaining > createChainFromRequests</div><div class="test-title">should use default name when not provided</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Request Chaining > createChainFromRequests</div><div class="test-title">should handle empty requests array</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Request Chaining > formatChainResults</div><div class="test-title">should format successful chain results</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Request Chaining > formatChainResults</div><div class="test-title">should format failed chain results</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Request Chaining > formatChainResults</div><div class="test-title">should format skipped steps</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Request Chaining > formatChainResults</div><div class="test-title">should format assertion results</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Request Chaining > ChainStep interface</div><div class="test-title">should allow valid step configuration</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Request Chaining > VariableExtraction interface</div><div class="test-title">should support JSONPath-like expressions</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Request Chaining > ChainAssertion operators</div><div class="test-title">should support all assertion operators</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Request Chaining > Variable interpolation patterns</div><div class="test-title">should recognize variable patterns in strings</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Request Chaining > JSONPath-like extraction patterns</div><div class="test-title">should recognize valid JSONPath patterns</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-135" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\services\__tests__\support-analytics.service.test.ts</div><div class="suite-time warn">5.129s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SupportAnalyticsService > getChatMetrics</div><div class="test-title">should return chat metrics for the period</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SupportAnalyticsService > getChatMetrics</div><div class="test-title">should handle no ratings</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SupportAnalyticsService > getAgentPerformance</div><div class="test-title">should return agent performance metrics</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SupportAnalyticsService > getAgentPerformance</div><div class="test-title">should return empty array when no agents found</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SupportAnalyticsService > getDailyMetrics</div><div class="test-title">should return daily metrics trend</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SupportAnalyticsService > getDailyMetrics</div><div class="test-title">should handle empty data</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SupportAnalyticsService > getBusiestHours</div><div class="test-title">should return busiest hours sorted by count</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SupportAnalyticsService > getTopTags</div><div class="test-title">should return top tags sorted by frequency</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SupportAnalyticsService > getTopTags</div><div class="test-title">should handle conversations without tags</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SupportAnalyticsService > getCSATScore</div><div class="test-title">should calculate CSAT score correctly</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SupportAnalyticsService > getCSATScore</div><div class="test-title">should handle no responses</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SupportAnalyticsService > getCSATScore</div><div class="test-title">should handle all satisfied customers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SupportAnalyticsService > getSummary</div><div class="test-title">should return comprehensive analytics summary</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-136" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\api\__tests__\responses.test.ts</div><div class="suite-time warn">6.006s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > successResponse</div><div class="test-title">should create a success response with data</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > successResponse</div><div class="test-title">should accept custom status code</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > successResponse</div><div class="test-title">should include meta when provided</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > createdResponse</div><div class="test-title">should return 201 status</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > paginatedResponse</div><div class="test-title">should include pagination metadata</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > paginatedResponse</div><div class="test-title">should calculate hasNext and hasPrev correctly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > paginatedResponse</div><div class="test-title">should handle last page</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > noContentResponse</div><div class="test-title">should return 204 status with no body</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > errorResponse</div><div class="test-title">should create an error response</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > errorResponse</div><div class="test-title">should include details when provided</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > errorResponse</div><div class="test-title">should accept custom status code</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > validationErrorResponse</div><div class="test-title">should return 400 with VALIDATION_ERROR code</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > unauthorizedResponse</div><div class="test-title">should return 401</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > unauthorizedResponse</div><div class="test-title">should accept custom message</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > forbiddenResponse</div><div class="test-title">should return 403</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > notFoundResponse</div><div class="test-title">should return 404 with resource name</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > notFoundResponse</div><div class="test-title">should include ID in message when provided</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > conflictResponse</div><div class="test-title">should return 409</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > rateLimitResponse</div><div class="test-title">should return 429</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Helpers > internalErrorResponse</div><div class="test-title">should return 500</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-137" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\products\__tests__\[id].test.ts</div><div class="suite-time">4.663s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/[id]</div><div class="test-title">returns product with details</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/[id]</div><div class="test-title">returns 404 for non-existent product</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/[id]</div><div class="test-title">calculates correct average rating with no reviews</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/[id]</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.145s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/products/[id] > Admin authorization</div><div class="test-title">returns 401 for unauthenticated users</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/products/[id] > Admin authorization</div><div class="test-title">returns 403 for non-admin users</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/products/[id] > Product updates</div><div class="test-title">updates product title</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/products/[id] > Product updates</div><div class="test-title">updates product price</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/products/[id] > Product updates</div><div class="test-title">updates product stock</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/products/[id] > Product updates</div><div class="test-title">updates product category</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/products/[id] > Product updates</div><div class="test-title">handles partial updates (only specified fields)</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/products/[id] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/products/[id] > Admin authorization</div><div class="test-title">returns 401 for unauthenticated users</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/products/[id] > Admin authorization</div><div class="test-title">returns 403 for non-admin users</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/products/[id] > Product deletion</div><div class="test-title">deletes product successfully</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/products/[id] > Product deletion</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-138" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\contexts\__tests__\CheckoutContext.test.tsx</div><div class="suite-time warn">5.471s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckout</div><div class="test-title">throws error when used outside provider</div><div class="test-status">passed</div><div class="test-duration">0.287s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckout</div><div class="test-title">provides initial state</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckout</div><div class="test-title">allows setting step</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckout</div><div class="test-title">allows setting shipping address</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckout</div><div class="test-title">copies shipping to billing when sameAsShipping is true</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckout</div><div class="test-title">allows separate billing address when sameAsShipping is false</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckout</div><div class="test-title">allows setting shipping method</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckout</div><div class="test-title">allows setting payment method</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckout</div><div class="test-title">allows setting processing state</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckout</div><div class="test-title">allows setting error</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckout</div><div class="test-title">resets state</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > canProceed</div><div class="test-title">returns false for shipping step without address and method</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > canProceed</div><div class="test-title">returns true for shipping step with address and method</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > canProceed</div><div class="test-title">returns false for payment step without payment method</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > canProceed</div><div class="test-title">returns true for payment step with payment method</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > canProceed</div><div class="test-title">returns false for review step when processing</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > canProceed</div><div class="test-title">returns true for review step when not processing</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckoutStep</div><div class="test-title">provides step-related values</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckoutShipping</div><div class="test-title">provides shipping-related values</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CheckoutContext > useCheckoutBilling</div><div class="test-title">provides billing-related values</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-139" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\__tests__\error-handler.test.ts</div><div class="suite-time">4.19s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">AppError</div><div class="test-title">creates error with default values</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AppError</div><div class="test-title">creates error with custom status code</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AppError</div><div class="test-title">creates error with custom status code and error code</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">AppError</div><div class="test-title">is instanceof Error</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">createError</div><div class="test-title">creates AppError with message only</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">createError</div><div class="test-title">creates AppError with all parameters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errors factory functions</div><div class="test-title">creates unauthorized error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errors factory functions</div><div class="test-title">creates unauthorized error with custom message</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errors factory functions</div><div class="test-title">creates forbidden error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errors factory functions</div><div class="test-title">creates notFound error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errors factory functions</div><div class="test-title">creates notFound error with custom resource</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errors factory functions</div><div class="test-title">creates conflict error</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errors factory functions</div><div class="test-title">creates validation error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errors factory functions</div><div class="test-title">creates validation error with custom message and field</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errors factory functions</div><div class="test-title">creates rateLimit error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errors factory functions</div><div class="test-title">creates rateLimit error with retryAfter</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errors factory functions</div><div class="test-title">creates internal error</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > AppError handling</div><div class="test-title">handles AppError and returns correct status</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > AppError handling</div><div class="test-title">handles 401 AppError</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > AppError handling</div><div class="test-title">handles 404 AppError</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > ZodError handling</div><div class="test-title">handles Zod validation error</div><div class="test-status">passed</div><div class="test-duration">0.101s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > ZodError handling</div><div class="test-title">groups multiple errors for same field</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > ZodError handling</div><div class="test-title">handles nested path validation errors</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > SyntaxError handling</div><div class="test-title">handles JSON parsing errors</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > Prisma error handling</div><div class="test-title">handles unique constraint violation</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > Prisma error handling</div><div class="test-title">handles record not found errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > Generic error handling</div><div class="test-title">handles unknown errors with 500</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > Generic error handling</div><div class="test-title">handles non-Error objects</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > Generic error handling</div><div class="test-title">handles string errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > Generic error handling</div><div class="test-title">handles null errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > Generic error handling</div><div class="test-title">handles undefined errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">handleError > Logger integration</div><div class="test-title">logs errors via logger</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-140" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\cart\__tests__\CartMergeHandler.test.tsx</div><div class="suite-time warn">6.413s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartMergeHandler > Rendering</div><div class="test-title">renders null (no visible output)</div><div class="test-status">passed</div><div class="test-duration">0.09s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartMergeHandler > Loading state</div><div class="test-title">does nothing while session is loading</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartMergeHandler > Authentication transitions</div><div class="test-title">does not merge on initial authenticated state (no previous status)</div><div class="test-status">passed</div><div class="test-duration">0.09s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartMergeHandler > Authentication transitions</div><div class="test-title">does not merge when no anonymous cart exists on status change</div><div class="test-status">passed</div><div class="test-duration">0.15s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartMergeHandler > Authentication transitions</div><div class="test-title">does not merge when anonymous cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.089s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartMergeHandler > Component behavior</div><div class="test-title">initializes with loading state without side effects</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartMergeHandler > Component behavior</div><div class="test-title">tracks status changes across renders</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartMergeHandler > Component behavior</div><div class="test-title">mocks are properly configured</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartMergeHandler > Fetch mock verification</div><div class="test-title">fetch mock responds correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartMergeHandler > Fetch mock verification</div><div class="test-title">fetch mock handles error responses</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-141" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\promotions\__tests__\active.test.ts</div><div class="suite-time warn">6.334s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active > Successful retrieval</div><div class="test-title">returns active promotions with computed fields</div><div class="test-status">passed</div><div class="test-duration">0.086s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active > Successful retrieval</div><div class="test-title">returns fixed amount discount label correctly</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active > Successful retrieval</div><div class="test-title">returns empty array when no active promotions</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active > Successful retrieval</div><div class="test-title">filters by type when provided</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active > Successful retrieval</div><div class="test-title">respects limit parameter</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active > Successful retrieval</div><div class="test-title">uses default limit of 20 when not specified</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.227s</div></div></div></div></details><details id="suite-142" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\validation\__tests__\index.test.ts</div><div class="suite-time warn">5.608s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Simple Validation Functions > validateData</div><div class="test-title">should return data on success</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Simple Validation Functions > validateData</div><div class="test-title">should return grouped errors on failure</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Simple Validation Functions > validateData</div><div class="test-title">should handle nested paths</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Simple Validation Functions > safeParse</div><div class="test-title">should return SafeParseSuccess on valid data</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Simple Validation Functions > safeParse</div><div class="test-title">should return SafeParseError on invalid data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Route Param Validation > validateRouteParams</div><div class="test-title">should validate valid route params</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Route Param Validation > validateRouteParams</div><div class="test-title">should return error for invalid params</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Route Param Validation > validateRouteParams</div><div class="test-title">should handle multiple params</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Handling > isValidationError</div><div class="test-title">should return true for ZodError</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Handling > isValidationError</div><div class="test-title">should return false for other errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Utility Schemas > createIdParamSchema</div><div class="test-title">should create a schema for ID params</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Utility Schemas > createIdParamSchema</div><div class="test-title">should support custom param names</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Utility Schemas > createIdParamSchema</div><div class="test-title">should reject invalid IDs</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Utility Schemas > createSlugParamSchema</div><div class="test-title">should create a schema for slug params</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Utility Schemas > createSlugParamSchema</div><div class="test-title">should support custom param names</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Utility Schemas > createSlugParamSchema</div><div class="test-title">should reject empty slugs</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-143" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\cart\__tests__\cart-persistence-integration.test.ts</div><div class="suite-time warn">5.14s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Anonymous User Flow</div><div class="test-title">should save and retrieve anonymous cart</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Anonymous User Flow</div><div class="test-title">should persist cart across page refreshes</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Anonymous User Flow</div><div class="test-title">should update cart when quantity changes</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Login and Merge Flow</div><div class="test-title">should merge anonymous cart with empty user cart</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Login and Merge Flow</div><div class="test-title">should merge anonymous cart with existing user cart</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Login and Merge Flow</div><div class="test-title">should clear anonymous cookie after successful merge</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Multi-Device Sync Flow</div><div class="test-title">should generate unique device IDs</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Multi-Device Sync Flow</div><div class="test-title">should maintain consistent device ID across sessions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Multi-Device Sync Flow</div><div class="test-title">should include device ID in cart operations</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Cart Validation Flow</div><div class="test-title">should validate cart before saving</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Cart Validation Flow</div><div class="test-title">should reject invalid cart data</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Complete User Journey</div><div class="test-title">should handle complete anonymous-to-authenticated flow</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Error Handling</div><div class="test-title">should handle corrupted cookie data</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Error Handling</div><div class="test-title">should handle cookie size limit</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Persistence Integration > Error Handling</div><div class="test-title">should handle storage errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div></div></details><details id="suite-144" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\alerts\StatusIndicator\__tests__\StatusIndicator.test.tsx</div><div class="suite-time warn">6.523s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > rendering</div><div class="test-title">renders without crashing</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > rendering</div><div class="test-title">renders with default size (md)</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > rendering</div><div class="test-title">renders with small size</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > rendering</div><div class="test-title">renders with large size</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > status colors</div><div class="test-title">renders green for ok status</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > status colors</div><div class="test-title">renders yellow for warning status</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > status colors</div><div class="test-title">renders red for critical status</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > status colors</div><div class="test-title">renders blue for active status</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > status colors</div><div class="test-title">renders purple for acknowledged status</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > status colors</div><div class="test-title">renders gray for resolved status</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > label</div><div class="test-title">does not show label by default</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > label</div><div class="test-title">shows label when showLabel is true</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > label</div><div class="test-title">displays correct label for each status</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > animation</div><div class="test-title">does not animate by default</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > animation</div><div class="test-title">animates when animate prop is true</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusIndicator > className</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-145" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\auth\__tests__\session-security.test.ts</div><div class="suite-time">4.621s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > extractRequestMetadata</div><div class="test-title">returns null values when request is undefined</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > extractRequestMetadata</div><div class="test-title">extracts IP from x-forwarded-for header</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > extractRequestMetadata</div><div class="test-title">extracts IP from x-real-ip header when x-forwarded-for is missing</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > extractRequestMetadata</div><div class="test-title">extracts user agent from request</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > extractRequestMetadata</div><div class="test-title">handles missing headers gracefully</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > generateSessionToken</div><div class="test-title">generates a non-empty token</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > generateSessionToken</div><div class="test-title">generates unique tokens on each call</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > generateSessionToken</div><div class="test-title">generates hex encoded tokens</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > rotateUserSession</div><div class="test-title">deletes old sessions and creates new one</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > rotateUserSession</div><div class="test-title">returns null on error</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > rotateUserSession</div><div class="test-title">includes request metadata when provided</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > invalidateAllUserSessions</div><div class="test-title">deletes all sessions for user</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > invalidateAllUserSessions</div><div class="test-title">handles zero sessions gracefully</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > invalidateAllUserSessions</div><div class="test-title">throws on database error</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > validateSession</div><div class="test-title">returns session data for valid non-expired session</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > validateSession</div><div class="test-title">returns null for non-existent session</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > validateSession</div><div class="test-title">returns null and cleans up expired session</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > validateSession</div><div class="test-title">returns null on database error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > updateSessionActivity</div><div class="test-title">extends session expiry</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > updateSessionActivity</div><div class="test-title">logs warning on error but does not throw</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > getActiveSessionCount</div><div class="test-title">returns count of active sessions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Session Security > getActiveSessionCount</div><div class="test-title">returns 0 when no active sessions</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-146" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\user\password\__tests__\route.test.ts</div><div class="suite-time">4.096s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/user/password > Rate limiting</div><div class="test-title">returns 429 when rate limit exceeded</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/user/password > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/user/password > Authentication</div><div class="test-title">returns 404 when user not found</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/user/password > Validation</div><div class="test-title">returns 400 when oldPassword is missing</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/user/password > Validation</div><div class="test-title">returns 400 when newPassword is too short</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/user/password > Validation</div><div class="test-title">returns 400 when newPassword has no uppercase</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/user/password > Validation</div><div class="test-title">returns 400 when passwords do not match</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/user/password > Password verification</div><div class="test-title">returns 400 when old password is incorrect</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/user/password > Password verification</div><div class="test-title">returns 400 when new password is same as old</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/user/password > Successful password change</div><div class="test-title">changes password successfully</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/user/password > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div></div></details><details id="suite-147" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useCategories.test.ts</div><div class="suite-time warn">5.256s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCategories</div><div class="test-title">initializes with loading state</div><div class="test-status">passed</div><div class="test-duration">0.089s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCategories</div><div class="test-title">fetches categories successfully</div><div class="test-status">passed</div><div class="test-duration">0.104s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCategories</div><div class="test-title">handles Error objects</div><div class="test-status">passed</div><div class="test-duration">0.138s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCategories</div><div class="test-title">handles non-Error objects</div><div class="test-status">passed</div><div class="test-duration">0.114s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCategories</div><div class="test-title">passes includeProductCount to API</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCategories</div><div class="test-title">defaults includeProductCount to false</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCategories</div><div class="test-title">re-fetches when includeProductCount changes</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCategories</div><div class="test-title">returns empty array when API returns empty</div><div class="test-status">passed</div><div class="test-duration">0.137s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useCategories</div><div class="test-title">clears error on successful re-fetch</div><div class="test-status">passed</div><div class="test-duration">0.282s</div></div></div></div></details><details id="suite-148" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\logging\__tests__\requestContext.test.ts</div><div class="suite-time warn">5.706s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">extractRequestMetadata</div><div class="test-title">should extract metadata from request</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">extractRequestMetadata</div><div class="test-title">should use x-request-id header if present</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">extractRequestMetadata</div><div class="test-title">should use x-correlation-id header if present</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">extractRequestMetadata</div><div class="test-title">should prefer x-request-id over x-correlation-id</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">extractRequestMetadata</div><div class="test-title">should extract IP from x-real-ip if x-forwarded-for not present</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">extractRequestMetadata</div><div class="test-title">should extract first IP from x-forwarded-for list</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">extractRequestMetadata</div><div class="test-title">should include userId if provided</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">createRequestLogger</div><div class="test-title">should create a Logger instance</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">createRequestLogger</div><div class="test-title">should create logger with user ID context</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withRequestLogging</div><div class="test-title">should wrap handler and return a function</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withRequestLogging</div><div class="test-title">should call handler with request and logger</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withRequestLogging</div><div class="test-title">should return the handler response</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withRequestLogging</div><div class="test-title">should rethrow errors from handler</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">addCorrelationHeaders</div><div class="test-title">should add x-request-id header to response</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">addCorrelationHeaders</div><div class="test-title">should preserve original response status and body</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withCorrelation</div><div class="test-title">should wrap handler and return a function</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withCorrelation</div><div class="test-title">should call handler with request and requestId</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withCorrelation</div><div class="test-title">should use existing request ID from header</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withCorrelation</div><div class="test-title">should add correlation headers to response</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withRequestContext</div><div class="test-title">should wrap handler and return a function</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withRequestContext</div><div class="test-title">should call handler with request and context object</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withRequestContext</div><div class="test-title">should add correlation headers to response</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withRequestContext</div><div class="test-title">should rethrow errors from handler</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-149" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useProductActions.test.ts</div><div class="suite-time warn">5.592s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToCart</div><div class="test-title">dispatches addItemToCart with default quantity of 1</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToCart</div><div class="test-title">dispatches addItemToCart with custom quantity</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToCart</div><div class="test-title">tracks addToCart event</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToCart</div><div class="test-title">shows success toast</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToWishlist</div><div class="test-title">dispatches addItemToWishlistOptimistic</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToWishlist</div><div class="test-title">tracks addToWishlist event</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToWishlist</div><div class="test-title">shows success toast</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > showQuickView</div><div class="test-title">dispatches updateQuickView and opens modal</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > viewDetails</div><div class="test-title">dispatches updateProductDetails</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > viewDetails</div><div class="test-title">tracks productView event</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActions > addToCompare</div><div class="test-title">shows info toast for coming soon</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActionsWithoutToast</div><div class="test-title">addToCart dispatches without toast</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActionsWithoutToast</div><div class="test-title">addToWishlist dispatches without toast</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActionsWithoutToast</div><div class="test-title">showQuickView works without toast</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useProductActionsWithoutToast</div><div class="test-title">viewDetails works without toast</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-150" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\errors\__tests__\error-recovery.test.ts</div><div class="suite-time">4.072s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRecoveryActions > network errors</div><div class="test-title">should return try again and go home actions</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRecoveryActions > network errors</div><div class="test-title">should use provided onRetry handler</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRecoveryActions > server errors</div><div class="test-title">should return try again and go home actions</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRecoveryActions > authentication errors</div><div class="test-title">should return sign in and go home actions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRecoveryActions > authentication errors</div><div class="test-title">should use provided onSignIn handler</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRecoveryActions > authorization errors</div><div class="test-title">should return go back and go home actions</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRecoveryActions > not found errors</div><div class="test-title">should return go back and go home actions</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRecoveryActions > not found errors</div><div class="test-title">should use provided onGoBack handler</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRecoveryActions > validation errors</div><div class="test-title">should return only fix errors action</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRecoveryActions > payment errors</div><div class="test-title">should return try again action</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRecoveryActions > payment errors</div><div class="test-title">should include change payment option when handler provided</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRecoveryActions > unknown errors</div><div class="test-title">should return try again and go home actions</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">isRetryable</div><div class="test-title">should return true for network errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">isRetryable</div><div class="test-title">should return true for server errors</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">isRetryable</div><div class="test-title">should return true for rate limit errors</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">isRetryable</div><div class="test-title">should return true for payment errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">isRetryable</div><div class="test-title">should return true for unknown errors</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">isRetryable</div><div class="test-title">should return false for validation errors</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">isRetryable</div><div class="test-title">should return false for authentication errors</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">isRetryable</div><div class="test-title">should return false for authorization errors</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">isRetryable</div><div class="test-title">should return false for not found errors</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRetryDelay</div><div class="test-title">should return 5000ms for rate limit errors</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRetryDelay</div><div class="test-title">should return 2000ms for server errors</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRetryDelay</div><div class="test-title">should return 1000ms for network errors</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRetryDelay</div><div class="test-title">should return 0ms for payment errors</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRetryDelay</div><div class="test-title">should apply exponential backoff</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRetryDelay</div><div class="test-title">should cap at 30 seconds</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getRetryDelay</div><div class="test-title">should return default 1000ms for types without specific delay</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withRetry</div><div class="test-title">should return result on success</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withRetry</div><div class="test-title">should retry on failure and succeed</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withRetry</div><div class="test-title">should throw after max attempts</div><div class="test-status">passed</div><div class="test-duration">0.121s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withRetry</div><div class="test-title">should call onError callback on each failure</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div></div></details><details id="suite-151" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\workflows\[id]\__tests__\route.test.ts</div><div class="suite-time warn">7.259s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows/[id] > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.069s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows/[id] > Authentication & Authorization</div><div class="test-title">returns 403 when user is not admin</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows/[id] > Validation</div><div class="test-title">returns 400 for invalid workflow ID</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows/[id] > Successful retrieval</div><div class="test-title">returns workflow with stats and executions</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows/[id] > Successful retrieval</div><div class="test-title">returns 404 when workflow not found</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/workflows/[id] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.112s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/workflows/[id] > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/workflows/[id] > Validation</div><div class="test-title">returns 400 for invalid workflow ID</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/workflows/[id] > Validation</div><div class="test-title">returns 404 when workflow not found</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/workflows/[id] > Validation</div><div class="test-title">returns 400 when trying to activate a draft workflow</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/workflows/[id] > Successful update</div><div class="test-title">updates workflow successfully</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PUT /api/admin/workflows/[id] > Successful update</div><div class="test-title">increments version when steps are updated</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/admin/workflows/[id] > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/admin/workflows/[id] > Validation</div><div class="test-title">returns 400 for invalid workflow ID</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/admin/workflows/[id] > Validation</div><div class="test-title">returns 400 when workflow has active executions</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/admin/workflows/[id] > Successful deletion</div><div class="test-title">deletes workflow successfully</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/admin/workflows/[id] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-152" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\hero\feature-cards\__tests__\route.test.ts</div><div class="suite-time warn">9.189s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > GET /api/admin/hero/feature-cards > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > GET /api/admin/hero/feature-cards > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > GET /api/admin/hero/feature-cards > Successful requests</div><div class="test-title">returns all feature cards for admin</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > GET /api/admin/hero/feature-cards > Successful requests</div><div class="test-title">sorts cards with top before bottom</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > GET /api/admin/hero/feature-cards > Successful requests</div><div class="test-title">returns empty array when no cards exist</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > GET /api/admin/hero/feature-cards > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.135s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > POST /api/admin/hero/feature-cards > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > POST /api/admin/hero/feature-cards > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > POST /api/admin/hero/feature-cards > Validation</div><div class="test-title">returns 400 when productId is missing</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > POST /api/admin/hero/feature-cards > Validation</div><div class="test-title">returns 400 when position is missing</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > POST /api/admin/hero/feature-cards > Validation</div><div class="test-title">returns 400 when position is invalid</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > POST /api/admin/hero/feature-cards > Validation</div><div class="test-title">returns 404 when product does not exist</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > POST /api/admin/hero/feature-cards > Validation</div><div class="test-title">returns 400 when position is already taken</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > POST /api/admin/hero/feature-cards > Successful creation</div><div class="test-title">creates feature card with required fields</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > POST /api/admin/hero/feature-cards > Successful creation</div><div class="test-title">creates feature card with all optional fields</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > POST /api/admin/hero/feature-cards > Successful creation</div><div class="test-title">allows creating both top and bottom cards</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/feature-cards > POST /api/admin/hero/feature-cards > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div></div></details><details id="suite-153" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\cart\__tests__\CartInitializer.test.tsx</div><div class="suite-time warn">5.015s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartInitializer > Loading state</div><div class="test-title">does nothing while session is loading</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartInitializer > Loading state</div><div class="test-title">renders null (no visible output)</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartInitializer > Unauthenticated user</div><div class="test-title">loads cart from cookie when available</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartInitializer > Unauthenticated user</div><div class="test-title">sets isAnonymous to true with empty cart when no cookie</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartInitializer > Unauthenticated user</div><div class="test-title">sets isAnonymous to true with empty cart when cookie is empty array</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartInitializer > Authenticated user</div><div class="test-title">logs fetch message for authenticated user</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartInitializer > Authenticated user</div><div class="test-title">does not read cart cookie for authenticated user</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartInitializer > Status transitions</div><div class="test-title">only initializes once per status</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div></div></details><details id="suite-154" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\products\search\__tests__\route.test.ts</div><div class="suite-time">4.628s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search > Query validation</div><div class="test-title">returns empty results when query is missing</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search > Query validation</div><div class="test-title">returns empty results when query is too short (1 character)</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search > Query validation</div><div class="test-title">accepts query with exactly 2 characters</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search > Successful search</div><div class="test-title">returns products matching title</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search > Successful search</div><div class="test-title">limits results to 10 items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search > Successful search</div><div class="test-title">sorts results by title ascending</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search > Result transformation</div><div class="test-title">calculates average rating correctly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search > Result transformation</div><div class="test-title">handles products with no reviews</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search > Result transformation</div><div class="test-title">uses thumbnailUrl when available</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search > Result transformation</div><div class="test-title">sets thumbnail to null when no images exist</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search > Rate limiting</div><div class="test-title">returns 429 when rate limit exceeded</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search > Performance tracking</div><div class="test-title">measures API performance on success</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.076s</div></div></div></div></details><details id="suite-155" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\segments\__tests__\route.test.ts</div><div class="suite-time warn">5.236s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/segments > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/segments > Authentication & Authorization</div><div class="test-title">returns 403 when user is not admin</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/segments > Successful retrieval</div><div class="test-title">returns all segments for admin</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/segments > Successful retrieval</div><div class="test-title">returns empty array when no segments exist</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/segments > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.065s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/segments > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/segments > Authentication & Authorization</div><div class="test-title">returns 403 when not admin</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/segments > Validation</div><div class="test-title">returns 400 for missing required fields</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/segments > Validation</div><div class="test-title">returns 400 for empty segment name</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/segments > Successful creation</div><div class="test-title">creates segment successfully</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/segments > Successful creation</div><div class="test-title">creates segment with multiple conditions</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/segments > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-156" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\validation-schemas.test.ts</div><div class="suite-time">4.555s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">validates a correct product</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">requires title</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">requires title to have at least 1 character</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">rejects title over 255 characters</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">requires price to be positive</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">requires discountedPrice to be positive</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">requires stock to be non-negative</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">allows stock to be zero</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">requires categoryId to be positive</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">validates image URLs</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">validates image type enum</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">allows optional description</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">allows optional images array</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">defaults stock to 0 when not provided</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > updateProductSchema</div><div class="test-title">allows partial updates</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > updateProductSchema</div><div class="test-title">allows empty object</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > updateProductSchema</div><div class="test-title">validates title when provided</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > updateProductSchema</div><div class="test-title">validates price when provided</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createCategorySchema</div><div class="test-title">validates a correct category</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createCategorySchema</div><div class="test-title">requires title</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createCategorySchema</div><div class="test-title">validates imageUrl format</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createCategorySchema</div><div class="test-title">allows optional fields</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToCartSchema</div><div class="test-title">validates correct cart item</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToCartSchema</div><div class="test-title">coerces string productId to number</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToCartSchema</div><div class="test-title">coerces string quantity to number</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToCartSchema</div><div class="test-title">requires positive productId</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToCartSchema</div><div class="test-title">requires positive quantity</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToCartSchema</div><div class="test-title">requires integer quantity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > updateCartItemSchema</div><div class="test-title">validates correct quantity update</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > updateCartItemSchema</div><div class="test-title">rejects zero quantity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > updateCartItemSchema</div><div class="test-title">rejects negative quantity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToWishlistSchema</div><div class="test-title">validates correct wishlist item</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToWishlistSchema</div><div class="test-title">coerces string productId</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToWishlistSchema</div><div class="test-title">rejects non-positive productId</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signupSchema</div><div class="test-title">validates correct signup data</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signupSchema</div><div class="test-title">requires valid email</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signupSchema</div><div class="test-title">requires password minimum 6 characters</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signupSchema</div><div class="test-title">requires passwords to match</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signupSchema</div><div class="test-title">allows name to be optional</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signinSchema</div><div class="test-title">validates correct signin data</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signinSchema</div><div class="test-title">requires valid email</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signinSchema</div><div class="test-title">requires password</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > validateInput utility</div><div class="test-title">returns success true for valid input</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > validateInput utility</div><div class="test-title">returns success false with errors for invalid input</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > validateInput utility</div><div class="test-title">groups errors by field path</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > validateInput utility</div><div class="test-title">handles non-Zod errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > validateInput utility</div><div class="test-title">handles nested path errors</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-157" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\products\__tests__\route.test.ts</div><div class="suite-time warn">5.001s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > GET /api/admin/products > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > GET /api/admin/products > Authentication & Authorization</div><div class="test-title">returns 401 for session without email or id</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > GET /api/admin/products > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > GET /api/admin/products > Authentication & Authorization</div><div class="test-title">returns 404 when user not found</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > GET /api/admin/products > Successful requests</div><div class="test-title">returns products with pagination</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > GET /api/admin/products > Successful requests</div><div class="test-title">calculates average rating correctly</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > GET /api/admin/products > Successful requests</div><div class="test-title">respects pagination parameters</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > GET /api/admin/products > Successful requests</div><div class="test-title">filters by search term</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > GET /api/admin/products > Successful requests</div><div class="test-title">filters by low stock when lowStockOnly=true</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > GET /api/admin/products > Successful requests</div><div class="test-title">combines search and low stock filters</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > GET /api/admin/products > Successful requests</div><div class="test-title">includes reorderLevel in response</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > GET /api/admin/products > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.1s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > GET /api/admin/products > Error handling</div><div class="test-title">returns generic error for non-Error objects</div><div class="test-status">passed</div><div class="test-duration">0.056s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > POST /api/admin/products > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > POST /api/admin/products > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > POST /api/admin/products > Validation</div><div class="test-title">returns 400 when title is missing</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > POST /api/admin/products > Validation</div><div class="test-title">returns 400 when price is missing</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > POST /api/admin/products > Validation</div><div class="test-title">returns 400 when categoryId is missing</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > POST /api/admin/products > Successful creation</div><div class="test-title">creates product with required fields only</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > POST /api/admin/products > Successful creation</div><div class="test-title">creates product with all optional fields</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > POST /api/admin/products > Successful creation</div><div class="test-title">uses price as discountedPrice when not provided</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > POST /api/admin/products > Successful creation</div><div class="test-title">defaults stock to 0 when not provided</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > POST /api/admin/products > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/products > POST /api/admin/products > Error handling</div><div class="test-title">returns generic error for non-Error objects</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-158" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\metrics\database\__tests__\route.test.ts</div><div class="suite-time warn">5.056s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/metrics/database</div><div class="test-title">returns database metrics for admin users</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/metrics/database</div><div class="test-title">includes query metrics in response</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/metrics/database</div><div class="test-title">includes table statistics</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/metrics/database</div><div class="test-title">includes health status</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/metrics/database</div><div class="test-title">returns degraded status when average query time is high</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/metrics/database</div><div class="test-title">returns unhealthy status when critical queries exist</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/metrics/database</div><div class="test-title">includes top slowest queries</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/metrics/database</div><div class="test-title">truncates long queries in response</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/metrics/database</div><div class="test-title">includes query patterns in response</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/metrics/database</div><div class="test-title">includes timestamp in response</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/metrics/database</div><div class="test-title">fetches recent database errors</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/metrics/database</div><div class="test-title">fetches recent performance metrics</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/metrics/database</div><div class="test-title">handles database errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.067s</div></div></div></div></details><details id="suite-159" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\redux\features\__tests__\productDetails.test.ts</div><div class="suite-time">4.328s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > initial state</div><div class="test-title">returns the initial state</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > initial state</div><div class="test-title">has empty string values initially</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > initial state</div><div class="test-title">has zero number values initially</div><div class="test-status">passed</div><div class="test-duration">0.043s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > initial state</div><div class="test-title">has empty arrays initially</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > updateProductDetails</div><div class="test-title">updates product details with full product data</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > updateProductDetails</div><div class="test-title">replaces the entire product value</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > updateProductDetails</div><div class="test-title">overwrites existing product data</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > updateProductDetails</div><div class="test-title">handles product with optional fields</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > updateProductDetails</div><div class="test-title">preserves image arrays correctly</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > updateProductDetails</div><div class="test-title">handles product with no images</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > updateProductDetails</div><div class="test-title">handles decimal prices correctly</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > action creators</div><div class="test-title">creates updateProductDetails action with correct type</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > action creators</div><div class="test-title">includes product as payload</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > action creators</div><div class="test-title">creates updateProductDetails action (camelCase)</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > action creators</div><div class="test-title">creates resetProductDetails action</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > resetProductDetails</div><div class="test-title">resets to initial state</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > resetProductDetails</div><div class="test-title">clears all product data</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > selectors</div><div class="test-title">selectProductDetails returns the product</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > selectors</div><div class="test-title">selectProductDetailsId returns the product id</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > state immutability</div><div class="test-title">does not mutate the previous state</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > state immutability</div><div class="test-title">creates a new state object on update</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > edge cases</div><div class="test-title">handles product with zero values</div><div class="test-status">passed</div><div class="test-duration">0.072s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > edge cases</div><div class="test-title">handles product with very long title</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">product-details slice > edge cases</div><div class="test-title">handles product with many thumbnails</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-160" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\services\__tests__\product.service.test.ts</div><div class="suite-time">4.564s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getById</div><div class="test-title">returns product with all details when found</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getById</div><div class="test-title">returns null when product not found</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getById</div><div class="test-title">includes images ordered by order field</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getById</div><div class="test-title">includes reviews ordered by createdAt desc</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getProducts</div><div class="test-title">returns paginated products with default pagination</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getProducts</div><div class="test-title">applies custom pagination</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getProducts</div><div class="test-title">filters by categoryId</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getProducts</div><div class="test-title">filters by price range</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getProducts</div><div class="test-title">filters by minPrice only</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getProducts</div><div class="test-title">filters by maxPrice only</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getProducts</div><div class="test-title">filters by search term</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getProducts</div><div class="test-title">combines multiple filters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getProducts</div><div class="test-title">sorts by price ascending</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getProducts</div><div class="test-title">sorts by price descending</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getProducts</div><div class="test-title">sorts by title</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getProducts</div><div class="test-title">uses default sort by createdAt desc</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getProducts</div><div class="test-title">calculates totalPages correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getRelated</div><div class="test-title">returns related products from same category</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getRelated</div><div class="test-title">excludes current product from related products</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getRelated</div><div class="test-title">uses default limit of 4</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getRelated</div><div class="test-title">orders by createdAt desc</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > search</div><div class="test-title">searches products by title, description, and category</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > search</div><div class="test-title">returns empty array for query less than 2 characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > search</div><div class="test-title">returns empty array for empty query</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > search</div><div class="test-title">uses default limit of 10</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > search</div><div class="test-title">uses custom limit</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > search</div><div class="test-title">orders results by title ascending</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > search</div><div class="test-title">only includes first image per product</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > calculateAverageRating</div><div class="test-title">calculates correct average for multiple reviews</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > calculateAverageRating</div><div class="test-title">returns 0 for empty reviews</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > calculateAverageRating</div><div class="test-title">returns 0 for null reviews</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > calculateAverageRating</div><div class="test-title">returns 0 for undefined reviews</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > calculateAverageRating</div><div class="test-title">handles single review</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > calculateAverageRating</div><div class="test-title">rounds to one decimal place</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getPriceRange</div><div class="test-title">returns min and max prices</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getPriceRange</div><div class="test-title">returns 0 for min and max when no products</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > exists</div><div class="test-title">returns true when product exists</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > exists</div><div class="test-title">returns false when product does not exist</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getByIds</div><div class="test-title">returns products matching provided IDs</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getByIds</div><div class="test-title">returns empty array for empty IDs array</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getByIds</div><div class="test-title">includes category, images, and reviews</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ProductService > getByIds</div><div class="test-title">returns products in any order (not necessarily matching input order)</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-161" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx</div><div class="suite-time">4.794s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOTrend > rendering</div><div class="test-title">renders the component</div><div class="test-status">passed</div><div class="test-duration">0.205s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOTrend > rendering</div><div class="test-title">displays SLO name</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOTrend > rendering</div><div class="test-title">displays target value</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOTrend > rendering</div><div class="test-title">displays period label</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOTrend > rendering</div><div class="test-title">renders chart components</div><div class="test-status">passed</div><div class="test-duration">0.096s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOTrend > summary</div><div class="test-title">displays summary when provided</div><div class="test-status">passed</div><div class="test-duration">0.082s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOTrend > summary</div><div class="test-title">displays average value</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOTrend > summary</div><div class="test-title">hides summary in compact mode</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOTrend > loading state</div><div class="test-title">shows loading skeleton when loading</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOTrend > loading state</div><div class="test-title">does not show chart when loading</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOTrend > empty state</div><div class="test-title">shows empty message when no data</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOTrend > breach count styling</div><div class="test-title">applies green styling when no breaches</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLOTrend > breach count styling</div><div class="test-title">applies red styling when breaches exist</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div></div><div class="suite-consolelog"><div class="suite-consolelog-header">Console Log</div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12621:37)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx:44:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message">The tag <stop> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12613:37)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx:44:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message"><linearGradient /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12621:37)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx:44:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message">The tag <linearGradient> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12621:37)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx:44:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message">The tag <defs> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12613:37)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx:56:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message"><linearGradient /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12613:37)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx:68:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message"><linearGradient /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12613:37)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx:80:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message"><linearGradient /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12613:37)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx:93:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message"><linearGradient /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12613:37)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx:107:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message"><linearGradient /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12613:37)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx:124:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message"><linearGradient /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12613:37)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx:137:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message"><linearGradient /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12613:37)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx:197:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message"><linearGradient /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.</pre></div><div class="suite-consolelog-item"><pre class="suite-consolelog-item-origin"> at console.error (C:\Users\me\Documents\Projects\elite_events_nextjs\jest.setup.ts:20:17)
at completeWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:12613:37)
at runWithFiberInDEV (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:874:13)
at completeUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17777:19)
at performUnitOfWork (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17658:11)
at workLoopSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17469:41)
at renderRootSync (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:17450:11)
at performWorkOnRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:16504:11)
at performWorkOnRootViaSchedulerTask (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react-dom\cjs\react-dom-client.development.js:18957:7)
at flushActQueue (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:590:34)
at process.env.NODE_ENV.exports.act (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\react\cjs\react.development.js:884:10)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\act-compat.js:47:25
at renderRoot (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:190:26)
at render (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\@testing-library\react\dist\pure.js:292:10)
at Object.<anonymous> (C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SLOTrend\__tests__\SLOTrend.test.tsx:211:13)
at Promise.finally.completed (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1557:28)
at new Promise (<anonymous>)
at callAsyncCircusFn (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1497:10)
at _callCircusTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1007:40)
at processTicksAndRejections (node:internal/process/task_queues:105:5)
at _runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:947:3)
at C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:849:7
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:862:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at _runTestsForDescribeBlock (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:857:11)
at run (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:761:3)
at runAndTransformResultsToJestFormat (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\jestAdapterInit.js:1918:21)
at jestAdapter (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-circus\build\runner.js:101:19)
at runTestInternal (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:275:16)
at runTest (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:343:7)
at Object.worker (C:\Users\me\Documents\Projects\elite_events_nextjs\node_modules\jest-runner\build\testWorker.js:497:12)</pre><pre class="suite-consolelog-item-message"><linearGradient /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.</pre></div></div></details><details id="suite-162" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\hero\__tests__\route.test.ts</div><div class="suite-time">4.857s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/hero > GET /api/hero</div><div class="test-title">returns active carousel items, feature cards, and promo banners</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/hero > GET /api/hero</div><div class="test-title">returns carousel item with correct structure</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/hero > GET /api/hero</div><div class="test-title">returns feature card with correct structure</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/hero > GET /api/hero</div><div class="test-title">uses product title as headline when headline is null</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/hero > GET /api/hero</div><div class="test-title">calculates discount percentage when badgeText is null</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/hero > GET /api/hero</div><div class="test-title">returns null badgeText when no discount</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/hero > GET /api/hero</div><div class="test-title">sorts feature cards with top before bottom</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/hero > GET /api/hero</div><div class="test-title">returns empty arrays when no items exist</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/hero > GET /api/hero</div><div class="test-title">returns promo banner with correct structure</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/hero > GET /api/hero</div><div class="test-title">returns promo banner with custom ctaLink when no product</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/hero > GET /api/hero > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div></div></details><details id="suite-163" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\performance\PerformanceMetricCard\__tests__\PerformanceMetricCard.test.tsx</div><div class="suite-time warn">6.286s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > basic rendering</div><div class="test-title">renders title and value</div><div class="test-status">passed</div><div class="test-duration">0.24s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > basic rendering</div><div class="test-title">renders unit when provided</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > basic rendering</div><div class="test-title">renders subtitle when provided</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > basic rendering</div><div class="test-title">renders without subtitle</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > basic rendering</div><div class="test-title">renders numeric value</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > threshold-based colors</div><div class="test-title">shows green for values below good threshold</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > threshold-based colors</div><div class="test-title">shows yellow for values between good and warning thresholds</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > threshold-based colors</div><div class="test-title">shows red for values above warning threshold</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > threshold-based colors</div><div class="test-title">applies custom valueClassName over thresholds</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > icon</div><div class="test-title">renders icon when provided</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > trend indicator</div><div class="test-title">renders trend with up direction</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > trend indicator</div><div class="test-title">renders trend with down direction</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > trend indicator</div><div class="test-title">renders trend with stable direction</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > trend indicator</div><div class="test-title">applies positive color when isPositive is true</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > trend indicator</div><div class="test-title">applies negative color when isPositive is false</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > loading state</div><div class="test-title">renders skeleton when loading</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > loading state</div><div class="test-title">hides content when loading</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > className prop</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > className prop</div><div class="test-title">preserves default classes with custom className</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > accessibility</div><div class="test-title">has proper structure</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PerformanceMetricCard > accessibility</div><div class="test-title">shows aria-busy when loading</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-164" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\products\__tests__\route.test.ts</div><div class="suite-time warn">5.524s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products > Basic functionality</div><div class="test-title">returns paginated products</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products > Basic functionality</div><div class="test-title">supports pagination parameters</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products > Basic functionality</div><div class="test-title">handles empty results</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products > Filtering</div><div class="test-title">filters by category</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products > Filtering</div><div class="test-title">filters by price range</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products > Filtering</div><div class="test-title">filters by search query</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products > Sorting</div><div class="test-title">sorts by latest (default)</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products > Sorting</div><div class="test-title">sorts by bestseller (review count)</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products > Rate limiting</div><div class="test-title">returns 429 when rate limit exceeded</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.14s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products > Admin authorization</div><div class="test-title">returns 401 for unauthenticated users</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products > Admin authorization</div><div class="test-title">returns 403 for non-admin users</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products > Product creation</div><div class="test-title">creates product with valid data</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products > Product creation</div><div class="test-title">creates product with images</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products > Validation</div><div class="test-title">rejects missing title</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products > Validation</div><div class="test-title">rejects negative price</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/products > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-165" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\checkout\__tests__\route.test.ts</div><div class="suite-time warn">7.921s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/checkout > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/checkout > Authentication</div><div class="test-title">returns 401 for session without user id</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/checkout > Request Validation</div><div class="test-title">rejects missing shipping address</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/checkout > Request Validation</div><div class="test-title">rejects missing billing address</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/checkout > Request Validation</div><div class="test-title">rejects invalid shipping address - short street</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/checkout > Cart Validation</div><div class="test-title">returns 422 for empty cart</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/checkout > Inventory Validation</div><div class="test-title">returns 400 when product has insufficient stock</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/checkout > Successful Checkout</div><div class="test-title">returns 201 with order and payment details on success</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/checkout > Successful Checkout</div><div class="test-title">creates Stripe payment intent with correct amount</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/checkout > Error Handling</div><div class="test-title">returns 500 on database error during cart fetch</div><div class="test-status">passed</div><div class="test-duration">0.191s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/checkout > Error Handling</div><div class="test-title">returns 500 on database transaction error</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/checkout > Error Handling</div><div class="test-title">returns 500 on Stripe payment intent creation failure</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-166" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\forms\__tests__\validators.test.ts</div><div class="suite-time warn">6.471s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > email</div><div class="test-title">accepts valid email</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > email</div><div class="test-title">rejects empty email</div><div class="test-status">passed</div><div class="test-duration">0.101s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > email</div><div class="test-title">rejects invalid email</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > password</div><div class="test-title">accepts valid password</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > password</div><div class="test-title">rejects short password</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > password</div><div class="test-title">rejects password without uppercase</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > password</div><div class="test-title">rejects password without lowercase</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > password</div><div class="test-title">rejects password without number</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > phone</div><div class="test-title">accepts valid phone numbers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > phone</div><div class="test-title">accepts empty string (optional)</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > phone</div><div class="test-title">rejects invalid characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > name</div><div class="test-title">accepts valid names</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > name</div><div class="test-title">rejects empty name</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > name</div><div class="test-title">rejects name with invalid characters</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > address</div><div class="test-title">accepts valid address</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > address</div><div class="test-title">accepts zip code with extension</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > address</div><div class="test-title">rejects missing street</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > address</div><div class="test-title">rejects invalid zip code</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > price</div><div class="test-title">accepts valid prices</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > price</div><div class="test-title">rejects negative price</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > price</div><div class="test-title">rejects price exceeding maximum</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > quantity</div><div class="test-title">accepts valid quantities</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > quantity</div><div class="test-title">rejects negative quantity</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > quantity</div><div class="test-title">rejects non-integer quantity</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > url</div><div class="test-title">accepts valid URLs</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > url</div><div class="test-title">accepts empty string (optional)</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > url</div><div class="test-title">rejects invalid URLs</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > slug</div><div class="test-title">accepts valid slugs</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > slug</div><div class="test-title">rejects empty slug</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > slug</div><div class="test-title">rejects invalid slugs</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > rating</div><div class="test-title">accepts valid ratings</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > rating</div><div class="test-title">rejects rating below 1</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > rating</div><div class="test-title">rejects rating above 5</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validators > rating</div><div class="test-title">rejects non-integer rating</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > login</div><div class="test-title">accepts valid login data</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > login</div><div class="test-title">accepts optional rememberMe</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > login</div><div class="test-title">rejects missing email</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > login</div><div class="test-title">rejects missing password</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > register</div><div class="test-title">accepts valid registration data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > register</div><div class="test-title">rejects mismatched passwords</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > register</div><div class="test-title">rejects unaccepted terms</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > profile</div><div class="test-title">accepts valid profile data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > profile</div><div class="test-title">accepts empty phone</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > changePassword</div><div class="test-title">accepts valid password change</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > changePassword</div><div class="test-title">rejects same old and new password</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > changePassword</div><div class="test-title">rejects mismatched confirmation</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > contactForm</div><div class="test-title">accepts valid contact form data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > contactForm</div><div class="test-title">rejects short message</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > review</div><div class="test-title">accepts valid review data</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">schemas > review</div><div class="test-title">rejects invalid rating</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-167" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\logging\__tests__\clientLogger.test.ts</div><div class="suite-time warn">6.396s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > initialization</div><div class="test-title">should create a logger instance</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > initialization</div><div class="test-title">should generate a session ID</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > initialization</div><div class="test-title">should store session ID in sessionStorage</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > initialization</div><div class="test-title">should reuse existing session ID from sessionStorage</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > logging methods</div><div class="test-title">should have debug method</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > logging methods</div><div class="test-title">should have info method</div><div class="test-status">passed</div><div class="test-duration">0.072s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > logging methods</div><div class="test-title">should have warn method</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > logging methods</div><div class="test-title">should have error method</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > logging methods</div><div class="test-title">should add entries to buffer</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > logging methods</div><div class="test-title">should include data in log entry</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > specialized methods</div><div class="test-title">should log user actions</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > specialized methods</div><div class="test-title">should log page views</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > specialized methods</div><div class="test-title">should log metrics</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > specialized methods</div><div class="test-title">should log component errors</div><div class="test-status">passed</div><div class="test-duration">0.213s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > error handling</div><div class="test-title">should handle Error objects</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > error handling</div><div class="test-title">should handle error method with data</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > error handling</div><div class="test-title">should handle error method without error object</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > buffer management</div><div class="test-title">should flush buffer on error level</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > buffer management</div><div class="test-title">should flush when buffer reaches max size</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > buffer management</div><div class="test-title">should flush on timer interval</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > buffer management</div><div class="test-title">should not flush empty buffer</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > flush mechanism</div><div class="test-title">should use sendBeacon for flushing</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > flush mechanism</div><div class="test-title">should fall back to fetch if sendBeacon fails</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > flush mechanism</div><div class="test-title">should clear buffer after successful flush</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > configuration</div><div class="test-title">should accept custom configuration</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > configuration</div><div class="test-title">should update configuration via configure method</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > configuration</div><div class="test-title">should respect minLevel configuration</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > destroy</div><div class="test-title">should clear interval timer</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ClientLogger > destroy</div><div class="test-title">should flush remaining logs</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-168" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\database\__tests__\metrics.test.ts</div><div class="suite-time warn">5.313s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > trackSlowQuery</div><div class="test-title">tracks a query metric</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > trackSlowQuery</div><div class="test-title">tracks multiple query metrics</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > trackSlowQuery</div><div class="test-title">maintains max metrics limit</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > getQueryMetrics</div><div class="test-title">returns zero values when no metrics tracked</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > getQueryMetrics</div><div class="test-title">categorizes queries by duration thresholds</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > getQueryMetrics</div><div class="test-title">calculates average duration correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > getQueryMetrics</div><div class="test-title">returns top slowest queries sorted by duration</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > getQueryMetrics</div><div class="test-title">returns recent queries sorted by timestamp</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > getQueryMetrics</div><div class="test-title">analyzes query patterns</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > getMetricsSummary</div><div class="test-title">returns healthy status when no metrics</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > getMetricsSummary</div><div class="test-title">returns healthy status for fast queries</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > getMetricsSummary</div><div class="test-title">returns unhealthy status when average is too high</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > getMetricsSummary</div><div class="test-title">returns unhealthy status when too many slow queries</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > clearMetrics</div><div class="test-title">clears all tracked metrics</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Database Metrics > QUERY_THRESHOLDS</div><div class="test-title">has correct threshold values</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-169" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\auth\__tests__\resend-verification.test.ts</div><div class="suite-time warn">5.72s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/resend-verification > Successful requests</div><div class="test-title">resends verification email for unverified user</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/resend-verification > Successful requests</div><div class="test-title">generates new verification token</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/resend-verification > Successful requests</div><div class="test-title">returns same message for non-existent user (prevents email enumeration)</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/resend-verification > Already verified user</div><div class="test-title">returns error for already verified email</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/resend-verification > Validation errors</div><div class="test-title">rejects invalid email format</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/resend-verification > Validation errors</div><div class="test-title">rejects missing email</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/resend-verification > Validation errors</div><div class="test-title">rejects empty email</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/resend-verification > Email normalization</div><div class="test-title">converts email to lowercase for lookup</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/resend-verification > Rate limiting</div><div class="test-title">enforces strict rate limit (3 requests per hour)</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/resend-verification > Rate limiting</div><div class="test-title">includes rate limit headers</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/resend-verification > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.13s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/resend-verification > Error handling</div><div class="test-title">returns success even if email sending fails</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/resend-verification > Error handling</div><div class="test-title">returns 500 on update failure</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-170" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\auth\__tests__\account-lockout.test.ts</div><div class="suite-time warn">5.988s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > LOCKOUT_CONFIG</div><div class="test-title">has correct configuration values</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > LOCKOUT_CONFIG</div><div class="test-title">exports frozen config (as const)</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > isAccountLocked</div><div class="test-title">returns false when user has no lockout</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > isAccountLocked</div><div class="test-title">returns false when lockout has expired</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > isAccountLocked</div><div class="test-title">returns true when account is currently locked</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > isAccountLocked</div><div class="test-title">returns false when user not found</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > isAccountLocked</div><div class="test-title">unlocks account automatically when lockout expires</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > getRemainingLockoutTime</div><div class="test-title">returns remaining time in seconds</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > getRemainingLockoutTime</div><div class="test-title">returns null when user has no lockout</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > getRemainingLockoutTime</div><div class="test-title">returns null when lockout has expired</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > getRemainingLockoutTime</div><div class="test-title">returns null when user not found</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > getRemainingLockoutTime</div><div class="test-title">rounds up to nearest second</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > getRemainingLockoutTime</div><div class="test-title">handles exactly 1 second remaining</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > recordFailedLoginAttempt</div><div class="test-title">increments failed attempt count</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > recordFailedLoginAttempt</div><div class="test-title">locks account on 5th failed attempt</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > recordFailedLoginAttempt</div><div class="test-title">resets counter if enough time has passed</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > recordFailedLoginAttempt</div><div class="test-title">returns false when user not found</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > recordFailedLoginAttempt</div><div class="test-title">increments attempts on failed login when not at threshold</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > resetFailedLoginAttempts</div><div class="test-title">resets failed attempts and lockout</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > resetFailedLoginAttempts</div><div class="test-title">handles different user IDs</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > resetFailedLoginAttempts</div><div class="test-title">handles database errors</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > handleLoginAttempt</div><div class="test-title">returns neutral response when user does not exist</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > handleLoginAttempt</div><div class="test-title">returns locked status when account is already locked</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > handleLoginAttempt</div><div class="test-title">resets attempts on successful login</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > handleLoginAttempt</div><div class="test-title">normalizes email to lowercase</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">account-lockout > Integration scenarios</div><div class="test-title">handles automatic unlock after time passes</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-171" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\redux\__tests__\store.test.tsx</div><div class="suite-time warn">6.787s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Store Configuration</div><div class="test-title">should create store with correct reducers</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Store Configuration</div><div class="test-title">should have all required reducer keys</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Store Configuration</div><div class="test-title">should initialize with correct initial states</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Store Configuration</div><div class="test-title">should allow dispatching actions</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Store Configuration</div><div class="test-title">should have correct state shape</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Type Exports</div><div class="test-title">should export RootState type</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Type Exports</div><div class="test-title">should export AppDispatch type</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Custom Hooks > useAppSelector</div><div class="test-title">should select state from store</div><div class="test-status">passed</div><div class="test-duration">0.056s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Custom Hooks > useAppSelector</div><div class="test-title">should select nested state properties</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Custom Hooks > useAppSelector</div><div class="test-title">should work with derived selectors</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Custom Hooks > useAppDispatch</div><div class="test-title">should return dispatch function</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Custom Hooks > useAppDispatch</div><div class="test-title">should dispatch actions successfully</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Custom Hooks > useAppDispatch</div><div class="test-title">should have correct type</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Store Behavior</div><div class="test-title">should handle state updates correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Store Behavior</div><div class="test-title">should maintain state immutability</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Store Behavior</div><div class="test-title">should support subscribing to state changes</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Store Behavior</div><div class="test-title">should allow replacing reducer</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Integration</div><div class="test-title">should work with all reducers together</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Redux Store > Integration</div><div class="test-title">should handle concurrent dispatches</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-172" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\forms\__tests__\useForm.test.ts</div><div class="suite-time warn">5.826s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > initialization</div><div class="test-title">initializes with provided values</div><div class="test-status">passed</div><div class="test-duration">0.056s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > initialization</div><div class="test-title">initializes with empty errors and touched</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > initialization</div><div class="test-title">starts as not dirty</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > initialization</div><div class="test-title">starts as valid (no errors set yet)</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > setValue</div><div class="test-title">updates field value</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > setValue</div><div class="test-title">marks form as dirty when value changes</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > setTouched</div><div class="test-title">marks field as touched</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > setTouched</div><div class="test-title">validates field on blur when validateOnBlur is true</div><div class="test-status">passed</div><div class="test-duration">0.117s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > setError</div><div class="test-title">sets field error manually</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > setError</div><div class="test-title">clears field error when set to null</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > validateField</div><div class="test-title">returns null for valid field</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > validateField</div><div class="test-title">returns error message for invalid field</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > validateForm</div><div class="test-title">returns true for valid form</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > validateForm</div><div class="test-title">returns false and sets errors for invalid form</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > validateForm</div><div class="test-title">sets isValid to false after validation with errors</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > handleSubmit</div><div class="test-title">prevents default form event</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > handleSubmit</div><div class="test-title">calls onSubmit with values when valid</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > handleSubmit</div><div class="test-title">does not call onSubmit when invalid</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > handleSubmit</div><div class="test-title">marks all fields as touched on submit</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > handleSubmit</div><div class="test-title">sets isSubmitting to false after completion</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > resetForm</div><div class="test-title">resets values to initial values</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > resetForm</div><div class="test-title">clears errors and touched</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > resetForm</div><div class="test-title">resets isDirty to false</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > getFieldProps</div><div class="test-title">returns correct props for input binding</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > getFieldProps</div><div class="test-title">returns aria-invalid true when field has error and is touched</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > getFieldState</div><div class="test-title">returns complete field state</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > getFieldState</div><div class="test-title">returns untouched state for new fields</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > callbacks</div><div class="test-title">calls onSubmitSuccess on successful submission</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useForm > callbacks</div><div class="test-title">calls onSubmitError on submission error</div><div class="test-status">passed</div><div class="test-duration">0.067s</div></div></div></div></details><details id="suite-173" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\seo\__tests__\json-ld-schemas.test.ts</div><div class="suite-time warn">5.171s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateProductSchema</div><div class="test-title">should generate valid Product schema</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateProductSchema</div><div class="test-title">should include product name</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateProductSchema</div><div class="test-title">should include product description</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateProductSchema</div><div class="test-title">should include SKU</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateProductSchema</div><div class="test-title">should include brand</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateProductSchema</div><div class="test-title">should include offer with discounted price</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateProductSchema</div><div class="test-title">should include availability for in-stock product</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateProductSchema</div><div class="test-title">should include out-of-stock availability</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateProductSchema</div><div class="test-title">should include aggregate rating when reviews exist</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateProductSchema</div><div class="test-title">should not include aggregate rating when no reviews</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateProductSchema</div><div class="test-title">should include images array</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateOrganizationSchema</div><div class="test-title">should generate valid Organization schema</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateOrganizationSchema</div><div class="test-title">should include organization name</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateOrganizationSchema</div><div class="test-title">should include organization URL</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateOrganizationSchema</div><div class="test-title">should include logo</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateOrganizationSchema</div><div class="test-title">should include contact point</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateOrganizationSchema</div><div class="test-title">should include social links</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateWebsiteSchema</div><div class="test-title">should generate valid WebSite schema</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateWebsiteSchema</div><div class="test-title">should include website name</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateWebsiteSchema</div><div class="test-title">should include search action</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateWebsiteSchema</div><div class="test-title">should include search URL template</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateBreadcrumbSchema</div><div class="test-title">should generate valid BreadcrumbList schema</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateBreadcrumbSchema</div><div class="test-title">should include correct number of items</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateBreadcrumbSchema</div><div class="test-title">should include correct positions</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateBreadcrumbSchema</div><div class="test-title">should include item names</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateBreadcrumbSchema</div><div class="test-title">should include absolute URLs</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateFAQSchema</div><div class="test-title">should generate valid FAQPage schema</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateFAQSchema</div><div class="test-title">should include correct number of questions</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateFAQSchema</div><div class="test-title">should include questions with correct type</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateFAQSchema</div><div class="test-title">should include answers with correct type</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateFAQSchema</div><div class="test-title">should include question text</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateFAQSchema</div><div class="test-title">should include answer text</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateCollectionPageSchema</div><div class="test-title">should generate valid CollectionPage schema</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateCollectionPageSchema</div><div class="test-title">should include collection name</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateCollectionPageSchema</div><div class="test-title">should include description</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateCollectionPageSchema</div><div class="test-title">should include item list when product URLs provided</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > generateCollectionPageSchema</div><div class="test-title">should not include item list when no product URLs</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > combineSchemas</div><div class="test-title">should combine multiple schemas into array</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">JSON-LD Schema Generators > combineSchemas</div><div class="test-title">should preserve individual schema types</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-174" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\admin\monitoring\errors\__tests__\page.test.tsx</div><div class="suite-time warn">5.637s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > rendering</div><div class="test-title">renders the page title</div><div class="test-status">passed</div><div class="test-duration">0.126s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > rendering</div><div class="test-title">renders ErrorDashboard component</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > rendering</div><div class="test-title">has correct page layout with padding</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > data fetching</div><div class="test-title">fetches total error count</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > data fetching</div><div class="test-title">fetches errors for today</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > data fetching</div><div class="test-title">fetches open errors count</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > data fetching</div><div class="test-title">fetches errors grouped by category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > data fetching</div><div class="test-title">fetches top 10 open errors</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > data fetching</div><div class="test-title">limits errorsByCategory to last 7 days</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > stats passed to ErrorDashboard</div><div class="test-title">passes totalErrors to ErrorDashboard</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > stats passed to ErrorDashboard</div><div class="test-title">passes errorsToday to ErrorDashboard</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > stats passed to ErrorDashboard</div><div class="test-title">passes openErrors to ErrorDashboard</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > stats passed to ErrorDashboard</div><div class="test-title">passes errorsByCategory to ErrorDashboard</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > stats passed to ErrorDashboard</div><div class="test-title">passes topErrors with ISO string lastSeen</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > edge cases</div><div class="test-title">handles zero errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ErrorMonitoringPage > edge cases</div><div class="test-title">handles large numbers</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorStats helper (integration)</div><div class="test-title">runs all queries in parallel using Promise.all</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorStats helper (integration)</div><div class="test-title">converts Date objects to ISO strings for serialization</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div></div></details><details id="suite-175" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\monitoring\__tests__\clientErrorCapture.test.ts</div><div class="suite-time warn">5.145s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > initialization</div><div class="test-title">sets up window.onerror handler</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > initialization</div><div class="test-title">sets up unhandled rejection handler</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > window.onerror handler</div><div class="test-title">reports error to API endpoint</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > window.onerror handler</div><div class="test-title">includes error message in report</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > window.onerror handler</div><div class="test-title">includes stack trace if Error object provided</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > window.onerror handler</div><div class="test-title">includes URL in report</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > window.onerror handler</div><div class="test-title">includes user agent in report</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > window.onerror handler</div><div class="test-title">includes timestamp in report</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > window.onerror handler</div><div class="test-title">includes metadata with source, lineno, colno</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > window.onerror handler</div><div class="test-title">returns false to allow default error handling</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > window.onerror handler</div><div class="test-title">handles missing Error object gracefully</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > unhandled promise rejection handler</div><div class="test-title">sets up onunhandledrejection handler</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > unhandled promise rejection handler</div><div class="test-title">reports rejection with error reason</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > unhandled promise rejection handler</div><div class="test-title">uses default message when reason has no message</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > unhandled promise rejection handler</div><div class="test-title">includes stack trace from reason</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > unhandled promise rejection handler</div><div class="test-title">includes metadata indicating unhandled rejection type</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">initClientErrorCapture > error reporting resilience</div><div class="test-title">does not throw when fetch fails</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-176" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\reviews\__tests__\route.test.ts</div><div class="suite-time">4.731s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/reviews > Product reviews</div><div class="test-title">returns reviews for a product</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/reviews > Product reviews</div><div class="test-title">supports pagination</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/reviews > Product reviews</div><div class="test-title">supports rating filter</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/reviews > Product reviews</div><div class="test-title">supports sorting</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/reviews > User reviews</div><div class="test-title">returns reviews by user</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/reviews > User reviews</div><div class="test-title">supports pagination for user reviews</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/reviews > Validation</div><div class="test-title">returns 400 when no productId or userId</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/reviews > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/reviews > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/reviews > Authentication</div><div class="test-title">returns 401 for session without email</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/reviews > Authentication</div><div class="test-title">returns 404 when user not found</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/reviews > Validation</div><div class="test-title">returns 400 when productId is missing</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/reviews > Validation</div><div class="test-title">returns 400 when rating is missing</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/reviews > Successful creation</div><div class="test-title">creates a review successfully</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/reviews > Successful creation</div><div class="test-title">creates a review without comment</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/reviews > Error handling</div><div class="test-title">returns 500 on create error</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div></div></details><details id="suite-177" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\support\tickets\__tests__\route.test.ts</div><div class="suite-time warn">5.307s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/support/tickets</div><div class="test-title">returns tickets list for authenticated user</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/support/tickets</div><div class="test-title">filters tickets by status</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/support/tickets</div><div class="test-title">filters tickets by priority</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/support/tickets</div><div class="test-title">supports pagination</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/support/tickets</div><div class="test-title">supports search by subject</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/support/tickets</div><div class="test-title">returns 401 for unauthenticated user</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/tickets</div><div class="test-title">creates a new ticket with valid data</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/tickets</div><div class="test-title">returns validation error for missing required fields</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/tickets</div><div class="test-title">returns validation error for invalid email</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/tickets</div><div class="test-title">creates ticket with optional orderId</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/tickets</div><div class="test-title">uses authenticated user ID when creating ticket</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/tickets</div><div class="test-title">creates ticket for unauthenticated user</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-178" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\categories\__tests__\route.test.ts</div><div class="suite-time">4.541s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Successful retrieval</div><div class="test-title">returns all categories with product counts</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Successful retrieval</div><div class="test-title">transforms categories correctly</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Successful retrieval</div><div class="test-title">includes children categories</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Successful retrieval</div><div class="test-title">handles categories without children</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Query parameters</div><div class="test-title">returns top-level categories by default (parentId = null)</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Query parameters</div><div class="test-title">filters by parentId to get children of specific category</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Query parameters</div><div class="test-title">parentOnly param is deprecated - same behavior as default</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Empty results</div><div class="test-title">handles empty categories gracefully</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Error handling</div><div class="test-title">returns 500 with error message on database error</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Error handling</div><div class="test-title">returns generic error for non-Error exceptions</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Error handling</div><div class="test-title">handles Prisma query errors</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Edge cases</div><div class="test-title">handles categories with null imageUrl</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Edge cases</div><div class="test-title">handles categories with zero products</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Edge cases</div><div class="test-title">handles deeply nested category structures</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Edge cases</div><div class="test-title">handles multiple parent categories</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Edge cases</div><div class="test-title">handles invalid parentId parameter</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Edge cases</div><div class="test-title">verifies correct sorting by title</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Edge cases</div><div class="test-title">verifies response includes HTTP cache headers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/categories > Edge cases</div><div class="test-title">handles children with null imageUrl</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-179" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\__tests__\security-headers.test.ts</div><div class="suite-time warn">5.348s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">adds X-Content-Type-Options header</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">adds X-Frame-Options header</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">adds X-XSS-Protection header</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">adds Referrer-Policy header</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">adds X-Permitted-Cross-Domain-Policies header</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">adds default Access-Control-Allow-Origin header</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">uses localhost as default origin when NEXTAUTH_URL not set</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">adds custom origin when provided</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">adds default Access-Control-Allow-Methods header</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">adds custom Access-Control-Allow-Methods when provided</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">adds default Access-Control-Allow-Headers header</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">adds custom Access-Control-Allow-Headers when provided</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">adds Access-Control-Allow-Credentials header</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">adds HSTS header in production with HTTPS origin</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">does not add HSTS header in development</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">does not add HSTS header for HTTP origin in production</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > addSecurityHeaders</div><div class="test-title">returns the same response object</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > jsonResponseWithHeaders</div><div class="test-title">returns JSON response with security headers</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > jsonResponseWithHeaders</div><div class="test-title">uses default status 200</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > jsonResponseWithHeaders</div><div class="test-title">uses custom status when provided</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > jsonResponseWithHeaders</div><div class="test-title">passes options to addSecurityHeaders</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > jsonResponseWithHeaders</div><div class="test-title">returns correct JSON data</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > errorResponseWithHeaders</div><div class="test-title">returns error response with security headers</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > errorResponseWithHeaders</div><div class="test-title">uses default status 500</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > errorResponseWithHeaders</div><div class="test-title">uses custom status when provided</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > errorResponseWithHeaders</div><div class="test-title">passes options to addSecurityHeaders</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > errorResponseWithHeaders</div><div class="test-title">returns correct error JSON</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > securityHeaders presets > public</div><div class="test-title">allows only GET and OPTIONS methods</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > securityHeaders presets > public</div><div class="test-title">includes all security headers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > securityHeaders presets > authenticated</div><div class="test-title">allows all standard methods</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > securityHeaders presets > authenticated</div><div class="test-title">allows standard authentication headers</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > securityHeaders presets > authenticated</div><div class="test-title">includes all security headers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > securityHeaders presets > admin</div><div class="test-title">allows all standard methods</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > securityHeaders presets > admin</div><div class="test-title">allows standard authentication headers</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Headers > securityHeaders presets > admin</div><div class="test-title">includes all security headers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-180" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\promotions\__tests__\validate-code.test.ts</div><div class="suite-time">4.756s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code > Request validation</div><div class="test-title">returns 400 when promo code is missing</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code > Request validation</div><div class="test-title">returns 400 when promo code is not a string</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code > Request validation</div><div class="test-title">returns 400 when cart is missing</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code > Request validation</div><div class="test-title">returns 400 when cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code > Request validation</div><div class="test-title">returns 400 when cart is not an array</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code > Promo code validation - success</div><div class="test-title">validates code successfully for guest user</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code > Promo code validation - success</div><div class="test-title">validates code successfully for authenticated user</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code > Promo code validation - success</div><div class="test-title">trims whitespace from promo code</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code > Promo code validation - failure</div><div class="test-title">returns error for invalid code</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code > Promo code validation - failure</div><div class="test-title">returns error for expired code</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code > Promo code validation - failure</div><div class="test-title">returns error for minimum not met</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code > Promo code validation - failure</div><div class="test-title">returns error for usage limit reached</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code > Error handling</div><div class="test-title">returns 500 on unexpected error</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div></div></details><details id="suite-181" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\SlowestRequestsTable\SlowestRequestsTable.test.tsx</div><div class="suite-time">4.845s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Rendering</div><div class="test-title">renders without crashing</div><div class="test-status">passed</div><div class="test-duration">0.201s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Rendering</div><div class="test-title">displays the table title</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Rendering</div><div class="test-title">displays request names</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Rendering</div><div class="test-title">displays type badges</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Rendering</div><div class="test-title">displays formatted durations</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Rendering</div><div class="test-title">displays HTTP method when available</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Rendering</div><div class="test-title">displays status code when available</div><div class="test-status">passed</div><div class="test-duration">0.064s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Rendering</div><div class="test-title">displays threshold info</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Loading State</div><div class="test-title">displays loading skeleton when isLoading is true</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Empty State</div><div class="test-title">displays empty message when no requests</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Max Rows</div><div class="test-title">limits displayed rows when maxRows is set</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Max Rows</div><div class="test-title">shows count message when rows are limited</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Metadata</div><div class="test-title">hides metadata by default</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SlowestRequestsTable > Metadata</div><div class="test-title">shows metadata when showMetadata is true</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div></div></details><details id="suite-182" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\affiliates\__tests__\route.test.ts</div><div class="suite-time warn">6.748s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliates API > GET /api/admin/affiliates</div><div class="test-title">should return 401 if user is not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliates API > GET /api/admin/affiliates</div><div class="test-title">should return 403 if user is not admin</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliates API > GET /api/admin/affiliates</div><div class="test-title">should return affiliates list for admin</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliates API > GET /api/admin/affiliates</div><div class="test-title">should filter by status</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliates API > GET /api/admin/affiliates</div><div class="test-title">should filter by tier</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliates API > GET /api/admin/affiliates</div><div class="test-title">should search by code</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliates API > POST /api/admin/affiliates</div><div class="test-title">should return 401 if not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliates API > POST /api/admin/affiliates</div><div class="test-title">should return 403 if not admin</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliates API > POST /api/admin/affiliates</div><div class="test-title">should create a new affiliate</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliates API > POST /api/admin/affiliates</div><div class="test-title">should return error if user already has affiliate account</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliates API > POST /api/admin/affiliates</div><div class="test-title">should validate commission rate</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-183" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\monitoring\errors\__tests__\route.test.ts</div><div class="suite-time warn">5.135s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > rate limiting</div><div class="test-title">allows requests under rate limit</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > rate limiting</div><div class="test-title">returns rate limit headers</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > rate limiting</div><div class="test-title">blocks requests exceeding rate limit</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > rate limiting</div><div class="test-title">includes retry-after header when rate limited</div><div class="test-status">passed</div><div class="test-duration">0.056s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > input validation</div><div class="test-title">rejects empty body</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > input validation</div><div class="test-title">rejects invalid JSON</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > input validation</div><div class="test-title">rejects unknown fields (strict mode)</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > input validation</div><div class="test-title">rejects message exceeding size limit</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > input validation</div><div class="test-title">rejects stack exceeding size limit</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > input validation</div><div class="test-title">rejects invalid UUID for errorId</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > input validation</div><div class="test-title">accepts valid UUID for errorId</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > origin verification</div><div class="test-title">allows requests with no origin header</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > origin verification</div><div class="test-title">allows requests from localhost in test/development</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > origin verification</div><div class="test-title">allows requests from configured app URL</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > data sanitization</div><div class="test-title">accepts valid payload and stores sanitized data</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > fingerprint generation</div><div class="test-title">generates consistent fingerprint for same error</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Reporting API > error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.073s</div></div></div></div></details><details id="suite-184" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\validation\__tests__\schemas.test.ts</div><div class="suite-time warn">6.066s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > idSchema</div><div class="test-title">should accept valid positive integers</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > idSchema</div><div class="test-title">should reject invalid IDs</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > optionalIdSchema</div><div class="test-title">should accept valid IDs, null, and undefined</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > uuidSchema</div><div class="test-title">should accept valid UUIDs</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > uuidSchema</div><div class="test-title">should reject invalid UUIDs</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > emailSchema</div><div class="test-title">should accept valid emails and normalize them</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > emailSchema</div><div class="test-title">should reject invalid emails</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > passwordSchema</div><div class="test-title">should accept valid passwords</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > passwordSchema</div><div class="test-title">should reject weak passwords</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > simplePasswordSchema</div><div class="test-title">should accept any non-empty password</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > simplePasswordSchema</div><div class="test-title">should reject empty passwords</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > nameSchema</div><div class="test-title">should accept valid names and trim whitespace</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > nameSchema</div><div class="test-title">should reject invalid names</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > phoneSchema</div><div class="test-title">should accept valid phone numbers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > phoneSchema</div><div class="test-title">should reject invalid phone numbers</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > urlSchema</div><div class="test-title">should accept valid URLs</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > urlSchema</div><div class="test-title">should reject invalid URLs</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > slugSchema</div><div class="test-title">should accept valid slugs</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Primitive Schemas > slugSchema</div><div class="test-title">should reject invalid slugs</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Pagination Schemas > paginationSchema</div><div class="test-title">should provide default values</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Pagination Schemas > paginationSchema</div><div class="test-title">should accept valid pagination params</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Pagination Schemas > paginationSchema</div><div class="test-title">should reject invalid limits</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Pagination Schemas > searchPaginationSchema</div><div class="test-title">should accept search query</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Pagination Schemas > searchPaginationSchema</div><div class="test-title">should reject too-long search queries</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Address Schemas > addressTypeSchema</div><div class="test-title">should accept valid address types</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Address Schemas > addressTypeSchema</div><div class="test-title">should reject invalid types</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Address Schemas > addressSchema</div><div class="test-title">should accept valid addresses</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Address Schemas > addressSchema</div><div class="test-title">should reject invalid addresses</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Address Schemas > fullAddressSchema</div><div class="test-title">should include type and isDefault</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Address Schemas > fullAddressSchema</div><div class="test-title">should default isDefault to false</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Monetary Schemas > priceSchema</div><div class="test-title">should accept positive numbers</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Monetary Schemas > priceSchema</div><div class="test-title">should reject non-positive values</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Monetary Schemas > nonNegativeSchema</div><div class="test-title">should accept zero and positive numbers</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Monetary Schemas > nonNegativeSchema</div><div class="test-title">should reject negative values</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Monetary Schemas > quantitySchema</div><div class="test-title">should accept positive integers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Monetary Schemas > quantitySchema</div><div class="test-title">should reject invalid quantities</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Date Schemas > dateSchema</div><div class="test-title">should coerce strings to dates</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Date Schemas > dateRangeSchema</div><div class="test-title">should accept valid date ranges</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Date Schemas > dateRangeSchema</div><div class="test-title">should reject invalid date ranges</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Date Schemas > dateRangeSchema</div><div class="test-title">should accept partial ranges</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Content Schemas > shortTextSchema</div><div class="test-title">should accept valid short text</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Content Schemas > shortTextSchema</div><div class="test-title">should trim whitespace</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Content Schemas > shortTextSchema</div><div class="test-title">should reject empty or too-long text</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Content Schemas > longTextSchema</div><div class="test-title">should accept longer content</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Content Schemas > longTextSchema</div><div class="test-title">should reject too-long content</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">File Schemas > fileMetadataSchema</div><div class="test-title">should accept valid file metadata</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">File Schemas > fileMetadataSchema</div><div class="test-title">should reject files that are too large</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-185" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\comparison\__tests__\route.test.ts</div><div class="suite-time warn">6.231s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/comparison > Validation</div><div class="test-title">returns 400 when productIds is missing</div><div class="test-status">passed</div><div class="test-duration">0.137s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/comparison > Validation</div><div class="test-title">returns 400 when no valid product IDs provided</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/comparison > Validation</div><div class="test-title">returns 400 when more than 5 products requested</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/comparison > Product retrieval</div><div class="test-title">returns 404 when no products found</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/comparison > Successful comparison</div><div class="test-title">returns comparison data for valid product IDs</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/comparison > Successful comparison</div><div class="test-title">parses comma-separated product IDs correctly</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/comparison > Successful comparison</div><div class="test-title">filters out invalid IDs from mixed input</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/comparison > Successful comparison</div><div class="test-title">returns sameCategory as false for different categories</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/comparison > Successful comparison</div><div class="test-title">handles single product comparison</div><div class="test-status">passed</div><div class="test-duration">0.056s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/comparison > Successful comparison</div><div class="test-title">handles maximum allowed products (5)</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/comparison > Error handling</div><div class="test-title">returns 500 with error message on service error</div><div class="test-status">passed</div><div class="test-duration">0.154s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/comparison > Error handling</div><div class="test-title">returns generic error for non-Error exceptions</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div></div></details><details id="suite-186" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\testimonials\[id]\__tests__\route.test.ts</div><div class="suite-time warn">6.183s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > GET /api/admin/testimonials/[id]</div><div class="test-title">returns a single testimonial by id</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > GET /api/admin/testimonials/[id]</div><div class="test-title">returns 400 for invalid id</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > GET /api/admin/testimonials/[id]</div><div class="test-title">returns 404 when testimonial not found</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > GET /api/admin/testimonials/[id]</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.119s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > PUT /api/admin/testimonials/[id]</div><div class="test-title">updates a testimonial successfully</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > PUT /api/admin/testimonials/[id]</div><div class="test-title">updates multiple fields at once</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > PUT /api/admin/testimonials/[id]</div><div class="test-title">returns 400 for invalid id</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > PUT /api/admin/testimonials/[id]</div><div class="test-title">returns 404 when testimonial not found</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > PUT /api/admin/testimonials/[id]</div><div class="test-title">returns 400 for validation errors</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > PUT /api/admin/testimonials/[id]</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > DELETE /api/admin/testimonials/[id]</div><div class="test-title">deletes a testimonial successfully</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > DELETE /api/admin/testimonials/[id]</div><div class="test-title">returns 400 for invalid id</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > DELETE /api/admin/testimonials/[id]</div><div class="test-title">returns 404 when testimonial not found</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > DELETE /api/admin/testimonials/[id]</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > PATCH /api/admin/testimonials/[id]</div><div class="test-title">toggles isActive from true to false</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > PATCH /api/admin/testimonials/[id]</div><div class="test-title">toggles isActive from false to true</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > PATCH /api/admin/testimonials/[id]</div><div class="test-title">returns 400 for invalid id</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > PATCH /api/admin/testimonials/[id]</div><div class="test-title">returns 404 when testimonial not found</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials/[id] > PATCH /api/admin/testimonials/[id]</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div></div></details><details id="suite-187" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\cart\__tests__\cart-merge.test.ts</div><div class="suite-time warn">7.387s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > mergeAnonymousCartToUser</div><div class="test-title">should add new items from anonymous cart</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > mergeAnonymousCartToUser</div><div class="test-title">should sum quantities for duplicate items</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > mergeAnonymousCartToUser</div><div class="test-title">should handle empty anonymous cart</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > mergeAnonymousCartToUser</div><div class="test-title">should handle empty user cart</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > mergeAnonymousCartToUser</div><div class="test-title">should handle multiple conflicts</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > mergeAnonymousCartToUser</div><div class="test-title">should not create conflicts for same quantities</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > mergeAnonymousCartToUser</div><div class="test-title">should generate appropriate message for merge</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > validateCartItems</div><div class="test-title">should validate correct cart items</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > validateCartItems</div><div class="test-title">should reject non-array input</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > validateCartItems</div><div class="test-title">should reject items without id</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > validateCartItems</div><div class="test-title">should reject items without quantity</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > validateCartItems</div><div class="test-title">should reject items with zero quantity</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > validateCartItems</div><div class="test-title">should reject items with negative quantity</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > transformDbCartToCartItems</div><div class="test-title">should transform database cart items to frontend format</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > transformDbCartToCartItems</div><div class="test-title">should handle products without images</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-merge > transformDbCartToCartItems</div><div class="test-title">should extract thumbnailUrl and url from images</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div></div></details><details id="suite-188" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\core\__tests__\utils.test.ts</div><div class="suite-time warn">5.646s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > cn (class name merger)</div><div class="test-title">merges multiple class strings</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > cn (class name merger)</div><div class="test-title">handles tailwind class conflicts by using later value</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > cn (class name merger)</div><div class="test-title">handles conditional classes</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > cn (class name merger)</div><div class="test-title">filters out falsy values</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > cn (class name merger)</div><div class="test-title">handles array of classes</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > cn (class name merger)</div><div class="test-title">handles empty input</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > cn (class name merger)</div><div class="test-title">merges complex tailwind patterns</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > formatCurrency</div><div class="test-title">formats USD currency by default</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > formatCurrency</div><div class="test-title">formats with different currencies</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > formatCurrency</div><div class="test-title">handles zero</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > formatCurrency</div><div class="test-title">handles negative values</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > formatCurrency</div><div class="test-title">handles large values</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > formatCurrency</div><div class="test-title">handles small decimal values</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate</div><div class="test-title">truncates text longer than length</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate</div><div class="test-title">does not truncate text shorter than length</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate</div><div class="test-title">does not truncate text equal to length</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate</div><div class="test-title">uses custom suffix</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate</div><div class="test-title">handles empty string</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate</div><div class="test-title">handles zero length</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate</div><div class="test-title">handles unicode characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > sleep</div><div class="test-title">resolves after specified time</div><div class="test-status">passed</div><div class="test-duration">0.093s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > sleep</div><div class="test-title">returns a promise</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > sleep</div><div class="test-title">resolves with undefined</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > sleep</div><div class="test-title">handles zero delay</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > formatCurrency edge cases</div><div class="test-title">handles different currency symbols correctly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > formatCurrency edge cases</div><div class="test-title">handles fractional cents</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > formatCurrency edge cases</div><div class="test-title">handles very large numbers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > formatCurrency edge cases</div><div class="test-title">handles Infinity</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > formatCurrency edge cases</div><div class="test-title">handles NaN</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate edge cases</div><div class="test-title">handles negative length</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate edge cases</div><div class="test-title">handles very long suffix</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate edge cases</div><div class="test-title">handles special characters</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate edge cases</div><div class="test-title">handles only whitespace that exceeds length</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate edge cases</div><div class="test-title">handles whitespace within length</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate edge cases</div><div class="test-title">handles multi-byte unicode correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > truncate edge cases</div><div class="test-title">preserves exact length text without suffix</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > cn edge cases</div><div class="test-title">handles objects with multiple keys</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > cn edge cases</div><div class="test-title">handles deeply nested structures</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > cn edge cases</div><div class="test-title">handles duplicate classes</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > cn edge cases</div><div class="test-title">handles very long class strings</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">utils > cn edge cases</div><div class="test-title">properly merges responsive classes</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-189" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\monitoring\client-logs\__tests__\route.test.ts</div><div class="suite-time warn">7.38s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > validation</div><div class="test-title">should reject requests without entries array</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > validation</div><div class="test-title">should reject requests with non-array entries</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > validation</div><div class="test-title">should reject requests with no valid entries</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > processing</div><div class="test-title">should accept valid log entries</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > processing</div><div class="test-title">should process multiple valid entries</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > processing</div><div class="test-title">should filter out invalid entries from batch</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > processing</div><div class="test-title">should limit batch size to prevent abuse</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > database storage</div><div class="test-title">should store error entries in database</div><div class="test-status">passed</div><div class="test-duration">0.084s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > database storage</div><div class="test-title">should store warn entries in database</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > database storage</div><div class="test-title">should not store info/debug entries in database</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > IP extraction</div><div class="test-title">should extract IP from x-forwarded-for header</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > IP extraction</div><div class="test-title">should extract IP from x-real-ip header</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > entry validation</div><div class="test-title">should validate log level</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > entry validation</div><div class="test-title">should require message field</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > entry validation</div><div class="test-title">should require timestamp field</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > entry validation</div><div class="test-title">should require url field</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/monitoring/client-logs > entry validation</div><div class="test-title">should require userAgent field</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-190" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\monitoring\__tests__\schemas.test.ts</div><div class="suite-time warn">6.389s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > valid payloads</div><div class="test-title">accepts minimal payload</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > valid payloads</div><div class="test-title">accepts full valid payload</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > valid payloads</div><div class="test-title">accepts payload with only message</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > size limits</div><div class="test-title">rejects message exceeding limit</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > size limits</div><div class="test-title">rejects stack exceeding limit</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > size limits</div><div class="test-title">rejects componentStack exceeding limit</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > size limits</div><div class="test-title">rejects url exceeding limit</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > size limits</div><div class="test-title">rejects userAgent exceeding limit</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > metadata validation</div><div class="test-title">accepts valid metadata</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > metadata validation</div><div class="test-title">rejects metadata with too many keys</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > metadata validation</div><div class="test-title">rejects metadata with string value exceeding limit</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > strict mode</div><div class="test-title">rejects unknown fields</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > errorId validation</div><div class="test-title">accepts valid UUID</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clientErrorSchema > errorId validation</div><div class="test-title">rejects invalid UUID</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errorResolveSchema</div><div class="test-title">accepts valid resolve payload</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errorResolveSchema</div><div class="test-title">accepts payload with resolution note</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errorResolveSchema</div><div class="test-title">rejects empty fingerprint</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">errorResolveSchema</div><div class="test-title">rejects invalid status</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">bulkErrorResolveSchema</div><div class="test-title">accepts valid bulk resolve payload</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">bulkErrorResolveSchema</div><div class="test-title">rejects empty fingerprints array</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">bulkErrorResolveSchema</div><div class="test-title">rejects too many fingerprints</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">bulkErrorResolveSchema</div><div class="test-title">rejects unresolved status in bulk</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-191" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\TraceWaterfall\__tests__\TraceWaterfall.test.tsx</div><div class="suite-time warn">6.325s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceWaterfall > rendering</div><div class="test-title">renders trace information</div><div class="test-status">passed</div><div class="test-duration">0.184s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceWaterfall > rendering</div><div class="test-title">renders span list</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceWaterfall > rendering</div><div class="test-title">renders loading state</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceWaterfall > rendering</div><div class="test-title">renders trace status badge</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceWaterfall > rendering</div><div class="test-title">renders trace duration</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceWaterfall > stats</div><div class="test-title">renders statistics when provided</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceWaterfall > stats</div><div class="test-title">does not render stats section when not provided</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceWaterfall > span selection</div><div class="test-title">calls onSelectSpan when span is clicked</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceWaterfall > span selection</div><div class="test-title">shows span detail panel when span is selected</div><div class="test-status">passed</div><div class="test-duration">0.269s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceWaterfall > span selection</div><div class="test-title">shows events in detail panel</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceWaterfall > error trace</div><div class="test-title">renders error status</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceWaterfall > span depth</div><div class="test-title">renders nested spans with indentation indicator</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceWaterfall > span kinds</div><div class="test-title">displays span kind badges</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div></div></details><details id="suite-192" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\observability\__tests__\web-vitals.test.ts</div><div class="suite-time warn">5.481s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWebVitalRating > LCP thresholds</div><div class="test-title">returns "good" for LCP <= 2500ms</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWebVitalRating > LCP thresholds</div><div class="test-title">returns "needs-improvement" for LCP > 2500ms and <= 4000ms</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWebVitalRating > LCP thresholds</div><div class="test-title">returns "poor" for LCP > 4000ms</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWebVitalRating > CLS thresholds</div><div class="test-title">returns "good" for CLS <= 0.1</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWebVitalRating > CLS thresholds</div><div class="test-title">returns "needs-improvement" for CLS > 0.1 and <= 0.25</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWebVitalRating > CLS thresholds</div><div class="test-title">returns "poor" for CLS > 0.25</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWebVitalRating > INP thresholds</div><div class="test-title">returns "good" for INP <= 200ms</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWebVitalRating > INP thresholds</div><div class="test-title">returns "needs-improvement" for INP > 200ms and <= 500ms</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWebVitalRating > INP thresholds</div><div class="test-title">returns "poor" for INP > 500ms</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > calculatePercentile</div><div class="test-title">returns 0 for empty array</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > calculatePercentile</div><div class="test-title">returns correct p50 for sorted array</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > calculatePercentile</div><div class="test-title">returns correct p75 for sorted array</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > calculatePercentile</div><div class="test-title">returns correct p95 for sorted array</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > calculatePercentile</div><div class="test-title">returns correct percentile for single value</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > calculateWebVitalStats</div><div class="test-title">returns zero stats for empty array</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > calculateWebVitalStats</div><div class="test-title">calculates correct percentiles</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > calculateWebVitalStats</div><div class="test-title">counts ratings correctly for LCP</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > calculateWebVitalStats</div><div class="test-title">determines overall rating based on p75</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > calculateWebVitalStats</div><div class="test-title">includes correct label and unit</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > formatWebVitalValue</div><div class="test-title">formats LCP values in milliseconds</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > formatWebVitalValue</div><div class="test-title">formats CLS values with 2 decimal places</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > formatWebVitalValue</div><div class="test-title">formats other vitals in milliseconds</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRatingColorClass</div><div class="test-title">returns green classes for good rating</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRatingColorClass</div><div class="test-title">returns yellow classes for needs-improvement rating</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRatingColorClass</div><div class="test-title">returns red classes for poor rating</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRatingLabel</div><div class="test-title">returns correct labels</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWorstMetric</div><div class="test-title">returns undefined for empty metrics</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWorstMetric</div><div class="test-title">returns undefined when all metrics are good</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWorstMetric</div><div class="test-title">returns poor metric over needs-improvement</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWorstMetric</div><div class="test-title">returns needs-improvement when no poor metrics</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWorstMetric</div><div class="test-title">prioritizes core vitals (LCP > CLS > INP)</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > normalizePagePath</div><div class="test-title">extracts path from full URL</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > normalizePagePath</div><div class="test-title">replaces numeric IDs with placeholder</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > normalizePagePath</div><div class="test-title">replaces UUIDs with placeholder</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > normalizePagePath</div><div class="test-title">replaces long alphanumeric IDs with placeholder</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > normalizePagePath</div><div class="test-title">returns original string for invalid URLs</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > WEB_VITALS_THRESHOLDS</div><div class="test-title">defines all required metrics</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > WEB_VITALS_THRESHOLDS</div><div class="test-title">has needsImprovement > good for all metrics</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div></div></details><details id="suite-193" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\wishlist\__tests__\route.test.ts</div><div class="suite-time warn">11.745s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/wishlist > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.081s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/wishlist > Authentication</div><div class="test-title">returns 401 for session without user</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/wishlist > Authentication</div><div class="test-title">returns 401 for session without user id</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/wishlist > Wishlist retrieval</div><div class="test-title">returns wishlist items for authenticated user</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/wishlist > Wishlist retrieval</div><div class="test-title">returns empty array for user with no wishlist items</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/wishlist > Wishlist retrieval</div><div class="test-title">handles products with no reviews correctly</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/wishlist > Wishlist retrieval</div><div class="test-title">uses image url when thumbnailUrl is not available</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/wishlist > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.182s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/wishlist > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.071s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/wishlist > Clear wishlist</div><div class="test-title">clears all wishlist items successfully</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/wishlist > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/wishlist > Validation</div><div class="test-title">rejects missing productId</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/wishlist > Validation</div><div class="test-title">rejects invalid productId (negative)</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/wishlist > Validation</div><div class="test-title">accepts string numbers (coercion)</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/wishlist > Product validation</div><div class="test-title">returns 404 when product does not exist</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/wishlist > Duplicate prevention</div><div class="test-title">returns 409 when product already in wishlist</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/wishlist > Adding to wishlist</div><div class="test-title">creates new wishlist item successfully</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/wishlist > Error handling</div><div class="test-title">returns 500 on database error during product lookup</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div></div></details><details id="suite-194" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\integrations\__tests__\email.test.ts</div><div class="suite-time">4.808s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendEmail</div><div class="test-title">should log email in development mode and return true</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendEmail</div><div class="test-title">should handle long HTML content in preview</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendEmail</div><div class="test-title">should handle optional text parameter</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendEmail</div><div class="test-title">should handle multiple recipients</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendEmail</div><div class="test-title">should use mock mode when RESEND_API_KEY is 'mock'</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendPasswordResetEmail</div><div class="test-title">should send password reset email</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendPasswordResetEmail</div><div class="test-title">should use configured base URL in reset link</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendPasswordResetEmail</div><div class="test-title">should use localhost as default base URL</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendVerificationEmail</div><div class="test-title">should send verification email</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendVerificationEmail</div><div class="test-title">should use configured base URL</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendAccountLockedEmail</div><div class="test-title">should send account locked email</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendAccountLockedEmail</div><div class="test-title">should format unlock time</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendPromotionAnnouncementEmail</div><div class="test-title">should send basic promotion email</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendPromotionAnnouncementEmail</div><div class="test-title">should handle promotion with all optional fields</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendFlashSaleAlertEmail</div><div class="test-title">should send flash sale email</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendFlashSaleAlertEmail</div><div class="test-title">should handle flash sale with headline</div><div class="test-status">passed</div><div class="test-duration">0.07s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendExpiringPromoReminderEmail</div><div class="test-title">should send expiring promo reminder</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendExpiringPromoReminderEmail</div><div class="test-title">should handle promotion with promo code</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendExpiringPromoReminderEmail</div><div class="test-title">should handle singular and plural hours</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendLoyaltyPointsEarnedEmail</div><div class="test-title">should send loyalty points earned email</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendLoyaltyPointsEarnedEmail</div><div class="test-title">should handle tier progression data</div><div class="test-status">passed</div><div class="test-duration">0.075s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendLoyaltyPointsEarnedEmail</div><div class="test-title">should format large numbers correctly</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendLoyaltyTierUpgradeEmail</div><div class="test-title">should send tier upgrade email</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendLoyaltyTierUpgradeEmail</div><div class="test-title">should handle different tier levels</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendReferralRewardEmail</div><div class="test-title">should send referral reward email for points</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendReferralRewardEmail</div><div class="test-title">should format credit reward correctly</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendReferralRewardEmail</div><div class="test-title">should format discount reward correctly</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendBirthdayOfferEmail</div><div class="test-title">should send birthday offer email</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendBirthdayOfferEmail</div><div class="test-title">should include user name in subject</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > sendBirthdayOfferEmail</div><div class="test-title">should handle different discount percentages</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > email template completeness</div><div class="test-title">should have all email functions return true in dev mode</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">email utility > email template completeness</div><div class="test-title">should log all emails with correct context</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-195" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useRealtimeMetrics.test.ts</div><div class="suite-time warn">6.774s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">useRealtimeMetrics > initialization</div><div class="test-title">starts with connecting status</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useRealtimeMetrics > initialization</div><div class="test-title">creates EventSource connection</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useRealtimeMetrics > initialization</div><div class="test-title">includes incident parameter when incidentMode is true</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useRealtimeMetrics > receiving data</div><div class="test-title">updates slos on slo_update event</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useRealtimeMetrics > receiving data</div><div class="test-title">updates metrics on metrics_update event</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useRealtimeMetrics > receiving data</div><div class="test-title">updates status to connected on connected event</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useRealtimeMetrics > receiving data</div><div class="test-title">updates lastUpdate timestamp on events</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useRealtimeMetrics > alerts</div><div class="test-title">calls onAlert callback when alert event received</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useRealtimeMetrics > disconnect and reconnect</div><div class="test-title">closes connection when disconnect is called</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useRealtimeMetrics > disconnect and reconnect</div><div class="test-title">reconnects when reconnect is called</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useRealtimeMetrics > status callback</div><div class="test-title">calls onStatusChange with connecting initially</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useRealtimeMetrics > status callback</div><div class="test-title">updates status to connected and calls onStatusChange via updateStatus</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useRealtimeMetrics > cleanup</div><div class="test-title">closes connection on unmount</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div></div></details><details id="suite-196" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useDebounce.test.ts</div><div class="suite-time warn">6.955s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDebounce > useDebounce hook</div><div class="test-title">returns initial value immediately</div><div class="test-status">passed</div><div class="test-duration">0.091s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDebounce > useDebounce hook</div><div class="test-title">does not update value before delay</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDebounce > useDebounce hook</div><div class="test-title">updates value after delay</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDebounce > useDebounce hook</div><div class="test-title">uses default delay of 500ms</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDebounce > useDebounce hook</div><div class="test-title">cancels previous timeout on rapid value changes</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDebounce > useDebounce hook</div><div class="test-title">works with different data types</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDebounce > useDebounce hook</div><div class="test-title">respects changing delay</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDebounce > useDebouncedCallback hook</div><div class="test-title">does not call callback immediately</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDebounce > useDebouncedCallback hook</div><div class="test-title">calls callback after delay</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDebounce > useDebouncedCallback hook</div><div class="test-title">passes arguments to callback</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDebounce > useDebouncedCallback hook</div><div class="test-title">debounces rapid invocations</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDebounce > useDebouncedCallback hook</div><div class="test-title">uses default delay of 500ms</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useDebounce > useDebouncedCallback hook</div><div class="test-title">cleans up timeout on unmount</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div></div></details><details id="suite-197" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\categories\[id]\__tests__\route.test.ts</div><div class="suite-time warn">6.554s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > GET /api/admin/categories/[id]</div><div class="test-title">returns category with children and product count</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > GET /api/admin/categories/[id]</div><div class="test-title">returns 404 when category not found</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > GET /api/admin/categories/[id]</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.089s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > PUT /api/admin/categories/[id] > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > PUT /api/admin/categories/[id] > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > PUT /api/admin/categories/[id] > Validation</div><div class="test-title">returns 400 when title is missing</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > PUT /api/admin/categories/[id] > Validation</div><div class="test-title">returns 400 when slug is missing</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > PUT /api/admin/categories/[id] > Successful updates</div><div class="test-title">updates category successfully</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > PUT /api/admin/categories/[id] > Successful updates</div><div class="test-title">updates category with all fields including parentId</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > PUT /api/admin/categories/[id] > Successful updates</div><div class="test-title">invalidates categories cache after update</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > PUT /api/admin/categories/[id] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > DELETE /api/admin/categories/[id] > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > DELETE /api/admin/categories/[id] > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > DELETE /api/admin/categories/[id] > Successful deletion</div><div class="test-title">deletes category successfully</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > DELETE /api/admin/categories/[id] > Successful deletion</div><div class="test-title">invalidates categories cache after deletion</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories/[id] > DELETE /api/admin/categories/[id] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-198" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\cache\__tests__\swr-cache.test.ts</div><div class="suite-time warn">5.686s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > getWithSWR</div><div class="test-title">should return fresh data from cache without revalidating</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > getWithSWR</div><div class="test-title">should return stale data and trigger background revalidation</div><div class="test-status">passed</div><div class="test-duration">0.138s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > getWithSWR</div><div class="test-title">should fetch fresh data when cache is empty</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > getWithSWR</div><div class="test-title">should fetch fresh data when cache is expired beyond maxStaleTime</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > getWithSWR</div><div class="test-title">should return stale data when fetch fails</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > getWithSWR</div><div class="test-title">should throw when fetch fails and no cache available</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > getWithSWR</div><div class="test-title">should call onSuccess callback on successful fetch</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > getWithSWR</div><div class="test-title">should call onError callback on fetch failure</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > SWRPresets</div><div class="test-title">should have frequent preset for rapidly changing data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > SWRPresets</div><div class="test-title">should have moderate preset for typical data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > SWRPresets</div><div class="test-title">should have static preset for rarely changing data</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > SWRPresets</div><div class="test-title">should have user preset for user-specific data</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > swrFetch</div><div class="test-title">should use moderate preset by default</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > invalidateSWR</div><div class="test-title">should delete the cache key</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > invalidateSWR</div><div class="test-title">should warm cache with fetcher if provided</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > prefetchSWR</div><div class="test-title">should fetch and cache data</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SWR Cache > prefetchSWR</div><div class="test-title">should use custom TTL if provided</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-199" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\audit-logger.test.ts</div><div class="suite-time warn">6.006s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > AuditAction enum</div><div class="test-title">has authentication actions</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > AuditAction enum</div><div class="test-title">has password actions</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > AuditAction enum</div><div class="test-title">has email actions</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > AuditAction enum</div><div class="test-title">has account security actions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > AuditAction enum</div><div class="test-title">has order actions</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > AuditAction enum</div><div class="test-title">has payment actions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > AuditAction enum</div><div class="test-title">has admin actions</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > AuditAction enum</div><div class="test-title">has profile actions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logAuditEvent</div><div class="test-title">creates audit log entry with all fields</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logAuditEvent</div><div class="test-title">extracts IP from x-forwarded-for header</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logAuditEvent</div><div class="test-title">falls back to x-real-ip header</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logAuditEvent</div><div class="test-title">handles missing request gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logAuditEvent</div><div class="test-title">handles undefined options</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logAuditEvent</div><div class="test-title">logs info on successful audit</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logAuditEvent</div><div class="test-title">handles database errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logLoginAttempt</div><div class="test-title">logs successful login</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logLoginAttempt</div><div class="test-title">logs failed login</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logLoginAttempt</div><div class="test-title">handles missing email</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logPasswordResetRequest</div><div class="test-title">logs password reset request</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logPasswordResetComplete</div><div class="test-title">logs password reset completion</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logAccountLocked</div><div class="test-title">logs account lockout with attempt count</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logOrderCreate</div><div class="test-title">logs order creation with total</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logPaymentEvent</div><div class="test-title">logs successful payment</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logPaymentEvent</div><div class="test-title">logs failed payment</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logPaymentEvent</div><div class="test-title">handles undefined request for webhook events</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logAdminAction</div><div class="test-title">logs admin action with details</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > logAdminAction</div><div class="test-title">logs admin action without resourceId</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > getUserAuditLogs</div><div class="test-title">returns audit logs for a user</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > getUserAuditLogs</div><div class="test-title">respects custom limit</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > getSecurityEvents</div><div class="test-title">returns security events with default filters</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > getSecurityEvents</div><div class="test-title">uses custom action filters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > getSecurityEvents</div><div class="test-title">respects custom limit</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > integration scenarios</div><div class="test-title">logs complete login flow</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > integration scenarios</div><div class="test-title">logs complete order flow</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">audit-logger > integration scenarios</div><div class="test-title">logs account lockout scenario</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-200" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\device-id.test.ts</div><div class="suite-time">3.75s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > getOrCreateDeviceId</div><div class="test-title">should create a new device ID if none exists</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > getOrCreateDeviceId</div><div class="test-title">should return existing device ID on subsequent calls</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > getOrCreateDeviceId</div><div class="test-title">should persist device ID in localStorage</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > getOrCreateDeviceId</div><div class="test-title">should generate unique IDs for different sessions</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > getOrCreateDeviceId</div><div class="test-title">should include timestamp in device ID</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > getOrCreateDeviceId</div><div class="test-title">should handle localStorage errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.067s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > resetDeviceId</div><div class="test-title">should remove device ID from localStorage</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > resetDeviceId</div><div class="test-title">should allow creating new ID after reset</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > hasDeviceId</div><div class="test-title">should return false when no device ID exists</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > hasDeviceId</div><div class="test-title">should return true when device ID exists</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > hasDeviceId</div><div class="test-title">should return false after reset</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > getDeviceInfo</div><div class="test-title">should return complete device information</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > getDeviceInfo</div><div class="test-title">should include browser information</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > getDeviceInfo</div><div class="test-title">should include timezone</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > getDeviceInfo</div><div class="test-title">should include screen resolution</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > getDeviceInfo</div><div class="test-title">should use consistent device ID</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > device fingerprinting</div><div class="test-title">should generate consistent fingerprint for same browser</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">device-id > device fingerprinting</div><div class="test-title">should include browser characteristics in fingerprint</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-201" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\testimonials\__tests__\route.test.ts</div><div class="suite-time warn">5.889s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > GET /api/admin/testimonials</div><div class="test-title">returns all testimonials including inactive</div><div class="test-status">passed</div><div class="test-duration">0.086s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > GET /api/admin/testimonials</div><div class="test-title">respects pagination parameters</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > GET /api/admin/testimonials</div><div class="test-title">caps limit at 100</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > GET /api/admin/testimonials</div><div class="test-title">returns pagination metadata</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > GET /api/admin/testimonials</div><div class="test-title">transforms testimonial data correctly</div><div class="test-status">passed</div><div class="test-duration">0.065s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > GET /api/admin/testimonials</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.073s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > POST /api/admin/testimonials</div><div class="test-title">creates a new testimonial with valid data</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > POST /api/admin/testimonials</div><div class="test-title">creates testimonial with isActive explicitly set to false</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > POST /api/admin/testimonials</div><div class="test-title">accepts valid URL for authorImage</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > POST /api/admin/testimonials</div><div class="test-title">returns 400 for review too short</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > POST /api/admin/testimonials</div><div class="test-title">returns 400 for author name too short</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > POST /api/admin/testimonials</div><div class="test-title">returns 400 for author role too short</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > POST /api/admin/testimonials</div><div class="test-title">returns 400 for invalid author image format</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > POST /api/admin/testimonials</div><div class="test-title">returns 400 for missing required fields</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Testimonials API - /api/admin/testimonials > POST /api/admin/testimonials</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div></div></details><details id="suite-202" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\orders\__tests__\[id].test.ts</div><div class="suite-time warn">5.609s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/orders/[id] > Authentication</div><div class="test-title">requires authentication</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/orders/[id] > Order retrieval</div><div class="test-title">returns order with items for authenticated user</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/orders/[id] > Order retrieval</div><div class="test-title">returns 404 for non-existent order</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/orders/[id] > Order retrieval</div><div class="test-title">returns 403 when accessing another user's order</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/orders/[id] > Order retrieval</div><div class="test-title">returns 400 for invalid order ID</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/orders/[id] > Order retrieval</div><div class="test-title">includes product details in order items</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/orders/[id] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.083s</div></div></div></div></details><details id="suite-203" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\products\filters\__tests__\route.test.ts</div><div class="suite-time warn">6.136s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/filters > Successful retrieval</div><div class="test-title">returns filter options successfully</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/filters > Successful retrieval</div><div class="test-title">returns categories in filter options</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/filters > Successful retrieval</div><div class="test-title">returns price range in filter options</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/filters > Successful retrieval</div><div class="test-title">returns ratings distribution</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/filters > Empty results</div><div class="test-title">handles empty filter options gracefully</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/filters > Error handling</div><div class="test-title">returns 500 on service error</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div></div></details><details id="suite-204" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\core\__tests__\slug.test.ts</div><div class="suite-time warn">6.235s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlug</div><div class="test-title">converts text to lowercase</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlug</div><div class="test-title">replaces spaces with hyphens</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlug</div><div class="test-title">removes special characters</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlug</div><div class="test-title">removes leading and trailing hyphens</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlug</div><div class="test-title">handles consecutive special characters</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlug</div><div class="test-title">handles numbers</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlug</div><div class="test-title">handles empty string</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlug</div><div class="test-title">handles string with only special characters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlug</div><div class="test-title">handles unicode characters</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlug</div><div class="test-title">handles real-world product names</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateUniqueSlug</div><div class="test-title">returns base slug if it does not exist</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateUniqueSlug</div><div class="test-title">appends counter if slug exists</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateUniqueSlug</div><div class="test-title">keeps incrementing until unique</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateUniqueSlug</div><div class="test-title">throws error after 1000 attempts</div><div class="test-status">passed</div><div class="test-duration">0.099s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlugWithDate</div><div class="test-title">generates slug with date prefix</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlugWithDate</div><div class="test-title">pads month and day with zeros</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlugWithDate</div><div class="test-title">uses current date by default</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > generateSlugWithDate</div><div class="test-title">handles end of year dates</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > isValidSlug</div><div class="test-title">returns true for valid slugs</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > isValidSlug</div><div class="test-title">returns false for slugs with uppercase</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > isValidSlug</div><div class="test-title">returns false for slugs with spaces</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > isValidSlug</div><div class="test-title">returns false for slugs with special characters</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > isValidSlug</div><div class="test-title">returns false for slugs starting or ending with hyphen</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > isValidSlug</div><div class="test-title">returns false for slugs with consecutive hyphens</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > isValidSlug</div><div class="test-title">returns false for empty string</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > extractSlugFromPath</div><div class="test-title">extracts slug from simple path</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > extractSlugFromPath</div><div class="test-title">extracts slug from path with trailing slash</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > extractSlugFromPath</div><div class="test-title">extracts slug from nested path</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > extractSlugFromPath</div><div class="test-title">handles path with just slug</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > extractSlugFromPath</div><div class="test-title">handles path without leading slash</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > extractSlugFromPath</div><div class="test-title">returns empty string for root path</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">slug utilities > extractSlugFromPath</div><div class="test-title">returns empty string for empty path</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div></div></details><details id="suite-205" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\promotions\validate-code\__tests__\route.test.ts</div><div class="suite-time warn">6.111s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code</div><div class="test-title">validates a promo code successfully</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code</div><div class="test-title">returns 400 when code is missing</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code</div><div class="test-title">returns 400 when code is not a string</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code</div><div class="test-title">returns 400 when cart is missing</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code</div><div class="test-title">returns 400 when cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code</div><div class="test-title">returns 400 when promo code is invalid</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code</div><div class="test-title">returns 400 when promo code has expired</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code</div><div class="test-title">trims whitespace from promo code</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code</div><div class="test-title">passes user ID when authenticated</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code</div><div class="test-title">includes free items in response</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code</div><div class="test-title">includes free shipping flag</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/validate-code</div><div class="test-title">returns 500 on unexpected error</div><div class="test-status">passed</div><div class="test-duration">0.074s</div></div></div></div></details><details id="suite-206" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\seo\__tests__\metadata-generators.test.ts</div><div class="suite-time warn">5.815s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > getAbsoluteUrl</div><div class="test-title">should return absolute URL for relative path</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > getAbsoluteUrl</div><div class="test-title">should handle paths without leading slash</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > getAbsoluteUrl</div><div class="test-title">should return URL unchanged if already absolute</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateProductMetadata</div><div class="test-title">should generate metadata with title</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateProductMetadata</div><div class="test-title">should generate metadata with description</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateProductMetadata</div><div class="test-title">should generate OpenGraph metadata</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateProductMetadata</div><div class="test-title">should generate Twitter Card metadata</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateProductMetadata</div><div class="test-title">should include price in other metadata</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateProductMetadata</div><div class="test-title">should handle product without discounted price</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateProductMetadata</div><div class="test-title">should handle product with no images</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateProductMetadata</div><div class="test-title">should truncate long titles</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateCategoryMetadata</div><div class="test-title">should generate metadata with formatted title</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateCategoryMetadata</div><div class="test-title">should generate metadata with description</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateCategoryMetadata</div><div class="test-title">should generate fallback description when none provided</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateCategoryMetadata</div><div class="test-title">should include category image in OpenGraph</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generatePageMetadata</div><div class="test-title">should generate metadata for home page</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generatePageMetadata</div><div class="test-title">should generate metadata for shop page</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generatePageMetadata</div><div class="test-title">should generate metadata for about page</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generatePageMetadata</div><div class="test-title">should allow custom title override</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generatePageMetadata</div><div class="test-title">should allow custom description override</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateRootMetadata</div><div class="test-title">should include site title</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateRootMetadata</div><div class="test-title">should include site description</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateRootMetadata</div><div class="test-title">should include manifest</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateRootMetadata</div><div class="test-title">should include icons</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateRootMetadata</div><div class="test-title">should include robots configuration</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateSearchMetadata</div><div class="test-title">should generate noindex metadata for search results</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateSearchMetadata</div><div class="test-title">should include query in title</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateSearchMetadata</div><div class="test-title">should include results count in description</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SEO Metadata Generators > generateSearchMetadata</div><div class="test-title">should handle empty query</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-207" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\api-docs\__tests__\openapi-import.test.ts</div><div class="suite-time warn">6.931s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > importOpenAPI</div><div class="test-title">should import a valid OpenAPI 3.0 specification</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > importOpenAPI</div><div class="test-title">should reject unsupported OpenAPI versions</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > importOpenAPI</div><div class="test-title">should handle endpoints with parameters</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > importOpenAPI</div><div class="test-title">should handle request bodies</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > importOpenAPI</div><div class="test-title">should detect auth requirements from security</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > importOpenAPI</div><div class="test-title">should handle nested object schemas</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > importOpenAPI</div><div class="test-title">should generate warnings for missing descriptions</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > importOpenAPI</div><div class="test-title">should handle parse errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > importOpenAPI</div><div class="test-title">should group endpoints by tags</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > importOpenAPI</div><div class="test-title">should use default tag when none specified</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > importOpenAPI</div><div class="test-title">should detect admin endpoints from tags</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > mergeRegistries</div><div class="test-title">should add new categories from imported registry</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > mergeRegistries</div><div class="test-title">should add new endpoints to existing categories</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > mergeRegistries</div><div class="test-title">should preserve existing custom fields by default</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > mergeRegistries</div><div class="test-title">should overwrite when overwriteExisting is true</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > mergeRegistries</div><div class="test-title">should preserve existing registry metadata</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > validateImportedRegistry</div><div class="test-title">should pass for valid registry</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > validateImportedRegistry</div><div class="test-title">should detect missing title</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > validateImportedRegistry</div><div class="test-title">should detect missing version</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > validateImportedRegistry</div><div class="test-title">should detect empty categories</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > validateImportedRegistry</div><div class="test-title">should detect duplicate endpoint IDs</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">OpenAPI Import Utility > validateImportedRegistry</div><div class="test-title">should detect missing endpoint path</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-208" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\monitoring\errors\resolve-bulk\__tests__\route.test.ts</div><div class="suite-time warn">6.04s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Resolve Bulk API - /api/admin/monitoring/errors/resolve-bulk > POST /api/admin/monitoring/errors/resolve-bulk</div><div class="test-title">resolves multiple errors by fingerprints</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Resolve Bulk API - /api/admin/monitoring/errors/resolve-bulk > POST /api/admin/monitoring/errors/resolve-bulk</div><div class="test-title">returns validation error for missing fingerprints</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Resolve Bulk API - /api/admin/monitoring/errors/resolve-bulk > POST /api/admin/monitoring/errors/resolve-bulk</div><div class="test-title">returns validation error for empty fingerprints array</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Resolve Bulk API - /api/admin/monitoring/errors/resolve-bulk > POST /api/admin/monitoring/errors/resolve-bulk</div><div class="test-title">returns validation error for non-array fingerprints</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Resolve Bulk API - /api/admin/monitoring/errors/resolve-bulk > POST /api/admin/monitoring/errors/resolve-bulk</div><div class="test-title">limits bulk operations to 100 items</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Resolve Bulk API - /api/admin/monitoring/errors/resolve-bulk > POST /api/admin/monitoring/errors/resolve-bulk</div><div class="test-title">handles 100 items (maximum allowed)</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Resolve Bulk API - /api/admin/monitoring/errors/resolve-bulk > POST /api/admin/monitoring/errors/resolve-bulk</div><div class="test-title">returns 0 resolved when no matching errors found</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Resolve Bulk API - /api/admin/monitoring/errors/resolve-bulk > POST /api/admin/monitoring/errors/resolve-bulk</div><div class="test-title">only resolves open errors</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Resolve Bulk API - /api/admin/monitoring/errors/resolve-bulk > POST /api/admin/monitoring/errors/resolve-bulk</div><div class="test-title">returns 401 for unauthenticated requests</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Resolve Bulk API - /api/admin/monitoring/errors/resolve-bulk > POST /api/admin/monitoring/errors/resolve-bulk</div><div class="test-title">returns 403 for non-admin users</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-209" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\animations\__tests__\advanced.test.ts</div><div class="suite-time">4.953s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > createParallax</div><div class="test-title">creates up parallax transform</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > createParallax</div><div class="test-title">creates down parallax transform</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > createParallax</div><div class="test-title">creates left parallax transform</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > createParallax</div><div class="test-title">creates right parallax transform</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > createParallax</div><div class="test-title">respects speed multiplier</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > createParallax</div><div class="test-title">uses default values when not provided</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > parallaxVariants</div><div class="test-title">has background variant with initial state</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > parallaxVariants</div><div class="test-title">has foreground variant with initial state</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > parallaxVariants</div><div class="test-title">background animate is a function</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > parallaxVariants</div><div class="test-title">background animate returns correct animation with custom delay</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > parallaxVariants</div><div class="test-title">foreground animate is a function</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > parallaxVariants</div><div class="test-title">foreground animate returns correct animation with custom delay</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > grid stagger animations</div><div class="test-title">gridStagger has empty initial</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > grid stagger animations</div><div class="test-title">gridStagger has stagger children config</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > grid stagger animations</div><div class="test-title">gridItem has correct initial state</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > grid stagger animations</div><div class="test-title">gridItem has correct animate state</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > wave stagger animations</div><div class="test-title">waveStagger has stagger direction config</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > wave stagger animations</div><div class="test-title">waveItem uses spring animation</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > createSpiralStagger</div><div class="test-title">returns variant object</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > createSpiralStagger</div><div class="test-title">has stagger config in animate</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > 3D transform animations</div><div class="test-title">flip3D has rotateY in initial</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > 3D transform animations</div><div class="test-title">flip3D animates to 0 rotation</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > 3D transform animations</div><div class="test-title">cube3D has X and Y rotation in initial</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > 3D transform animations</div><div class="test-title">tilt3D animate is a function</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > 3D transform animations</div><div class="test-title">tilt3D animate returns rotation based on coords</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > spring physics animations</div><div class="test-title">springBounce uses spring type</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > spring physics animations</div><div class="test-title">springElastic includes rotation</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > spring physics animations</div><div class="test-title">springWobble starts from left</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > gesture animations</div><div class="test-title">dragConstraints has all directions at 0</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > gesture animations</div><div class="test-title">swipeVariants has swipeLeft</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > gesture animations</div><div class="test-title">swipeVariants has swipeRight</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > gesture animations</div><div class="test-title">magnetic hover is a function</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > gesture animations</div><div class="test-title">magnetic hover returns transformed coords</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > scroll-linked animations</div><div class="test-title">createScrollReveal creates up variant by default</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > scroll-linked animations</div><div class="test-title">createScrollReveal creates down variant</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > scroll-linked animations</div><div class="test-title">createScrollReveal creates left variant</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > scroll-linked animations</div><div class="test-title">createScrollReveal creates right variant</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > scroll-linked animations</div><div class="test-title">createScrollReveal respects custom distance</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > scroll-linked animations</div><div class="test-title">scaleReveal has scale in initial</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > scroll-linked animations</div><div class="test-title">rotateReveal has rotation in initial</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > morphing animations</div><div class="test-title">morphVariants has circle shape</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > morphing animations</div><div class="test-title">morphVariants has square shape</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > morphing animations</div><div class="test-title">morphVariants has rounded shape</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > morphing animations</div><div class="test-title">textReveal animate is a function</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > morphing animations</div><div class="test-title">textReveal animate uses index for delay</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > createCounterAnimation</div><div class="test-title">returns transition config</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > createCounterAnimation</div><div class="test-title">uses default duration when not provided</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > loading animations</div><div class="test-title">pulse has repeating animation</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > loading animations</div><div class="test-title">shimmer moves across element</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">advanced animations > loading animations</div><div class="test-title">skeleton has pulsing opacity</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div></div></details><details id="suite-210" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\payments\__tests__\route.test.ts</div><div class="suite-time warn">7.98s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Authentication</div><div class="test-title">returns 401 for session without user id</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Successful payment</div><div class="test-title">processes payment for valid order</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Successful payment</div><div class="test-title">updates order status to SHIPPED on success</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Order validation</div><div class="test-title">returns 404 for non-existent order</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Order validation</div><div class="test-title">returns 403 for order belonging to different user</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Payment simulation</div><div class="test-title">succeeds for amounts ending in 00 cents</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Payment simulation</div><div class="test-title">fails for amounts not ending in 00 cents</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Payment validation</div><div class="test-title">rejects missing orderId</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Payment validation</div><div class="test-title">rejects negative amount</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Payment validation</div><div class="test-title">rejects zero amount</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Payment validation</div><div class="test-title">rejects invalid payment method</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Payment validation</div><div class="test-title">accepts valid payment methods</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Error handling</div><div class="test-title">returns 500 on database error during order lookup</div><div class="test-status">passed</div><div class="test-duration">0.078s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments > Error handling</div><div class="test-title">returns 500 on database error during order update</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div></div></details><details id="suite-211" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\affiliates\__tests__\payouts.test.ts</div><div class="suite-time warn">7.315s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Payouts API > GET /api/admin/affiliates/payouts</div><div class="test-title">should return 401 if not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Payouts API > GET /api/admin/affiliates/payouts</div><div class="test-title">should return 403 if not admin</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Payouts API > GET /api/admin/affiliates/payouts</div><div class="test-title">should return payouts list for admin</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Payouts API > GET /api/admin/affiliates/payouts</div><div class="test-title">should filter by status</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Payouts API > GET /api/admin/affiliates/payouts</div><div class="test-title">should filter by affiliateId</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Payouts API > POST /api/admin/affiliates/payouts</div><div class="test-title">should return 401 if not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Payouts API > POST /api/admin/affiliates/payouts</div><div class="test-title">should return 403 if not admin</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Payouts API > POST /api/admin/affiliates/payouts</div><div class="test-title">should process a payout</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Payouts API > POST /api/admin/affiliates/payouts</div><div class="test-title">should cancel a pending payout</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Payouts API > POST /api/admin/affiliates/payouts</div><div class="test-title">should not cancel already completed payout</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Payouts API > POST /api/admin/affiliates/payouts</div><div class="test-title">should return error if process fails</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div></div></details><details id="suite-212" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\reviews\[reviewId]\__tests__\route.test.ts</div><div class="suite-time warn">6.228s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/reviews/[reviewId] > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/reviews/[reviewId] > Authentication</div><div class="test-title">returns 401 for session without email</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/reviews/[reviewId] > Authentication</div><div class="test-title">returns 404 when user not found in database</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/reviews/[reviewId] > Validation</div><div class="test-title">returns 400 for invalid review ID</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/reviews/[reviewId] > Mark as helpful</div><div class="test-title">marks review as helpful</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/reviews/[reviewId] > Mark as helpful</div><div class="test-title">unmarks review as helpful</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/reviews/[reviewId] > Mark as helpful</div><div class="test-title">returns 400 when helpful is not a boolean</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/reviews/[reviewId] > Edit review</div><div class="test-title">updates review with new rating and comment</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/reviews/[reviewId] > Edit review</div><div class="test-title">returns 400 when rating is missing for edit</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/reviews/[reviewId] > Invalid action</div><div class="test-title">returns 400 for invalid action</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/reviews/[reviewId] > Error handling</div><div class="test-title">returns 500 on service error</div><div class="test-status">passed</div><div class="test-duration">0.086s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/reviews/[reviewId] > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/reviews/[reviewId] > Authentication</div><div class="test-title">returns 404 when user not found</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/reviews/[reviewId] > Validation</div><div class="test-title">returns 400 for invalid review ID</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/reviews/[reviewId] > Successful deletion</div><div class="test-title">deletes review successfully</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/reviews/[reviewId] > Error handling</div><div class="test-title">returns 500 on service error</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-213" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\orders\[orderId]\__tests__\route.test.ts</div><div class="suite-time warn">8.169s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > GET /api/admin/orders/[orderId] > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > GET /api/admin/orders/[orderId] > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > GET /api/admin/orders/[orderId] > Parameter validation</div><div class="test-title">returns 400 for invalid order ID</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > GET /api/admin/orders/[orderId] > Successful requests</div><div class="test-title">returns order with user and items</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > GET /api/admin/orders/[orderId] > Successful requests</div><div class="test-title">returns 404 when order not found</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > GET /api/admin/orders/[orderId] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.129s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > PATCH /api/admin/orders/[orderId] > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > PATCH /api/admin/orders/[orderId] > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > PATCH /api/admin/orders/[orderId] > Validation</div><div class="test-title">returns 400 for invalid order ID</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > PATCH /api/admin/orders/[orderId] > Validation</div><div class="test-title">returns 400 when status is missing</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > PATCH /api/admin/orders/[orderId] > Validation</div><div class="test-title">returns 400 for invalid status</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > PATCH /api/admin/orders/[orderId] > Successful updates</div><div class="test-title">updates order status to PROCESSING</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > PATCH /api/admin/orders/[orderId] > Successful updates</div><div class="test-title">updates order status to SHIPPED</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > PATCH /api/admin/orders/[orderId] > Successful updates</div><div class="test-title">updates order status to DELIVERED</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > PATCH /api/admin/orders/[orderId] > Successful updates</div><div class="test-title">updates order status to CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/orders/[orderId] > PATCH /api/admin/orders/[orderId] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div></div></details><details id="suite-214" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\cart\__tests__\[id].test.ts</div><div class="suite-time warn">6.993s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/cart/[id] > Authentication</div><div class="test-title">requires authentication</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/cart/[id] > Quantity updates</div><div class="test-title">updates cart item quantity</div><div class="test-status">passed</div><div class="test-duration">0.149s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/cart/[id] > Quantity updates</div><div class="test-title">returns 404 for non-existent cart item</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/cart/[id] > Quantity updates</div><div class="test-title">updates sync info with request</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/cart/[id] > Validation</div><div class="test-title">rejects zero quantity</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/cart/[id] > Validation</div><div class="test-title">rejects negative quantity</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/cart/[id] > Validation</div><div class="test-title">accepts string numbers (coercion)</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PATCH /api/cart/[id] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.195s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/cart/[id] > Authentication</div><div class="test-title">requires authentication</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/cart/[id] > Cart item removal</div><div class="test-title">removes cart item successfully</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/cart/[id] > Cart item removal</div><div class="test-title">returns 404 for non-existent cart item</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/cart/[id] > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div></div></details><details id="suite-215" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\image-processing.test.ts</div><div class="suite-time warn">5.109s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > validateImageFile > with Buffer</div><div class="test-title">validates buffer within size limit</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > validateImageFile > with Buffer</div><div class="test-title">rejects buffer exceeding size limit</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > validateImageFile > with Buffer</div><div class="test-title">uses default 10MB limit</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > validateImageFile > with Buffer</div><div class="test-title">rejects buffer just over the limit</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > validateImageFile > with File</div><div class="test-title">validates image file within size limit</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > validateImageFile > with File</div><div class="test-title">rejects non-image file</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > validateImageFile > with File</div><div class="test-title">rejects oversized image file</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > validateImageFile > with File</div><div class="test-title">accepts various image types</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > validateImageFile > with File</div><div class="test-title">validates with custom size limit</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > processProductImage</div><div class="test-title">processes image with default quality</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > processProductImage</div><div class="test-title">processes image with custom quality</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > processProductImage</div><div class="test-title">creates directory if not exists</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > processProductImage</div><div class="test-title">resizes to correct dimensions</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > processProductImage</div><div class="test-title">throws error for invalid image</div><div class="test-status">passed</div><div class="test-duration">0.155s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > processProductImage</div><div class="test-title">returns correct file sizes</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > processProductImage</div><div class="test-title">returns correct dimensions</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > processProductImage</div><div class="test-title">writes both files to disk</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > deleteProductImage</div><div class="test-title">deletes both full and thumbnail files</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > deleteProductImage</div><div class="test-title">handles missing files gracefully</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > deleteProductImage</div><div class="test-title">handles empty filenames</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > deleteProductImage</div><div class="test-title">continues deleting if first file fails</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > getNextImageIndex</div><div class="test-title">returns 1 when no images exist</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > getNextImageIndex</div><div class="test-title">returns next index based on existing images</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > getNextImageIndex</div><div class="test-title">ignores thumbnail files when calculating index</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > getNextImageIndex</div><div class="test-title">ignores other product images</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > getNextImageIndex</div><div class="test-title">returns 1 when directory does not exist</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > getNextImageIndex</div><div class="test-title">handles gaps in image indices</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">image-processing > getNextImageIndex</div><div class="test-title">handles non-numeric indices gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-216" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\promotions\applicable\__tests__\route.test.ts</div><div class="suite-time warn">8.497s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/applicable</div><div class="test-title">returns applicable promotions for cart</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/applicable</div><div class="test-title">returns empty result when cart is missing</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/applicable</div><div class="test-title">returns empty result when cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/applicable</div><div class="test-title">includes stacked result with savings breakdown</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/applicable</div><div class="test-title">includes free items in stacked result</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/applicable</div><div class="test-title">passes user ID when authenticated</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/applicable</div><div class="test-title">formats cart items correctly</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/applicable</div><div class="test-title">includes promotion stackable info in response</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/promotions/applicable</div><div class="test-title">returns 500 on unexpected error</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div></div></details><details id="suite-217" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\promotions\__tests__\utils.test.ts</div><div class="suite-time warn">8.371s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promotion Status Checks > isPromotionActive</div><div class="test-title">should return true for active promotion within date range</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promotion Status Checks > isPromotionActive</div><div class="test-title">should return false for inactive promotion</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promotion Status Checks > isPromotionActive</div><div class="test-title">should return false for promotion not yet started</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promotion Status Checks > isPromotionActive</div><div class="test-title">should return false for expired promotion</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promotion Status Checks > isPromotionUsageLimitReached</div><div class="test-title">should return false when no usage limit set</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promotion Status Checks > isPromotionUsageLimitReached</div><div class="test-title">should return false when under usage limit</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promotion Status Checks > isPromotionUsageLimitReached</div><div class="test-title">should return true when at usage limit</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promotion Status Checks > isPromotionUsageLimitReached</div><div class="test-title">should return true when over usage limit</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Discount Calculations > calculatePercentageDiscount</div><div class="test-title">should calculate 10% discount correctly</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Discount Calculations > calculatePercentageDiscount</div><div class="test-title">should calculate 25% discount correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Discount Calculations > calculatePercentageDiscount</div><div class="test-title">should handle decimal amounts</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Discount Calculations > calculatePercentageDiscount</div><div class="test-title">should handle 100% discount</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Discount Calculations > calculatePercentageDiscount</div><div class="test-title">should return 0 for 0% discount</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Discount Calculations > calculatePercentageDiscount</div><div class="test-title">should cap at maxDiscount when provided</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Discount Calculations > calculateFixedDiscount</div><div class="test-title">should return the fixed amount when less than total</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Discount Calculations > calculateFixedDiscount</div><div class="test-title">should cap at total amount when discount exceeds total</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Discount Calculations > calculateFixedDiscount</div><div class="test-title">should return exact amount when equal to total</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Discount Calculations > calculateFixedDiscount</div><div class="test-title">should cap at maxDiscount when provided</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Discount Calculations > calculateDiscount</div><div class="test-title">should calculate PERCENTAGE discount</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Discount Calculations > calculateDiscount</div><div class="test-title">should calculate FIXED_AMOUNT discount</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Discount Calculations > calculateDiscount</div><div class="test-title">should respect maxDiscount for percentage</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Utilities > calculateCartTotal</div><div class="test-title">should calculate total correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Utilities > calculateCartTotal</div><div class="test-title">should return 0 for empty cart</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Utilities > getCartItemCount</div><div class="test-title">should count total items including quantities</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Utilities > getCartItemCount</div><div class="test-title">should return 0 for empty cart</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Utilities > cartContainsProduct</div><div class="test-title">should return true when product exists in cart</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Utilities > cartContainsProduct</div><div class="test-title">should return false when product not in cart</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Utilities > cartContainsCategory</div><div class="test-title">should return true when category exists in cart</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Utilities > cartContainsCategory</div><div class="test-title">should return false when category not in cart</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Utilities > getItemsByCategory</div><div class="test-title">should return items matching category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Utilities > getItemsByCategory</div><div class="test-title">should return empty array for non-existent category</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Utilities > getItemsByProductIds</div><div class="test-title">should return items matching product IDs</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Utilities > getItemsByProductIds</div><div class="test-title">should return empty array when no matches</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > parseConditionValue</div><div class="test-title">should parse numeric string</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > parseConditionValue</div><div class="test-title">should parse array string</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > parseConditionValue</div><div class="test-title">should return string as-is if not JSON</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > toConditionRule</div><div class="test-title">should convert PromotionCondition to ConditionRule</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > evaluateCondition</div><div class="test-title">should evaluate min_amount correctly - pass</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > evaluateCondition</div><div class="test-title">should evaluate min_amount correctly - fail</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > evaluateCondition</div><div class="test-title">should evaluate min_quantity correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > evaluateCondition</div><div class="test-title">should evaluate first_purchase correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > evaluateCondition</div><div class="test-title">should evaluate includes_product correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > evaluateCondition</div><div class="test-title">should evaluate includes_category correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > evaluateCondition</div><div class="test-title">should evaluate excludes_product correctly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > evaluateAllConditions</div><div class="test-title">should return true when all conditions pass</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > evaluateAllConditions</div><div class="test-title">should return false when any condition fails</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Condition Evaluation > evaluateAllConditions</div><div class="test-title">should return true for empty conditions</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Formatting Utilities > formatDiscount</div><div class="test-title">should format percentage discount</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Formatting Utilities > formatDiscount</div><div class="test-title">should format fixed amount discount</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Formatting Utilities > formatPrice</div><div class="test-title">should format whole numbers</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Formatting Utilities > formatPrice</div><div class="test-title">should format decimals</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Formatting Utilities > formatPrice</div><div class="test-title">should format zero</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Formatting Utilities > calculateSavingsPercent</div><div class="test-title">should calculate savings percentage</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Formatting Utilities > calculateSavingsPercent</div><div class="test-title">should return 0 when original is 0</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Formatting Utilities > calculateSavingsPercent</div><div class="test-title">should round to nearest integer</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tiered Discount Utilities > getApplicableTier</div><div class="test-title">should return lowest tier for small quantity</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tiered Discount Utilities > getApplicableTier</div><div class="test-title">should return correct tier for exact match</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tiered Discount Utilities > getApplicableTier</div><div class="test-title">should return highest applicable tier</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Tiered Discount Utilities > getApplicableTier</div><div class="test-title">should return null for quantity below all tiers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promotion Sorting and Filtering > sortByPriority</div><div class="test-title">should sort by priority descending (higher first)</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promotion Sorting and Filtering > filterStackable</div><div class="test-title">should return only stackable promotions</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promotion Sorting and Filtering > getBestNonStackable</div><div class="test-title">should return the non-stackable promotion with highest discount</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promotion Sorting and Filtering > getBestNonStackable</div><div class="test-title">should return null when no non-stackable promotions</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Date Utilities > isWithinDateRange</div><div class="test-title">should return true for date within range</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Date Utilities > isWithinDateRange</div><div class="test-title">should return false for date before range</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Date Utilities > isWithinDateRange</div><div class="test-title">should return false for date after range</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Date Utilities > daysUntilExpiration</div><div class="test-title">should return correct days for future date</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Date Utilities > daysUntilExpiration</div><div class="test-title">should return negative for past date</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Date Utilities > isExpiringSoon</div><div class="test-title">should return true when expiring within threshold</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Date Utilities > isExpiringSoon</div><div class="test-title">should return false when not expiring soon</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Date Utilities > isExpiringSoon</div><div class="test-title">should return false for already expired</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promo Code Normalization > normalizePromoCode</div><div class="test-title">should convert to uppercase</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promo Code Normalization > normalizePromoCode</div><div class="test-title">should trim whitespace</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Promo Code Normalization > normalizePromoCode</div><div class="test-title">should handle mixed case with spaces</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-218" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\validation.test.ts</div><div class="suite-time warn">9.105s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">should validate correct product data</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">should reject product with negative price</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">should reject product with negative discounted price</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">should reject missing title</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">should reject empty title</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">should reject missing category ID</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">should reject negative stock</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">should accept missing optional fields</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">should reject invalid image URL</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createProductSchema</div><div class="test-title">should accept valid image URLs</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signupSchema</div><div class="test-title">should validate correct signup data</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signupSchema</div><div class="test-title">should reject invalid email</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signupSchema</div><div class="test-title">should reject short password</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signupSchema</div><div class="test-title">should reject non-matching passwords</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signupSchema</div><div class="test-title">should reject missing email</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signupSchema</div><div class="test-title">should accept optional name</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signupSchema</div><div class="test-title">should handle various valid emails</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signinSchema</div><div class="test-title">should validate correct signin data</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signinSchema</div><div class="test-title">should reject invalid email</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signinSchema</div><div class="test-title">should reject missing password</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > signinSchema</div><div class="test-title">should reject empty password</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToCartSchema</div><div class="test-title">should validate correct cart data</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToCartSchema</div><div class="test-title">should reject zero quantity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToCartSchema</div><div class="test-title">should reject negative quantity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToCartSchema</div><div class="test-title">should reject zero product ID</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToCartSchema</div><div class="test-title">should reject negative product ID</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToCartSchema</div><div class="test-title">should accept string product ID (coercion)</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > updateCartItemSchema</div><div class="test-title">should validate correct update data</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > updateCartItemSchema</div><div class="test-title">should reject zero quantity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > updateCartItemSchema</div><div class="test-title">should reject negative quantity</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToWishlistSchema</div><div class="test-title">should validate correct wishlist data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToWishlistSchema</div><div class="test-title">should reject zero product ID</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > addToWishlistSchema</div><div class="test-title">should reject negative product ID</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createCategorySchema</div><div class="test-title">should validate correct category data</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createCategorySchema</div><div class="test-title">should reject missing title</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createCategorySchema</div><div class="test-title">should reject empty title</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createCategorySchema</div><div class="test-title">should accept missing optional fields</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createCategorySchema</div><div class="test-title">should reject invalid image URL</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > createCategorySchema</div><div class="test-title">should accept valid image URL</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > validateInput utility function</div><div class="test-title">should return success with valid data</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > validateInput utility function</div><div class="test-title">should return errors with invalid data</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > validateInput utility function</div><div class="test-title">should format error messages properly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Validation Schemas > validateInput utility function</div><div class="test-title">should handle unexpected errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-219" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\orders\__tests__\route.test.ts</div><div class="suite-time warn">8.377s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/orders > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/orders > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/orders > Successful requests</div><div class="test-title">returns orders with pagination</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/orders > Successful requests</div><div class="test-title">respects pagination parameters</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/orders > Successful requests</div><div class="test-title">filters by status</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/orders > Successful requests</div><div class="test-title">filters by userId</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/orders > Successful requests</div><div class="test-title">combines multiple filters</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/orders > Successful requests</div><div class="test-title">returns orders ordered by creation date descending</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/orders > Successful requests</div><div class="test-title">includes user and items information</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/orders > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.078s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/orders > Error handling</div><div class="test-title">returns generic error for non-Error objects</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div></div></details><details id="suite-220" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\TraceExplorer\__tests__\TraceExplorer.test.tsx</div><div class="suite-time warn">7.847s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > rendering</div><div class="test-title">renders trace list</div><div class="test-status">passed</div><div class="test-duration">0.141s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > rendering</div><div class="test-title">renders empty state when no traces</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > rendering</div><div class="test-title">renders loading state</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > rendering</div><div class="test-title">renders trace metadata</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > rendering</div><div class="test-title">renders status badges</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > selection</div><div class="test-title">highlights selected trace</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > selection</div><div class="test-title">calls onSelectTrace when trace is clicked</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > search</div><div class="test-title">renders search input</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > search</div><div class="test-title">calls onSearchChange when typing</div><div class="test-status">passed</div><div class="test-duration">0.119s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > search</div><div class="test-title">shows search hint when empty with search value</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > status filter</div><div class="test-title">renders filter buttons</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > status filter</div><div class="test-title">highlights active filter</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > status filter</div><div class="test-title">calls onStatusFilterChange when filter is clicked</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TraceExplorer > duration display</div><div class="test-title">displays formatted duration</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div></div></details><details id="suite-221" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\reviews\__tests__\route.test.ts</div><div class="suite-time warn">7.147s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reviews > Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reviews > Authorization</div><div class="test-title">returns 403 when not admin</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reviews > Successful requests</div><div class="test-title">returns all reviews for admin</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reviews > Successful requests</div><div class="test-title">includes product and user info in response</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reviews > Successful requests</div><div class="test-title">calculates helpful counts correctly</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reviews > Successful requests</div><div class="test-title">supports pagination</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reviews > Successful requests</div><div class="test-title">supports sorting</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reviews > Successful requests</div><div class="test-title">supports filtering by rating</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reviews > Successful requests</div><div class="test-title">supports search</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reviews > Successful requests</div><div class="test-title">returns stats with distribution</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reviews > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.116s</div></div></div></div></details><details id="suite-222" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\support\__tests__\chatbot-utils.test.ts</div><div class="suite-time warn">5.493s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > detectIntent</div><div class="test-title">detects track_order intent</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > detectIntent</div><div class="test-title">detects create_ticket intent</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > detectIntent</div><div class="test-title">detects view_faq intent</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > detectIntent</div><div class="test-title">returns general for ambiguous queries</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > detectCategory</div><div class="test-title">detects ORDER_ISSUE category</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > detectCategory</div><div class="test-title">detects SHIPPING category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > detectCategory</div><div class="test-title">detects RETURNS_REFUNDS category</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > detectCategory</div><div class="test-title">detects PAYMENT category</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > detectCategory</div><div class="test-title">detects PRODUCT_INQUIRY category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > detectCategory</div><div class="test-title">detects ACCOUNT category</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > detectCategory</div><div class="test-title">detects TECHNICAL category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > detectCategory</div><div class="test-title">detects FEEDBACK category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > detectCategory</div><div class="test-title">returns OTHER for unrecognized categories</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > getWelcomeResponse</div><div class="test-title">returns welcome message with quick actions</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Chatbot Utilities > getWelcomeResponse</div><div class="test-title">includes valid quick action types</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Text Processing > Stop word filtering</div><div class="test-title">ignores common stop words in intent detection</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Text Processing > Synonym matching</div><div class="test-title">handles synonym variations for shipping</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Text Processing > Synonym matching</div><div class="test-title">handles synonym variations for returns</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Edge Cases</div><div class="test-title">handles empty strings</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Edge Cases</div><div class="test-title">handles mixed case</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Edge Cases</div><div class="test-title">handles special characters</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Edge Cases</div><div class="test-title">handles multiple intents by picking first match</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-223" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useToast.test.ts</div><div class="suite-time warn">5.418s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">useToast > useToast hook</div><div class="test-title">returns toast context value</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useToast > useToast hook</div><div class="test-title">calls addToast when adding a toast</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useToast > useToast hook</div><div class="test-title">calls removeToast when removing a toast</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useToast > useSuccessToast</div><div class="test-title">shows success toast with default title</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useToast > useSuccessToast</div><div class="test-title">shows success toast with custom title</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useToast > useErrorToast</div><div class="test-title">shows error toast with default title</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useToast > useErrorToast</div><div class="test-title">shows error toast with custom title</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useToast > useWarningToast</div><div class="test-title">shows warning toast with default title</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useToast > useWarningToast</div><div class="test-title">shows warning toast with custom title</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useToast > useInfoToast</div><div class="test-title">shows info toast without title</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useToast > useInfoToast</div><div class="test-title">shows info toast with title</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-224" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\cart\__tests__\merge.test.ts</div><div class="suite-time warn">6.318s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart/merge > Authentication</div><div class="test-title">requires authentication</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart/merge > Cart merging</div><div class="test-title">returns success for empty anonymous cart</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart/merge > Cart merging</div><div class="test-title">merges anonymous cart with user cart</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart/merge > Cart merging</div><div class="test-title">handles quantity conflicts</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart/merge > Cart merging</div><div class="test-title">includes device ID in merge</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart/merge > Validation</div><div class="test-title">rejects non-array anonymousItems</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart/merge > Validation</div><div class="test-title">rejects invalid cart items format</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart/merge > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.1s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/cart/merge > Error handling</div><div class="test-title">returns 500 on merge apply error</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-225" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\webhooks\stripe\__tests__\route.test.ts</div><div class="suite-time">3.602s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > Signature validation</div><div class="test-title">returns 400 for missing signature</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > Signature validation</div><div class="test-title">returns 500 if webhook secret not configured</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > Signature validation</div><div class="test-title">returns 400 for invalid signature</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > payment_intent.succeeded event</div><div class="test-title">updates order status to PROCESSING</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > payment_intent.succeeded event</div><div class="test-title">logs warning if orderId missing in metadata</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > payment_intent.payment_failed event</div><div class="test-title">updates order status to CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > payment_intent.payment_failed event</div><div class="test-title">handles missing orderId gracefully</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > payment_intent.canceled event</div><div class="test-title">updates order status to CANCELLED</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > charge.refunded event</div><div class="test-title">updates order status when fully refunded</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > charge.refunded event</div><div class="test-title">logs refund info</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > charge.dispute.created event</div><div class="test-title">logs dispute information</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > Unhandled event types</div><div class="test-title">logs unhandled event types and returns success</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > Error handling</div><div class="test-title">returns 500 on database error during order update</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/webhooks/stripe > Event logging</div><div class="test-title">logs received event details</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-226" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\hero\promo-banners\__tests__\route.test.ts</div><div class="suite-time warn">8.179s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > GET /api/admin/hero/promo-banners > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.043s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > GET /api/admin/hero/promo-banners > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > GET /api/admin/hero/promo-banners > Successful requests</div><div class="test-title">returns all promo banners for admin</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > GET /api/admin/hero/promo-banners > Successful requests</div><div class="test-title">returns banners ordered by order field</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > GET /api/admin/hero/promo-banners > Successful requests</div><div class="test-title">returns empty array when no banners exist</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > GET /api/admin/hero/promo-banners > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > POST /api/admin/hero/promo-banners > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > POST /api/admin/hero/promo-banners > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > POST /api/admin/hero/promo-banners > Validation</div><div class="test-title">returns 400 when required fields are missing</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > POST /api/admin/hero/promo-banners > Validation</div><div class="test-title">returns 400 when neither productId nor ctaLink provided</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > POST /api/admin/hero/promo-banners > Validation</div><div class="test-title">returns 400 when size is invalid</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > POST /api/admin/hero/promo-banners > Validation</div><div class="test-title">returns 404 when product does not exist</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > POST /api/admin/hero/promo-banners > Successful creation</div><div class="test-title">creates promo banner with custom URL</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > POST /api/admin/hero/promo-banners > Successful creation</div><div class="test-title">creates promo banner with product link</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > POST /api/admin/hero/promo-banners > Successful creation</div><div class="test-title">creates promo banner with all fields</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > POST /api/admin/hero/promo-banners > Successful creation</div><div class="test-title">auto-assigns order when not provided</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > POST /api/admin/hero/promo-banners > Successful creation</div><div class="test-title">uses provided order when specified</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/promo-banners > POST /api/admin/hero/promo-banners > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div></div></details><details id="suite-227" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\performance.test.ts</div><div class="suite-time warn">9.289s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > measureApiPerformance</div><div class="test-title">should return duration in milliseconds</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > measureApiPerformance</div><div class="test-title">should log warning for slow APIs (>200ms)</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > measureApiPerformance</div><div class="test-title">should log debug for fast APIs (<200ms)</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > recordMetrics</div><div class="test-title">should record metrics for an endpoint</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > recordMetrics</div><div class="test-title">should bound metrics history to 1000 entries</div><div class="test-status">passed</div><div class="test-duration">0.117s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > getEndpointStats</div><div class="test-title">should return null for unknown endpoint</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > getEndpointStats</div><div class="test-title">should calculate average duration</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > getEndpointStats</div><div class="test-title">should calculate p95 duration</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > getEndpointStats</div><div class="test-title">should calculate success rate</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > getAllEndpointStats</div><div class="test-title">should return stats for all endpoints</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > clearMetrics</div><div class="test-title">should clear all metrics</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > withPerformanceTracking</div><div class="test-title">should track successful operations</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > withPerformanceTracking</div><div class="test-title">should track failed operations</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Utilities > withPerformanceTracking</div><div class="test-title">should measure actual duration</div><div class="test-status">passed</div><div class="test-duration">0.077s</div></div></div></div></details><details id="suite-228" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\TimeRangeSelector\TimeRangeSelector.test.tsx</div><div class="suite-time warn">8.181s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">TimeRangeSelector > Rendering</div><div class="test-title">renders without crashing</div><div class="test-status">passed</div><div class="test-duration">0.155s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TimeRangeSelector > Rendering</div><div class="test-title">renders all time range options</div><div class="test-status">passed</div><div class="test-duration">0.115s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TimeRangeSelector > Rendering</div><div class="test-title">highlights the selected option</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TimeRangeSelector > Interaction</div><div class="test-title">calls onChange when clicking a different option</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TimeRangeSelector > Interaction</div><div class="test-title">calls onChange with correct value for each option</div><div class="test-status">passed</div><div class="test-duration">0.073s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TimeRangeSelector > Interaction</div><div class="test-title">does not call onChange when disabled</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TimeRangeSelector > Accessibility</div><div class="test-title">has proper role for button group</div><div class="test-status">passed</div><div class="test-duration">0.159s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TimeRangeSelector > Accessibility</div><div class="test-title">buttons have aria-pressed attribute</div><div class="test-status">passed</div><div class="test-duration">0.094s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TimeRangeSelector > Accessibility</div><div class="test-title">disabled buttons have disabled attribute</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">TimeRangeSelector > Custom className</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div></div></details><details id="suite-229" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\cart\__tests__\cart-storage.test.ts</div><div class="suite-time warn">5.864s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage class > constructor</div><div class="test-title">creates cookie storage instance</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage class > constructor</div><div class="test-title">creates database storage instance with userId</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage class > save method</div><div class="test-title">saves to cookie when type is cookie</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage class > save method</div><div class="test-title">returns false when cookie save fails</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage class > save method</div><div class="test-title">returns false for database type (not implemented)</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage class > load method</div><div class="test-title">loads from cookie when type is cookie</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage class > load method</div><div class="test-title">returns empty array when cookie is null</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage class > load method</div><div class="test-title">returns empty array for database type (not implemented)</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage class > clear method</div><div class="test-title">clears cookie when type is cookie</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage class > clear method</div><div class="test-title">logs warning for database type (not implemented)</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage class > getSessionId method</div><div class="test-title">returns anonymous session ID for cookie type</div><div class="test-status">passed</div><div class="test-duration">0.043s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage class > getSessionId method</div><div class="test-title">returns user session ID for database type with deviceId</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage class > getSessionId method</div><div class="test-title">returns user session ID with default device for database type</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage.create static method</div><div class="test-title">creates cookie storage for unauthenticated users</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage.create static method</div><div class="test-title">creates cookie storage when authenticated but no userId</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage.create static method</div><div class="test-title">creates database storage for authenticated users with userId</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage.create static method</div><div class="test-title">creates database storage without deviceId</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage.isStorageAvailable static method</div><div class="test-title">returns boolean indicating storage availability</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > CartStorage.isStorageAvailable static method</div><div class="test-title">checks cookie availability without throwing</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > getCurrentStorageType helper</div><div class="test-title">returns database for authenticated users</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > getCurrentStorageType helper</div><div class="test-title">returns cookie for unauthenticated users</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > getCartItemsForMigration helper</div><div class="test-title">returns cart items from cookie</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > getCartItemsForMigration helper</div><div class="test-title">returns null when no cart cookie exists</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > integration scenarios</div><div class="test-title">handles cart lifecycle for anonymous user</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > integration scenarios</div><div class="test-title">handles cart lifecycle for authenticated user</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-storage > integration scenarios</div><div class="test-title">handles migration scenario</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-230" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\auth\__tests__\csrf.test.ts</div><div class="suite-time warn">5.786s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > generateCsrfToken</div><div class="test-title">generates a non-empty token</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > generateCsrfToken</div><div class="test-title">generates unique tokens on each call</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > generateCsrfToken</div><div class="test-title">generates base64 encoded tokens</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > generateCsrfToken</div><div class="test-title">token contains valid JSON when decoded</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > generateCsrfToken</div><div class="test-title">token timestamp is current time</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > validateCsrfToken</div><div class="test-title">returns false when header token is null</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > validateCsrfToken</div><div class="test-title">returns false when cookie token is null</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > validateCsrfToken</div><div class="test-title">returns false when both tokens are null</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > validateCsrfToken</div><div class="test-title">returns true when tokens match</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > validateCsrfToken</div><div class="test-title">returns false when tokens do not match</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > validateCsrfToken</div><div class="test-title">returns false for malformed header token</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > validateCsrfToken</div><div class="test-title">returns false for malformed cookie token</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > validateCsrfToken</div><div class="test-title">returns false for expired tokens</div><div class="test-status">passed</div><div class="test-duration">0.07s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > validateCsrfToken</div><div class="test-title">validates token just before expiry</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > parseCsrfToken</div><div class="test-title">parses valid token</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > parseCsrfToken</div><div class="test-title">returns null for invalid base64</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > parseCsrfToken</div><div class="test-title">returns null for invalid JSON</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > parseCsrfToken</div><div class="test-title">returns null for missing token field</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > parseCsrfToken</div><div class="test-title">returns null for missing timestamp field</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > Token Structure</div><div class="test-title">token inner value has sufficient entropy (32 bytes = 64 hex chars)</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > Token Structure</div><div class="test-title">can round-trip token through encoding/decoding</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > Token Structure</div><div class="test-title">hash comparison provides timing-safe equality</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > isTokenExpired</div><div class="test-title">returns false for recent timestamp</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > isTokenExpired</div><div class="test-title">returns false for timestamp just under expiry</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > isTokenExpired</div><div class="test-title">returns true for timestamp past expiry</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CSRF Protection > isTokenExpired</div><div class="test-title">returns true for very old timestamp</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-231" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\services\__tests__\chatbot.service.test.ts</div><div class="suite-time warn">6.067s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > greeting intent</div><div class="test-title">should respond to "hi" with greeting and quick replies</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > greeting intent</div><div class="test-title">should respond to "hello" with greeting</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > greeting intent</div><div class="test-title">should respond to "good morning" with greeting</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > order_status intent</div><div class="test-title">should ask for login when user is not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > order_status intent</div><div class="test-title">should show recent orders when user is authenticated</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > order_status intent</div><div class="test-title">should handle no orders found</div><div class="test-status">passed</div><div class="test-duration">0.071s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > return_request intent</div><div class="test-title">should explain return policy</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > return_request intent</div><div class="test-title">should match "refund" keyword</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > shipping_info intent</div><div class="test-title">should explain shipping options</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > shipping_info intent</div><div class="test-title">should match "delivery time" query</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > product_question intent</div><div class="test-title">should prompt for product details when query is vague</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > product_question intent</div><div class="test-title">should search for products when query has captured entity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > product_question intent</div><div class="test-title">should handle empty search results</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > payment_issue intent</div><div class="test-title">should provide payment troubleshooting</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > agent_request intent</div><div class="test-title">should trigger handoff for agent request</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > agent_request intent</div><div class="test-title">should match "live chat" request</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > store_hours intent</div><div class="test-title">should return business hours</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > contact_info intent</div><div class="test-title">should return contact information</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > generateBotResponse > low confidence / unknown intent</div><div class="test-title">should offer quick replies for unclear messages</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > handleQuickReply</div><div class="test-title">should handle "Track my order" quick reply</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > handleQuickReply</div><div class="test-title">should handle "Return an item" quick reply</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > handleQuickReply</div><div class="test-title">should handle "Speak to an agent" quick reply</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > handleQuickReply</div><div class="test-title">should handle "Browse categories" quick reply</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > handleQuickReply</div><div class="test-title">should handle "Popular products" quick reply</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > handleQuickReply</div><div class="test-title">should return default response for unknown quick reply</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > getSuggestedResponses</div><div class="test-title">should return default suggestions</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > isPositiveSentiment</div><div class="test-title">should detect positive sentiment</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > isPositiveSentiment</div><div class="test-title">should not detect positive sentiment in neutral messages</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > isFrustrated</div><div class="test-title">should detect frustration</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ChatbotService > isFrustrated</div><div class="test-title">should not detect frustration in neutral messages</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-232" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\redux\features\__tests__\wishlistSliceApi.test.ts</div><div class="suite-time warn">6.219s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Initial state</div><div class="test-title">should have empty items array</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Initial state</div><div class="test-title">should have loading false</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Initial state</div><div class="test-title">should have error null</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Synchronous actions > addItemToWishlist</div><div class="test-title">should add item to empty wishlist</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Synchronous actions > addItemToWishlist</div><div class="test-title">should not add duplicate item</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Synchronous actions > addItemToWishlist</div><div class="test-title">should add different items</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Synchronous actions > addItemToWishlist</div><div class="test-title">should preserve stored item properties</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Synchronous actions > removeItemFromWishlist</div><div class="test-title">should remove item from wishlist</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Synchronous actions > removeItemFromWishlist</div><div class="test-title">should not affect other items</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Synchronous actions > removeItemFromWishlist</div><div class="test-title">should handle removing non-existent item</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Synchronous actions > removeItemFromWishlist</div><div class="test-title">should handle removing from empty wishlist</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Synchronous actions > removeAllItemsFromWishlist</div><div class="test-title">should clear all items</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Synchronous actions > removeAllItemsFromWishlist</div><div class="test-title">should work on empty wishlist</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Synchronous actions > clearError</div><div class="test-title">should clear error state</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > fetchWishlist</div><div class="test-title">should set loading true when pending</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > fetchWishlist</div><div class="test-title">should populate items on success</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > fetchWishlist</div><div class="test-title">should set error on failure</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > fetchWishlist</div><div class="test-title">should handle non-Error rejection</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > fetchWishlist</div><div class="test-title">should replace existing items</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > addToWishlistAsync</div><div class="test-title">should set loading true when pending</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > addToWishlistAsync</div><div class="test-title">should update wishlist items on success</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > addToWishlistAsync</div><div class="test-title">should set error on failure</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > addToWishlistAsync</div><div class="test-title">should handle non-Error rejection</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > addToWishlistAsync</div><div class="test-title">should re-fetch wishlist after adding</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > removeFromWishlistAsync</div><div class="test-title">should set loading true when pending</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > removeFromWishlistAsync</div><div class="test-title">should update wishlist items on success</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > removeFromWishlistAsync</div><div class="test-title">should set error on failure</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > removeFromWishlistAsync</div><div class="test-title">should handle non-Error rejection</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Async thunks > removeFromWishlistAsync</div><div class="test-title">should re-fetch wishlist after removing</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Selectors > selectWishlistItems</div><div class="test-title">should return wishlist items</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Selectors > selectWishlistItems</div><div class="test-title">should return empty array for empty wishlist</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Selectors > selectIsInWishlist</div><div class="test-title">should return true if item is in wishlist</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Selectors > selectIsInWishlist</div><div class="test-title">should return false if item is not in wishlist</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Selectors > selectIsInWishlist</div><div class="test-title">should return false for empty wishlist</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Selectors > selectIsInWishlist</div><div class="test-title">should work with multiple items</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > State transitions</div><div class="test-title">should transition through pending -> fulfilled states</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > State transitions</div><div class="test-title">should transition through pending -> rejected states</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > State transitions</div><div class="test-title">should clear error when starting new request</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Edge cases</div><div class="test-title">should handle empty API response</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Edge cases</div><div class="test-title">should handle items without optional fields</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Edge cases</div><div class="test-title">should handle rapid successive requests</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Edge cases</div><div class="test-title">should handle add failure without affecting current state</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > Edge cases</div><div class="test-title">should maintain state integrity through complex operations</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > API error handling</div><div class="test-title">should handle network timeout</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > API error handling</div><div class="test-title">should handle API rate limiting</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist API Slice > API error handling</div><div class="test-title">should handle server errors</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div></div></details><details id="suite-233" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\analytics\services\__tests__\report.service.test.ts</div><div class="suite-time warn">7.495s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Report Service > generateAnalyticsReport</div><div class="test-title">should return JSON report by default</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Report Service > generateAnalyticsReport</div><div class="test-title">should include period dates in report</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Report Service > generateAnalyticsReport</div><div class="test-title">should return CSV format when requested</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Report Service > generateAnalyticsReport</div><div class="test-title">should include all sections in CSV report</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Report Service > generateAnalyticsReport</div><div class="test-title">should return HTML format when requested</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Report Service > generateAnalyticsReport</div><div class="test-title">should include styled components in HTML report</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Report Service > generateAnalyticsReport</div><div class="test-title">should include revenue metrics in all formats</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Report Service > generateAnalyticsReport</div><div class="test-title">should handle empty data gracefully</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Report Service > scheduleWeeklyReport</div><div class="test-title">should log report generation</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Report Service > scheduleWeeklyReport</div><div class="test-title">should handle multiple email recipients</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Report Service > scheduleWeeklyReport</div><div class="test-title">should generate HTML report for email</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-234" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\redux\features\__tests__\notificationsSlice.test.ts</div><div class="suite-time">3.121s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Initial State</div><div class="test-title">should have the correct initial state</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Panel Actions</div><div class="test-title">should open panel</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Panel Actions</div><div class="test-title">should close panel</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Panel Actions</div><div class="test-title">should toggle panel</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Polling Configuration</div><div class="test-title">should set polling interval</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Notification Management</div><div class="test-title">should add a notification and increment unread count</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Notification Management</div><div class="test-title">should add a read notification without incrementing unread count</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Notification Management</div><div class="test-title">should remove a notification and decrement unread count</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Notification Management</div><div class="test-title">should not decrement unread count when removing a read notification</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Notification Management</div><div class="test-title">should update a notification</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Notification Management</div><div class="test-title">should decrement unread count when marking notification as read via update</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Mark As Read Actions</div><div class="test-title">should mark notification as read locally</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Mark As Read Actions</div><div class="test-title">should not change unread count if already read</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Mark As Read Actions</div><div class="test-title">should mark all notifications as read locally</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Utility Actions</div><div class="test-title">should set unread count</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Utility Actions</div><div class="test-title">should clear notifications</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Utility Actions</div><div class="test-title">should clear error</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Utility Actions</div><div class="test-title">should reset to initial state</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Async Thunk: fetchNotifications</div><div class="test-title">should set loading to true on pending</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Async Thunk: fetchNotifications</div><div class="test-title">should update state on fulfilled</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Async Thunk: fetchNotifications</div><div class="test-title">should set error on rejected</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Async Thunk: markNotificationAsRead</div><div class="test-title">should optimistically mark notification as read on pending</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Async Thunk: markNotificationAsRead</div><div class="test-title">should revert on rejected</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Async Thunk: markAllNotificationsAsRead</div><div class="test-title">should optimistically mark all as read on pending</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Async Thunk: deleteNotification</div><div class="test-title">should optimistically remove notification on pending</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Async Thunk: deleteAllReadNotifications</div><div class="test-title">should optimistically remove all read notifications on pending</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Selectors</div><div class="test-title">should select notifications</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Selectors</div><div class="test-title">should select unread count</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Selectors</div><div class="test-title">should select pagination</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Selectors</div><div class="test-title">should select loading state</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Selectors</div><div class="test-title">should select error state</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Selectors</div><div class="test-title">should select panel open state</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Selectors</div><div class="test-title">should select polling interval</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Selectors</div><div class="test-title">should select last fetched timestamp</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Selectors</div><div class="test-title">should select unread notifications</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Selectors</div><div class="test-title">should select read notifications</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Selectors</div><div class="test-title">should select has unread notifications</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Notifications Slice > Selectors</div><div class="test-title">should determine if should refetch based on polling interval</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-235" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\images\audit\__tests__\route.test.ts</div><div class="suite-time warn">5.994s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/images/audit > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/images/audit > Authentication & Authorization</div><div class="test-title">returns 401 for session without email</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/images/audit > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/images/audit > Successful audit</div><div class="test-title">returns complete audit report</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/images/audit > Successful audit</div><div class="test-title">calculates completion rate correctly</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/images/audit > Successful audit</div><div class="test-title">categorizes products correctly</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/images/audit > Successful audit</div><div class="test-title">handles empty products list</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/images/audit > Successful audit</div><div class="test-title">handles directory read error gracefully</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/images/audit > Successful audit</div><div class="test-title">filters only .webp files from directory</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/images/audit > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.151s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/images/audit > Error handling</div><div class="test-title">returns generic error for non-Error objects</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div></div></details><details id="suite-236" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\cron\cleanup-errors\__tests__\route.test.ts</div><div class="suite-time warn">5.097s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Cleanup Cron Job > authorization</div><div class="test-title">allows requests in development without auth</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Cleanup Cron Job > authorization</div><div class="test-title">rejects requests with wrong auth token when CRON_SECRET is set</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Cleanup Cron Job > authorization</div><div class="test-title">allows requests with correct auth token</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Cleanup Cron Job > cleanup operations</div><div class="test-title">deletes old error logs</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Cleanup Cron Job > cleanup operations</div><div class="test-title">resets counts on old resolved statistics</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Cleanup Cron Job > cleanup operations</div><div class="test-title">deletes orphaned statistics</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Cleanup Cron Job > cleanup operations</div><div class="test-title">returns cleanup summary</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Cleanup Cron Job > cleanup operations</div><div class="test-title">uses correct cutoff date (30 days ago)</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Error Cleanup Cron Job > error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.098s</div></div></div></div></details><details id="suite-237" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\redux\features\__tests__\cartSlice.test.ts</div><div class="suite-time warn">5.068s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > addItemToCart</div><div class="test-title">should add item to empty cart</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > addItemToCart</div><div class="test-title">should increase quantity if item already exists</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > addItemToCart</div><div class="test-title">should add different items</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > addItemToCart</div><div class="test-title">should preserve image data</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > addItemToCart</div><div class="test-title">should handle items without images</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > removeItemFromCart</div><div class="test-title">should remove item from cart</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > removeItemFromCart</div><div class="test-title">should not affect other items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > removeItemFromCart</div><div class="test-title">should handle removing non-existent item</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > removeItemFromCart</div><div class="test-title">should remove correct item when multiple items exist</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > updateCartItemQuantity</div><div class="test-title">should update item quantity</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > updateCartItemQuantity</div><div class="test-title">should update to zero quantity</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > updateCartItemQuantity</div><div class="test-title">should not affect other items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > updateCartItemQuantity</div><div class="test-title">should handle updating non-existent item</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > updateCartItemQuantity</div><div class="test-title">should handle large quantities</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > removeAllItemsFromCart</div><div class="test-title">should clear empty cart</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > removeAllItemsFromCart</div><div class="test-title">should clear cart with items</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > removeAllItemsFromCart</div><div class="test-title">should clear cart with multiple items</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > Cart combinations</div><div class="test-title">should handle complex add/remove/update sequence</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > Cart combinations</div><div class="test-title">should maintain data integrity through operations</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > initializeAnonymousCart</div><div class="test-title">should initialize cart with anonymous items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > initializeAnonymousCart</div><div class="test-title">should replace existing items</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > initializeUserCart</div><div class="test-title">should initialize cart with user items</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > setCartLoaded</div><div class="test-title">should set cart loaded status</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > setCartLoaded</div><div class="test-title">should set cart not loaded</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > setCartSyncStatus</div><div class="test-title">should set sync status to syncing</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > setCartSyncStatus</div><div class="test-title">should set sync status to idle</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > setIsAnonymous</div><div class="test-title">should set anonymous status</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > Selectors</div><div class="test-title">selectCartItems returns cart items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > Selectors</div><div class="test-title">selectTotalPrice calculates total correctly</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > Selectors</div><div class="test-title">selectTotalPrice handles empty cart</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > Selectors</div><div class="test-title">selectTotalItemCount counts items correctly</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > Selectors</div><div class="test-title">selectIsAnonymous returns correct status</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > Selectors</div><div class="test-title">selectIsCartLoaded returns loaded status</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > Selectors</div><div class="test-title">selectCartSyncStatus returns sync status</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > Price calculations with decimals</div><div class="test-title">should handle decimal prices correctly</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > Price calculations with decimals</div><div class="test-title">should handle multiple decimal prices</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > syncAnonymousCartToCookie</div><div class="test-title">should sync cart to cookie when anonymous</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > syncAnonymousCartToCookie</div><div class="test-title">should not sync when not anonymous</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > clearAnonymousCart</div><div class="test-title">should clear cart and delete cookie</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > clearAnonymousCart</div><div class="test-title">should work on empty cart</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > clearCart</div><div class="test-title">should clear all items from cart</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > clearCart</div><div class="test-title">should not affect other state properties</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > selectLastSyncTime</div><div class="test-title">should return last sync time</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > selectLastSyncTime</div><div class="test-title">should return null when not synced</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > fetchCart async thunk</div><div class="test-title">should handle fetchCart.pending</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > fetchCart async thunk</div><div class="test-title">should handle fetchCart.fulfilled</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > fetchCart async thunk</div><div class="test-title">should handle fetchCart.rejected</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart Slice > fetchCart async thunk</div><div class="test-title">should update loading state during fetch</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-238" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\cart\__tests__\cart-cookie.test.ts</div><div class="suite-time warn">5.865s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > setCartCookie</div><div class="test-title">should save cart items to cookie</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > setCartCookie</div><div class="test-title">should handle empty cart</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > setCartCookie</div><div class="test-title">should truncate cart if it exceeds 4KB</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > setCartCookie</div><div class="test-title">should set cart version hash</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > getCartCookie</div><div class="test-title">should retrieve cart items from cookie</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > getCartCookie</div><div class="test-title">should return null if cookie does not exist</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > getCartCookie</div><div class="test-title">should return null for invalid JSON</div><div class="test-status">passed</div><div class="test-duration">0.099s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > getCartCookie</div><div class="test-title">should return null for non-array data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > deleteCartCookie</div><div class="test-title">should remove cart cookie</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > deleteCartCookie</div><div class="test-title">should remove cart version cookie</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > getAnonymousSessionId</div><div class="test-title">should return existing session ID</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > getAnonymousSessionId</div><div class="test-title">should create new session ID if none exists</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > setCartVersion</div><div class="test-title">should set cart version hash</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > getCartVersion</div><div class="test-title">should retrieve cart version hash</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > getCartVersion</div><div class="test-title">should return null if no version exists</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">cart-cookie > clearAllCartCookies</div><div class="test-title">should clear all cart-related cookies</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div></div></details><details id="suite-239" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\charts\RequestVolumeChart\RequestVolumeChart.test.tsx</div><div class="suite-time warn">7.799s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">RequestVolumeChart > Rendering</div><div class="test-title">renders without crashing</div><div class="test-status">passed</div><div class="test-duration">0.139s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RequestVolumeChart > Rendering</div><div class="test-title">displays the chart title</div><div class="test-status">passed</div><div class="test-duration">0.073s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RequestVolumeChart > Rendering</div><div class="test-title">displays time range in title</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RequestVolumeChart > Rendering</div><div class="test-title">renders the area chart</div><div class="test-status">passed</div><div class="test-duration">0.05s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RequestVolumeChart > Loading State</div><div class="test-title">displays loading message when isLoading is true</div><div class="test-status">passed</div><div class="test-duration">0.084s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RequestVolumeChart > Empty State</div><div class="test-title">displays empty message when no data</div><div class="test-status">passed</div><div class="test-duration">0.16s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RequestVolumeChart > String timestamps</div><div class="test-title">handles string timestamps correctly</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div></div></details><details id="suite-240" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\monitoring\performance\__tests__\aggregate.test.ts</div><div class="suite-time warn">6.454s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Aggregation API > GET /api/admin/monitoring/performance/aggregate</div><div class="test-title">returns aggregated data with valid groupBy</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Aggregation API > GET /api/admin/monitoring/performance/aggregate</div><div class="test-title">supports different groupBy options</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Aggregation API > GET /api/admin/monitoring/performance/aggregate</div><div class="test-title">supports different metric options</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Aggregation API > GET /api/admin/monitoring/performance/aggregate</div><div class="test-title">returns error when groupBy is missing</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Aggregation API > GET /api/admin/monitoring/performance/aggregate</div><div class="test-title">returns error for invalid groupBy</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Aggregation API > GET /api/admin/monitoring/performance/aggregate</div><div class="test-title">returns error for invalid metric</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Aggregation API > GET /api/admin/monitoring/performance/aggregate</div><div class="test-title">supports custom limit</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Aggregation API > GET /api/admin/monitoring/performance/aggregate</div><div class="test-title">validates limit range</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Aggregation API > GET /api/admin/monitoring/performance/aggregate</div><div class="test-title">requires admin authentication</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-241" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\hero\carousel\__tests__\route.test.ts</div><div class="suite-time warn">6.905s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > GET /api/admin/hero/carousel > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > GET /api/admin/hero/carousel > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > GET /api/admin/hero/carousel > Successful requests</div><div class="test-title">returns all carousel items for admin</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > GET /api/admin/hero/carousel > Successful requests</div><div class="test-title">returns items ordered by order field</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > GET /api/admin/hero/carousel > Successful requests</div><div class="test-title">returns empty array when no items exist</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > GET /api/admin/hero/carousel > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > POST /api/admin/hero/carousel > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > POST /api/admin/hero/carousel > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > POST /api/admin/hero/carousel > Validation</div><div class="test-title">returns 400 when productId is missing</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > POST /api/admin/hero/carousel > Validation</div><div class="test-title">returns 400 when productId is invalid</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > POST /api/admin/hero/carousel > Validation</div><div class="test-title">returns 404 when product does not exist</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > POST /api/admin/hero/carousel > Successful creation</div><div class="test-title">creates carousel item with required fields only</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > POST /api/admin/hero/carousel > Successful creation</div><div class="test-title">creates carousel item with all fields</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > POST /api/admin/hero/carousel > Successful creation</div><div class="test-title">auto-assigns order when not provided</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > POST /api/admin/hero/carousel > Successful creation</div><div class="test-title">uses provided order when specified</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/hero/carousel > POST /api/admin/hero/carousel > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-242" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\monitoring\__tests__\alertScheduler.test.ts</div><div class="suite-time warn">7.629s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > startAlertScheduler</div><div class="test-title">starts the scheduler</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > startAlertScheduler</div><div class="test-title">runs evaluation immediately when requested</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > startAlertScheduler</div><div class="test-title">does not run immediately when runImmediately is false</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > startAlertScheduler</div><div class="test-title">warns if scheduler is already running</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > startAlertScheduler</div><div class="test-title">runs evaluation on interval</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > stopAlertScheduler</div><div class="test-title">stops the scheduler</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > stopAlertScheduler</div><div class="test-title">does nothing if scheduler is not running</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > stopAlertScheduler</div><div class="test-title">clears the interval</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > isSchedulerRunning</div><div class="test-title">returns false when scheduler is not running</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > isSchedulerRunning</div><div class="test-title">returns true when scheduler is running</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > getSchedulerStatus</div><div class="test-title">returns scheduler status</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > getSchedulerStatus</div><div class="test-title">includes alert stats from getAlertStats</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > triggerManualEvaluation</div><div class="test-title">triggers manual evaluation</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > resetSchedulerStats</div><div class="test-title">resets all statistics</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > resetSchedulerStats</div><div class="test-title">logs reset action</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > error handling</div><div class="test-title">increments consecutive errors on failure</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > error handling</div><div class="test-title">auto-stops after max consecutive errors</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > error handling</div><div class="test-title">resets consecutive errors on successful run</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > statistics tracking</div><div class="test-title">tracks total runs</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertScheduler > statistics tracking</div><div class="test-title">tracks alerts fired</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-243" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\user\loyalty\__tests__\route.test.ts</div><div class="suite-time warn">6.18s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/loyalty > Authentication</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/loyalty > No active program</div><div class="test-title">returns not enrolled when no active program exists</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/loyalty > Successful retrieval</div><div class="test-title">returns existing loyalty data for enrolled user</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/loyalty > Successful retrieval</div><div class="test-title">auto-enrolls user when no loyalty record exists</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/loyalty > Successful retrieval</div><div class="test-title">calculates next tier correctly</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/loyalty > Successful retrieval</div><div class="test-title">returns null for next tier when at highest tier</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/loyalty > Successful retrieval</div><div class="test-title">includes referral code when available</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/loyalty > Successful retrieval</div><div class="test-title">returns all tiers with achievement status</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/user/loyalty > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.049s</div></div></div></div></details><details id="suite-244" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\monitoring\performance\__tests__\export.test.ts</div><div class="suite-time warn">6.714s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Export API > GET /api/admin/monitoring/performance/export</div><div class="test-title">returns CSV export by default</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Export API > GET /api/admin/monitoring/performance/export</div><div class="test-title">returns JSON export when format=json</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Export API > GET /api/admin/monitoring/performance/export</div><div class="test-title">returns error for invalid format</div><div class="test-status">passed</div><div class="test-duration">0.032s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Export API > GET /api/admin/monitoring/performance/export</div><div class="test-title">returns error for invalid time range</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Export API > GET /api/admin/monitoring/performance/export</div><div class="test-title">passes path filter to query</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Export API > GET /api/admin/monitoring/performance/export</div><div class="test-title">requires admin authentication</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Performance Export API > GET /api/admin/monitoring/performance/export</div><div class="test-title">requires admin role</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-245" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\cache\__tests__\cache-keys.test.ts</div><div class="suite-time warn">5.206s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">CacheKeys > CACHE_VERSION</div><div class="test-title">should be defined</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CacheKeys > CACHE_VERSION</div><div class="test-title">should start with "v"</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CacheKeys > products</div><div class="test-title">should generate versioned product keys</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CacheKeys > products</div><div class="test-title">should handle all() with and without params</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CacheKeys > products</div><div class="test-title">should generate category product keys</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CacheKeys > products</div><div class="test-title">should encode search queries</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CacheKeys > categories</div><div class="test-title">should generate versioned category keys</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CacheKeys > content</div><div class="test-title">should generate versioned content keys</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CacheKeys > user</div><div class="test-title">should generate versioned user keys</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CacheKeys > orders</div><div class="test-title">should generate versioned order keys</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CacheKeys > search</div><div class="test-title">should generate versioned search keys</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">InvalidationPatterns > allProducts</div><div class="test-title">should return pattern for all products</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">InvalidationPatterns > product</div><div class="test-title">should return array of keys to invalidate for a product</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">InvalidationPatterns > category</div><div class="test-title">should return array of keys to invalidate for a category</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">InvalidationPatterns > user</div><div class="test-title">should return array of keys to invalidate for a user</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">InvalidationPatterns > hero</div><div class="test-title">should return array of keys to invalidate for hero content</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CacheTTL</div><div class="test-title">should have correct TTL values in seconds</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">RecommendedTTL</div><div class="test-title">should have recommended TTLs for different data types</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-246" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\animations\__tests__\transitions.test.ts</div><div class="suite-time">4.951s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > prefersReducedMotion</div><div class="test-title">returns false when window is undefined (SSR)</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > prefersReducedMotion</div><div class="test-title">returns false when user does not prefer reduced motion</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > prefersReducedMotion</div><div class="test-title">returns true when user prefers reduced motion</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > prefersReducedMotion</div><div class="test-title">queries the correct media query</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > getTransitionDuration</div><div class="test-title">returns original duration when reduced motion is not preferred</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > getTransitionDuration</div><div class="test-title">returns minimal duration when reduced motion is preferred</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > easing</div><div class="test-title">has easeIn curve</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > easing</div><div class="test-title">has easeOut curve</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > easing</div><div class="test-title">has easeInOut curve</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > easing</div><div class="test-title">has bounce curve</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > transitions presets</div><div class="test-title">has fast transition preset</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > transitions presets</div><div class="test-title">has base transition preset</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > transitions presets</div><div class="test-title">has slow transition preset</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > transitions presets</div><div class="test-title">has bounce transition preset</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > transitions presets</div><div class="test-title">has spring transition preset</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > transitions presets</div><div class="test-title">has springBounce transition preset</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > fade animations</div><div class="test-title">fadeIn has correct variants</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > fade animations</div><div class="test-title">fadeInUp has correct variants</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > fade animations</div><div class="test-title">fadeInDown has correct variants</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > fade animations</div><div class="test-title">fadeInLeft has correct variants</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > fade animations</div><div class="test-title">fadeInRight has correct variants</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > scale animations</div><div class="test-title">scaleIn has correct variants</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > scale animations</div><div class="test-title">scaleInBounce has correct variants</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > slide animations</div><div class="test-title">slideInUp has correct variants</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > slide animations</div><div class="test-title">slideInDown has correct variants</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > slide animations</div><div class="test-title">slideInLeft has correct variants</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > slide animations</div><div class="test-title">slideInRight has correct variants</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > page transitions</div><div class="test-title">pageTransition has initial state</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > page transitions</div><div class="test-title">pageTransition has animate state with transition</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > page transitions</div><div class="test-title">pageTransition has exit state</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > page transitions</div><div class="test-title">pageFade has correct variants</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > stagger animations</div><div class="test-title">staggerContainer has empty initial state</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > stagger animations</div><div class="test-title">staggerContainer animate has stagger children config</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > stagger animations</div><div class="test-title">staggerItem has correct variants</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > hover/tap animations</div><div class="test-title">hoverScale scales up</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > hover/tap animations</div><div class="test-title">tapScale scales down</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > hover/tap animations</div><div class="test-title">hoverLift moves up</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > component-specific animations</div><div class="test-title">modalVariants has correct structure</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > component-specific animations</div><div class="test-title">backdropVariants has correct structure</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > component-specific animations</div><div class="test-title">toastVariants has correct structure</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">transitions > component-specific animations</div><div class="test-title">dropdownVariants has correct structure</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details><details id="suite-247" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\event-tracking.test.ts</div><div class="suite-time warn">6.098s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > trackEvent</div><div class="test-title">sends event to Google Analytics</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > trackEvent</div><div class="test-title">sends event to backend API</div><div class="test-status">passed</div><div class="test-duration">0.062s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > trackEvent</div><div class="test-title">includes all required fields in backend API call</div><div class="test-status">passed</div><div class="test-duration">0.076s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > trackEvent</div><div class="test-title">handles missing optional parameters</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > trackEvent</div><div class="test-title">does not call gtag when window.gtag is undefined</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > trackEvent</div><div class="test-title">silently handles fetch errors</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > productView</div><div class="test-title">tracks product view with correct parameters</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > addToCart</div><div class="test-title">tracks add to cart with price as value</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > removeFromCart</div><div class="test-title">tracks remove from cart with productId as value</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > updateCartQuantity</div><div class="test-title">tracks quantity update with new quantity as value</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > addToWishlist</div><div class="test-title">tracks wishlist add with productId as value</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > removeFromWishlist</div><div class="test-title">tracks wishlist remove with productId as value</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > initiateCheckout</div><div class="test-title">tracks checkout initiation with cart value and item count</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > checkoutStep</div><div class="test-title">tracks checkout step with step name and number</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > completePurchase</div><div class="test-title">tracks purchase completion with order details</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > search</div><div class="test-title">tracks search query with result count</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > applyFilter</div><div class="test-title">tracks filter application with type and value</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > removeFilter</div><div class="test-title">tracks filter removal with filter type</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > changeSort</div><div class="test-title">tracks sort option change</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > signIn</div><div class="test-title">tracks sign in with method</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > signIn</div><div class="test-title">tracks sign in with OAuth provider</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > signUp</div><div class="test-title">tracks sign up with method</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > signOut</div><div class="test-title">tracks sign out</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > pageView</div><div class="test-title">tracks page view with path</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > pageView</div><div class="test-title">tracks page view with path and title</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">event-tracking > eventTracking convenience functions > error</div><div class="test-title">tracks error with type and message</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-248" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\categories\__tests__\route.test.ts</div><div class="suite-time warn">5.338s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > GET /api/admin/categories</div><div class="test-title">returns all categories with hierarchy and counts</div><div class="test-status">passed</div><div class="test-duration">0.08s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > GET /api/admin/categories</div><div class="test-title">returns categories ordered by title</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > GET /api/admin/categories</div><div class="test-title">returns empty array when no categories exist</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > GET /api/admin/categories > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.08s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > POST /api/admin/categories > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > POST /api/admin/categories > Authentication & Authorization</div><div class="test-title">returns 401 for session without email or id</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > POST /api/admin/categories > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > POST /api/admin/categories > Validation</div><div class="test-title">returns 400 when title is missing</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > POST /api/admin/categories > Validation</div><div class="test-title">returns 400 when slug is missing</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > POST /api/admin/categories > Successful creation</div><div class="test-title">creates category with required fields only</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > POST /api/admin/categories > Successful creation</div><div class="test-title">invalidates categories cache after creation</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > POST /api/admin/categories > Successful creation</div><div class="test-title">creates category with all fields</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > POST /api/admin/categories > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.071s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/categories > POST /api/admin/categories > Error handling</div><div class="test-title">returns generic error for non-Error objects</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div></div></details><details id="suite-249" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\products\search\suggestions\__tests__\route.test.ts</div><div class="suite-time warn">6.459s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search/suggestions > Query validation</div><div class="test-title">returns empty array when query is missing</div><div class="test-status">passed</div><div class="test-duration">0.098s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search/suggestions > Query validation</div><div class="test-title">returns empty array when query is too short</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search/suggestions > Successful search</div><div class="test-title">returns suggestions for valid query</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search/suggestions > Successful search</div><div class="test-title">respects custom limit parameter</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search/suggestions > Successful search</div><div class="test-title">uses default limit of 10</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search/suggestions > Successful search</div><div class="test-title">handles exact 2-character query</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search/suggestions > Empty results</div><div class="test-title">returns empty array when no suggestions found</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/products/search/suggestions > Error handling</div><div class="test-title">returns 500 on service error</div><div class="test-status">passed</div><div class="test-duration">0.227s</div></div></div></div></details><details id="suite-250" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useToast.test.tsx</div><div class="suite-time warn">7.39s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">useToast > Basic functionality</div><div class="test-title">should return context value when used within provider</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useToast > Basic functionality</div><div class="test-title">should throw error when used outside provider</div><div class="test-status">passed</div><div class="test-duration">0.217s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useSuccessToast</div><div class="test-title">should add success toast with message and default title</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useSuccessToast</div><div class="test-title">should add success toast with custom title</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useErrorToast</div><div class="test-title">should add error toast with message and default title</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useErrorToast</div><div class="test-title">should add error toast with custom title</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useWarningToast</div><div class="test-title">should add warning toast with message and default title</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useWarningToast</div><div class="test-title">should add warning toast with custom title</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useInfoToast</div><div class="test-title">should add info toast with message and no title</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useInfoToast</div><div class="test-title">should add info toast with custom title</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Hook stability</div><div class="test-title">should return stable references</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div></div></details><details id="suite-251" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\MetricTypeSelector\MetricTypeSelector.test.tsx</div><div class="suite-time warn">6.463s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">MetricTypeSelector > Rendering</div><div class="test-title">renders without crashing</div><div class="test-status">passed</div><div class="test-duration">0.177s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">MetricTypeSelector > Rendering</div><div class="test-title">renders all metric type options</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">MetricTypeSelector > Rendering</div><div class="test-title">highlights the selected option</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">MetricTypeSelector > Interaction</div><div class="test-title">calls onChange when clicking a different option</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">MetricTypeSelector > Interaction</div><div class="test-title">calls onChange with correct value for each option</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">MetricTypeSelector > Interaction</div><div class="test-title">does not call onChange when disabled</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">MetricTypeSelector > Accessibility</div><div class="test-title">has proper role for button group</div><div class="test-status">passed</div><div class="test-duration">0.061s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">MetricTypeSelector > Accessibility</div><div class="test-title">buttons have aria-pressed attribute</div><div class="test-status">passed</div><div class="test-duration">0.507s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">MetricTypeSelector > Accessibility</div><div class="test-title">buttons have title for description</div><div class="test-status">passed</div><div class="test-duration">0.066s</div></div></div></div></details><details id="suite-252" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\core\__tests__\format.test.ts</div><div class="suite-time">2.297s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatNumber</div><div class="test-title">formats integers with comma separators</div><div class="test-status">passed</div><div class="test-duration">0.075s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatNumber</div><div class="test-title">formats decimals with specified precision</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatNumber</div><div class="test-title">handles zero decimal places by default</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatNumber</div><div class="test-title">handles small numbers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatNumber</div><div class="test-title">handles negative numbers</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatNumber</div><div class="test-title">handles large numbers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatNumber</div><div class="test-title">handles decimal precision edge cases</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCurrency</div><div class="test-title">formats currency with dollar sign and default 2 decimals</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCurrency</div><div class="test-title">handles zero value</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCurrency</div><div class="test-title">handles small amounts</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCurrency</div><div class="test-title">handles large amounts</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCurrency</div><div class="test-title">handles different currencies</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCurrency</div><div class="test-title">handles negative amounts</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatPercentage</div><div class="test-title">converts decimal to percentage</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatPercentage</div><div class="test-title">handles zero</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatPercentage</div><div class="test-title">handles values greater than 1</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatPercentage</div><div class="test-title">handles decimal precision</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatPercentage</div><div class="test-title">handles small percentages</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatPercentage</div><div class="test-title">handles negative percentages</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCompact</div><div class="test-title">formats thousands as K</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCompact</div><div class="test-title">formats millions as M</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCompact</div><div class="test-title">formats billions as B</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCompact</div><div class="test-title">does not compact small numbers</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCompact</div><div class="test-title">handles negative numbers</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCompact</div><div class="test-title">formats trillions as T</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCompact</div><div class="test-title">handles edge case numbers near boundaries</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCompact</div><div class="test-title">handles very small positive numbers</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCompact</div><div class="test-title">handles Infinity</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCompact</div><div class="test-title">handles -Infinity</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatNumber edge cases</div><div class="test-title">handles Infinity</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatNumber edge cases</div><div class="test-title">handles -Infinity</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatNumber edge cases</div><div class="test-title">handles NaN</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatNumber edge cases</div><div class="test-title">handles very large decimal places</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatNumber edge cases</div><div class="test-title">handles zero with decimal places</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCurrency edge cases</div><div class="test-title">handles very large currency amounts</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCurrency edge cases</div><div class="test-title">handles fractional cents with rounding</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCurrency edge cases</div><div class="test-title">handles JPY (no decimals)</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCurrency edge cases</div><div class="test-title">handles Infinity</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatCurrency edge cases</div><div class="test-title">handles NaN</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatPercentage edge cases</div><div class="test-title">handles very large percentages</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatPercentage edge cases</div><div class="test-title">handles very small percentages with precision</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatPercentage edge cases</div><div class="test-title">handles Infinity</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatPercentage edge cases</div><div class="test-title">handles NaN</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">format utilities > formatPercentage edge cases</div><div class="test-title">handles rounding at boundaries</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></details><details id="suite-253" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\monitoring\errors\export\__tests__\route.test.ts</div><div class="suite-time">4.756s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Export API - /api/admin/monitoring/errors/export > GET /api/admin/monitoring/errors/export</div><div class="test-title">returns CSV export by default</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Export API - /api/admin/monitoring/errors/export > GET /api/admin/monitoring/errors/export</div><div class="test-title">returns JSON export when format=json</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Export API - /api/admin/monitoring/errors/export > GET /api/admin/monitoring/errors/export</div><div class="test-title">applies category filter to export</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Export API - /api/admin/monitoring/errors/export > GET /api/admin/monitoring/errors/export</div><div class="test-title">applies level filter to export</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Export API - /api/admin/monitoring/errors/export > GET /api/admin/monitoring/errors/export</div><div class="test-title">applies search filter to export</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Export API - /api/admin/monitoring/errors/export > GET /api/admin/monitoring/errors/export</div><div class="test-title">applies date range filter to export</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Export API - /api/admin/monitoring/errors/export > GET /api/admin/monitoring/errors/export</div><div class="test-title">escapes CSV special characters properly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Export API - /api/admin/monitoring/errors/export > GET /api/admin/monitoring/errors/export</div><div class="test-title">escapes newlines in CSV stack traces</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Export API - /api/admin/monitoring/errors/export > GET /api/admin/monitoring/errors/export</div><div class="test-title">limits export to 10000 records</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Export API - /api/admin/monitoring/errors/export > GET /api/admin/monitoring/errors/export</div><div class="test-title">returns 401 for unauthenticated requests</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Export API - /api/admin/monitoring/errors/export > GET /api/admin/monitoring/errors/export</div><div class="test-title">returns 403 for non-admin users</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors Export API - /api/admin/monitoring/errors/export > GET /api/admin/monitoring/errors/export</div><div class="test-title">handles empty export gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-254" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\dev-tools\__tests__\output-parsers.test.ts</div><div class="suite-time warn">6.036s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Output Parsers > parseJestOutput</div><div class="test-title">should parse successful test output</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Output Parsers > parseJestOutput</div><div class="test-title">should parse failed test output</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Output Parsers > parseJestOutput</div><div class="test-title">should handle empty output</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Output Parsers > parseJestOutput</div><div class="test-title">should extract duration from output</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Output Parsers > parseEslintOutput</div><div class="test-title">should parse clean ESLint output</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Output Parsers > parseEslintOutput</div><div class="test-title">should parse ESLint errors from JSON format</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Output Parsers > parseEslintOutput</div><div class="test-title">should parse ESLint text format errors</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Output Parsers > parseEslintOutput</div><div class="test-title">should parse ESLint text format with mixed errors and warnings</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Output Parsers > parseTypescriptOutput</div><div class="test-title">should parse clean TypeScript output</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Output Parsers > parseTypescriptOutput</div><div class="test-title">should parse TypeScript errors</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Output Parsers > parseTypescriptOutput</div><div class="test-title">should extract error count from summary</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Output Parsers > parseTypescriptOutput</div><div class="test-title">should handle multiple errors in same file</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-255" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\affiliates\__tests__\sales.test.ts</div><div class="suite-time warn">5.56s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Sales API > GET /api/admin/affiliates/sales</div><div class="test-title">should return 401 if not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Sales API > GET /api/admin/affiliates/sales</div><div class="test-title">should return 403 if not admin</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Sales API > GET /api/admin/affiliates/sales</div><div class="test-title">should return sales list for admin</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Sales API > GET /api/admin/affiliates/sales</div><div class="test-title">should filter by status</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Sales API > POST /api/admin/affiliates/sales</div><div class="test-title">should return 401 if not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Sales API > POST /api/admin/affiliates/sales</div><div class="test-title">should return 403 if not admin</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Sales API > POST /api/admin/affiliates/sales</div><div class="test-title">should approve a sale</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Sales API > POST /api/admin/affiliates/sales</div><div class="test-title">should reject a sale with reason</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Sales API > POST /api/admin/affiliates/sales</div><div class="test-title">should require rejection reason for reject action</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Affiliate Sales API > POST /api/admin/affiliates/sales</div><div class="test-title">should return error if approval fails</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div></div></details><details id="suite-256" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\web-vitals.test.ts</div><div class="suite-time warn">5.316s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > LCP (Largest Contentful Paint)</div><div class="test-title">should return 'good' for LCP <= 2500ms</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > LCP (Largest Contentful Paint)</div><div class="test-title">should return 'needs-improvement' for LCP > 2500ms and <= 4000ms</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > LCP (Largest Contentful Paint)</div><div class="test-title">should return 'poor' for LCP > 4000ms</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > FID (First Input Delay)</div><div class="test-title">should return 'good' for FID <= 100ms</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > FID (First Input Delay)</div><div class="test-title">should return 'needs-improvement' for FID > 100ms and <= 300ms</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > FID (First Input Delay)</div><div class="test-title">should return 'poor' for FID > 300ms</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > CLS (Cumulative Layout Shift)</div><div class="test-title">should return 'good' for CLS <= 0.1</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > CLS (Cumulative Layout Shift)</div><div class="test-title">should return 'needs-improvement' for CLS > 0.1 and <= 0.25</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > CLS (Cumulative Layout Shift)</div><div class="test-title">should return 'poor' for CLS > 0.25</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > FCP (First Contentful Paint)</div><div class="test-title">should return 'good' for FCP <= 1800ms</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > FCP (First Contentful Paint)</div><div class="test-title">should return 'needs-improvement' for FCP > 1800ms and <= 3000ms</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > FCP (First Contentful Paint)</div><div class="test-title">should return 'poor' for FCP > 3000ms</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > TTFB (Time to First Byte)</div><div class="test-title">should return 'good' for TTFB <= 800ms</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > TTFB (Time to First Byte)</div><div class="test-title">should return 'needs-improvement' for TTFB > 800ms and <= 1800ms</div><div class="test-status">passed</div><div class="test-duration">0.031s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > TTFB (Time to First Byte)</div><div class="test-title">should return 'poor' for TTFB > 1800ms</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > INP (Interaction to Next Paint)</div><div class="test-title">should return 'good' for INP <= 200ms</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > INP (Interaction to Next Paint)</div><div class="test-title">should return 'needs-improvement' for INP > 200ms and <= 500ms</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getRating > INP (Interaction to Next Paint)</div><div class="test-title">should return 'poor' for INP > 500ms</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > reportWebVital</div><div class="test-title">should log warning for poor metrics</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > reportWebVital</div><div class="test-title">should log info for needs-improvement metrics</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > reportWebVital</div><div class="test-title">should log debug for good metrics</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > onReportWebVitals</div><div class="test-title">should process valid web vitals metrics</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > onReportWebVitals</div><div class="test-title">should ignore unknown metric names</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWebVitalsSummary</div><div class="test-title">should return summary with all metric thresholds</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Web Vitals Utilities > getWebVitalsSummary</div><div class="test-title">should include threshold values for each metric</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-257" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\monitoring\errors\__tests__\route.test.ts</div><div class="suite-time warn">6.03s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors API - /api/admin/monitoring/errors > GET /api/admin/monitoring/errors</div><div class="test-title">returns paginated error list with default parameters</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors API - /api/admin/monitoring/errors > GET /api/admin/monitoring/errors</div><div class="test-title">applies pagination parameters</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors API - /api/admin/monitoring/errors > GET /api/admin/monitoring/errors</div><div class="test-title">applies category filter</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors API - /api/admin/monitoring/errors > GET /api/admin/monitoring/errors</div><div class="test-title">applies level filter</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors API - /api/admin/monitoring/errors > GET /api/admin/monitoring/errors</div><div class="test-title">applies search filter</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors API - /api/admin/monitoring/errors > GET /api/admin/monitoring/errors</div><div class="test-title">applies date range filter</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors API - /api/admin/monitoring/errors > GET /api/admin/monitoring/errors</div><div class="test-title">applies sorting</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors API - /api/admin/monitoring/errors > GET /api/admin/monitoring/errors</div><div class="test-title">sanitizes invalid sortBy field</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors API - /api/admin/monitoring/errors > GET /api/admin/monitoring/errors</div><div class="test-title">enforces maximum limit of 100</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors API - /api/admin/monitoring/errors > GET /api/admin/monitoring/errors</div><div class="test-title">returns 401 for unauthenticated requests</div><div class="test-status">passed</div><div class="test-duration">0.134s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors API - /api/admin/monitoring/errors > GET /api/admin/monitoring/errors</div><div class="test-title">returns 403 for non-admin users</div><div class="test-status">passed</div><div class="test-duration">0.127s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Admin Monitoring Errors API - /api/admin/monitoring/errors > GET /api/admin/monitoring/errors</div><div class="test-title">returns empty results when no errors exist</div><div class="test-status">passed</div><div class="test-duration">0.234s</div></div></div></div></details><details id="suite-258" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\database\__tests__\dataLoaders.test.ts</div><div class="suite-time warn">5.13s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">DataLoaders > createCategoryLoader</div><div class="test-title">loads a single category by id</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DataLoaders > createCategoryLoader</div><div class="test-title">loads multiple categories with correct ordering</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DataLoaders > createCategoryLoader</div><div class="test-title">returns null for non-existent category</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DataLoaders > createCategoryLoader</div><div class="test-title">can clear cache</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DataLoaders > createCategoryLoader</div><div class="test-title">can clear all cache</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DataLoaders > createProductLoader</div><div class="test-title">loads products by id</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DataLoaders > createReviewCountLoader</div><div class="test-title">loads review counts for products</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DataLoaders > createReviewCountLoader</div><div class="test-title">returns 0 for products with no reviews</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DataLoaders > createReviewAverageLoader</div><div class="test-title">loads average ratings for products</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DataLoaders > createReviewAverageLoader</div><div class="test-title">returns 0 for products with no reviews</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DataLoaders > createReviewAverageLoader</div><div class="test-title">handles null average gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-259" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\redux\features\__tests__\cartSliceApi.test.ts</div><div class="suite-time warn">5.519s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Initial state</div><div class="test-title">should have empty items array</div><div class="test-status">passed</div><div class="test-duration">0.052s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Initial state</div><div class="test-title">should have loading false</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Initial state</div><div class="test-title">should have error null</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Synchronous actions > addItemToCart</div><div class="test-title">should add item to empty cart</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Synchronous actions > addItemToCart</div><div class="test-title">should increase quantity if item already exists</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Synchronous actions > addItemToCart</div><div class="test-title">should add different items separately</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Synchronous actions > removeItemFromCart</div><div class="test-title">should remove item from cart</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Synchronous actions > removeItemFromCart</div><div class="test-title">should not affect other items</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Synchronous actions > removeItemFromCart</div><div class="test-title">should handle removing non-existent item</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Synchronous actions > updateCartItemQuantity</div><div class="test-title">should update item quantity</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Synchronous actions > updateCartItemQuantity</div><div class="test-title">should not affect non-existent items</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Synchronous actions > removeAllItemsFromCart</div><div class="test-title">should clear all items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Synchronous actions > clearError</div><div class="test-title">should clear error state</div><div class="test-status">passed</div><div class="test-duration">0.039s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > fetchCart</div><div class="test-title">should set loading true when pending</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > fetchCart</div><div class="test-title">should populate items on success</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > fetchCart</div><div class="test-title">should set error on failure</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > fetchCart</div><div class="test-title">should handle non-Error rejection</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > addToCartAsync</div><div class="test-title">should set loading true when pending</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > addToCartAsync</div><div class="test-title">should update cart items on success</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > addToCartAsync</div><div class="test-title">should set error on failure</div><div class="test-status">passed</div><div class="test-duration">0.034s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > addToCartAsync</div><div class="test-title">should handle non-Error rejection</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > updateCartItemAsync</div><div class="test-title">should set loading true when pending</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > updateCartItemAsync</div><div class="test-title">should update cart items on success</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > updateCartItemAsync</div><div class="test-title">should set error on failure</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > updateCartItemAsync</div><div class="test-title">should handle non-Error rejection</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > removeFromCartAsync</div><div class="test-title">should set loading true when pending</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > removeFromCartAsync</div><div class="test-title">should update cart items on success</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > removeFromCartAsync</div><div class="test-title">should set error on failure</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Async thunks > removeFromCartAsync</div><div class="test-title">should handle non-Error rejection</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Selectors > selectCartItems</div><div class="test-title">should return cart items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Selectors > selectCartItems</div><div class="test-title">should return empty array for empty cart</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Selectors > selectTotalPrice</div><div class="test-title">should calculate total price correctly</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Selectors > selectTotalPrice</div><div class="test-title">should return 0 for empty cart</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Selectors > selectTotalPrice</div><div class="test-title">should handle decimal prices</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Selectors > selectCartItemCount</div><div class="test-title">should count total items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Selectors > selectCartItemCount</div><div class="test-title">should return 0 for empty cart</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > State transitions</div><div class="test-title">should transition through pending -> fulfilled states</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > State transitions</div><div class="test-title">should transition through pending -> rejected states</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > State transitions</div><div class="test-title">should clear error when starting new request</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Edge cases</div><div class="test-title">should handle empty API response</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Edge cases</div><div class="test-title">should handle rapid successive requests</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cart API Slice > Edge cases</div><div class="test-title">should maintain state integrity through complex operations</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-260" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\promotions\active\__tests__\route.test.ts</div><div class="suite-time">2.307s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active</div><div class="test-title">returns active promotions</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active</div><div class="test-title">filters active promotions by date</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active</div><div class="test-title">filters by promotion type when provided</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active</div><div class="test-title">respects limit parameter</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active</div><div class="test-title">uses default limit of 20</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active</div><div class="test-title">computes discount labels for percentage discounts</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active</div><div class="test-title">computes discount labels for fixed amount discounts</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active</div><div class="test-title">computes daysRemaining correctly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active</div><div class="test-title">marks promotions expiring within 3 days as expiring soon</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active</div><div class="test-title">orders by priority desc and endDate asc</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active</div><div class="test-title">returns empty array when no active promotions</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/promotions/active</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.132s</div></div></div></div></details><details id="suite-261" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\inventory\__tests__\route.test.ts</div><div class="suite-time warn">6.435s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/inventory > GET /api/admin/inventory</div><div class="test-title">returns 501 not implemented</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/inventory > POST /api/admin/inventory</div><div class="test-title">returns 501 not implemented</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div></div></details><details id="suite-262" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\payments\create-intent\__tests__\route.test.ts</div><div class="suite-time warn">6.068s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments/create-intent > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments/create-intent > Authentication</div><div class="test-title">returns 401 for session without user id</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments/create-intent > Successful payment intent creation</div><div class="test-title">creates payment intent for valid order</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments/create-intent > Successful payment intent creation</div><div class="test-title">converts amount to cents for Stripe</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments/create-intent > Successful payment intent creation</div><div class="test-title">includes order metadata in payment intent</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments/create-intent > Order validation</div><div class="test-title">returns 404 for non-existent order</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments/create-intent > Order validation</div><div class="test-title">returns 403 for order belonging to different user</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments/create-intent > Request validation</div><div class="test-title">rejects missing orderId</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments/create-intent > Request validation</div><div class="test-title">rejects negative amount</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments/create-intent > Request validation</div><div class="test-title">rejects zero amount</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments/create-intent > Request validation</div><div class="test-title">rejects missing amount</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments/create-intent > Error handling</div><div class="test-title">returns 500 on Stripe error</div><div class="test-status">passed</div><div class="test-duration">0.127s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/payments/create-intent > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div></div></details><details id="suite-263" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\support\chatbot\__tests__\route.test.ts</div><div class="suite-time warn">6.739s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/chatbot > Welcome message</div><div class="test-title">returns welcome message when welcome flag is true</div><div class="test-status">passed</div><div class="test-duration">0.058s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/chatbot > Chat messages</div><div class="test-title">generates response for track order intent</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/chatbot > Chat messages</div><div class="test-title">generates response with suggested articles for FAQ queries</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/chatbot > Chat messages</div><div class="test-title">returns quick actions in response</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/chatbot > Validation</div><div class="test-title">returns error for empty message</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/chatbot > Validation</div><div class="test-title">returns error for message exceeding max length</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/chatbot > Validation</div><div class="test-title">returns error for missing message and welcome flag</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/support/chatbot > Error handling</div><div class="test-title">handles errors from chatbot response generation</div><div class="test-status">passed</div><div class="test-duration">0.084s</div></div></div></div></details><details id="suite-264" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\charts\StatusCodeChart\StatusCodeChart.test.tsx</div><div class="suite-time warn">5.191s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusCodeChart > Rendering</div><div class="test-title">renders without crashing</div><div class="test-status">passed</div><div class="test-duration">0.128s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusCodeChart > Rendering</div><div class="test-title">displays the chart title</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusCodeChart > Rendering</div><div class="test-title">renders the bar chart</div><div class="test-status">passed</div><div class="test-duration">0.063s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusCodeChart > Rendering</div><div class="test-title">displays success rate percentage</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusCodeChart > Rendering</div><div class="test-title">displays legend items</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusCodeChart > Loading State</div><div class="test-title">displays loading message when isLoading is true</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusCodeChart > Empty State</div><div class="test-title">displays empty message when no data</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusCodeChart > Error Rate Display</div><div class="test-title">shows 4xx rate when present</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusCodeChart > Error Rate Display</div><div class="test-title">shows 5xx rate when present</div><div class="test-status">passed</div><div class="test-duration">0.056s</div></div></div></div></details><details id="suite-265" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\usePasswordChange.test.ts</div><div class="suite-time warn">6.803s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > Initial state</div><div class="test-title">should initialize with savingPassword false</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > Initial state</div><div class="test-title">should initialize with passwordMessage null</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > Initial state</div><div class="test-title">should expose changePassword function</div><div class="test-status">passed</div><div class="test-duration">0.038s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > Initial state</div><div class="test-title">should expose setPasswordMessage function</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > setPasswordMessage</div><div class="test-title">should allow setting a message</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > setPasswordMessage</div><div class="test-title">should allow clearing the message</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > changePassword - successful change</div><div class="test-title">should call API with correct parameters</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > changePassword - successful change</div><div class="test-title">should show success message on successful change</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > changePassword - successful change</div><div class="test-title">should set savingPassword to false after success</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > changePassword - API error</div><div class="test-title">should show API error message</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > changePassword - API error</div><div class="test-title">should show default error message when API returns no error text</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > changePassword - API error</div><div class="test-title">should handle wrapped error format</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > changePassword - network error</div><div class="test-title">should handle fetch exceptions</div><div class="test-status">passed</div><div class="test-duration">0.073s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > Loading state</div><div class="test-title">should set savingPassword to true while submitting</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">usePasswordChange > Loading state</div><div class="test-title">should clear previous message when starting new submission</div><div class="test-status">passed</div><div class="test-duration">0.041s</div></div></div></div></details><details id="suite-266" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\errors\__tests__\error-messages.test.ts</div><div class="suite-time">2.229s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > default messages</div><div class="test-title">should return network error message</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > default messages</div><div class="test-title">should return validation error message</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > default messages</div><div class="test-title">should return authentication error message</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > default messages</div><div class="test-title">should return authorization error message</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > default messages</div><div class="test-title">should return not found error message</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > default messages</div><div class="test-title">should return server error message</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > default messages</div><div class="test-title">should return payment error message</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > default messages</div><div class="test-title">should return rate limit error message</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > default messages</div><div class="test-title">should return unknown error message</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > context-specific messages</div><div class="test-title">should return checkout-specific server error</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > context-specific messages</div><div class="test-title">should return checkout-specific payment error</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > context-specific messages</div><div class="test-title">should return cart-specific not found error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > context-specific messages</div><div class="test-title">should return account-specific auth error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > context-specific messages</div><div class="test-title">should return admin-specific auth error</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > context-specific messages</div><div class="test-title">should fall back to default when context has no override</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > context-specific messages</div><div class="test-title">should fall back to default when context does not exist</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > errorMessages object</div><div class="test-title">should have all error types</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > contextMessages object</div><div class="test-title">should have checkout context</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > contextMessages object</div><div class="test-title">should have cart context</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > contextMessages object</div><div class="test-title">should have account context</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getErrorMessage > contextMessages object</div><div class="test-title">should have admin context</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></details><details id="suite-267" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\core\__tests__\pagination.test.ts</div><div class="suite-time warn">5.617s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > calculatePagination</div><div class="test-title">returns correct skip and take for page 1</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > calculatePagination</div><div class="test-title">returns correct skip for subsequent pages</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > calculatePagination</div><div class="test-title">uses default values when not provided</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > calculatePagination</div><div class="test-title">sanitizes page to minimum of 1</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > calculatePagination</div><div class="test-title">sanitizes limit to minimum of 1</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > calculatePagination</div><div class="test-title">enforces maximum limit</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > calculatePagination</div><div class="test-title">handles custom maxLimit</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > calculatePagination</div><div class="test-title">floors decimal values</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > buildPaginationMeta</div><div class="test-title">calculates total pages correctly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > buildPaginationMeta</div><div class="test-title">returns hasNextPage correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > buildPaginationMeta</div><div class="test-title">returns hasPreviousPage correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > buildPaginationMeta</div><div class="test-title">includes page, limit, and total</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > buildPaginationMeta</div><div class="test-title">handles zero total</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > buildPaginationMeta</div><div class="test-title">handles single page of results</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > createPaginatedResult</div><div class="test-title">combines data with pagination metadata</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > createPaginatedResult</div><div class="test-title">works with empty data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > createPaginatedResult</div><div class="test-title">preserves object data types</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > paginateArray</div><div class="test-title">returns first page correctly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > paginateArray</div><div class="test-title">returns middle page correctly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > paginateArray</div><div class="test-title">returns last page with partial data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > paginateArray</div><div class="test-title">handles page beyond available data</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > paginateArray</div><div class="test-title">uses default pagination values</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > paginateArray</div><div class="test-title">handles empty array</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > paginateArray</div><div class="test-title">handles array smaller than page size</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > paginateArray</div><div class="test-title">works with object arrays</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">pagination utilities > paginateArray</div><div class="test-title">sanitizes invalid page values</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-268" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\monitoring\__tests__\alertNotifications.test.ts</div><div class="suite-time warn">6.273s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > sendAlertNotification</div><div class="test-title">sends email notification when email channel is specified</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > sendAlertNotification</div><div class="test-title">logs warning when no email recipients configured</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > sendAlertNotification</div><div class="test-title">sends Slack notification when slack channel is specified</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > sendAlertNotification</div><div class="test-title">logs debug when Slack webhook not configured</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > sendAlertNotification</div><div class="test-title">sends webhook notification when webhook channel is specified</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > sendAlertNotification</div><div class="test-title">sends to multiple channels</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > sendAlertNotification</div><div class="test-title">logs warning for unknown channel</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > sendAlertNotification</div><div class="test-title">logs errors when channel fails</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > sendAlertNotification</div><div class="test-title">throws error when Slack webhook returns non-ok response</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > sendTestNotification</div><div class="test-title">sends test notification and returns success</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > sendTestNotification</div><div class="test-title">returns failure for unknown channel</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > sendTestNotification</div><div class="test-title">returns failure with error message on exception</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > sendTestNotification</div><div class="test-title">tests multiple channels</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > email formatting</div><div class="test-title">includes correct subject line for warning</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertNotifications > email formatting</div><div class="test-title">includes HTML content</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-269" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\logging\__tests__\logger.test.ts</div><div class="suite-time warn">6.15s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > logger instance</div><div class="test-title">should export a logger singleton</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > logger instance</div><div class="test-title">should have all logging methods</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > logger instance</div><div class="test-title">should have specialized logging methods</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > withContext / child</div><div class="test-title">should create a child logger with context</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > withContext / child</div><div class="test-title">should have alias child method</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > withContext / child</div><div class="test-title">should return context from getContext</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > time utility</div><div class="test-title">should return a function that logs duration</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > specialized methods</div><div class="test-title">should log HTTP request with correct level based on status</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > specialized methods</div><div class="test-title">should log database operations</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > specialized methods</div><div class="test-title">should log external API calls</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > specialized methods</div><div class="test-title">should log business events</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > specialized methods</div><div class="test-title">should log security events with severity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > specialized methods</div><div class="test-title">should log performance metrics</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > specialized methods</div><div class="test-title">should log audit events</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > specialized methods</div><div class="test-title">should log auth events</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > error handling</div><div class="test-title">should handle Error objects in error method</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > error handling</div><div class="test-title">should handle non-Error objects in error method</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Logger > error handling</div><div class="test-title">should handle Error objects in fatal method</div><div class="test-status">passed</div><div class="test-duration">0.094s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">loggingConfig</div><div class="test-title">should have required configuration properties</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">loggingConfig</div><div class="test-title">should have sensitive fields in redact paths</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">shouldLog</div><div class="test-title">should return true for levels at or above configured level</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getLogLevelPriority</div><div class="test-title">should return correct priorities for all levels</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">getLogLevelPriority</div><div class="test-title">should have fatal as highest priority (lowest number)</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-270" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\monitoring\__tests__\logger.test.ts</div><div class="suite-time">4.93s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > debug</div><div class="test-title">calls console.debug with formatted message</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > debug</div><div class="test-title">includes context in debug output when provided</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > info</div><div class="test-title">logs info messages to console</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > info</div><div class="test-title">includes timestamp in log output</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > info</div><div class="test-title">includes category in log output</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > info</div><div class="test-title">includes message in log output</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > info</div><div class="test-title">appends context as key=value pairs</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > info</div><div class="test-title">handles undefined context gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > info</div><div class="test-title">handles empty context object</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > info</div><div class="test-title">serializes object values in context</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > warn</div><div class="test-title">logs warnings to console</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > warn</div><div class="test-title">includes context object in warning</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > error</div><div class="test-title">logs errors to console</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > error</div><div class="test-title">logs error object with stack trace</div><div class="test-status">passed</div><div class="test-duration">0.085s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > error</div><div class="test-title">handles non-Error objects</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > error</div><div class="test-title">includes context in error log</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > time</div><div class="test-title">returns a function to end timing</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > time</div><div class="test-title">logs duration when end function called</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > log categories</div><div class="test-title">accepts API category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > log categories</div><div class="test-title">accepts DATABASE category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > log categories</div><div class="test-title">accepts AUTH category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > log categories</div><div class="test-title">accepts CLIENT category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > log categories</div><div class="test-title">accepts PAYMENT category</div><div class="test-status">passed</div><div class="test-duration">0.055s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > log categories</div><div class="test-title">accepts ORDER category</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > log categories</div><div class="test-title">accepts CART category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > log categories</div><div class="test-title">accepts PRODUCT category</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > log categories</div><div class="test-title">accepts SUPPORT category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > log categories</div><div class="test-title">accepts SYSTEM category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > log categories</div><div class="test-title">accepts PERFORMANCE category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">monitoringLogger > log categories</div><div class="test-title">accepts CRON category</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-271" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\user\affiliate\__tests__\route.test.ts</div><div class="suite-time warn">5.993s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">User Affiliate API > GET /api/user/affiliate</div><div class="test-title">should return 401 if not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">User Affiliate API > GET /api/user/affiliate</div><div class="test-title">should return null if user has no affiliate account</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">User Affiliate API > GET /api/user/affiliate</div><div class="test-title">should return affiliate data with dashboard for active affiliate</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">User Affiliate API > GET /api/user/affiliate</div><div class="test-title">should not return dashboard for pending affiliate</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">User Affiliate API > POST /api/user/affiliate</div><div class="test-title">should return 401 if not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">User Affiliate API > POST /api/user/affiliate</div><div class="test-title">should register a new affiliate</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">User Affiliate API > POST /api/user/affiliate</div><div class="test-title">should return error if already registered</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">User Affiliate API > POST /api/user/affiliate</div><div class="test-title">should validate website URL</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">User Affiliate API > PUT /api/user/affiliate</div><div class="test-title">should return 401 if not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">User Affiliate API > PUT /api/user/affiliate</div><div class="test-title">should return 404 if no affiliate account</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">User Affiliate API > PUT /api/user/affiliate</div><div class="test-title">should update affiliate profile</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div></div></details><details id="suite-272" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\loyalty\__tests__\rewards.test.ts</div><div class="suite-time">3.569s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > validateRedemption</div><div class="test-title">rejects zero or negative points</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > validateRedemption</div><div class="test-title">rejects negative points</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > validateRedemption</div><div class="test-title">rejects when no loyalty account exists</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > validateRedemption</div><div class="test-title">rejects when insufficient points</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > validateRedemption</div><div class="test-title">rejects when no active program</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > validateRedemption</div><div class="test-title">approves valid redemption</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > validateRedemption</div><div class="test-title">approves exact point balance redemption</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > redeemPoints</div><div class="test-title">throws error for invalid redemption</div><div class="test-status">passed</div><div class="test-duration">0.13s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > redeemPoints</div><div class="test-title">successfully redeems points</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > redeemPoints</div><div class="test-title">creates transaction with custom description</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > redeemPoints</div><div class="test-title">creates transaction with default description</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > redeemPoints</div><div class="test-title">handles redemption with different redemption rate</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > calculateMinimumPointsForDiscount</div><div class="test-title">calculates minimum points needed</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > calculateMinimumPointsForDiscount</div><div class="test-title">rounds up fractional points</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > calculateMinimumPointsForDiscount</div><div class="test-title">throws error when no active program</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > calculateMinimumPointsForDiscount</div><div class="test-title">handles different redemption rates</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > calculateMaximumDiscount</div><div class="test-title">calculates maximum discount available</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > calculateMaximumDiscount</div><div class="test-title">returns 0 when no loyalty account</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > calculateMaximumDiscount</div><div class="test-title">returns 0 when no active program</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > calculateMaximumDiscount</div><div class="test-title">rounds to 2 decimal places</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > awardBonusPoints</div><div class="test-title">creates loyalty record if not exists</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > awardBonusPoints</div><div class="test-title">awards bonus points successfully</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > checkRewardEligibility</div><div class="test-title">returns true when user has enough points</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > checkRewardEligibility</div><div class="test-title">returns true when user has exact points</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > checkRewardEligibility</div><div class="test-title">returns false when user has insufficient points</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > checkRewardEligibility</div><div class="test-title">returns false when no loyalty account</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > Error handling</div><div class="test-title">handles database errors in validateRedemption</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > Error handling</div><div class="test-title">handles database errors in redeemPoints</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Loyalty Rewards > Error handling</div><div class="test-title">handles database errors in awardBonusPoints</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-273" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\reports\__tests__\route.test.ts</div><div class="suite-time warn">6.985s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reports > Authentication & Authorization</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reports > Authentication & Authorization</div><div class="test-title">returns 403 for non-admin user</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reports > JSON format (default)</div><div class="test-title">returns analytics summary as JSON</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reports > JSON format (default)</div><div class="test-title">respects type parameter</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reports > CSV format</div><div class="test-title">returns CSV when format=csv</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reports > CSV format</div><div class="test-title">generates orders CSV section</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reports > CSV format</div><div class="test-title">generates customers CSV section</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reports > CSV format</div><div class="test-title">generates products CSV section</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reports > CSV format</div><div class="test-title">generates sales CSV section</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reports > CSV format</div><div class="test-title">includes all sections for summary type</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reports > Error handling</div><div class="test-title">returns 500 on analytics error</div><div class="test-status">passed</div><div class="test-duration">0.116s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/reports > Error handling</div><div class="test-title">returns generic error for non-Error objects</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div></div></details><details id="suite-274" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\ecommerce\__tests__\reviews.test.ts</div><div class="suite-time warn">6.109s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > createReview</div><div class="test-title">creates a review successfully</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > createReview</div><div class="test-title">throws error for invalid rating (too low)</div><div class="test-status">passed</div><div class="test-duration">0.172s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > createReview</div><div class="test-title">throws error for invalid rating (too high)</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > createReview</div><div class="test-title">throws error when product not found</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > createReview</div><div class="test-title">throws error when user already reviewed product</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > createReview</div><div class="test-title">creates review without comment</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getProductReviews</div><div class="test-title">returns paginated reviews with defaults</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getProductReviews</div><div class="test-title">applies pagination correctly</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getProductReviews</div><div class="test-title">filters by rating</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getProductReviews</div><div class="test-title">sorts by newest by default</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getProductReviews</div><div class="test-title">sorts by rating high to low</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getProductReviews</div><div class="test-title">sorts by rating low to high</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getProductRating</div><div class="test-title">returns zero rating when no reviews exist</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getProductRating</div><div class="test-title">calculates average rating correctly</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getProductRating</div><div class="test-title">calculates rating distribution correctly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > markReviewHelpful</div><div class="test-title">marks review as helpful</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > markReviewHelpful</div><div class="test-title">marks review as not helpful</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > markReviewHelpful</div><div class="test-title">throws error when review not found</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getReviewHelpfulness</div><div class="test-title">calculates helpfulness statistics correctly</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getReviewHelpfulness</div><div class="test-title">returns zero percentage when no votes</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > hasUserMarkedReview</div><div class="test-title">returns true if user marked helpful</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > hasUserMarkedReview</div><div class="test-title">returns false if user marked not helpful</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > hasUserMarkedReview</div><div class="test-title">returns null if user has not voted</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > updateReview</div><div class="test-title">updates review successfully</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > updateReview</div><div class="test-title">throws error when review not found</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > updateReview</div><div class="test-title">throws error when updating another user's review</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > updateReview</div><div class="test-title">throws error for invalid rating</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > deleteReview</div><div class="test-title">deletes review successfully</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > deleteReview</div><div class="test-title">throws error when review not found</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > deleteReview</div><div class="test-title">throws error when deleting another user's review</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getUserReviews</div><div class="test-title">returns user reviews with pagination</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getUserReviews</div><div class="test-title">applies custom pagination</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getRecentlyReviewedProducts</div><div class="test-title">returns recently reviewed products</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getRecentlyReviewedProducts</div><div class="test-title">uses default limit of 6</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getTopRatedProducts</div><div class="test-title">returns top-rated products sorted by rating</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > getTopRatedProducts</div><div class="test-title">excludes products with no reviews</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > requestReviewsForOrder</div><div class="test-title">sends review request when user has reviews enabled</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > requestReviewsForOrder</div><div class="test-title">does not send request when user has reviews disabled</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">reviews > requestReviewsForOrder</div><div class="test-title">throws error when order not found</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-275" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\shared\ErrorBoundary\__tests__\FullPageError.test.tsx</div><div class="suite-time warn">7.282s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">FullPageError</div><div class="test-title">renders the error page with correct heading</div><div class="test-status">passed</div><div class="test-duration">0.193s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FullPageError</div><div class="test-title">displays error message text</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FullPageError</div><div class="test-title">displays error ID when provided</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FullPageError</div><div class="test-title">does not display error ID when not provided</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FullPageError</div><div class="test-title">renders Try Again button</div><div class="test-status">passed</div><div class="test-duration">0.528s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FullPageError</div><div class="test-title">renders Reset button when onReset is provided</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FullPageError</div><div class="test-title">calls onReset when Reset button is clicked</div><div class="test-status">passed</div><div class="test-duration">0.077s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FullPageError</div><div class="test-title">does not render Reset button when onReset is not provided</div><div class="test-status">passed</div><div class="test-duration">0.064s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FullPageError</div><div class="test-title">renders Go to Homepage button</div><div class="test-status">passed</div><div class="test-duration">0.043s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FullPageError</div><div class="test-title">renders contact support link</div><div class="test-status">passed</div><div class="test-duration">0.07s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FullPageError</div><div class="test-title">applies dark mode styles</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">FullPageError</div><div class="test-title">renders warning icon</div><div class="test-status">passed</div><div class="test-duration">0.068s</div></div></div></div></details><details id="suite-276" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\wishlist\[id]\__tests__\route.test.ts</div><div class="suite-time warn">6.691s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/wishlist/[id] > Authentication</div><div class="test-title">returns 401 for unauthenticated request</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/wishlist/[id] > Authentication</div><div class="test-title">returns 401 for session without user id</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/wishlist/[id] > Item not found</div><div class="test-title">returns 404 when wishlist item does not exist</div><div class="test-status">passed</div><div class="test-duration">0.057s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/wishlist/[id] > Successful deletion</div><div class="test-title">deletes wishlist item successfully</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/wishlist/[id] > Error handling</div><div class="test-title">returns 500 on database error during find</div><div class="test-status">passed</div><div class="test-duration">0.125s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">DELETE /api/wishlist/[id] > Error handling</div><div class="test-title">returns 500 on database error during delete</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div></div></details><details id="suite-277" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\inventory\[productId]\__tests__\route.test.ts</div><div class="suite-time warn">7.678s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/inventory/[productId] > GET /api/admin/inventory/[productId]</div><div class="test-title">returns 501 not implemented</div><div class="test-status">passed</div><div class="test-duration">0.08s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">/api/admin/inventory/[productId] > PUT /api/admin/inventory/[productId]</div><div class="test-title">returns 501 not implemented</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div></div></details><details id="suite-278" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\auth\__tests__\verify-email.test.ts</div><div class="suite-time">1.999s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/auth/verify-email > Successful verification</div><div class="test-title">verifies email with valid token</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/auth/verify-email > Successful verification</div><div class="test-title">uses transaction for updating user and creating preferences</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/auth/verify-email > Successful verification</div><div class="test-title">clears verification token after verification</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/auth/verify-email > Already verified</div><div class="test-title">redirects to signin with already verified status</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/auth/verify-email > Invalid token handling</div><div class="test-title">redirects with error for invalid token</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/auth/verify-email > Invalid token handling</div><div class="test-title">redirects with error for missing token</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/auth/verify-email > Invalid token handling</div><div class="test-title">redirects with error for empty token</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/auth/verify-email > Error handling</div><div class="test-title">redirects with server error on database failure</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/auth/verify-email > Error handling</div><div class="test-title">redirects with server error on update failure</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/auth/verify-email > Base URL configuration</div><div class="test-title">uses NEXTAUTH_URL for redirects</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/auth/verify-email > Base URL configuration</div><div class="test-title">falls back to localhost when NEXTAUTH_URL not set</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/auth/verify-email > Token lookup</div><div class="test-title">looks up user by verification token</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-279" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\monitoring\performance\__tests__\slow.test.ts</div><div class="suite-time warn">7.081s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Slow Requests API > GET /api/admin/monitoring/performance/slow</div><div class="test-title">returns slow requests with default threshold</div><div class="test-status">passed</div><div class="test-duration">0.083s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Slow Requests API > GET /api/admin/monitoring/performance/slow</div><div class="test-title">uses custom threshold when provided</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Slow Requests API > GET /api/admin/monitoring/performance/slow</div><div class="test-title">supports pagination parameters</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Slow Requests API > GET /api/admin/monitoring/performance/slow</div><div class="test-title">returns error for invalid threshold</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Slow Requests API > GET /api/admin/monitoring/performance/slow</div><div class="test-title">returns error for invalid page</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Slow Requests API > GET /api/admin/monitoring/performance/slow</div><div class="test-title">returns error for invalid limit</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Slow Requests API > GET /api/admin/monitoring/performance/slow</div><div class="test-title">supports path filter</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Slow Requests API > GET /api/admin/monitoring/performance/slow</div><div class="test-title">requires admin authentication</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-280" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\auth\__tests__\reset-password.test.ts</div><div class="suite-time warn">5.259s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Successful password reset</div><div class="test-title">resets password with valid token</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Successful password reset</div><div class="test-title">hashes new password before storage</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Successful password reset</div><div class="test-title">marks token as used after successful reset</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Successful password reset</div><div class="test-title">resets failed login attempts on password change</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Invalid token handling</div><div class="test-title">rejects expired token</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Invalid token handling</div><div class="test-title">rejects already used token</div><div class="test-status">passed</div><div class="test-duration">0.021s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Invalid token handling</div><div class="test-title">rejects non-matching token</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Password validation</div><div class="test-title">rejects password shorter than 8 characters</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Password validation</div><div class="test-title">rejects password without uppercase letter</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Password validation</div><div class="test-title">rejects password without lowercase letter</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Password validation</div><div class="test-title">rejects password without number</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Password validation</div><div class="test-title">rejects password longer than 100 characters</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Password validation</div><div class="test-title">accepts valid strong password</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Missing required fields</div><div class="test-title">rejects missing token</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Missing required fields</div><div class="test-title">rejects missing password</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Missing required fields</div><div class="test-title">rejects empty token</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Rate limiting</div><div class="test-title">enforces rate limit after 10 requests</div><div class="test-status">passed</div><div class="test-duration">0.044s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.082s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/auth/reset-password > Error handling</div><div class="test-title">returns 500 on transaction error</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div></div></details><details id="suite-281" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\redux\features\__tests__\wishlistSlice.test.ts</div><div class="suite-time warn">7.315s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > addItemToWishlist (optimistic)</div><div class="test-title">should add item to empty wishlist</div><div class="test-status">passed</div><div class="test-duration">0.047s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > addItemToWishlist (optimistic)</div><div class="test-title">should not add duplicate item</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > addItemToWishlist (optimistic)</div><div class="test-title">should add different items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > addItemToWishlist (optimistic)</div><div class="test-title">should preserve image data</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > addItemToWishlist (optimistic)</div><div class="test-title">should handle items without images</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > addItemToWishlist (optimistic)</div><div class="test-title">should handle items without status</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > addItemToWishlist (optimistic)</div><div class="test-title">should preserve all item properties</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > removeItemFromWishlist (optimistic)</div><div class="test-title">should remove item from wishlist</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > removeItemFromWishlist (optimistic)</div><div class="test-title">should not affect other items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > removeItemFromWishlist (optimistic)</div><div class="test-title">should handle removing non-existent item</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > removeItemFromWishlist (optimistic)</div><div class="test-title">should remove correct item when multiple items exist</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > removeItemFromWishlist (optimistic)</div><div class="test-title">should handle removing from empty wishlist</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > clearWishlistError</div><div class="test-title">should clear error state</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > fetchWishlist async thunk</div><div class="test-title">should set loading state on pending</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > fetchWishlist async thunk</div><div class="test-title">should update items on fulfilled</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > fetchWishlist async thunk</div><div class="test-title">should set error on rejected</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > addToWishlistAsync thunk</div><div class="test-title">should clear error on pending</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > addToWishlistAsync thunk</div><div class="test-title">should set error on rejected</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > removeFromWishlistAsync thunk</div><div class="test-title">should remove item on fulfilled</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > removeFromWishlistAsync thunk</div><div class="test-title">should set error on rejected</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > clearWishlistAsync thunk</div><div class="test-title">should clear all items on fulfilled</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > clearWishlistAsync thunk</div><div class="test-title">should set error on rejected</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > Wishlist combinations</div><div class="test-title">should handle complex add/remove sequence</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > Wishlist combinations</div><div class="test-title">should maintain data integrity through operations</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > Wishlist combinations</div><div class="test-title">should handle adding after clearing</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > Edge cases</div><div class="test-title">should handle item with zero price</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > Edge cases</div><div class="test-title">should handle item with very large price</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > Edge cases</div><div class="test-title">should handle item with long title</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > Backward compatibility</div><div class="test-title">addItemToWishlist should be an alias for addItemToWishlistOptimistic</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Wishlist Slice > Backward compatibility</div><div class="test-title">removeItemFromWishlist should be an alias for removeItemFromWishlistOptimistic</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-282" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\monitoring\__tests__\alertEngine.test.ts</div><div class="suite-time warn">6.033s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertEngine > evaluateAlerts</div><div class="test-title">returns empty array when no configs are enabled</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertEngine > evaluateAlerts</div><div class="test-title">evaluates a config with sufficient metrics</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertEngine > evaluateAlerts</div><div class="test-title">returns insufficient samples when below minSamples</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertEngine > evaluateAlerts</div><div class="test-title">triggers warning alert when threshold exceeded</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertEngine > evaluateAlerts</div><div class="test-title">triggers critical alert when threshold exceeded</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertEngine > evaluateAlerts</div><div class="test-title">respects cooldown period</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">alertEngine > getAlertStats</div><div class="test-title">returns alert statistics</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div></div></details><details id="suite-283" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\payment-utils.test.ts</div><div class="suite-time warn">6.612s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCardDetails > valid card details</div><div class="test-title">should validate a valid Visa card</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCardDetails > valid card details</div><div class="test-title">should validate a valid Mastercard</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCardDetails > valid card details</div><div class="test-title">should accept 4-digit CVC (Amex style)</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCardDetails > card number validation (Luhn algorithm)</div><div class="test-title">should reject invalid card number</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCardDetails > card number validation (Luhn algorithm)</div><div class="test-title">should accept card number with spaces (cleaned by Luhn)</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCardDetails > card number validation (Luhn algorithm)</div><div class="test-title">should accept card number with dashes</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCardDetails > expiration date validation</div><div class="test-title">should reject expired card</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCardDetails > expiration date validation</div><div class="test-title">should reject card expiring in current month</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCardDetails > expiration date validation</div><div class="test-title">should accept card expiring in future month</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCardDetails > CVC validation</div><div class="test-title">should reject CVC with less than 3 digits</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCardDetails > CVC validation</div><div class="test-title">should reject CVC with more than 4 digits</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCardDetails > CVC validation</div><div class="test-title">should reject CVC with non-numeric characters</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCardDetails > multiple errors</div><div class="test-title">should return all errors when multiple fields are invalid</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">formatCardNumber</div><div class="test-title">should format 16-digit number into groups of 4</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">formatCardNumber</div><div class="test-title">should handle already formatted number</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">formatCardNumber</div><div class="test-title">should handle partial number</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">formatCardNumber</div><div class="test-title">should handle empty string</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">formatCardNumber</div><div class="test-title">should handle 15-digit Amex number</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">maskCardNumber</div><div class="test-title">should mask all but last 4 digits</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">maskCardNumber</div><div class="test-title">should handle formatted number with spaces</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">maskCardNumber</div><div class="test-title">should handle number with dashes</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">maskCardNumber</div><div class="test-title">should show last 4 digits for shorter numbers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">processPayment</div><div class="test-title">should successfully process payment</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">processPayment</div><div class="test-title">should handle API error response</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">processPayment</div><div class="test-title">should handle API error without error message</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">processPayment</div><div class="test-title">should handle network error</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">processPayment</div><div class="test-title">should handle non-Error exceptions</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">processPayment</div><div class="test-title">should support different payment methods</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">processPayment</div><div class="test-title">should support Apple Pay</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div></div></details><details id="suite-284" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\ecommerce\__tests__\comparison.test.ts</div><div class="suite-time">2.8s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">addToComparison > adding products</div><div class="test-title">should add product to empty comparison list</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">addToComparison > adding products</div><div class="test-title">should add product to existing comparison list</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">addToComparison > adding products</div><div class="test-title">should not add duplicate product</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">addToComparison > adding products</div><div class="test-title">should return same array reference when adding duplicate</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">addToComparison > max products limit</div><div class="test-title">should respect default max of 5 products</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">addToComparison > max products limit</div><div class="test-title">should remove oldest product when at max capacity</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">addToComparison > max products limit</div><div class="test-title">should respect custom max products limit</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">addToComparison > max products limit</div><div class="test-title">should work with max of 2</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">addToComparison > max products limit</div><div class="test-title">should work with max of 1</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">addToComparison > edge cases</div><div class="test-title">should handle adding to list at capacity minus 1</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">addToComparison > edge cases</div><div class="test-title">should handle adding same product when at capacity</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">removeFromComparison</div><div class="test-title">should remove product from list</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">removeFromComparison</div><div class="test-title">should remove first product</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">removeFromComparison</div><div class="test-title">should remove last product</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">removeFromComparison</div><div class="test-title">should return empty array when removing last item</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">removeFromComparison</div><div class="test-title">should return original array when product not found</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">removeFromComparison</div><div class="test-title">should handle empty array</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">removeFromComparison</div><div class="test-title">should create new array (not mutate original)</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clearComparison</div><div class="test-title">should return empty array</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">clearComparison</div><div class="test-title">should return a new empty array each time</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">comparison workflow</div><div class="test-title">should support typical user workflow</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">comparison workflow</div><div class="test-title">should support adding and then removing same product multiple times</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-285" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\database\__tests__\batch.test.ts</div><div class="suite-time warn">6.838s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Batch Operations > batchUpdate</div><div class="test-title">updates multiple records efficiently</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Batch Operations > batchUpdate</div><div class="test-title">returns success with zero count for empty ids array</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Batch Operations > batchUpdate</div><div class="test-title">handles errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Batch Operations > batchDelete</div><div class="test-title">deletes multiple records efficiently</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Batch Operations > batchDelete</div><div class="test-title">returns success with zero count for empty ids array</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Batch Operations > batchDelete</div><div class="test-title">handles errors gracefully</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Batch Operations > batchUpsert</div><div class="test-title">upserts multiple records in a transaction</div><div class="test-status">passed</div><div class="test-duration">0.043s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Batch Operations > batchUpsert</div><div class="test-title">returns success with zero count for empty items array</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Batch Operations > batchUpsert</div><div class="test-title">handles batch size option</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-286" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\hooks\__tests__\useScrollAnimation.test.ts</div><div class="suite-time warn">6.269s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">useScrollAnimation > Return values</div><div class="test-title">returns ref and controls</div><div class="test-status">passed</div><div class="test-duration">0.084s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useScrollAnimation > Return values</div><div class="test-title">ref starts as null</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useScrollAnimation > Default options</div><div class="test-title">uses once: true by default</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useScrollAnimation > Default options</div><div class="test-title">uses amount: 0.2 by default</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useScrollAnimation > Custom options</div><div class="test-title">accepts custom once option</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useScrollAnimation > Custom options</div><div class="test-title">accepts custom amount option</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useScrollAnimation > Custom options</div><div class="test-title">accepts both options</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useScrollAnimation > Animation triggers</div><div class="test-title">starts animate when element comes into view</div><div class="test-status">passed</div><div class="test-duration">0.023s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useScrollAnimation > Animation triggers</div><div class="test-title">does not animate when element is not in view</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useScrollAnimation > Animation triggers</div><div class="test-title">resets to initial when once is false and element leaves view</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useScrollAnimation > Animation triggers</div><div class="test-title">does not reset when once is true and element leaves view</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useScrollAnimation > Re-renders</div><div class="test-title">maintains ref identity across re-renders</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useScrollAnimation > Re-renders</div><div class="test-title">maintains controls identity across re-renders</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useIsInView > Return values</div><div class="test-title">returns ref and isInView boolean</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useIsInView > Return values</div><div class="test-title">ref starts as null</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useIsInView > Default options</div><div class="test-title">uses once: false by default</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useIsInView > Default options</div><div class="test-title">uses amount: 0.2 by default</div><div class="test-status">passed</div><div class="test-duration">0.045s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useIsInView > Custom options</div><div class="test-title">accepts custom once option</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useIsInView > Custom options</div><div class="test-title">accepts custom amount option</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useIsInView > InView state</div><div class="test-title">returns true when element is in view</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useIsInView > InView state</div><div class="test-title">returns false when element is not in view</div><div class="test-status">passed</div><div class="test-duration">0.048s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">useIsInView > Re-renders</div><div class="test-title">updates isInView when visibility changes</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div></div></details><details id="suite-287" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\observability\__tests__\slo-alerts.test.ts</div><div class="suite-time">2.233s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > defaultSLOAlertConfig</div><div class="test-title">has expected default values</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > checkAndAlertSLOs</div><div class="test-title">returns empty result when disabled</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > checkAndAlertSLOs</div><div class="test-title">checks SLOs and creates alerts for critical status</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > checkAndAlertSLOs</div><div class="test-title">does not alert on warning when alertOnWarning is false</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > checkAndAlertSLOs</div><div class="test-title">alerts on warning when alertOnWarning is true</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > checkAndAlertSLOs</div><div class="test-title">rate limits repeated alerts for the same SLO</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > checkAndAlertSLOs</div><div class="test-title">resolves alerts for SLOs that are now healthy</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > checkAndAlertSLOs</div><div class="test-title">updates existing alert instead of creating new one</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > sendSLOAlertEmail</div><div class="test-title">sends email with correct format</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > sendSLOAlertEmail</div><div class="test-title">includes dashboard link in email</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > sendSLOAlertEmail</div><div class="test-title">returns false when email fails</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > sendSLOAlertEmail</div><div class="test-title">uses amber color for warning status</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > getActiveSLOAlerts</div><div class="test-title">returns active (unresolved) alerts</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > getRecentSLOAlerts</div><div class="test-title">returns alerts from specified time period</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > getRecentSLOAlerts</div><div class="test-title">defaults to 24 hours</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > resolveSLOAlert</div><div class="test-title">resolves alert by ID</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > resolveSLOAlert</div><div class="test-title">includes resolvedBy user ID when provided</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > getSLOAlertStats</div><div class="test-title">returns aggregated statistics</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > getSLOAlertStats</div><div class="test-title">defaults to 7 days</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Alert Service > clearSLOAlertCooldowns</div><div class="test-title">clears rate limiting cache</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div></div></details><details id="suite-288" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\admin\pricing\__tests__\route.test.ts</div><div class="suite-time warn">6.267s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/pricing > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/pricing > Authentication & Authorization</div><div class="test-title">returns 403 when user is not admin</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/pricing > Successful retrieval</div><div class="test-title">returns all pricing rules for admin</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/pricing > Successful retrieval</div><div class="test-title">returns empty array when no rules exist</div><div class="test-status">passed</div><div class="test-duration">0.051s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/pricing > Successful retrieval</div><div class="test-title">supports filtering by type</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/pricing > Successful retrieval</div><div class="test-title">supports filtering by active status</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/admin/pricing > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.142s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/pricing > Authentication & Authorization</div><div class="test-title">returns 401 when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/pricing > Authentication & Authorization</div><div class="test-title">returns 403 when not admin</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/pricing > Validation</div><div class="test-title">returns 400 for missing name</div><div class="test-status">passed</div><div class="test-duration">0.042s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/pricing > Validation</div><div class="test-title">returns 400 for invalid discount type</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/pricing > Validation</div><div class="test-title">returns 400 for invalid rule type</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/pricing > Validation</div><div class="test-title">returns 400 for negative discount value</div><div class="test-status">passed</div><div class="test-duration">0.029s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/pricing > Validation</div><div class="test-title">returns 400 for priority > 100</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/pricing > Successful creation</div><div class="test-title">creates pricing rule successfully</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/pricing > Successful creation</div><div class="test-title">creates rule with target products</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/pricing > Successful creation</div><div class="test-title">creates rule with scheduling</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/pricing > Successful creation</div><div class="test-title">creates rule with A/B testing</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">POST /api/admin/pricing > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-289" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\core\__tests__\serializers.test.ts</div><div class="suite-time warn">5.474s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling primitives</div><div class="test-title">should return null as-is</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling primitives</div><div class="test-title">should return undefined as-is</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling primitives</div><div class="test-title">should return strings as-is</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling primitives</div><div class="test-title">should return numbers as-is</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling primitives</div><div class="test-title">should return booleans as-is</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling Date objects</div><div class="test-title">should convert Date to ISO string</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling Date objects</div><div class="test-title">should handle Date objects in objects</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling Date objects</div><div class="test-title">should handle Date objects in arrays</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling arrays</div><div class="test-title">should serialize arrays of primitives</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling arrays</div><div class="test-title">should serialize arrays of objects</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling arrays</div><div class="test-title">should handle nested arrays</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling objects</div><div class="test-title">should serialize simple objects</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling objects</div><div class="test-title">should serialize nested objects</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > handling objects</div><div class="test-title">should serialize objects with array properties</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">serializePrismaObject > real-world Prisma object scenarios</div><div class="test-title">should serialize a typical product object</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > handling primitives</div><div class="test-title">should return null as-is</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > handling primitives</div><div class="test-title">should return undefined as-is</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > handling primitives</div><div class="test-title">should return non-date strings as-is</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > handling primitives</div><div class="test-title">should return numbers as-is</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > handling primitives</div><div class="test-title">should return booleans as-is</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > handling ISO date strings</div><div class="test-title">should convert ISO string to Date object</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > handling ISO date strings</div><div class="test-title">should convert ISO date strings in objects</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > handling ISO date strings</div><div class="test-title">should convert ISO date strings in arrays</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > handling arrays</div><div class="test-title">should deserialize arrays of objects with dates</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > handling arrays</div><div class="test-title">should handle nested arrays</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > handling objects</div><div class="test-title">should deserialize nested objects with dates</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > handling objects</div><div class="test-title">should deserialize objects with array properties</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > roundtrip serialization</div><div class="test-title">should correctly roundtrip serialize and deserialize</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > edge cases</div><div class="test-title">should not convert date-like strings that do not match ISO format</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">deserializePrismaObject > edge cases</div><div class="test-title">should not convert random strings</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-290" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\charts\ResponseTimeChart\ResponseTimeChart.test.tsx</div><div class="suite-time warn">5.976s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Rendering</div><div class="test-title">renders without crashing</div><div class="test-status">passed</div><div class="test-duration">0.146s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Rendering</div><div class="test-title">displays the chart title</div><div class="test-status">passed</div><div class="test-duration">0.036s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Rendering</div><div class="test-title">displays time range in title</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Rendering</div><div class="test-title">renders the chart container</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Rendering</div><div class="test-title">renders line chart</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Loading State</div><div class="test-title">displays loading message when isLoading is true</div><div class="test-status">passed</div><div class="test-duration">0.01s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Loading State</div><div class="test-title">does not render chart when loading</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Empty State</div><div class="test-title">displays empty message when no data</div><div class="test-status">passed</div><div class="test-duration">0.09s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Empty State</div><div class="test-title">does not render chart when empty</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Time Range Variations</div><div class="test-title">renders correctly with 1h time range</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Time Range Variations</div><div class="test-title">renders correctly with 6h time range</div><div class="test-status">passed</div><div class="test-duration">0.054s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Time Range Variations</div><div class="test-title">renders correctly with 24h time range</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Time Range Variations</div><div class="test-title">renders correctly with 7d time range</div><div class="test-status">passed</div><div class="test-duration">0.081s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > Time Range Variations</div><div class="test-title">renders correctly with 30d time range</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">ResponseTimeChart > String timestamps</div><div class="test-title">handles string timestamps correctly</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div></div></details><details id="suite-291" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\__tests__\demo-mode.test.ts</div><div class="suite-time">2.756s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Demo Mode Utility > isDemoMode</div><div class="test-title">should return false when NEXT_PUBLIC_DEMO_MODE is not set</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Demo Mode Utility > isDemoMode</div><div class="test-title">should return false when NEXT_PUBLIC_DEMO_MODE is 'false'</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Demo Mode Utility > isDemoMode</div><div class="test-title">should return true when NEXT_PUBLIC_DEMO_MODE is 'true'</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Demo Mode Utility > isDemoMode</div><div class="test-title">should return false for other values</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Demo Mode Utility > getDemoModeConfig</div><div class="test-title">should return disabled config when demo mode is off</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Demo Mode Utility > getDemoModeConfig</div><div class="test-title">should return enabled config when demo mode is on</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Demo Mode Utility > getDemoModeConfig</div><div class="test-title">should have consistent enabled and skipPayment values</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Demo Mode Utility > getClientDemoMode</div><div class="test-title">should return false when NEXT_PUBLIC_DEMO_MODE is not set (server-side)</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Demo Mode Utility > getClientDemoMode</div><div class="test-title">should return true when NEXT_PUBLIC_DEMO_MODE is 'true' (server-side)</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Demo Mode Utility > getClientDemoMode</div><div class="test-title">should return false when NEXT_PUBLIC_DEMO_MODE is 'false' (server-side)</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-292" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\api-docs\__tests__\validator.test.ts</div><div class="suite-time">4.764s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > validateResponse</div><div class="test-title">should validate a correct response</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > validateResponse</div><div class="test-title">should report missing required field</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > validateResponse</div><div class="test-title">should allow missing optional fields</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > validateResponse</div><div class="test-title">should report type mismatch</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > validateResponse</div><div class="test-title">should report undocumented status code</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > validateResponse</div><div class="test-title">should report undocumented fields</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > validateResponse</div><div class="test-title">should validate nested objects</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > validateResponse</div><div class="test-title">should report nested object type mismatches</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > validateResponse</div><div class="test-title">should validate arrays</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > validateResponse</div><div class="test-title">should validate enum values</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > validateResponse</div><div class="test-title">should calculate coverage correctly</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > validateResponse</div><div class="test-title">should handle null response body</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > validateResponse</div><div class="test-title">should handle empty response body</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > getValidationSummary</div><div class="test-title">should return success status for valid response</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > getValidationSummary</div><div class="test-title">should return error status for errors</div><div class="test-status">passed</div><div class="test-duration">0.06s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > getValidationSummary</div><div class="test-title">should return warning status for warnings only</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > getValidationSummary</div><div class="test-title">should return success with info for undocumented fields</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > generateResponseDiff</div><div class="test-title">should generate a readable diff report</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > generateResponseDiff</div><div class="test-title">should include issues in the diff</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">API Response Validator > generateResponseDiff</div><div class="test-title">should indicate when no issues found</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-293" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\features\admin\monitoring\charts\EndpointDistributionChart\EndpointDistributionChart.test.tsx</div><div class="suite-time">3.477s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointDistributionChart > Rendering</div><div class="test-title">renders without crashing</div><div class="test-status">passed</div><div class="test-duration">0.129s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointDistributionChart > Rendering</div><div class="test-title">displays the chart title</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointDistributionChart > Rendering</div><div class="test-title">renders the pie chart</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointDistributionChart > Loading State</div><div class="test-title">displays loading message when isLoading is true</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointDistributionChart > Empty State</div><div class="test-title">displays empty message when no data</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">EndpointDistributionChart > Max Slices</div><div class="test-title">groups endpoints when exceeding maxSlices</div><div class="test-status">passed</div><div class="test-duration">0.053s</div></div></div></div></details><details id="suite-294" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\database\__tests__\pagination.test.ts</div><div class="suite-time warn">6.582s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cursor Pagination > cursorPaginate</div><div class="test-title">returns first page of results without cursor</div><div class="test-status">passed</div><div class="test-duration">0.015s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cursor Pagination > cursorPaginate</div><div class="test-title">returns subsequent page with cursor</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cursor Pagination > cursorPaginate</div><div class="test-title">handles empty result set</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cursor Pagination > cursorPaginate</div><div class="test-title">returns correct hasMore when less items than limit</div><div class="test-status">passed</div><div class="test-duration">0.024s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cursor Pagination > cursorPaginate</div><div class="test-title">passes where clause to model</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cursor Pagination > cursorPaginate</div><div class="test-title">passes orderBy clause to model</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cursor Pagination > cursorPaginate</div><div class="test-title">requests limit + 1 items to check for more</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Cursor Pagination > cursorPaginate</div><div class="test-title">handles backward pagination direction</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-295" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\auth\__tests__\auth-utils.test.ts</div><div class="suite-time warn">5.943s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getServerSession</div><div class="test-title">exports auth as getServerSession</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAuth</div><div class="test-title">returns session when user is authenticated</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAuth</div><div class="test-title">throws error when session is null</div><div class="test-status">passed</div><div class="test-duration">0.105s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAuth</div><div class="test-title">throws error when session exists but user is missing</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAuth</div><div class="test-title">throws error when session exists but user.id is missing</div><div class="test-status">passed</div><div class="test-duration">0.04s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAuth</div><div class="test-title">throws error when user.id is null</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAuth</div><div class="test-title">throws error when user.id is undefined</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAuth</div><div class="test-title">throws error when user.id is 0</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAuth</div><div class="test-title">accepts valid user.id</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAdminRole</div><div class="test-title">returns session when user is admin</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAdminRole</div><div class="test-title">throws Unauthorized when session is null</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAdminRole</div><div class="test-title">throws Unauthorized when user is missing</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAdminRole</div><div class="test-title">throws Forbidden when user is not admin</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAdminRole</div><div class="test-title">throws Forbidden when role is undefined</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAdminRole</div><div class="test-title">throws Forbidden when role is null</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAdminRole</div><div class="test-title">throws Forbidden when role is empty string</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAdminRole</div><div class="test-title">is case-sensitive for role check</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > requireAdminRole</div><div class="test-title">accepts ADMIN role exactly</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > handleAuthError</div><div class="test-title">returns 401 response for Unauthorized error</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > handleAuthError</div><div class="test-title">returns 403 response for Forbidden error</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > handleAuthError</div><div class="test-title">returns 403 response for any error containing Forbidden</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > handleAuthError</div><div class="test-title">returns null for non-auth errors</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > handleAuthError</div><div class="test-title">returns null for generic errors</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > handleAuthError</div><div class="test-title">handles errors with empty message</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > handleAuthError</div><div class="test-title">preserves full error message in Forbidden response</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getCurrentUserId</div><div class="test-title">returns user ID when authenticated</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getCurrentUserId</div><div class="test-title">throws error when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getCurrentUserId</div><div class="test-title">throws error when user.id is missing</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getCurrentUserId</div><div class="test-title">throws error when user.id is null</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getCurrentUserId</div><div class="test-title">returns correct ID for different user IDs</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getCurrentUserRole</div><div class="test-title">returns ADMIN role when user is admin</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getCurrentUserRole</div><div class="test-title">returns CUSTOMER role when user is customer</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getCurrentUserRole</div><div class="test-title">defaults to CUSTOMER when role is undefined</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getCurrentUserRole</div><div class="test-title">defaults to CUSTOMER when role is null</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getCurrentUserRole</div><div class="test-title">defaults to CUSTOMER when role is empty string</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getCurrentUserRole</div><div class="test-title">throws error when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getCurrentUserRole</div><div class="test-title">throws error when user is missing</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > getCurrentUserRole</div><div class="test-title">returns exact role value when set</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > Integration scenarios</div><div class="test-title">handles complete authentication flow</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > Integration scenarios</div><div class="test-title">handles admin authentication flow</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > Integration scenarios</div><div class="test-title">handles unauthenticated user across all functions</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > Integration scenarios</div><div class="test-title">handles error responses consistently</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > Edge cases</div><div class="test-title">handles session with extra properties</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > Edge cases</div><div class="test-title">handles auth function throwing error</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">auth-utils > Edge cases</div><div class="test-title">handles numeric user IDs as strings</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-296" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\monitoring\__tests__\sanitize.test.ts</div><div class="suite-time warn">5.564s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > password redaction</div><div class="test-title">redacts password= patterns</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > password redaction</div><div class="test-title">redacts password: patterns</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > token redaction</div><div class="test-title">redacts Bearer tokens</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > token redaction</div><div class="test-title">redacts api_key patterns</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > token redaction</div><div class="test-title">redacts access_token patterns</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > PII redaction</div><div class="test-title">redacts email addresses</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > PII redaction</div><div class="test-title">redacts phone numbers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > PII redaction</div><div class="test-title">redacts SSN patterns</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > PII redaction</div><div class="test-title">redacts credit card numbers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > database connection strings</div><div class="test-title">redacts MySQL connection strings</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > database connection strings</div><div class="test-title">redacts PostgreSQL connection strings</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > AWS credentials</div><div class="test-title">redacts AWS access keys</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > IP addresses</div><div class="test-title">redacts IP addresses</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > edge cases</div><div class="test-title">handles empty string</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > edge cases</div><div class="test-title">handles null/undefined</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > edge cases</div><div class="test-title">preserves non-sensitive data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeErrorData > edge cases</div><div class="test-title">handles multiple sensitive patterns</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeMetadata > sensitive key redaction</div><div class="test-title">redacts password keys</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeMetadata > sensitive key redaction</div><div class="test-title">redacts token keys</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeMetadata > sensitive key redaction</div><div class="test-title">redacts apiKey variants</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeMetadata > sensitive key redaction</div><div class="test-title">redacts keys containing sensitive words</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeMetadata > value sanitization</div><div class="test-title">sanitizes string values</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeMetadata > value sanitization</div><div class="test-title">passes through non-string values</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeMetadata > nested objects</div><div class="test-title">recursively sanitizes nested objects</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeMetadata > arrays</div><div class="test-title">sanitizes strings in arrays</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeMetadata > arrays</div><div class="test-title">sanitizes objects in arrays</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeError</div><div class="test-title">sanitizes complete error object</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">sanitizeError</div><div class="test-title">preserves original object structure</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-297" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\security\__tests__\security-config.test.ts</div><div class="suite-time">2.796s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > PASSWORD_CONFIG</div><div class="test-title">has bcrypt rounds >= 12 (OWASP recommendation)</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > PASSWORD_CONFIG</div><div class="test-title">has minimum password length >= 8</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > PASSWORD_CONFIG</div><div class="test-title">has maximum password length to prevent DoS</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > PASSWORD_CONFIG</div><div class="test-title">requires uppercase letters</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > PASSWORD_CONFIG</div><div class="test-title">requires lowercase letters</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > PASSWORD_CONFIG</div><div class="test-title">requires numbers</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > PASSWORD_CONFIG</div><div class="test-title">has all expected properties</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > SESSION_CONFIG</div><div class="test-title">has max age of at least 1 hour</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > SESSION_CONFIG</div><div class="test-title">has max age of at most 30 days</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > SESSION_CONFIG</div><div class="test-title">has update age less than max age</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > SESSION_CONFIG</div><div class="test-title">has secure cookies flag</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > SESSION_CONFIG</div><div class="test-title">has all expected properties</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > TOKEN_CONFIG</div><div class="test-title">has password reset expiry between 30 minutes and 24 hours</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > TOKEN_CONFIG</div><div class="test-title">has email verification expiry between 1 hour and 7 days</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > TOKEN_CONFIG</div><div class="test-title">has CSRF token expiry between 30 minutes and 24 hours</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > TOKEN_CONFIG</div><div class="test-title">has token bytes >= 32 (256 bits of entropy)</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > TOKEN_CONFIG</div><div class="test-title">has all expected properties</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > HEADERS_CONFIG</div><div class="test-title">has CSP configuration</div><div class="test-status">passed</div><div class="test-duration">0.016s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > HEADERS_CONFIG</div><div class="test-title">CSP includes self directive</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > HEADERS_CONFIG</div><div class="test-title">CSP allows Stripe for payments</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > HEADERS_CONFIG</div><div class="test-title">has HSTS max age of at least 1 year</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > HEADERS_CONFIG</div><div class="test-title">has all expected properties</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > Configuration Immutability</div><div class="test-title">PASSWORD_CONFIG values are readonly</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > Configuration Immutability</div><div class="test-title">SESSION_CONFIG values are readonly</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > Configuration Immutability</div><div class="test-title">TOKEN_CONFIG values are readonly</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > Security Best Practices</div><div class="test-title">bcrypt rounds are computationally expensive enough</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > Security Best Practices</div><div class="test-title">token bytes provide sufficient entropy</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Security Configuration > Security Best Practices</div><div class="test-title">HSTS max age is at least 1 year (recommended)</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></details><details id="suite-298" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\admin\monitoring\PriorityBadge.test.tsx</div><div class="suite-time warn">6.11s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriorityBadge</div><div class="test-title">renders low priority</div><div class="test-status">passed</div><div class="test-duration">0.088s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriorityBadge</div><div class="test-title">renders medium priority</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriorityBadge</div><div class="test-title">renders high priority</div><div class="test-status">passed</div><div class="test-duration">0.013s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriorityBadge</div><div class="test-title">renders critical priority</div><div class="test-status">passed</div><div class="test-duration">0.028s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriorityBadge</div><div class="test-title">has correct test id</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriorityBadge</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">PriorityBadge</div><div class="test-title">handles unknown priority gracefully</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div></div></details><details id="suite-299" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\monitoring\__tests__\withMonitoring.test.ts</div><div class="suite-time warn">6.311s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">withMonitoring > module structure</div><div class="test-title">exports withMonitoring function</div><div class="test-status">passed</div><div class="test-duration">0.037s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withMonitoring > logging behavior verification</div><div class="test-title">provides mock logger for testing downstream code</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withMonitoring > logging behavior verification</div><div class="test-title">can track slow request warnings</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withMonitoring > logging behavior verification</div><div class="test-title">can track error logs</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withMonitoring > prisma metric storage verification</div><div class="test-title">provides mock for performance metric storage</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withMonitoring integration patterns</div><div class="test-title">should wrap handlers with monitoring logic pattern</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withMonitoring integration patterns</div><div class="test-title">should track duration in monitoring pattern</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">withMonitoring integration patterns</div><div class="test-title">should detect slow requests pattern</div><div class="test-status">passed</div><div class="test-duration">0.027s</div></div></div></div></details><details id="suite-300" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\testimonials\__tests__\route.test.ts</div><div class="suite-time warn">5.628s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/testimonials > Successful requests</div><div class="test-title">returns active testimonials</div><div class="test-status">passed</div><div class="test-duration">0.078s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/testimonials > Successful requests</div><div class="test-title">returns testimonial data with expected fields only</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/testimonials > Successful requests</div><div class="test-title">respects limit parameter</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/testimonials > Successful requests</div><div class="test-title">caps limit at 50</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/testimonials > Successful requests</div><div class="test-title">uses default limit of 10</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/testimonials > Successful requests</div><div class="test-title">orders by createdAt descending</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/testimonials > Successful requests</div><div class="test-title">includes cache headers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/testimonials > Successful requests</div><div class="test-title">returns empty array when no testimonials exist</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/testimonials > Error handling</div><div class="test-title">returns 500 on database error</div><div class="test-status">passed</div><div class="test-duration">0.059s</div></div></div></div></details><details id="suite-301" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\redux\features\__tests__\quickViewSlice.test.ts</div><div class="suite-time warn">6.196s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > initial state</div><div class="test-title">returns the initial state</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > initial state</div><div class="test-title">has empty initial values</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > updateQuickView</div><div class="test-title">updates the quick view with product data</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > updateQuickView</div><div class="test-title">sets isOpen to true</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > updateQuickView</div><div class="test-title">replaces all product data</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > updateQuickView</div><div class="test-title">overwrites existing product data</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > updateQuickView</div><div class="test-title">handles product with minimal data</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > updateQuickView</div><div class="test-title">preserves image arrays</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > resetQuickView</div><div class="test-title">resets to initial state</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > resetQuickView</div><div class="test-title">sets isOpen to false</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > resetQuickView</div><div class="test-title">clears all product data</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > resetQuickView</div><div class="test-title">is idempotent</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > closeQuickView</div><div class="test-title">sets isOpen to false</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > closeQuickView</div><div class="test-title">preserves product data</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > action creators</div><div class="test-title">creates updateQuickView action</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > action creators</div><div class="test-title">creates resetQuickView action</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > action creators</div><div class="test-title">creates closeQuickView action</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > selectors</div><div class="test-title">selectQuickViewProduct returns the product</div><div class="test-status">passed</div><div class="test-duration">0.03s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > selectors</div><div class="test-title">selectQuickViewIsOpen returns isOpen state</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > state immutability</div><div class="test-title">does not mutate previous state on update</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">quickView-slice > state immutability</div><div class="test-title">does not mutate previous state on reset</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-302" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\__tests__\auth-utils.test.ts</div><div class="suite-time">3.57s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > requireAuth</div><div class="test-title">returns session when user is authenticated</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > requireAuth</div><div class="test-title">throws error when session is null</div><div class="test-status">passed</div><div class="test-duration">0.046s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > requireAuth</div><div class="test-title">throws error when user is undefined</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > requireAuth</div><div class="test-title">throws error when user id is missing</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > requireAuth</div><div class="test-title">throws error when user id is null</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > requireAdminRole</div><div class="test-title">returns session when user is admin</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > requireAdminRole</div><div class="test-title">throws Unauthorized when session is null</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > requireAdminRole</div><div class="test-title">throws Unauthorized when user id is missing</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > requireAdminRole</div><div class="test-title">throws Forbidden when user is not admin</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > requireAdminRole</div><div class="test-title">throws Forbidden when user has no role</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > handleAuthError</div><div class="test-title">returns 401 response for Unauthorized error</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > handleAuthError</div><div class="test-title">returns correct error body for Unauthorized</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > handleAuthError</div><div class="test-title">returns 403 response for Forbidden error</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > handleAuthError</div><div class="test-title">returns correct error body for Forbidden</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > handleAuthError</div><div class="test-title">returns 403 for any error containing Forbidden</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > handleAuthError</div><div class="test-title">returns null for non-auth errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > handleAuthError</div><div class="test-title">returns null for generic errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > getCurrentUserId</div><div class="test-title">returns user id when authenticated</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > getCurrentUserId</div><div class="test-title">throws error when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > getCurrentUserId</div><div class="test-title">throws error when user id is missing after auth</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > getCurrentUserRole</div><div class="test-title">returns user role when authenticated</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > getCurrentUserRole</div><div class="test-title">returns CUSTOMER as default role when role is missing</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">Auth Utils > getCurrentUserRole</div><div class="test-title">throws error when not authenticated</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-303" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\core\__tests__\http-cache.test.ts</div><div class="suite-time warn">5.767s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > generateETag</div><div class="test-title">should generate consistent ETag for same data</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > generateETag</div><div class="test-title">should generate different ETag for different data</div><div class="test-status">passed</div><div class="test-duration">0.018s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > generateETag</div><div class="test-title">should return a 16 character string</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > generateETag</div><div class="test-title">should handle complex nested objects</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > generateETag</div><div class="test-title">should handle arrays</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > generateETag</div><div class="test-title">should handle strings</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > generateETag</div><div class="test-title">should handle numbers</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > generateETag</div><div class="test-title">should handle null</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > generateETag</div><div class="test-title">should produce consistent ETags for boolean values</div><div class="test-status">passed</div><div class="test-duration">0.022s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > CACHE_PRESETS</div><div class="test-title">should have publicStatic preset with correct values</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > CACHE_PRESETS</div><div class="test-title">should have productList preset with correct values</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > CACHE_PRESETS</div><div class="test-title">should have productDetail preset with correct values</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > CACHE_PRESETS</div><div class="test-title">should have userPrivate preset with correct values</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > CACHE_PRESETS</div><div class="test-title">should have search preset with correct values</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > CACHE_PRESETS</div><div class="test-title">should have noCache preset with correct values</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">HTTP Cache Utilities > CACHE_PRESETS</div><div class="test-title">should not overlap conflicting cache directives in presets</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-304" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\monitoring\__tests__\fingerprint.test.ts</div><div class="suite-time warn">6.242s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">generateErrorFingerprint > basic fingerprinting</div><div class="test-title">generates consistent fingerprint for same input</div><div class="test-status">passed</div><div class="test-duration">0.025s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">generateErrorFingerprint > basic fingerprinting</div><div class="test-title">generates different fingerprints for different messages</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">generateErrorFingerprint > basic fingerprinting</div><div class="test-title">handles empty input</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">generateErrorFingerprint > stack trace normalization</div><div class="test-title">groups errors with different line numbers</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">generateErrorFingerprint > stack trace normalization</div><div class="test-title">groups errors with different webpack hashes</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">generateErrorFingerprint > stack trace normalization</div><div class="test-title">differentiates errors from different files</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">generateErrorFingerprint > URL normalization</div><div class="test-title">groups errors from different product IDs</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">generateErrorFingerprint > URL normalization</div><div class="test-title">generates consistent fingerprint for same URL with UUID</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">generateErrorFingerprint > URL normalization</div><div class="test-title">differentiates errors from different routes</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">generateErrorFingerprint > message normalization</div><div class="test-title">groups errors with different timestamps</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">generateErrorFingerprint > message normalization</div><div class="test-title">groups errors with different UUIDs in message</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">generateErrorFingerprint > message normalization</div><div class="test-title">groups errors with different numeric IDs</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">createShortHash</div><div class="test-title">generates 8 character hash</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">createShortHash</div><div class="test-title">generates consistent hash</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">createShortHash</div><div class="test-title">generates different hash for different input</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div></div></details><details id="suite-305" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\admin\monitoring\CategoryBadge.test.tsx</div><div class="suite-time">2.865s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryBadge</div><div class="test-title">renders category text</div><div class="test-status">passed</div><div class="test-duration">0.115s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryBadge</div><div class="test-title">has correct test id</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryBadge</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.02s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryBadge</div><div class="test-title">returns null for null category</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryBadge</div><div class="test-title">returns null for undefined category</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CategoryBadge</div><div class="test-title">renders empty string category as null</div><div class="test-status">passed</div><div class="test-duration">0.006s</div></div></div></div></details><details id="suite-306" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\errors\__tests__\error-classifier.test.ts</div><div class="suite-time warn">6.986s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > Network errors</div><div class="test-title">should classify fetch TypeError as network error</div><div class="test-status">passed</div><div class="test-duration">0.017s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > HTTP status errors</div><div class="test-title">should classify 400 as validation error</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > HTTP status errors</div><div class="test-title">should classify 401 as authentication error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > HTTP status errors</div><div class="test-title">should classify 403 as authorization error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > HTTP status errors</div><div class="test-title">should classify 404 as not found error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > HTTP status errors</div><div class="test-title">should classify 429 as rate limit error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > HTTP status errors</div><div class="test-title">should classify 500 as server error</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > HTTP status errors</div><div class="test-title">should classify 502 as server error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > HTTP status errors</div><div class="test-title">should classify 503 as server error</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > Payment errors</div><div class="test-title">should classify payment-related errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > Payment errors</div><div class="test-title">should classify card-related errors as payment errors</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > Payment errors</div><div class="test-title">should classify Stripe errors as payment errors</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > Validation errors</div><div class="test-title">should classify validation errors</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > Validation errors</div><div class="test-title">should classify invalid input errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > Auth errors</div><div class="test-title">should classify unauthorized errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > Auth errors</div><div class="test-title">should classify session expired errors</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > Unknown errors</div><div class="test-title">should classify unknown errors</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > Unknown errors</div><div class="test-title">should handle non-Error objects</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">classifyError > Unknown errors</div><div class="test-title">should handle null</div><div class="test-status">passed</div><div class="test-duration">0.001s</div></div></div></div></details><details id="suite-307" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\components\admin\monitoring\StatusBadge.test.tsx</div><div class="suite-time warn">5.907s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusBadge</div><div class="test-title">renders open status</div><div class="test-status">passed</div><div class="test-duration">0.083s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusBadge</div><div class="test-title">renders resolved status</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusBadge</div><div class="test-title">renders ignored status</div><div class="test-status">passed</div><div class="test-duration">0.026s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusBadge</div><div class="test-title">renders snoozed status</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusBadge</div><div class="test-title">has correct test id</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusBadge</div><div class="test-title">applies custom className</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">StatusBadge</div><div class="test-title">handles unknown status gracefully</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div></div></details><details id="suite-308" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\health\db\__tests__\route.test.ts</div><div class="suite-time warn">5.316s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/health/db</div><div class="test-title">returns healthy status when all checks pass</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/health/db</div><div class="test-title">returns degraded status when query performance has warnings</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/health/db</div><div class="test-title">returns unhealthy status when database connection fails</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/health/db</div><div class="test-title">returns unhealthy status when table check fails</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/health/db</div><div class="test-title">includes correct table counts</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/health/db</div><div class="test-title">includes timestamp in response</div><div class="test-status">passed</div><div class="test-duration">0.033s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">GET /api/health/db</div><div class="test-title">sets no-cache headers</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div></div></details><details id="suite-309" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\app\api\cron\slo-check\__tests__\route.test.ts</div><div class="suite-time warn">6.464s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Check Cron Job > POST /api/cron/slo-check</div><div class="test-title">returns 401 without valid authorization</div><div class="test-status">passed</div><div class="test-duration">0.014s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Check Cron Job > POST /api/cron/slo-check</div><div class="test-title">returns 401 without authorization header</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Check Cron Job > POST /api/cron/slo-check</div><div class="test-title">allows request with valid authorization</div><div class="test-status">passed</div><div class="test-duration">0.009s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">SLO Check Cron Job > POST /api/cron/slo-check</div><div class="test-title">allows request when CRON_SECRET is not set</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div></div></details><details id="suite-310" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\lib\core\__tests__\validators.test.ts</div><div class="suite-time warn">5.21s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > valid data</div><div class="test-title">should return valid for complete product data</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > valid data</div><div class="test-title">should allow discountedPrice less than price</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > valid data</div><div class="test-title">should allow discountedPrice equal to price</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > title validation</div><div class="test-title">should error when title is missing</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > title validation</div><div class="test-title">should error when title is empty string</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > title validation</div><div class="test-title">should error when title is whitespace only</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > title validation</div><div class="test-title">should error when title is not a string</div><div class="test-status">passed</div><div class="test-duration">0.035s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > price validation</div><div class="test-title">should error when price is missing</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > price validation</div><div class="test-title">should error when price is zero</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > price validation</div><div class="test-title">should error when price is negative</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > price validation</div><div class="test-title">should accept string price that parses to valid number</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > categoryId validation</div><div class="test-title">should error when categoryId is missing</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > discountedPrice validation</div><div class="test-title">should error when discountedPrice is higher than price</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > discountedPrice validation</div><div class="test-title">should work with string prices for discountedPrice comparison</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateProductForm > multiple errors</div><div class="test-title">should return all errors when multiple fields are invalid</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCategoryForm > valid data</div><div class="test-title">should return valid for complete category data</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCategoryForm > title validation</div><div class="test-title">should error when title is missing</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCategoryForm > title validation</div><div class="test-title">should error when title is empty string</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCategoryForm > title validation</div><div class="test-title">should error when title is whitespace only</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCategoryForm > title validation</div><div class="test-title">should error when title is not a string</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCategoryForm > slug validation</div><div class="test-title">should error when slug is missing</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCategoryForm > slug validation</div><div class="test-title">should error when slug is empty string</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCategoryForm > slug validation</div><div class="test-title">should error when slug is whitespace only</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCategoryForm > slug validation</div><div class="test-title">should error when slug is not a string</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">validateCategoryForm > multiple errors</div><div class="test-title">should return all errors when multiple fields are invalid</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div></div></details><details id="suite-311" class="suite-container" open=""><summary class="suite-info"><div class="suite-path">C:\Users\me\Documents\Projects\elite_events_nextjs\src\services\__tests__\cart.service.test.ts</div><div class="suite-time warn">5.499s</div></summary><div class="suite-tests"><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > getCart</div><div class="test-title">returns empty cart for user with no items</div><div class="test-status">passed</div><div class="test-duration">0.019s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > getCart</div><div class="test-title">returns transformed cart items with product details</div><div class="test-status">passed</div><div class="test-duration">0.007s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > getCart</div><div class="test-title">returns multiple cart items ordered by updatedAt</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > addItem</div><div class="test-title">creates new cart item when product exists and not in cart</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > addItem</div><div class="test-title">updates quantity when item already exists in cart</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > addItem</div><div class="test-title">throws error when product does not exist</div><div class="test-status">passed</div><div class="test-duration">0.097s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > addItem</div><div class="test-title">uses default deviceId when not provided</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > addItem</div><div class="test-title">uses composite key for finding existing cart item</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > updateQuantity</div><div class="test-title">updates cart item quantity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > updateQuantity</div><div class="test-title">removes item when quantity is set to zero</div><div class="test-status">passed</div><div class="test-duration">0.012s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > updateQuantity</div><div class="test-title">removes item when quantity is negative</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > updateQuantity</div><div class="test-title">uses default deviceId when not provided</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > removeItem</div><div class="test-title">deletes cart item by userId and productId</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > clearCart</div><div class="test-title">deletes all cart items for user</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > clearCart</div><div class="test-title">succeeds even if cart is empty</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > mergeAnonymousCartToUser</div><div class="test-title">returns user items when no anonymous items exist</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > mergeAnonymousCartToUser</div><div class="test-title">returns skip when anonymous items is null</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > mergeAnonymousCartToUser</div><div class="test-title">adds new items from anonymous cart to user cart</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > mergeAnonymousCartToUser</div><div class="test-title">sums quantities when same product exists in both carts</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > mergeAnonymousCartToUser</div><div class="test-title">does not create conflict when quantities are same</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > mergeAnonymousCartToUser</div><div class="test-title">handles multiple items with mixed scenarios</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > mergeAnonymousCartToUser</div><div class="test-title">handles empty user cart with anonymous items</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > applyCartMerge</div><div class="test-title">deletes existing cart and creates merged items</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > applyCartMerge</div><div class="test-title">does not call createMany when merged items is empty</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > applyCartMerge</div><div class="test-title">throws error when transaction fails</div><div class="test-status">passed</div><div class="test-duration">0.011s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > getStaleCartItems</div><div class="test-title">retrieves cart items marked as stale</div><div class="test-status">passed</div><div class="test-duration">0.005s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > markCartItemsAsStale</div><div class="test-title">marks specified cart items as stale</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > clearStaleFlags</div><div class="test-title">clears stale flags from all user cart items</div><div class="test-status">passed</div><div class="test-duration">0.008s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > validateCartItems</div><div class="test-title">returns true for valid cart items</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > validateCartItems</div><div class="test-title">returns false for non-array input</div><div class="test-status">passed</div><div class="test-duration">0.004s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > validateCartItems</div><div class="test-title">returns true for empty array</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > validateCartItems</div><div class="test-title">returns false when item has no id</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > validateCartItems</div><div class="test-title">returns false when item id is not a number</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > validateCartItems</div><div class="test-title">returns false when item has no quantity</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > validateCartItems</div><div class="test-title">returns false when quantity is not a number</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > validateCartItems</div><div class="test-title">returns false when quantity is zero</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > validateCartItems</div><div class="test-title">returns false when quantity is negative</div><div class="test-status">passed</div><div class="test-duration">0.003s</div></div></div><div class="test-result passed"><div class="test-info"><div class="test-suitename">CartService > validateCartItems</div><div class="test-title">returns false if any item in array is invalid</div><div class="test-status">passed</div><div class="test-duration">0.002s</div></div></div></div></details></main></body></html>