test(addin): convert crash-repro suite to permanent ticket-auth flow tests
All checks were successful
Deploy eCourt Note Web to Server / Validate Database Schema (Drizzle) (push) Successful in 5s
Deploy eCourt Note Web to Server / Build Web Docker Image (push) Successful in 1m28s
Deploy eCourt Note Web to Server / Deploy eCourt Note Web to Server (push) Successful in 5s
Deploy eCourt Note Web to Server / Notify Deployment Status (push) Successful in 1s
All checks were successful
Deploy eCourt Note Web to Server / Validate Database Schema (Drizzle) (push) Successful in 5s
Deploy eCourt Note Web to Server / Build Web Docker Image (push) Successful in 1m28s
Deploy eCourt Note Web to Server / Deploy eCourt Note Web to Server (push) Successful in 5s
Deploy eCourt Note Web to Server / Notify Deployment Status (push) Successful in 1s
Rename tests/wordaddin/ticket-auth-crash-repro.test.ts to ticket-auth-flow.test.ts and strip the temporary [DBG-r3p1] markers. The debug session closed with an environment cause (stale Next server holding the port / corrupted .next chunks), not a code defect, so the suite stays as regression coverage for the signInWithTicket service layer: single token fetch per fid, token reuse on reopen without re-hitting /token, memory-fallback session teardown, and no uncaught throw/rejection on every failure path (missing/invalid ticket, expired ticket, server 401, webview without crypto.subtle). Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
parent
7cd8939789
commit
4200176239
1 changed files with 6 additions and 5 deletions
|
|
@ -1,14 +1,15 @@
|
|||
// @vitest-environment jsdom
|
||||
// [DBG-r3p1] repro ชั่วคราว — หา client-side crash ของ taskpane หลัง implement ticket auth
|
||||
// (ไม่ใช่ regression test ถาวร — ถอดทิ้งเมื่อหาสาเหตุเจอแล้ว; import .tsx ไม่ได้ใน vitest ปัจจุบัน
|
||||
// จึงโฟกัส service layer ที่เป็นโค้ดใหม่ทั้งหมด — component repro ใช้ Chrome headless แทน)
|
||||
// ticket auth ของ add-in (PLAN-ADDIN-AUTH.md §5) — คุมพฤติกรรม service layer:
|
||||
// happy-path ขอ token ครั้งเดียวต่อ fid, เปิดเอกสารเดิมซ้ำใช้ token เดิมไม่ยิง /token ซ้ำ,
|
||||
// memory fallback ของ session, และทุก fail path ต้องคืน result ไม่ใช่ throw
|
||||
// (jsdom ไม่มี crypto.subtle — ฉีด webcrypto ของ node แทน secure context ของ webview จริง)
|
||||
import { createHmac, webcrypto } from "node:crypto";
|
||||
import { afterEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
import * as authService from "@/wordaddin/services/authService";
|
||||
import * as ticketService from "@/wordaddin/services/ticketService";
|
||||
|
||||
// จับ error ทุกทางที่จะกลายเป็น "Application error: a client-side exception" บน Next
|
||||
// จับ error ทุกทาง (window error / unhandled rejection) — flow ต้องไม่ปล่อยอะไรหลุดเลย
|
||||
const errors: unknown[] = [];
|
||||
function trapErrors() {
|
||||
window.addEventListener("error", (event) => errors.push(event.error ?? event.message));
|
||||
|
|
@ -38,7 +39,7 @@ afterEach(() => {
|
|||
errors.length = 0;
|
||||
});
|
||||
|
||||
describe("[DBG-r3p1] ticket auth crash repro (service layer)", () => {
|
||||
describe("signInWithTicket (service layer)", () => {
|
||||
it("B: signInWithTicket happy-path (มี crypto.subtle + fetch ตอบ 200) ไม่ต้อง throw", async () => {
|
||||
trapErrors();
|
||||
// jsdom ไม่มี crypto.subtle — ใส่ webcrypto ของ node แทน (secure context ของ webview จริงมีอยู่แล้ว)
|
||||
Loading…
Add table
Add a link
Reference in a new issue