1import { EnvironmentId, ORCHESTRATION_PROTOCOL_VERSION } from "@t3tools/contracts";
2import { describe, expect, it } from "vite-plus/test";
3
4import { orchestrationProtocolCompatibilityError } from "@t3tools/client-runtime/connection";
5
6import { environmentStatusText } from "./environmentStatusText";
7
8function compatibilityMessage(serverProtocolVersion: number): string {
9 const error = orchestrationProtocolCompatibilityError({
10 environmentId: EnvironmentId.make("environment-preview"),
11 label: "Studio Mac",
12 platform: { os: "darwin", arch: "arm64" },
13 serverVersion: "1.0.0",
14 orchestrationProtocolVersion: serverProtocolVersion,
15 capabilities: { repositoryIdentity: true },
16 });
17 if (error === null) throw new Error("expected an incompatible protocol");
18 return error.message;
19}
20
21describe("environment status text", () => {
22 it.each([
23 ["a newer server", ORCHESTRATION_PROTOCOL_VERSION + 1, "Update your app"],
24 ["an older server", ORCHESTRATION_PROTOCOL_VERSION - 1, "Update T3 Code on Studio Mac"],
25 ])("tells the user what to update for %s", (_, serverProtocolVersion, guidance) => {
26 const text = environmentStatusText({
27 phase: "unsupported",
28 error: compatibilityMessage(serverProtocolVersion),
29 traceId: null,
30 });
31 expect(text).toContain(guidance);
32 });
33
34 it("falls back to the generic label when there is no detail", () => {
35 expect(environmentStatusText({ phase: "unsupported", error: null, traceId: null })).toBe(
36 "Client not supported",
37 );
38 });
39});