<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="Mocha Tests" time="6.535" tests="5" failures="5">
  <testsuite name="Root Suite" timestamp="2025-11-07T10:21:12" tests="0" file="cypress\e2e\mobile_pwa.cy.js" time="0.000" failures="0">
  </testsuite>
  <testsuite name="Gestor coletor PWA" timestamp="2025-11-07T10:21:12" tests="5" time="6.531" failures="5">
    <testcase name="Gestor coletor PWA carrega e testa ping com dispositivo válido" time="0.000" classname="carrega e testa ping com dispositivo válido">
      <failure message="Timed out retrying after 4000ms: expected &apos;&lt;span#scanStatus.muted&gt;&apos; to contain &apos;Conexão OK&apos;" type="AssertionError"><![CDATA[AssertionError: Timed out retrying after 4000ms: expected '<span#scanStatus.muted>' to contain 'Conexão OK'
    at Context.eval (webpack://gestoreasy-v3/./cypress/e2e/mobile_pwa.cy.js:9:26)]]></failure>
    </testcase>
    <testcase name="Gestor coletor PWA registra item de inventário na fila e sincroniza" time="0.000" classname="registra item de inventário na fila e sincroniza">
      <failure message="cy.get(...).should(...).or is not a function" type="TypeError"><![CDATA[TypeError: cy.get(...).should(...).or is not a function
    at Context.eval (webpack://gestoreasy-v3/./cypress/e2e/mobile_pwa.cy.js:18:62)
    at runnable.fn (http://localhost:8000/__cypress/runner/cypress_runner.js:145954:19)
    at callFn (http://localhost:8000/__cypress/runner/cypress_runner.js:165048:21)
    at Runnable.run (http://localhost:8000/__cypress/runner/cypress_runner.js:165035:7)
    at <unknown> (http://localhost:8000/__cypress/runner/cypress_runner.js:171130:30)
    at PassThroughHandlerContext.finallyHandler (http://localhost:8000/__cypress/runner/cypress_runner.js:4042:23)
    at PassThroughHandlerContext.tryCatcher (http://localhost:8000/__cypress/runner/cypress_runner.js:1777:23)
    at Promise._settlePromiseFromHandler (http://localhost:8000/__cypress/runner/cypress_runner.js:1489:31)
    at Promise._settlePromise (http://localhost:8000/__cypress/runner/cypress_runner.js:1546:18)]]></failure>
    </testcase>
    <testcase name="Gestor coletor PWA envia evento de recebimento e valida aceite do backend" time="0.000" classname="envia evento de recebimento e valida aceite do backend">
      <failure message="expected &apos;&lt;!doctype html&gt;\n&lt;html lang=&quot;pt-BR&quot;&gt;\n  &lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot; /&gt;\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, viewport-fit=cover&quot; /&gt;\n    &lt;title&gt;Gestor coletor • GestorEasy&lt;/title&gt;\n    &lt;link rel=&quot;manifest&quot; href=&quot;./manifest.webmanifest&quot;&gt;\n    &lt;link rel=&quot;icon&quot; href=&quot;/assets/logo-light.png&quot; media=&quot;(prefers-color-scheme: light)&quot;&gt;\n    &lt;link rel=&quot;icon&quot; href=&quot;/assets/logo-dark.png&quot; media=&quot;(prefers-color-scheme: dark)&quot;&gt;\n    &lt;link rel=&quot;apple-touch-icon&quot; href=&quot;/assets/logo-light.png&quot;&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;./style.css&quot; /&gt;\n    &lt;meta name=&quot;theme-color&quot; content=&quot;#0ea5e9&quot; /&gt;\n  &lt;/head&gt;\n  &lt;body&gt;\n    &lt;header&gt;\n      &lt;div class=&quot;brand&quot;&gt;\n        &lt;img src=&quot;/assets/logo-light.png&quot; alt=&quot;Gestor coletor&quot; height=&quot;28&quot; /&gt;\n        &lt;div&gt;\n          &lt;h1&gt;Gestor coletor&lt;/h1&gt;\n          &lt;small&gt;GestorEasy • PWA&lt;/small&gt;\n        &lt;/div&gt;\n      &lt;/div&gt;\n    &lt;/header&gt;\n    &lt;main&gt;\n      &lt;section id=&quot;pairing&quot; class=&quot;card&quot;&gt;\n        &lt;h2&gt;Pareamento&lt;/h2&gt;\n        &lt;p class=&quot;muted&quot;&gt;Aponte a câmera para o QR gerado no módulo WMS (Configurações) ou cole a string de pareamento.&lt;/p&gt;\n        &lt;div class=&quot;grid2&quot;&gt;\n          &lt;div&gt;\n            &lt;video id=&quot;camera&quot; playsinline muted&gt;&lt;/video&gt;\n            &lt;div class=&quot;actions&quot;&gt;\n              &lt;button id=&quot;btnEnableCam&quot; class=&quot;btn&quot;&gt;Ativar câmera&lt;/button&gt;\n              &lt;button id=&quot;btnScanPair&quot; class=&quot;btn btn-secondary&quot;&gt;Ler QR de pareamento&lt;/button&gt;\n              &lt;span id=&quot;scanStatus&quot; class=&quot;muted&quot; aria-live=&quot;polite&quot;&gt;&lt;/span&gt;\n            &lt;/div&gt;\n          &lt;/div&gt;\n          &lt;div&gt;\n            &lt;label&gt;String de pareamento\n              &lt;textarea id=&quot;pairString&quot; placeholder=\&apos;{&quot;url&quot;:&quot;https://wms.local/mobile&quot;,&quot;deviceKey&quot;:&quot;DEV-ABC-123&quot;}\&apos; rows=&quot;3&quot;&gt;&lt;/textarea&gt;\n            &lt;/label&gt;\n            &lt;div class=&quot;actions&quot;&gt;\n              &lt;button id=&quot;btnApplyPair&quot; class=&quot;btn&quot;&gt;Aplicar&lt;/button&gt;\n              &lt;button id=&quot;btnTestPing&quot; class=&quot;btn btn-secondary&quot;&gt;Testar conexão&lt;/button&gt;\n            &lt;/div&gt;\n          &lt;/div&gt;\n        &lt;/div&gt;\n        &lt;div class=&quot;status&quot;&gt;\n          &lt;div&gt;URL: &lt;span id=&quot;stUrl&quot; class=&quot;mono&quot;&gt;-&lt;/span&gt;&lt;/div&gt;\n          &lt;div&gt;Device Key: &lt;span id=&quot;stDev&quot; class=&quot;mono&quot;&gt;-&lt;/span&gt;&lt;/div&gt;\n          &lt;div&gt;Última sincronização: &lt;span id=&quot;stSync&quot; class=&quot;mono&quot;&gt;-&lt;/span&gt;&lt;/div&gt;\n        &lt;/div&gt;\n      &lt;/section&gt;\n\n      &lt;nav id=&quot;modes&quot;&gt;\n        &lt;button data-mode=&quot;inventory&quot; aria-selected=&quot;true&quot;&gt;Inventário&lt;/button&gt;\n        &lt;button data-mode=&quot;receiving&quot;&gt;Recebimento&lt;/button&gt;\n        &lt;button data-mode=&quot;shipping&quot;&gt;Expedição&lt;/button&gt;\n      &lt;/nav&gt;\n\n      &lt;section id=&quot;dashboard&quot; class=&quot;card&quot;&gt;\n        &lt;h2&gt;Resumo do coletor&lt;/h2&gt;\n        &lt;div class=&quot;grid2&quot;&gt;\n          &lt;div&gt;\n            &lt;h3&gt;Composição da fila&lt;/h3&gt;\n            &lt;div id=&quot;queueBars&quot; class=&quot;bars&quot; aria-label=&quot;Composição da fila&quot; style=&quot;display:flex; gap:8px; align-items:center;&quot;&gt;&lt;/div&gt;\n            &lt;small id=&quot;queueInfo&quot; class=&quot;muted&quot;&gt;&lt;/small&gt;\n          &lt;/div&gt;\n          &lt;div&gt;\n            &lt;h3&gt;Última sincronização&lt;/h3&gt;\n            &lt;div id=&quot;syncBars&quot; class=&quot;bars&quot; aria-label=&quot;Última sincronização&quot; style=&quot;display:flex; gap:8px; align-items:center;&quot;&gt;&lt;/div&gt;\n            &lt;small id=&quot;syncInfo&quot; class=&quot;muted&quot;&gt;&lt;/small&gt;\n          &lt;/div&gt;\n        &lt;/div&gt;\n        &lt;div class=&quot;grid2&quot; style=&quot;margin-top:8px;&quot;&gt;\n          &lt;div&gt;\n            &lt;h3&gt;Recebimento vs Meta (WMS)&lt;/h3&gt;\n            &lt;div class=&quot;progress&quot; aria-label=&quot;Recebimento vs Meta&quot; style=&quot;height:12px; background:#eee; border-radius:6px; overflow:hidden; width:220px;&quot;&gt;\n              &lt;div id=&quot;goalRec&quot; style=&quot;height:12px; width:0%; background:#2b8a3e;&quot;&gt;&lt;/div&gt;\n            &lt;/div&gt;\n          &lt;/div&gt;\n          &lt;div&gt;\n            &lt;h3&gt;Expedição vs Recebimento (WMS)&lt;/h3&gt;\n            &lt;div class=&quot;progress&quot; aria-label=&quot;Expedição vs Recebimento&quot; style=&quot;height:12px; background:#eee; border-radius:6px; overflow:hidden; width:220px;&quot;&gt;\n              &lt;div id=&quot;goalShip&quot; style=&quot;height:12px; width:0%; background:#1c7ed6;&quot;&gt;&lt;/div&gt;\n            &lt;/div&gt;\n          &lt;/div&gt;\n        &lt;/div&gt;\n        &lt;small id=&quot;goalsInfo&quot; class=&quot;muted&quot; style=&quot;display:block; margin-top:4px;&quot;&gt;&lt;/small&gt;\n        &lt;div style=&quot;margin-top:8px;&quot;&gt;\n          &lt;h3&gt;Capturas recentes&lt;/h3&gt;\n          &lt;div id=&quot;queueChart&quot; style=&quot;display:flex; gap:6px; align-items:flex-end; height:120px;&quot;&gt;&lt;/div&gt;\n        &lt;/div&gt;\n      &lt;/section&gt;\n\n      &lt;section id=&quot;inventory&quot; class=&quot;card&quot;&gt;\n        &lt;h2&gt;Inventário&lt;/h2&gt;\n        &lt;div class=&quot;grid2&quot;&gt;\n          &lt;div&gt;\n            &lt;label&gt;Produto/ID\n              &lt;input id=&quot;invProduct&quot; type=&quot;text&quot; placeholder=&quot;Escaneie ou digite&quot; /&gt;\n            &lt;/label&gt;\n            &lt;label&gt;Local/Bin\n              &lt;input id=&quot;invBin&quot; type=&quot;text&quot; placeholder=&quot;Ex.: A1-03-02&quot; /&gt;\n            &lt;/label&gt;\n            &lt;label&gt;Quantidade\n              &lt;input id=&quot;invQty&quot; type=&quot;number&quot; inputmode=&quot;numeric&quot; min=&quot;0&quot; step=&quot;1&quot; /&gt;\n            &lt;/label&gt;\n            &lt;div class=&quot;actions&quot;&gt;\n              &lt;button id=&quot;invScan&quot; class=&quot;btn btn-secondary&quot;&gt;Usar câmera&lt;/button&gt;\n              &lt;button id=&quot;invSubmit&quot; class=&quot;btn&quot;&gt;Registrar contagem&lt;/button&gt;\n            &lt;/div&gt;\n          &lt;/div&gt;\n          &lt;div&gt;\n            &lt;h3&gt;Fila offline&lt;/h3&gt;\n            &lt;ul id=&quot;queueInv&quot; class=&quot;list&quot;&gt;&lt;/ul&gt;\n          &lt;/div&gt;\n        &lt;/div&gt;\n      &lt;/section&gt;\n\n      &lt;section id=&quot;receiving&quot; class=&quot;card hidden&quot;&gt;\n        &lt;h2&gt;Recebimento&lt;/h2&gt;\n        &lt;label&gt;Produto/ID\n          &lt;input id=&quot;recProduct&quot; type=&quot;text&quot; placeholder=&quot;Escaneie ou digite&quot; /&gt;\n        &lt;/label&gt;\n        &lt;label&gt;Quantidade\n          &lt;input id=&quot;recQty&quot; type=&quot;number&quot; inputmode=&quot;numeric&quot; min=&quot;0&quot; step=&quot;1&quot; /&gt;\n        &lt;/label&gt;\n        &lt;label&gt;Origem (doc/fornecedor)\n          &lt;input id=&quot;recOrigin&quot; type=&quot;text&quot; placeholder=&quot;NF/OC/Fornecedor&quot; /&gt;\n        &lt;/label&gt;\n        &lt;div class=&quot;actions&quot;&gt;\n          &lt;button id=&quot;recScan&quot; class=&quot;btn btn-secondary&quot;&gt;Usar câmera&lt;/button&gt;\n          &lt;button id=&quot;recSubmit&quot; class=&quot;btn&quot;&gt;Registrar entrada&lt;/button&gt;\n        &lt;/div&gt;\n        &lt;h3&gt;Fila offline&lt;/h3&gt;\n        &lt;ul id=&quot;queueRec&quot; class=&quot;list&quot;&gt;&lt;/ul&gt;\n      &lt;/section&gt;\n\n      &lt;section id=&quot;shipping&quot; class=&quot;card hidden&quot;&gt;\n        &lt;h2&gt;Expedição&lt;/h2&gt;\n        &lt;label&gt;Produto/ID\n          &lt;input id=&quot;shipProduct&quot; type=&quot;text&quot; placeholder=&quot;Escaneie ou digite&quot; /&gt;\n        &lt;/label&gt;\n        &lt;label&gt;Quantidade\n          &lt;input id=&quot;shipQty&quot; type=&quot;number&quot; inputmode=&quot;numeric&quot; min=&quot;0&quot; step=&quot;1&quot; /&gt;\n        &lt;/label&gt;\n        &lt;label&gt;Destino (pedido/cliente)\n          &lt;input id=&quot;shipDest&quot; type=&quot;text&quot; placeholder=&quot;Pedido/Cliente&quot; /&gt;\n        &lt;/label&gt;\n        &lt;div class=&quot;actions&quot;&gt;\n          &lt;button id=&quot;shipScan&quot; class=&quot;btn btn-secondary&quot;&gt;Usar câmera&lt;/button&gt;\n          &lt;button id=&quot;shipSubmit&quot; class=&quot;btn&quot;&gt;Registrar saída&lt;/button&gt;\n        &lt;/div&gt;\n        &lt;h3&gt;Fila offline&lt;/h3&gt;\n        &lt;ul id=&quot;queueShip&quot; class=&quot;list&quot;&gt;&lt;/ul&gt;\n      &lt;/section&gt;\n\n      &lt;section class=&quot;card&quot;&gt;\n        &lt;div class=&quot;actions&quot;&gt;\n          &lt;button id=&quot;btnSync&quot; class=&quot;btn&quot;&gt;Sincronizar fila&lt;/button&gt;\n          &lt;button id=&quot;btnClearQueue&quot; class=&quot;btn btn-secondary&quot;&gt;Limpar fila&lt;/button&gt;\n          &lt;span id=&quot;syncFeedback&quot; class=&quot;muted&quot; aria-live=&quot;polite&quot;&gt;&lt;/span&gt;\n        &lt;/div&gt;\n      &lt;/section&gt;\n    &lt;/main&gt;\n    &lt;footer&gt;\n      &lt;small&gt;© GestorEasy • PWA Coletor&lt;/small&gt;\n    &lt;/footer&gt;\n\n    &lt;script src=&quot;../js/qrcode.min.js&quot;&gt;&lt;/script&gt;\n    &lt;script src=&quot;../js/qr_stub.js&quot;&gt;&lt;/script&gt;\n    &lt;script src=&quot;./app.js&quot;&gt;&lt;/script&gt;\n  &lt;/body&gt;\n  &lt;/html&gt;&apos; to have property &apos;accepted&apos;" type="AssertionError"><![CDATA[AssertionError: expected '<!doctype html>\n<html lang="pt-BR">\n  <head>\n    <meta charset="utf-8" />\n    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />\n    <title>Gestor coletor • GestorEasy</title>\n    <link rel="manifest" href="./manifest.webmanifest">\n    <link rel="icon" href="/assets/logo-light.png" media="(prefers-color-scheme: light)">\n    <link rel="icon" href="/assets/logo-dark.png" media="(prefers-color-scheme: dark)">\n    <link rel="apple-touch-icon" href="/assets/logo-light.png">\n    <link rel="stylesheet" href="./style.css" />\n    <meta name="theme-color" content="#0ea5e9" />\n  </head>\n  <body>\n    <header>\n      <div class="brand">\n        <img src="/assets/logo-light.png" alt="Gestor coletor" height="28" />\n        <div>\n          <h1>Gestor coletor</h1>\n          <small>GestorEasy • PWA</small>\n        </div>\n      </div>\n    </header>\n    <main>\n      <section id="pairing" class="card">\n        <h2>Pareamento</h2>\n        <p class="muted">Aponte a câmera para o QR gerado no módulo WMS (Configurações) ou cole a string de pareamento.</p>\n        <div class="grid2">\n          <div>\n            <video id="camera" playsinline muted></video>\n            <div class="actions">\n              <button id="btnEnableCam" class="btn">Ativar câmera</button>\n              <button id="btnScanPair" class="btn btn-secondary">Ler QR de pareamento</button>\n              <span id="scanStatus" class="muted" aria-live="polite"></span>\n            </div>\n          </div>\n          <div>\n            <label>String de pareamento\n              <textarea id="pairString" placeholder=\'{"url":"https://wms.local/mobile","deviceKey":"DEV-ABC-123"}\' rows="3"></textarea>\n            </label>\n            <div class="actions">\n              <button id="btnApplyPair" class="btn">Aplicar</button>\n              <button id="btnTestPing" class="btn btn-secondary">Testar conexão</button>\n            </div>\n          </div>\n        </div>\n        <div class="status">\n          <div>URL: <span id="stUrl" class="mono">-</span></div>\n          <div>Device Key: <span id="stDev" class="mono">-</span></div>\n          <div>Última sincronização: <span id="stSync" class="mono">-</span></div>\n        </div>\n      </section>\n\n      <nav id="modes">\n        <button data-mode="inventory" aria-selected="true">Inventário</button>\n        <button data-mode="receiving">Recebimento</button>\n        <button data-mode="shipping">Expedição</button>\n      </nav>\n\n      <section id="dashboard" class="card">\n        <h2>Resumo do coletor</h2>\n        <div class="grid2">\n          <div>\n            <h3>Composição da fila</h3>\n            <div id="queueBars" class="bars" aria-label="Composição da fila" style="display:flex; gap:8px; align-items:center;"></div>\n            <small id="queueInfo" class="muted"></small>\n          </div>\n          <div>\n            <h3>Última sincronização</h3>\n            <div id="syncBars" class="bars" aria-label="Última sincronização" style="display:flex; gap:8px; align-items:center;"></div>\n            <small id="syncInfo" class="muted"></small>\n          </div>\n        </div>\n        <div class="grid2" style="margin-top:8px;">\n          <div>\n            <h3>Recebimento vs Meta (WMS)</h3>\n            <div class="progress" aria-label="Recebimento vs Meta" style="height:12px; background:#eee; border-radius:6px; overflow:hidden; width:220px;">\n              <div id="goalRec" style="height:12px; width:0%; background:#2b8a3e;"></div>\n            </div>\n          </div>\n          <div>\n            <h3>Expedição vs Recebimento (WMS)</h3>\n            <div class="progress" aria-label="Expedição vs Recebimento" style="height:12px; background:#eee; border-radius:6px; overflow:hidden; width:220px;">\n              <div id="goalShip" style="height:12px; width:0%; background:#1c7ed6;"></div>\n            </div>\n          </div>\n        </div>\n        <small id="goalsInfo" class="muted" style="display:block; margin-top:4px;"></small>\n        <div style="margin-top:8px;">\n          <h3>Capturas recentes</h3>\n          <div id="queueChart" style="display:flex; gap:6px; align-items:flex-end; height:120px;"></div>\n        </div>\n      </section>\n\n      <section id="inventory" class="card">\n        <h2>Inventário</h2>\n        <div class="grid2">\n          <div>\n            <label>Produto/ID\n              <input id="invProduct" type="text" placeholder="Escaneie ou digite" />\n            </label>\n            <label>Local/Bin\n              <input id="invBin" type="text" placeholder="Ex.: A1-03-02" />\n            </label>\n            <label>Quantidade\n              <input id="invQty" type="number" inputmode="numeric" min="0" step="1" />\n            </label>\n            <div class="actions">\n              <button id="invScan" class="btn btn-secondary">Usar câmera</button>\n              <button id="invSubmit" class="btn">Registrar contagem</button>\n            </div>\n          </div>\n          <div>\n            <h3>Fila offline</h3>\n            <ul id="queueInv" class="list"></ul>\n          </div>\n        </div>\n      </section>\n\n      <section id="receiving" class="card hidden">\n        <h2>Recebimento</h2>\n        <label>Produto/ID\n          <input id="recProduct" type="text" placeholder="Escaneie ou digite" />\n        </label>\n        <label>Quantidade\n          <input id="recQty" type="number" inputmode="numeric" min="0" step="1" />\n        </label>\n        <label>Origem (doc/fornecedor)\n          <input id="recOrigin" type="text" placeholder="NF/OC/Fornecedor" />\n        </label>\n        <div class="actions">\n          <button id="recScan" class="btn btn-secondary">Usar câmera</button>\n          <button id="recSubmit" class="btn">Registrar entrada</button>\n        </div>\n        <h3>Fila offline</h3>\n        <ul id="queueRec" class="list"></ul>\n      </section>\n\n      <section id="shipping" class="card hidden">\n        <h2>Expedição</h2>\n        <label>Produto/ID\n          <input id="shipProduct" type="text" placeholder="Escaneie ou digite" />\n        </label>\n        <label>Quantidade\n          <input id="shipQty" type="number" inputmode="numeric" min="0" step="1" />\n        </label>\n        <label>Destino (pedido/cliente)\n          <input id="shipDest" type="text" placeholder="Pedido/Cliente" />\n        </label>\n        <div class="actions">\n          <button id="shipScan" class="btn btn-secondary">Usar câmera</button>\n          <button id="shipSubmit" class="btn">Registrar saída</button>\n        </div>\n        <h3>Fila offline</h3>\n        <ul id="queueShip" class="list"></ul>\n      </section>\n\n      <section class="card">\n        <div class="actions">\n          <button id="btnSync" class="btn">Sincronizar fila</button>\n          <button id="btnClearQueue" class="btn btn-secondary">Limpar fila</button>\n          <span id="syncFeedback" class="muted" aria-live="polite"></span>\n        </div>\n      </section>\n    </main>\n    <footer>\n      <small>© GestorEasy • PWA Coletor</small>\n    </footer>\n\n    <script src="../js/qrcode.min.js"></script>\n    <script src="../js/qr_stub.js"></script>\n    <script src="./app.js"></script>\n  </body>\n  </html>' to have property 'accepted'
    at Context.eval (webpack://gestoreasy-v3/./cypress/e2e/mobile_pwa.cy.js:27:31)
    at getRet (http://localhost:8000/__cypress/runner/cypress_runner.js:122341:20)
    at tryCatcher (http://localhost:8000/__cypress/runner/cypress_runner.js:1777:23)
    at Promise.attempt.Promise.try (http://localhost:8000/__cypress/runner/cypress_runner.js:4285:29)
    at Context.thenFn (http://localhost:8000/__cypress/runner/cypress_runner.js:122352:66)
    at Context.then (http://localhost:8000/__cypress/runner/cypress_runner.js:122603:21)]]></failure>
    </testcase>
    <testcase name="Gestor coletor PWA envia evento de expedição e valida aceite do backend" time="0.000" classname="envia evento de expedição e valida aceite do backend">
      <failure message="expected &apos;&lt;!doctype html&gt;\n&lt;html lang=&quot;pt-BR&quot;&gt;\n  &lt;head&gt;\n    &lt;meta charset=&quot;utf-8&quot; /&gt;\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, viewport-fit=cover&quot; /&gt;\n    &lt;title&gt;Gestor coletor • GestorEasy&lt;/title&gt;\n    &lt;link rel=&quot;manifest&quot; href=&quot;./manifest.webmanifest&quot;&gt;\n    &lt;link rel=&quot;icon&quot; href=&quot;/assets/logo-light.png&quot; media=&quot;(prefers-color-scheme: light)&quot;&gt;\n    &lt;link rel=&quot;icon&quot; href=&quot;/assets/logo-dark.png&quot; media=&quot;(prefers-color-scheme: dark)&quot;&gt;\n    &lt;link rel=&quot;apple-touch-icon&quot; href=&quot;/assets/logo-light.png&quot;&gt;\n    &lt;link rel=&quot;stylesheet&quot; href=&quot;./style.css&quot; /&gt;\n    &lt;meta name=&quot;theme-color&quot; content=&quot;#0ea5e9&quot; /&gt;\n  &lt;/head&gt;\n  &lt;body&gt;\n    &lt;header&gt;\n      &lt;div class=&quot;brand&quot;&gt;\n        &lt;img src=&quot;/assets/logo-light.png&quot; alt=&quot;Gestor coletor&quot; height=&quot;28&quot; /&gt;\n        &lt;div&gt;\n          &lt;h1&gt;Gestor coletor&lt;/h1&gt;\n          &lt;small&gt;GestorEasy • PWA&lt;/small&gt;\n        &lt;/div&gt;\n      &lt;/div&gt;\n    &lt;/header&gt;\n    &lt;main&gt;\n      &lt;section id=&quot;pairing&quot; class=&quot;card&quot;&gt;\n        &lt;h2&gt;Pareamento&lt;/h2&gt;\n        &lt;p class=&quot;muted&quot;&gt;Aponte a câmera para o QR gerado no módulo WMS (Configurações) ou cole a string de pareamento.&lt;/p&gt;\n        &lt;div class=&quot;grid2&quot;&gt;\n          &lt;div&gt;\n            &lt;video id=&quot;camera&quot; playsinline muted&gt;&lt;/video&gt;\n            &lt;div class=&quot;actions&quot;&gt;\n              &lt;button id=&quot;btnEnableCam&quot; class=&quot;btn&quot;&gt;Ativar câmera&lt;/button&gt;\n              &lt;button id=&quot;btnScanPair&quot; class=&quot;btn btn-secondary&quot;&gt;Ler QR de pareamento&lt;/button&gt;\n              &lt;span id=&quot;scanStatus&quot; class=&quot;muted&quot; aria-live=&quot;polite&quot;&gt;&lt;/span&gt;\n            &lt;/div&gt;\n          &lt;/div&gt;\n          &lt;div&gt;\n            &lt;label&gt;String de pareamento\n              &lt;textarea id=&quot;pairString&quot; placeholder=\&apos;{&quot;url&quot;:&quot;https://wms.local/mobile&quot;,&quot;deviceKey&quot;:&quot;DEV-ABC-123&quot;}\&apos; rows=&quot;3&quot;&gt;&lt;/textarea&gt;\n            &lt;/label&gt;\n            &lt;div class=&quot;actions&quot;&gt;\n              &lt;button id=&quot;btnApplyPair&quot; class=&quot;btn&quot;&gt;Aplicar&lt;/button&gt;\n              &lt;button id=&quot;btnTestPing&quot; class=&quot;btn btn-secondary&quot;&gt;Testar conexão&lt;/button&gt;\n            &lt;/div&gt;\n          &lt;/div&gt;\n        &lt;/div&gt;\n        &lt;div class=&quot;status&quot;&gt;\n          &lt;div&gt;URL: &lt;span id=&quot;stUrl&quot; class=&quot;mono&quot;&gt;-&lt;/span&gt;&lt;/div&gt;\n          &lt;div&gt;Device Key: &lt;span id=&quot;stDev&quot; class=&quot;mono&quot;&gt;-&lt;/span&gt;&lt;/div&gt;\n          &lt;div&gt;Última sincronização: &lt;span id=&quot;stSync&quot; class=&quot;mono&quot;&gt;-&lt;/span&gt;&lt;/div&gt;\n        &lt;/div&gt;\n      &lt;/section&gt;\n\n      &lt;nav id=&quot;modes&quot;&gt;\n        &lt;button data-mode=&quot;inventory&quot; aria-selected=&quot;true&quot;&gt;Inventário&lt;/button&gt;\n        &lt;button data-mode=&quot;receiving&quot;&gt;Recebimento&lt;/button&gt;\n        &lt;button data-mode=&quot;shipping&quot;&gt;Expedição&lt;/button&gt;\n      &lt;/nav&gt;\n\n      &lt;section id=&quot;dashboard&quot; class=&quot;card&quot;&gt;\n        &lt;h2&gt;Resumo do coletor&lt;/h2&gt;\n        &lt;div class=&quot;grid2&quot;&gt;\n          &lt;div&gt;\n            &lt;h3&gt;Composição da fila&lt;/h3&gt;\n            &lt;div id=&quot;queueBars&quot; class=&quot;bars&quot; aria-label=&quot;Composição da fila&quot; style=&quot;display:flex; gap:8px; align-items:center;&quot;&gt;&lt;/div&gt;\n            &lt;small id=&quot;queueInfo&quot; class=&quot;muted&quot;&gt;&lt;/small&gt;\n          &lt;/div&gt;\n          &lt;div&gt;\n            &lt;h3&gt;Última sincronização&lt;/h3&gt;\n            &lt;div id=&quot;syncBars&quot; class=&quot;bars&quot; aria-label=&quot;Última sincronização&quot; style=&quot;display:flex; gap:8px; align-items:center;&quot;&gt;&lt;/div&gt;\n            &lt;small id=&quot;syncInfo&quot; class=&quot;muted&quot;&gt;&lt;/small&gt;\n          &lt;/div&gt;\n        &lt;/div&gt;\n        &lt;div class=&quot;grid2&quot; style=&quot;margin-top:8px;&quot;&gt;\n          &lt;div&gt;\n            &lt;h3&gt;Recebimento vs Meta (WMS)&lt;/h3&gt;\n            &lt;div class=&quot;progress&quot; aria-label=&quot;Recebimento vs Meta&quot; style=&quot;height:12px; background:#eee; border-radius:6px; overflow:hidden; width:220px;&quot;&gt;\n              &lt;div id=&quot;goalRec&quot; style=&quot;height:12px; width:0%; background:#2b8a3e;&quot;&gt;&lt;/div&gt;\n            &lt;/div&gt;\n          &lt;/div&gt;\n          &lt;div&gt;\n            &lt;h3&gt;Expedição vs Recebimento (WMS)&lt;/h3&gt;\n            &lt;div class=&quot;progress&quot; aria-label=&quot;Expedição vs Recebimento&quot; style=&quot;height:12px; background:#eee; border-radius:6px; overflow:hidden; width:220px;&quot;&gt;\n              &lt;div id=&quot;goalShip&quot; style=&quot;height:12px; width:0%; background:#1c7ed6;&quot;&gt;&lt;/div&gt;\n            &lt;/div&gt;\n          &lt;/div&gt;\n        &lt;/div&gt;\n        &lt;small id=&quot;goalsInfo&quot; class=&quot;muted&quot; style=&quot;display:block; margin-top:4px;&quot;&gt;&lt;/small&gt;\n        &lt;div style=&quot;margin-top:8px;&quot;&gt;\n          &lt;h3&gt;Capturas recentes&lt;/h3&gt;\n          &lt;div id=&quot;queueChart&quot; style=&quot;display:flex; gap:6px; align-items:flex-end; height:120px;&quot;&gt;&lt;/div&gt;\n        &lt;/div&gt;\n      &lt;/section&gt;\n\n      &lt;section id=&quot;inventory&quot; class=&quot;card&quot;&gt;\n        &lt;h2&gt;Inventário&lt;/h2&gt;\n        &lt;div class=&quot;grid2&quot;&gt;\n          &lt;div&gt;\n            &lt;label&gt;Produto/ID\n              &lt;input id=&quot;invProduct&quot; type=&quot;text&quot; placeholder=&quot;Escaneie ou digite&quot; /&gt;\n            &lt;/label&gt;\n            &lt;label&gt;Local/Bin\n              &lt;input id=&quot;invBin&quot; type=&quot;text&quot; placeholder=&quot;Ex.: A1-03-02&quot; /&gt;\n            &lt;/label&gt;\n            &lt;label&gt;Quantidade\n              &lt;input id=&quot;invQty&quot; type=&quot;number&quot; inputmode=&quot;numeric&quot; min=&quot;0&quot; step=&quot;1&quot; /&gt;\n            &lt;/label&gt;\n            &lt;div class=&quot;actions&quot;&gt;\n              &lt;button id=&quot;invScan&quot; class=&quot;btn btn-secondary&quot;&gt;Usar câmera&lt;/button&gt;\n              &lt;button id=&quot;invSubmit&quot; class=&quot;btn&quot;&gt;Registrar contagem&lt;/button&gt;\n            &lt;/div&gt;\n          &lt;/div&gt;\n          &lt;div&gt;\n            &lt;h3&gt;Fila offline&lt;/h3&gt;\n            &lt;ul id=&quot;queueInv&quot; class=&quot;list&quot;&gt;&lt;/ul&gt;\n          &lt;/div&gt;\n        &lt;/div&gt;\n      &lt;/section&gt;\n\n      &lt;section id=&quot;receiving&quot; class=&quot;card hidden&quot;&gt;\n        &lt;h2&gt;Recebimento&lt;/h2&gt;\n        &lt;label&gt;Produto/ID\n          &lt;input id=&quot;recProduct&quot; type=&quot;text&quot; placeholder=&quot;Escaneie ou digite&quot; /&gt;\n        &lt;/label&gt;\n        &lt;label&gt;Quantidade\n          &lt;input id=&quot;recQty&quot; type=&quot;number&quot; inputmode=&quot;numeric&quot; min=&quot;0&quot; step=&quot;1&quot; /&gt;\n        &lt;/label&gt;\n        &lt;label&gt;Origem (doc/fornecedor)\n          &lt;input id=&quot;recOrigin&quot; type=&quot;text&quot; placeholder=&quot;NF/OC/Fornecedor&quot; /&gt;\n        &lt;/label&gt;\n        &lt;div class=&quot;actions&quot;&gt;\n          &lt;button id=&quot;recScan&quot; class=&quot;btn btn-secondary&quot;&gt;Usar câmera&lt;/button&gt;\n          &lt;button id=&quot;recSubmit&quot; class=&quot;btn&quot;&gt;Registrar entrada&lt;/button&gt;\n        &lt;/div&gt;\n        &lt;h3&gt;Fila offline&lt;/h3&gt;\n        &lt;ul id=&quot;queueRec&quot; class=&quot;list&quot;&gt;&lt;/ul&gt;\n      &lt;/section&gt;\n\n      &lt;section id=&quot;shipping&quot; class=&quot;card hidden&quot;&gt;\n        &lt;h2&gt;Expedição&lt;/h2&gt;\n        &lt;label&gt;Produto/ID\n          &lt;input id=&quot;shipProduct&quot; type=&quot;text&quot; placeholder=&quot;Escaneie ou digite&quot; /&gt;\n        &lt;/label&gt;\n        &lt;label&gt;Quantidade\n          &lt;input id=&quot;shipQty&quot; type=&quot;number&quot; inputmode=&quot;numeric&quot; min=&quot;0&quot; step=&quot;1&quot; /&gt;\n        &lt;/label&gt;\n        &lt;label&gt;Destino (pedido/cliente)\n          &lt;input id=&quot;shipDest&quot; type=&quot;text&quot; placeholder=&quot;Pedido/Cliente&quot; /&gt;\n        &lt;/label&gt;\n        &lt;div class=&quot;actions&quot;&gt;\n          &lt;button id=&quot;shipScan&quot; class=&quot;btn btn-secondary&quot;&gt;Usar câmera&lt;/button&gt;\n          &lt;button id=&quot;shipSubmit&quot; class=&quot;btn&quot;&gt;Registrar saída&lt;/button&gt;\n        &lt;/div&gt;\n        &lt;h3&gt;Fila offline&lt;/h3&gt;\n        &lt;ul id=&quot;queueShip&quot; class=&quot;list&quot;&gt;&lt;/ul&gt;\n      &lt;/section&gt;\n\n      &lt;section class=&quot;card&quot;&gt;\n        &lt;div class=&quot;actions&quot;&gt;\n          &lt;button id=&quot;btnSync&quot; class=&quot;btn&quot;&gt;Sincronizar fila&lt;/button&gt;\n          &lt;button id=&quot;btnClearQueue&quot; class=&quot;btn btn-secondary&quot;&gt;Limpar fila&lt;/button&gt;\n          &lt;span id=&quot;syncFeedback&quot; class=&quot;muted&quot; aria-live=&quot;polite&quot;&gt;&lt;/span&gt;\n        &lt;/div&gt;\n      &lt;/section&gt;\n    &lt;/main&gt;\n    &lt;footer&gt;\n      &lt;small&gt;© GestorEasy • PWA Coletor&lt;/small&gt;\n    &lt;/footer&gt;\n\n    &lt;script src=&quot;../js/qrcode.min.js&quot;&gt;&lt;/script&gt;\n    &lt;script src=&quot;../js/qr_stub.js&quot;&gt;&lt;/script&gt;\n    &lt;script src=&quot;./app.js&quot;&gt;&lt;/script&gt;\n  &lt;/body&gt;\n  &lt;/html&gt;&apos; to have property &apos;accepted&apos;" type="AssertionError"><![CDATA[AssertionError: expected '<!doctype html>\n<html lang="pt-BR">\n  <head>\n    <meta charset="utf-8" />\n    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />\n    <title>Gestor coletor • GestorEasy</title>\n    <link rel="manifest" href="./manifest.webmanifest">\n    <link rel="icon" href="/assets/logo-light.png" media="(prefers-color-scheme: light)">\n    <link rel="icon" href="/assets/logo-dark.png" media="(prefers-color-scheme: dark)">\n    <link rel="apple-touch-icon" href="/assets/logo-light.png">\n    <link rel="stylesheet" href="./style.css" />\n    <meta name="theme-color" content="#0ea5e9" />\n  </head>\n  <body>\n    <header>\n      <div class="brand">\n        <img src="/assets/logo-light.png" alt="Gestor coletor" height="28" />\n        <div>\n          <h1>Gestor coletor</h1>\n          <small>GestorEasy • PWA</small>\n        </div>\n      </div>\n    </header>\n    <main>\n      <section id="pairing" class="card">\n        <h2>Pareamento</h2>\n        <p class="muted">Aponte a câmera para o QR gerado no módulo WMS (Configurações) ou cole a string de pareamento.</p>\n        <div class="grid2">\n          <div>\n            <video id="camera" playsinline muted></video>\n            <div class="actions">\n              <button id="btnEnableCam" class="btn">Ativar câmera</button>\n              <button id="btnScanPair" class="btn btn-secondary">Ler QR de pareamento</button>\n              <span id="scanStatus" class="muted" aria-live="polite"></span>\n            </div>\n          </div>\n          <div>\n            <label>String de pareamento\n              <textarea id="pairString" placeholder=\'{"url":"https://wms.local/mobile","deviceKey":"DEV-ABC-123"}\' rows="3"></textarea>\n            </label>\n            <div class="actions">\n              <button id="btnApplyPair" class="btn">Aplicar</button>\n              <button id="btnTestPing" class="btn btn-secondary">Testar conexão</button>\n            </div>\n          </div>\n        </div>\n        <div class="status">\n          <div>URL: <span id="stUrl" class="mono">-</span></div>\n          <div>Device Key: <span id="stDev" class="mono">-</span></div>\n          <div>Última sincronização: <span id="stSync" class="mono">-</span></div>\n        </div>\n      </section>\n\n      <nav id="modes">\n        <button data-mode="inventory" aria-selected="true">Inventário</button>\n        <button data-mode="receiving">Recebimento</button>\n        <button data-mode="shipping">Expedição</button>\n      </nav>\n\n      <section id="dashboard" class="card">\n        <h2>Resumo do coletor</h2>\n        <div class="grid2">\n          <div>\n            <h3>Composição da fila</h3>\n            <div id="queueBars" class="bars" aria-label="Composição da fila" style="display:flex; gap:8px; align-items:center;"></div>\n            <small id="queueInfo" class="muted"></small>\n          </div>\n          <div>\n            <h3>Última sincronização</h3>\n            <div id="syncBars" class="bars" aria-label="Última sincronização" style="display:flex; gap:8px; align-items:center;"></div>\n            <small id="syncInfo" class="muted"></small>\n          </div>\n        </div>\n        <div class="grid2" style="margin-top:8px;">\n          <div>\n            <h3>Recebimento vs Meta (WMS)</h3>\n            <div class="progress" aria-label="Recebimento vs Meta" style="height:12px; background:#eee; border-radius:6px; overflow:hidden; width:220px;">\n              <div id="goalRec" style="height:12px; width:0%; background:#2b8a3e;"></div>\n            </div>\n          </div>\n          <div>\n            <h3>Expedição vs Recebimento (WMS)</h3>\n            <div class="progress" aria-label="Expedição vs Recebimento" style="height:12px; background:#eee; border-radius:6px; overflow:hidden; width:220px;">\n              <div id="goalShip" style="height:12px; width:0%; background:#1c7ed6;"></div>\n            </div>\n          </div>\n        </div>\n        <small id="goalsInfo" class="muted" style="display:block; margin-top:4px;"></small>\n        <div style="margin-top:8px;">\n          <h3>Capturas recentes</h3>\n          <div id="queueChart" style="display:flex; gap:6px; align-items:flex-end; height:120px;"></div>\n        </div>\n      </section>\n\n      <section id="inventory" class="card">\n        <h2>Inventário</h2>\n        <div class="grid2">\n          <div>\n            <label>Produto/ID\n              <input id="invProduct" type="text" placeholder="Escaneie ou digite" />\n            </label>\n            <label>Local/Bin\n              <input id="invBin" type="text" placeholder="Ex.: A1-03-02" />\n            </label>\n            <label>Quantidade\n              <input id="invQty" type="number" inputmode="numeric" min="0" step="1" />\n            </label>\n            <div class="actions">\n              <button id="invScan" class="btn btn-secondary">Usar câmera</button>\n              <button id="invSubmit" class="btn">Registrar contagem</button>\n            </div>\n          </div>\n          <div>\n            <h3>Fila offline</h3>\n            <ul id="queueInv" class="list"></ul>\n          </div>\n        </div>\n      </section>\n\n      <section id="receiving" class="card hidden">\n        <h2>Recebimento</h2>\n        <label>Produto/ID\n          <input id="recProduct" type="text" placeholder="Escaneie ou digite" />\n        </label>\n        <label>Quantidade\n          <input id="recQty" type="number" inputmode="numeric" min="0" step="1" />\n        </label>\n        <label>Origem (doc/fornecedor)\n          <input id="recOrigin" type="text" placeholder="NF/OC/Fornecedor" />\n        </label>\n        <div class="actions">\n          <button id="recScan" class="btn btn-secondary">Usar câmera</button>\n          <button id="recSubmit" class="btn">Registrar entrada</button>\n        </div>\n        <h3>Fila offline</h3>\n        <ul id="queueRec" class="list"></ul>\n      </section>\n\n      <section id="shipping" class="card hidden">\n        <h2>Expedição</h2>\n        <label>Produto/ID\n          <input id="shipProduct" type="text" placeholder="Escaneie ou digite" />\n        </label>\n        <label>Quantidade\n          <input id="shipQty" type="number" inputmode="numeric" min="0" step="1" />\n        </label>\n        <label>Destino (pedido/cliente)\n          <input id="shipDest" type="text" placeholder="Pedido/Cliente" />\n        </label>\n        <div class="actions">\n          <button id="shipScan" class="btn btn-secondary">Usar câmera</button>\n          <button id="shipSubmit" class="btn">Registrar saída</button>\n        </div>\n        <h3>Fila offline</h3>\n        <ul id="queueShip" class="list"></ul>\n      </section>\n\n      <section class="card">\n        <div class="actions">\n          <button id="btnSync" class="btn">Sincronizar fila</button>\n          <button id="btnClearQueue" class="btn btn-secondary">Limpar fila</button>\n          <span id="syncFeedback" class="muted" aria-live="polite"></span>\n        </div>\n      </section>\n    </main>\n    <footer>\n      <small>© GestorEasy • PWA Coletor</small>\n    </footer>\n\n    <script src="../js/qrcode.min.js"></script>\n    <script src="../js/qr_stub.js"></script>\n    <script src="./app.js"></script>\n  </body>\n  </html>' to have property 'accepted'
    at Context.eval (webpack://gestoreasy-v3/./cypress/e2e/mobile_pwa.cy.js:37:31)
    at getRet (http://localhost:8000/__cypress/runner/cypress_runner.js:122341:20)
    at tryCatcher (http://localhost:8000/__cypress/runner/cypress_runner.js:1777:23)
    at Promise.attempt.Promise.try (http://localhost:8000/__cypress/runner/cypress_runner.js:4285:29)
    at Context.thenFn (http://localhost:8000/__cypress/runner/cypress_runner.js:122352:66)
    at Context.then (http://localhost:8000/__cypress/runner/cypress_runner.js:122603:21)]]></failure>
    </testcase>
    <testcase name="Gestor coletor PWA consulta relatório CSV de entradas de inventário" time="0.000" classname="consulta relatório CSV de entradas de inventário">
      <failure message="`cy.request()` failed on:

http://localhost:8000/api/wms/inventory/entries/export.csv

The response we received from your web server was:

  &gt; 404: Not Found

This was considered a failure because the status code was not `2xx` or `3xx`.

If you do not want status codes to cause failures pass the option: `failOnStatusCode: false`

-----------------------------------------------------------

The request we sent was:

Method: GET
URL: http://localhost:8000/api/wms/inventory/entries/export.csv
Headers: {
  &quot;Connection&quot;: &quot;keep-alive&quot;,
  &quot;user-agent&quot;: &quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/15.6.0 Chrome/138.0.7204.251 Electron/37.6.0 Safari/537.36&quot;,
  &quot;accept&quot;: &quot;*/*&quot;,
  &quot;accept-encoding&quot;: &quot;gzip, deflate&quot;
}

-----------------------------------------------------------

The response we got was:

Status: 404 - Not Found
Headers: {
  &quot;host&quot;: &quot;localhost:8000&quot;,
  &quot;date&quot;: &quot;Fri, 07 Nov 2025 10:21:19 GMT&quot;,
  &quot;connection&quot;: &quot;close&quot;,
  &quot;content-type&quot;: &quot;text/html; charset=UTF-8&quot;,
  &quot;content-length&quot;: &quot;569&quot;
}
Body: &lt;!doctype html&gt;&lt;html&gt;&lt;head&gt;&lt;title&gt;404 Not Found&lt;/title&gt;&lt;style&gt;
body { background-color: #fcfcfc; color: #333333; margin: 0; padding:0; }
h1 { font-size: 1.5em; font-weight: normal; background-color: #9999cc; min-height:2em; line-height:2em; border-bottom: 1px inset black; margin: 0; }
h1, p { padding-left: 10px; }
code.url { background-color: #eeeeee; font-family:monospace; padding:0 2px;}
&lt;/style&gt;
&lt;/head&gt;&lt;body&gt;&lt;h1&gt;Not Found&lt;/h1&gt;&lt;p&gt;The requested resource &lt;code class=&quot;url&quot;&gt;/api/wms/inventory/entries/export.csv&lt;/code&gt; was not found on this server.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;


https://on.cypress.io/request" type="CypressError"><![CDATA[CypressError: `cy.request()` failed on:

http://localhost:8000/api/wms/inventory/entries/export.csv

The response we received from your web server was:

  > 404: Not Found

This was considered a failure because the status code was not `2xx` or `3xx`.

If you do not want status codes to cause failures pass the option: `failOnStatusCode: false`

-----------------------------------------------------------

The request we sent was:

Method: GET
URL: http://localhost:8000/api/wms/inventory/entries/export.csv
Headers: {
  "Connection": "keep-alive",
  "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Cypress/15.6.0 Chrome/138.0.7204.251 Electron/37.6.0 Safari/537.36",
  "accept": "*/*",
  "accept-encoding": "gzip, deflate"
}

-----------------------------------------------------------

The response we got was:

Status: 404 - Not Found
Headers: {
  "host": "localhost:8000",
  "date": "Fri, 07 Nov 2025 10:21:19 GMT",
  "connection": "close",
  "content-type": "text/html; charset=UTF-8",
  "content-length": "569"
}
Body: <!doctype html><html><head><title>404 Not Found</title><style>
body { background-color: #fcfcfc; color: #333333; margin: 0; padding:0; }
h1 { font-size: 1.5em; font-weight: normal; background-color: #9999cc; min-height:2em; line-height:2em; border-bottom: 1px inset black; margin: 0; }
h1, p { padding-left: 10px; }
code.url { background-color: #eeeeee; font-family:monospace; padding:0 2px;}
</style>
</head><body><h1>Not Found</h1><p>The requested resource <code class="url">/api/wms/inventory/entries/export.csv</code> was not found on this server.</p></body></html>


https://on.cypress.io/request
    at <unknown> (http://localhost:8000/__cypress/runner/cypress_runner.js:135785:72)
    at tryCatcher (http://localhost:8000/__cypress/runner/cypress_runner.js:1777:23)
    at Promise._settlePromiseFromHandler (http://localhost:8000/__cypress/runner/cypress_runner.js:1489:31)
    at Promise._settlePromise (http://localhost:8000/__cypress/runner/cypress_runner.js:1546:18)
    at Promise._settlePromise0 (http://localhost:8000/__cypress/runner/cypress_runner.js:1591:10)
    at Promise._settlePromises (http://localhost:8000/__cypress/runner/cypress_runner.js:1671:18)
    at _drainQueueStep (http://localhost:8000/__cypress/runner/cypress_runner.js:2377:12)
    at _drainQueue (http://localhost:8000/__cypress/runner/cypress_runner.js:2370:9)
    at Async._drainQueues (http://localhost:8000/__cypress/runner/cypress_runner.js:2386:5)
    at Async.drainQueues (http://localhost:8000/__cypress/runner/cypress_runner.js:2256:14)
From Your Spec Code:
    at Context.eval (webpack://gestoreasy-v3/./cypress/e2e/mobile_pwa.cy.js:42:7)]]></failure>
    </testcase>
  </testsuite>
</testsuites>