Skip to content
Source
Sign inSign up
Open History to see the last commit

ThreadErrorBanner.test.tsx

45 lines1.7 KB

1import { describe, expect, it } from "vite-plus/test";
2​
3import {
4 dismissThreadErrorBannerForSession,
5 getThreadErrorBannerKey,
6 getThreadErrorBannerMessage,
7 isThreadErrorBannerDismissedForSession,
8 shouldShowThreadErrorBanner,
9} from "./ThreadErrorBanner";
10​
11describe("getThreadErrorBannerMessage", () => {
12 it("extracts a readable nested message without trimming its whitespace", () => {
13 const message =
14 " This model is not supported with a ChatGPT account.\nChoose another model. ";
15 const error = ` \n${JSON.stringify({ error: { message, code: "unsupported_model" } })}\t `;
16​
17 expect(getThreadErrorBannerMessage(error)).toBe(message);
18 });
19​
20 it("keeps the diagnostics when the nested message is blank", () => {
21 const error = JSON.stringify({ error: { message: " \n\t ", code: "unsupported_model" } });
22​
23 expect(getThreadErrorBannerMessage(error)).toBe(error);
24 });
25});
26​
27describe("ThreadErrorBanner", () => {
28 it("reappears for different diagnostics with the same headline on the same thread", () => {
29 const firstError = JSON.stringify({ error: { message: "Turn failed", code: "first" } });
30 const secondError = JSON.stringify({ error: { message: "Turn failed", code: "second" } });
31 const dismissedKey = getThreadErrorBannerKey("env:thread-b", firstError);
32 dismissThreadErrorBannerForSession(dismissedKey);
33 const newErrorKey = getThreadErrorBannerKey("env:thread-b", secondError);
34​
35 expect(isThreadErrorBannerDismissedForSession(dismissedKey)).toBe(true);
36 expect(isThreadErrorBannerDismissedForSession(newErrorKey)).toBe(false);
37 expect(
38 shouldShowThreadErrorBanner(
39 "env:thread-b",
40 secondError,
41 isThreadErrorBannerDismissedForSession(newErrorKey),
42 ),
43 ).toBe(true);
44 });
45});