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

DeviceSetup.test.ts

95 lines3.0 KB

1import type { DeviceServiceState } from "@t3tools/contracts";
2import { describe, expect, it } from "vite-plus/test";
3​
4import { deviceHubReadiness, platformSetupStatus } from "./DeviceSetup";
5​
6const deviceState = (overrides: Partial<DeviceServiceState> = {}): DeviceServiceState => ({
7 hosts: [
8 {
9 id: "local",
10 kind: "local",
11 label: "This machine",
12 hubInstalled: false,
13 agentDeviceInstalled: false,
14 platforms: [
15 { platform: "ios", available: true },
16 { platform: "android", available: true },
17 ],
18 },
19 ],
20 hostStatus: "ready",
21 hostStatuses: {},
22 devices: [],
23 sessions: [],
24 onboardingCompleted: false,
25 agentAccessEnabled: false,
26 hubBasePath: "/api/device-hub",
27 revision: 0,
28 ...overrides,
29});
30​
31describe("device setup guidance", () => {
32 it("waits for complete discovery before advising device setup", () => {
33 const state = deviceState({
34 hostStatus: "idle",
35 hosts: [{ ...deviceState().hosts[0]!, id: "remote", kind: "ssh" }],
36 hostStatuses: { remote: { status: "ready", androidDiscoveryIncomplete: true } },
37 });
38 expect(platformSetupStatus(state, "android").message).toContain("may be incomplete");
39 expect(platformSetupStatus(state, "ios").message).toContain("Xcode Settings");
40 expect(
41 platformSetupStatus({ ...state, hostStatuses: { remote: { status: "ready" } } }, "android")
42 .message,
43 ).toContain("Device Manager");
44 expect(
45 platformSetupStatus(
46 { ...state, hostStatuses: { remote: { status: "ready", incompletePlatforms: ["ios"] } } },
47 "ios",
48 ).message,
49 ).toContain("discovery reported a problem");
50 });
51​
52 it("counts a remote device host when this machine has no simulator tooling", () => {
53 const state = deviceState({
54 hostStatus: "idle",
55 hostStatuses: { macmini: { status: "ready" } },
56 hosts: [
57 {
58 ...deviceState().hosts[0]!,
59 platforms: [
60 { platform: "ios", available: false, reason: "Xcode was not found." },
61 { platform: "android", available: false, reason: "Android SDK was not found." },
62 ],
63 },
64 {
65 id: "macmini",
66 kind: "ssh",
67 label: "Mac Mini",
68 hubInstalled: true,
69 agentDeviceInstalled: true,
70 platforms: [
71 { platform: "ios", available: true },
72 { platform: "android", available: false, reason: "Android SDK was not found." },
73 ],
74 },
75 ],
76 devices: [
77 {
78 hostId: "macmini",
79 id: "iphone",
80 platform: "ios",
81 name: "iPhone 16 Pro",
82 version: "iOS 27.0",
83 booted: true,
84 physical: false,
85 },
86 ],
87 });
88 expect(deviceHubReadiness(state).ready).toBe(true);
89 expect(platformSetupStatus(state, "ios")).toEqual({
90 ready: true,
91 message: "Xcode and iOS Simulator are available on Mac Mini.",
92 });
93 expect(platformSetupStatus(state, "android").ready).toBe(false);
94 });
95});