403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/elite-events-tests/results/index.html
<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 &gt; 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 &gt; 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] &gt; 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 &gt; 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.&lt;anonymous&gt; (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 &gt; 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.&lt;anonymous&gt; (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 &gt; 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.&lt;anonymous&gt; (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 &gt; 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.&lt;anonymous&gt; (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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; isSLABreached &gt; 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 &gt; isSLABreached &gt; 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 &gt; isSLABreached &gt; 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 &gt; isSLABreached &gt; 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 &gt; isSLABreached &gt; 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 &gt; isSLABreached &gt; 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 &gt; isSLABreached &gt; 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 &gt; isSLABreached &gt; 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 &gt; isSLABreached &gt; 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 &gt; isSLABreached &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; calculateAverageRating &gt; 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 &gt; calculateAverageRating &gt; 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 &gt; calculateAverageRating &gt; 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 &gt; calculateAverageRating &gt; 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 &gt; calculateAverageRating &gt; 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 &gt; calculateAverageRating &gt; 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 &gt; calculateAverageRating &gt; 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 &gt; calculateAverageRating &gt; 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 &gt; calculateAverageRating &gt; 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 &gt; calculateAverageRating &gt; 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 &gt; calculateAverageRating &gt; 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 &gt; calculateAverageRating &gt; 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 &gt; calculateAverageRating &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; searchProducts &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Pagination</div><div class="test-title">shows pagination when total products &gt; 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 &gt; Pagination</div><div class="test-title">does not show pagination when total products &lt;= 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; validation</div><div class="test-title">shows error when warning &gt;= 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; GET /api/user/profile &gt; 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 &gt; GET /api/user/profile &gt; 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 &gt; GET /api/user/profile &gt; 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 &gt; GET /api/user/profile &gt; 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 &gt; GET /api/user/profile &gt; 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 &gt; GET /api/user/profile &gt; 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 &gt; GET /api/user/profile &gt; 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 &gt; GET /api/user/profile &gt; 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 &gt; GET /api/user/profile &gt; 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 &gt; GET /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; PATCH /api/user/profile &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; GET /api/user/addresses &gt; 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 &gt; GET /api/user/addresses &gt; 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 &gt; GET /api/user/addresses &gt; 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 &gt; GET /api/user/addresses &gt; 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 &gt; GET /api/user/addresses &gt; 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 &gt; GET /api/user/addresses &gt; 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 &gt; GET /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; POST /api/user/addresses &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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] &gt; GET /api/admin/products/[productId] &gt; Authentication &amp; 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] &gt; GET /api/admin/products/[productId] &gt; Authentication &amp; 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] &gt; GET /api/admin/products/[productId] &gt; Authentication &amp; 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] &gt; GET /api/admin/products/[productId] &gt; 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] &gt; GET /api/admin/products/[productId] &gt; 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] &gt; GET /api/admin/products/[productId] &gt; 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] &gt; GET /api/admin/products/[productId] &gt; 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] &gt; GET /api/admin/products/[productId] &gt; 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] &gt; GET /api/admin/products/[productId] &gt; 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] &gt; GET /api/admin/products/[productId] &gt; 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] &gt; PUT /api/admin/products/[productId] &gt; Authentication &amp; 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] &gt; PUT /api/admin/products/[productId] &gt; Authentication &amp; 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] &gt; PUT /api/admin/products/[productId] &gt; 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] &gt; PUT /api/admin/products/[productId] &gt; 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] &gt; PUT /api/admin/products/[productId] &gt; 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] &gt; PUT /api/admin/products/[productId] &gt; 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] &gt; PUT /api/admin/products/[productId] &gt; 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] &gt; PUT /api/admin/products/[productId] &gt; 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] &gt; PUT /api/admin/products/[productId] &gt; 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] &gt; PUT /api/admin/products/[productId] &gt; 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] &gt; 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] &gt; DELETE /api/admin/products/[productId] &gt; Authentication &amp; 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] &gt; DELETE /api/admin/products/[productId] &gt; Authentication &amp; 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] &gt; DELETE /api/admin/products/[productId] &gt; 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] &gt; DELETE /api/admin/products/[productId] &gt; 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] &gt; DELETE /api/admin/products/[productId] &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; admin route protection &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; RedisClient wrapper operations &gt; 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 &gt; RedisClient wrapper operations &gt; 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 &gt; RedisClient wrapper operations &gt; 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 &gt; RedisClient wrapper operations &gt; 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 &gt; RedisClient wrapper operations &gt; 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 &gt; RedisClient wrapper operations &gt; 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 &gt; RedisClient wrapper operations &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Transaction Handling &gt; 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 &gt; Transaction Handling &gt; 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 &gt; Transaction Handling &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt;= 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 &lt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; POST /api/admin/products/images &gt; Authentication &amp; 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 &gt; POST /api/admin/products/images &gt; Authentication &amp; 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 &gt; POST /api/admin/products/images &gt; 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 &gt; POST /api/admin/products/images &gt; 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 &gt; POST /api/admin/products/images &gt; 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 &gt; POST /api/admin/products/images &gt; 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 &gt; POST /api/admin/products/images &gt; 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 &gt; POST /api/admin/products/images &gt; 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 &gt; POST /api/admin/products/images &gt; 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 &gt; DELETE /api/admin/products/images &gt; Authentication &amp; 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 &gt; DELETE /api/admin/products/images &gt; Authentication &amp; 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 &gt; DELETE /api/admin/products/images &gt; 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 &gt; DELETE /api/admin/products/images &gt; 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 &gt; DELETE /api/admin/products/images &gt; 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 &gt; DELETE /api/admin/products/images &gt; 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 &gt; DELETE /api/admin/products/images &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Transaction Handling &gt; 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 &gt; Transaction Handling &gt; 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 &gt; Transaction Handling &gt; 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 &gt; Transaction Handling &gt; 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 &gt; Transaction Handling &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; ApiError &gt; 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 &gt; ApiError &gt; 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 &gt; ApiError &gt; 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 &gt; ApiError &gt; 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 &gt; ApiError &gt; 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 &gt; ApiError &gt; 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 &gt; ApiError &gt; 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 &gt; ApiError &gt; 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 &gt; ApiError &gt; 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 &gt; ApiError &gt; 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 &gt; ApiError &gt; 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 &gt; ApiError &gt; 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 &gt; ApiError &gt; 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 &gt; ApiError &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; isValidStatusTransition &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; isValidParentChildCategory &gt; 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 &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; buildTicketWhereClause &gt; 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 &gt; 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 &gt; 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 &gt; buildTicketOrderByClause &gt; 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 &gt; buildTicketOrderByClause &gt; 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 &gt; buildTicketOrderByClause &gt; 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 &gt; buildTicketOrderByClause &gt; 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 &gt; buildTicketOrderByClause &gt; 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 &gt; buildTicketOrderByClause &gt; 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 &gt; buildTicketOrderByClause &gt; 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 &gt; buildTicketOrderByClause &gt; 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 &gt; buildTicketOrderByClause &gt; 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 &gt; buildTicketOrderByClause &gt; 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 &gt; buildTicketOrderByClause &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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] &gt; Authentication &amp; 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] &gt; Authentication &amp; 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] &gt; 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] &gt; 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] &gt; 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] &gt; Authentication &amp; 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] &gt; Authentication &amp; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; Authentication &amp; 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] &gt; Authentication &amp; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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] &gt; Authentication &amp; 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] &gt; Authentication &amp; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; Authentication &amp; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; Authentication &amp; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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 &gt; GET /api/admin/hero/feature-cards &gt; Authentication &amp; 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 &gt; GET /api/admin/hero/feature-cards &gt; Authentication &amp; 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 &gt; GET /api/admin/hero/feature-cards &gt; 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 &gt; GET /api/admin/hero/feature-cards &gt; 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 &gt; GET /api/admin/hero/feature-cards &gt; 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 &gt; GET /api/admin/hero/feature-cards &gt; 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 &gt; POST /api/admin/hero/feature-cards &gt; Authentication &amp; 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 &gt; POST /api/admin/hero/feature-cards &gt; Authentication &amp; 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 &gt; POST /api/admin/hero/feature-cards &gt; 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 &gt; POST /api/admin/hero/feature-cards &gt; 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 &gt; POST /api/admin/hero/feature-cards &gt; 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 &gt; POST /api/admin/hero/feature-cards &gt; 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 &gt; POST /api/admin/hero/feature-cards &gt; 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 &gt; POST /api/admin/hero/feature-cards &gt; 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 &gt; POST /api/admin/hero/feature-cards &gt; 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 &gt; POST /api/admin/hero/feature-cards &gt; 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 &gt; POST /api/admin/hero/feature-cards &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; GET /api/admin/products &gt; Authentication &amp; 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 &gt; GET /api/admin/products &gt; Authentication &amp; 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 &gt; GET /api/admin/products &gt; Authentication &amp; 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 &gt; GET /api/admin/products &gt; Authentication &amp; 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 &gt; GET /api/admin/products &gt; 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 &gt; GET /api/admin/products &gt; 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 &gt; GET /api/admin/products &gt; 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 &gt; GET /api/admin/products &gt; 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 &gt; GET /api/admin/products &gt; 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 &gt; GET /api/admin/products &gt; 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 &gt; GET /api/admin/products &gt; 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 &gt; GET /api/admin/products &gt; 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 &gt; GET /api/admin/products &gt; 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 &gt; POST /api/admin/products &gt; Authentication &amp; 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 &gt; POST /api/admin/products &gt; Authentication &amp; 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 &gt; POST /api/admin/products &gt; 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 &gt; POST /api/admin/products &gt; 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 &gt; POST /api/admin/products &gt; 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 &gt; POST /api/admin/products &gt; 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 &gt; POST /api/admin/products &gt; 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 &gt; POST /api/admin/products &gt; 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 &gt; POST /api/admin/products &gt; 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 &gt; POST /api/admin/products &gt; 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 &gt; POST /api/admin/products &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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 &lt;stop&gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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">&lt;linearGradient /&gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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 &lt;linearGradient&gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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 &lt;defs&gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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">&lt;linearGradient /&gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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">&lt;linearGradient /&gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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">&lt;linearGradient /&gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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">&lt;linearGradient /&gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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">&lt;linearGradient /&gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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">&lt;linearGradient /&gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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">&lt;linearGradient /&gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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">&lt;linearGradient /&gt; 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.&lt;anonymous&gt; (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 (&lt;anonymous&gt;)
    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">&lt;linearGradient /&gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; GET /api/hero &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Custom Hooks &gt; 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 &gt; Custom Hooks &gt; 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 &gt; Custom Hooks &gt; 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 &gt; Custom Hooks &gt; 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 &gt; Custom Hooks &gt; 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 &gt; Custom Hooks &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; securityHeaders presets &gt; 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 &gt; securityHeaders presets &gt; 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 &gt; securityHeaders presets &gt; 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 &gt; securityHeaders presets &gt; 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 &gt; securityHeaders presets &gt; 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 &gt; securityHeaders presets &gt; 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 &gt; securityHeaders presets &gt; 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 &gt; securityHeaders presets &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; getWebVitalRating &gt; LCP thresholds</div><div class="test-title">returns "good" for LCP &lt;= 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 &gt; getWebVitalRating &gt; LCP thresholds</div><div class="test-title">returns "needs-improvement" for LCP &gt; 2500ms and &lt;= 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 &gt; getWebVitalRating &gt; LCP thresholds</div><div class="test-title">returns "poor" for LCP &gt; 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 &gt; getWebVitalRating &gt; CLS thresholds</div><div class="test-title">returns "good" for CLS &lt;= 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 &gt; getWebVitalRating &gt; CLS thresholds</div><div class="test-title">returns "needs-improvement" for CLS &gt; 0.1 and &lt;= 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 &gt; getWebVitalRating &gt; CLS thresholds</div><div class="test-title">returns "poor" for CLS &gt; 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 &gt; getWebVitalRating &gt; INP thresholds</div><div class="test-title">returns "good" for INP &lt;= 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 &gt; getWebVitalRating &gt; INP thresholds</div><div class="test-title">returns "needs-improvement" for INP &gt; 200ms and &lt;= 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 &gt; getWebVitalRating &gt; INP thresholds</div><div class="test-title">returns "poor" for INP &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; getWorstMetric</div><div class="test-title">prioritizes core vitals (LCP &gt; CLS &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; WEB_VITALS_THRESHOLDS</div><div class="test-title">has needsImprovement &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; PUT /api/admin/categories/[id] &gt; Authentication &amp; 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] &gt; PUT /api/admin/categories/[id] &gt; Authentication &amp; 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] &gt; PUT /api/admin/categories/[id] &gt; 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] &gt; PUT /api/admin/categories/[id] &gt; 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] &gt; PUT /api/admin/categories/[id] &gt; 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] &gt; PUT /api/admin/categories/[id] &gt; 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] &gt; PUT /api/admin/categories/[id] &gt; 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] &gt; PUT /api/admin/categories/[id] &gt; 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] &gt; DELETE /api/admin/categories/[id] &gt; Authentication &amp; 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] &gt; DELETE /api/admin/categories/[id] &gt; Authentication &amp; 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] &gt; DELETE /api/admin/categories/[id] &gt; 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] &gt; DELETE /api/admin/categories/[id] &gt; 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] &gt; DELETE /api/admin/categories/[id] &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; GET /api/admin/orders/[orderId] &gt; Authentication &amp; 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] &gt; GET /api/admin/orders/[orderId] &gt; Authentication &amp; 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] &gt; GET /api/admin/orders/[orderId] &gt; 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] &gt; GET /api/admin/orders/[orderId] &gt; 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] &gt; GET /api/admin/orders/[orderId] &gt; 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] &gt; GET /api/admin/orders/[orderId] &gt; 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] &gt; PATCH /api/admin/orders/[orderId] &gt; Authentication &amp; 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] &gt; PATCH /api/admin/orders/[orderId] &gt; Authentication &amp; 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] &gt; PATCH /api/admin/orders/[orderId] &gt; 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] &gt; PATCH /api/admin/orders/[orderId] &gt; 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] &gt; PATCH /api/admin/orders/[orderId] &gt; 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] &gt; PATCH /api/admin/orders/[orderId] &gt; 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] &gt; PATCH /api/admin/orders/[orderId] &gt; 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] &gt; PATCH /api/admin/orders/[orderId] &gt; 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] &gt; PATCH /api/admin/orders/[orderId] &gt; 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] &gt; PATCH /api/admin/orders/[orderId] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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 &gt; validateImageFile &gt; 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 &gt; validateImageFile &gt; 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 &gt; validateImageFile &gt; 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 &gt; validateImageFile &gt; 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 &gt; validateImageFile &gt; 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 &gt; validateImageFile &gt; 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 &gt; validateImageFile &gt; 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 &gt; validateImageFile &gt; 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 &gt; validateImageFile &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; GET /api/admin/hero/promo-banners &gt; Authentication &amp; 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 &gt; GET /api/admin/hero/promo-banners &gt; Authentication &amp; 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 &gt; GET /api/admin/hero/promo-banners &gt; 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 &gt; GET /api/admin/hero/promo-banners &gt; 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 &gt; GET /api/admin/hero/promo-banners &gt; 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 &gt; GET /api/admin/hero/promo-banners &gt; 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 &gt; POST /api/admin/hero/promo-banners &gt; Authentication &amp; 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 &gt; POST /api/admin/hero/promo-banners &gt; Authentication &amp; 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 &gt; POST /api/admin/hero/promo-banners &gt; 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 &gt; POST /api/admin/hero/promo-banners &gt; 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 &gt; POST /api/admin/hero/promo-banners &gt; 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 &gt; POST /api/admin/hero/promo-banners &gt; 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 &gt; POST /api/admin/hero/promo-banners &gt; 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 &gt; POST /api/admin/hero/promo-banners &gt; 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 &gt; POST /api/admin/hero/promo-banners &gt; 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 &gt; POST /api/admin/hero/promo-banners &gt; 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 &gt; POST /api/admin/hero/promo-banners &gt; 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 &gt; POST /api/admin/hero/promo-banners &gt; 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 &gt; 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 &gt; measureApiPerformance</div><div class="test-title">should log warning for slow APIs (&gt;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 &gt; measureApiPerformance</div><div class="test-title">should log debug for fast APIs (&lt;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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; CartStorage class &gt; 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 &gt; CartStorage class &gt; 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 &gt; CartStorage class &gt; 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 &gt; CartStorage class &gt; 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 &gt; CartStorage class &gt; 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 &gt; CartStorage class &gt; 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 &gt; CartStorage class &gt; 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 &gt; CartStorage class &gt; 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 &gt; CartStorage class &gt; 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 &gt; CartStorage class &gt; 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 &gt; CartStorage class &gt; 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 &gt; CartStorage class &gt; 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 &gt; CartStorage class &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; generateBotResponse &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Selectors &gt; 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 &gt; Selectors &gt; 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 &gt; Selectors &gt; 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 &gt; Selectors &gt; 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 &gt; Selectors &gt; 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 &gt; Selectors &gt; 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 &gt; State transitions</div><div class="test-title">should transition through pending -&gt; 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 &gt; State transitions</div><div class="test-title">should transition through pending -&gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; GET /api/admin/hero/carousel &gt; Authentication &amp; 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 &gt; GET /api/admin/hero/carousel &gt; Authentication &amp; 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 &gt; GET /api/admin/hero/carousel &gt; 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 &gt; GET /api/admin/hero/carousel &gt; 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 &gt; GET /api/admin/hero/carousel &gt; 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 &gt; GET /api/admin/hero/carousel &gt; 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 &gt; POST /api/admin/hero/carousel &gt; Authentication &amp; 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 &gt; POST /api/admin/hero/carousel &gt; Authentication &amp; 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 &gt; POST /api/admin/hero/carousel &gt; 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 &gt; POST /api/admin/hero/carousel &gt; 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 &gt; POST /api/admin/hero/carousel &gt; 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 &gt; POST /api/admin/hero/carousel &gt; 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 &gt; POST /api/admin/hero/carousel &gt; 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 &gt; POST /api/admin/hero/carousel &gt; 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 &gt; POST /api/admin/hero/carousel &gt; 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 &gt; POST /api/admin/hero/carousel &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; eventTracking convenience functions &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; GET /api/admin/categories &gt; 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 &gt; POST /api/admin/categories &gt; Authentication &amp; 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 &gt; POST /api/admin/categories &gt; Authentication &amp; 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 &gt; POST /api/admin/categories &gt; Authentication &amp; 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 &gt; POST /api/admin/categories &gt; 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 &gt; POST /api/admin/categories &gt; 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 &gt; POST /api/admin/categories &gt; 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 &gt; POST /api/admin/categories &gt; 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 &gt; POST /api/admin/categories &gt; 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 &gt; POST /api/admin/categories &gt; 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 &gt; POST /api/admin/categories &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; getRating &gt; LCP (Largest Contentful Paint)</div><div class="test-title">should return 'good' for LCP &lt;= 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 &gt; getRating &gt; LCP (Largest Contentful Paint)</div><div class="test-title">should return 'needs-improvement' for LCP &gt; 2500ms and &lt;= 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 &gt; getRating &gt; LCP (Largest Contentful Paint)</div><div class="test-title">should return 'poor' for LCP &gt; 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 &gt; getRating &gt; FID (First Input Delay)</div><div class="test-title">should return 'good' for FID &lt;= 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 &gt; getRating &gt; FID (First Input Delay)</div><div class="test-title">should return 'needs-improvement' for FID &gt; 100ms and &lt;= 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 &gt; getRating &gt; FID (First Input Delay)</div><div class="test-title">should return 'poor' for FID &gt; 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 &gt; getRating &gt; CLS (Cumulative Layout Shift)</div><div class="test-title">should return 'good' for CLS &lt;= 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 &gt; getRating &gt; CLS (Cumulative Layout Shift)</div><div class="test-title">should return 'needs-improvement' for CLS &gt; 0.1 and &lt;= 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 &gt; getRating &gt; CLS (Cumulative Layout Shift)</div><div class="test-title">should return 'poor' for CLS &gt; 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 &gt; getRating &gt; FCP (First Contentful Paint)</div><div class="test-title">should return 'good' for FCP &lt;= 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 &gt; getRating &gt; FCP (First Contentful Paint)</div><div class="test-title">should return 'needs-improvement' for FCP &gt; 1800ms and &lt;= 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 &gt; getRating &gt; FCP (First Contentful Paint)</div><div class="test-title">should return 'poor' for FCP &gt; 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 &gt; getRating &gt; TTFB (Time to First Byte)</div><div class="test-title">should return 'good' for TTFB &lt;= 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 &gt; getRating &gt; TTFB (Time to First Byte)</div><div class="test-title">should return 'needs-improvement' for TTFB &gt; 800ms and &lt;= 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 &gt; getRating &gt; TTFB (Time to First Byte)</div><div class="test-title">should return 'poor' for TTFB &gt; 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 &gt; getRating &gt; INP (Interaction to Next Paint)</div><div class="test-title">should return 'good' for INP &lt;= 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 &gt; getRating &gt; INP (Interaction to Next Paint)</div><div class="test-title">should return 'needs-improvement' for INP &gt; 200ms and &lt;= 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 &gt; getRating &gt; INP (Interaction to Next Paint)</div><div class="test-title">should return 'poor' for INP &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Synchronous actions &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Async thunks &gt; 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 &gt; Selectors &gt; 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 &gt; Selectors &gt; 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 &gt; Selectors &gt; 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 &gt; Selectors &gt; 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 &gt; Selectors &gt; 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 &gt; Selectors &gt; 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 &gt; Selectors &gt; 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 &gt; State transitions</div><div class="test-title">should transition through pending -&gt; 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 &gt; State transitions</div><div class="test-title">should transition through pending -&gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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] &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Authentication &amp; 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 &gt; Authentication &amp; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; Validation</div><div class="test-title">returns 400 for priority &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; PASSWORD_CONFIG</div><div class="test-title">has bcrypt rounds &gt;= 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 &gt; PASSWORD_CONFIG</div><div class="test-title">has minimum password length &gt;= 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; TOKEN_CONFIG</div><div class="test-title">has token bytes &gt;= 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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 &gt; 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>

Youez - 2016 - github.com/yon3zu
LinuXploit