Skip to content
Source
Sign inSign up

environmentSections.test.ts

99 lines3.6 KB

1import { EnvironmentId } from "@t3tools/contracts";
2import type { RelayClientEnvironmentRecord } from "@t3tools/contracts/relay";
3import { describe, expect, it } from "vite-plus/test";
4import type { ConnectedEnvironmentSummary } from "../../state/remote-runtime-types";
5import { splitEnvironmentSections } from "./environmentSections";
6​
7function connectedEnvironment(
8 input: Omit<Partial<ConnectedEnvironmentSummary>, "environmentId"> & {
9 readonly environmentId: string;
10 readonly isRelayManaged: boolean;
11 },
12): ConnectedEnvironmentSummary {
13 return {
14 environmentId: EnvironmentId.make(input.environmentId),
15 environmentLabel: input.environmentLabel ?? input.environmentId,
16 displayUrl: input.displayUrl ?? `https://${input.environmentId}.example.test/`,
17 isRelayManaged: input.isRelayManaged,
18 isEnabled: input.isEnabled ?? true,
19 connectionState: input.connectionState ?? "connected",
20 connectionError: input.connectionError ?? null,
21 connectionErrorTraceId: input.connectionErrorTraceId ?? null,
22 };
24​
25function cloudEnvironment(environmentId: string): RelayClientEnvironmentRecord {
26 return {
27 environmentId: EnvironmentId.make(environmentId),
28 label: environmentId,
29 endpoint: {
30 httpBaseUrl: `https://${environmentId}.cloud.example.test/`,
31 wsBaseUrl: `wss://${environmentId}.cloud.example.test/ws`,
32 providerKind: "cloudflare_tunnel",
33 },
34 linkedAt: "2026-01-01T00:00:00.000Z",
35 };
37​
38describe("mobile environment settings sections", () => {
39 it("keeps saved relay-managed connections under T3 Connect", () => {
40 const local = connectedEnvironment({
41 environmentId: "environment-local",
42 isRelayManaged: false,
43 });
44 const cloud = connectedEnvironment({
45 environmentId: "environment-cloud",
46 isRelayManaged: true,
47 });
48​
49 const sections = splitEnvironmentSections({
50 connectedEnvironments: [cloud, local],
51 cloudEnvironments: [
52 cloudEnvironment("environment-cloud"),
53 cloudEnvironment("environment-new"),
54 ],
55 });
56​
57 expect(sections.localEnvironments).toEqual([local]);
58 expect(sections.connectedCloudEnvironments).toEqual([cloud]);
59 expect(
60 sections.availableCloudEnvironments.map((environment) => environment.environmentId),
61 ).toEqual([EnvironmentId.make("environment-new")]);
62 });
63​
64 it("keeps saved relay-managed connections visible when cloud listing is unavailable", () => {
65 const cloud = connectedEnvironment({
66 environmentId: "environment-cloud",
67 isRelayManaged: true,
68 connectionState: "reconnecting",
69 connectionError: "Environment did not respond before the connection timeout.",
70 });
71​
72 const sections = splitEnvironmentSections({
73 connectedEnvironments: [cloud],
74 cloudEnvironments: null,
75 });
76​
77 expect(sections.localEnvironments).toEqual([]);
78 expect(sections.connectedCloudEnvironments).toEqual([cloud]);
79 expect(sections.availableCloudEnvironments).toEqual([]);
80 });
81​
82 it("still offers a cloud environment saved directly as a local backend", () => {
83 const local = connectedEnvironment({
84 environmentId: "environment-cloud",
85 isRelayManaged: false,
86 });
87​
88 const sections = splitEnvironmentSections({
89 connectedEnvironments: [local],
90 cloudEnvironments: [cloudEnvironment("environment-cloud")],
91 });
92​
93 expect(sections.localEnvironments).toEqual([local]);
94 expect(sections.connectedCloudEnvironments).toEqual([]);
95 expect(
96 sections.availableCloudEnvironments.map((environment) => environment.environmentId),
97 ).toEqual([EnvironmentId.make("environment-cloud")]);
98 });
99});