Skip to content

Commit 136daa5

Browse files
author
Yongmao Luo
committed
fix(remote): fix CI failures - typecheck, format, and unit tests
- Add missing required fields to RemoteSettings test mock (showInTray, minimizeToTrayOnClose, language) - Update invokeMock assertions to match new start_remote_server signature with params - Fix clippy warnings in remote_management.rs (use RangeInclusive::contains) - Apply prettier formatting to RemoteSettings.tsx
1 parent 1320880 commit 136daa5

3 files changed

Lines changed: 37 additions & 22 deletions

File tree

src-tauri/tests/remote_management.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ fn test_port_validation() {
4949
// 有效端口
5050
let valid_ports = [1024, 4000, 8080, 65535];
5151
for port in valid_ports {
52-
assert!(port >= 1024 && port <= 65535);
52+
assert!((1024..=65535).contains(&port));
5353
}
5454

5555
// 无效端口(这些应该在 UI 层验证)
5656
let invalid_ports = [0, 100, 1023, 65536, 70000];
5757
for port in invalid_ports {
58-
assert!(port < 1024 || port > 65535);
58+
assert!(!(1024..=65535).contains(&port));
5959
}
6060
}
6161

src/components/settings/RemoteSettings.tsx

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,20 @@ export function RemoteSettings({ settings, onChange }: RemoteSettingsProps) {
1919
const [serverRunning, setServerRunning] = useState<boolean | null>(null);
2020
const [tailscaleIp, setTailscaleIp] = useState<string | null>(null);
2121

22-
const checkServerStatus = useCallback(async (port?: number) => {
23-
const targetPort = port ?? settings.remotePort ?? 4000;
24-
try {
25-
const res = await fetch(`http://127.0.0.1:${targetPort}/api/health`);
26-
setServerRunning(res.ok);
27-
return res.ok;
28-
} catch {
29-
setServerRunning(false);
30-
return false;
31-
}
32-
}, [settings.remotePort]);
22+
const checkServerStatus = useCallback(
23+
async (port?: number) => {
24+
const targetPort = port ?? settings.remotePort ?? 4000;
25+
try {
26+
const res = await fetch(`http://127.0.0.1:${targetPort}/api/health`);
27+
setServerRunning(res.ok);
28+
return res.ok;
29+
} catch {
30+
setServerRunning(false);
31+
return false;
32+
}
33+
},
34+
[settings.remotePort],
35+
);
3336

3437
useEffect(() => {
3538
checkServerStatus();
@@ -57,7 +60,7 @@ export function RemoteSettings({ settings, onChange }: RemoteSettingsProps) {
5760
tailscaleEnabled: settings.remoteTailscaleEnabled,
5861
});
5962
// 等待服务器真正启动
60-
await new Promise(resolve => setTimeout(resolve, 1000));
63+
await new Promise((resolve) => setTimeout(resolve, 1000));
6164
const isRunning = await checkServerStatus(startPort);
6265
if (!isRunning) {
6366
throw new Error("Server failed to start");
@@ -98,7 +101,7 @@ export function RemoteSettings({ settings, onChange }: RemoteSettingsProps) {
98101
// 等待服务器完全停止(检查旧端口)
99102
const oldPort = settings.remotePort || 4000;
100103
for (let i = 0; i < 10; i++) {
101-
await new Promise(resolve => setTimeout(resolve, 200));
104+
await new Promise((resolve) => setTimeout(resolve, 200));
102105
try {
103106
await fetch(`http://127.0.0.1:${oldPort}/api/health`);
104107
} catch {
@@ -111,7 +114,7 @@ export function RemoteSettings({ settings, onChange }: RemoteSettingsProps) {
111114
onChange({ remoteTailscaleEnabled: value });
112115

113116
// 等待一小段时间
114-
await new Promise(resolve => setTimeout(resolve, 200));
117+
await new Promise((resolve) => setTimeout(resolve, 200));
115118

116119
// 启动服务器(传递新配置)
117120
await invoke("start_remote_server", {
@@ -120,7 +123,7 @@ export function RemoteSettings({ settings, onChange }: RemoteSettingsProps) {
120123
});
121124

122125
// 等待并验证新端口启动成功
123-
await new Promise(resolve => setTimeout(resolve, 1000));
126+
await new Promise((resolve) => setTimeout(resolve, 1000));
124127
const isRunning = await checkServerStatus(settings.remotePort);
125128
if (!isRunning) {
126129
throw new Error("Server failed to restart on new port");
@@ -206,7 +209,7 @@ export function RemoteSettings({ settings, onChange }: RemoteSettingsProps) {
206209
await invoke("stop_remote_server");
207210
setServerRunning(false);
208211
// 等待服务器完全停止
209-
await new Promise(resolve => setTimeout(resolve, 500));
212+
await new Promise((resolve) => setTimeout(resolve, 500));
210213
// 先更新设置
211214
onChange({ remotePort: val });
212215
// 启动时传递新端口(使用 val 而不是 settings.remotePort)
@@ -215,7 +218,7 @@ export function RemoteSettings({ settings, onChange }: RemoteSettingsProps) {
215218
tailscaleEnabled: settings.remoteTailscaleEnabled,
216219
});
217220
// 延迟检查状态,确保用户能看到重启指示
218-
await new Promise(resolve => setTimeout(resolve, 1500));
221+
await new Promise((resolve) => setTimeout(resolve, 1500));
219222
await checkServerStatus(val);
220223
} catch (e) {
221224
toast.error(`${t("settings.remoteRestartFailed")} ${e}`);

tests/components/RemoteSettings.test.tsx

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ describe("RemoteSettings", () => {
4949
remoteEnabled: false,
5050
remotePort: 4000,
5151
remoteTailscaleEnabled: false,
52+
showInTray: true,
53+
minimizeToTrayOnClose: true,
54+
language: "zh",
5255
};
5356

5457
beforeEach(() => {
@@ -81,7 +84,10 @@ describe("RemoteSettings", () => {
8184
fireEvent.click(toggle);
8285

8386
await waitFor(() => {
84-
expect(invokeMock).toHaveBeenCalledWith("start_remote_server");
87+
expect(invokeMock).toHaveBeenCalledWith(
88+
"start_remote_server",
89+
expect.any(Object),
90+
);
8591
expect(mockOnChange).toHaveBeenCalledWith({ remoteEnabled: true });
8692
});
8793
});
@@ -182,7 +188,10 @@ describe("RemoteSettings", () => {
182188
expect(mockOnChange).toHaveBeenCalledWith({ remotePort: 4001 });
183189
// Should not try to stop/start server
184190
expect(invokeMock).not.toHaveBeenCalledWith("stop_remote_server");
185-
expect(invokeMock).not.toHaveBeenCalledWith("start_remote_server");
191+
expect(invokeMock).not.toHaveBeenCalledWith(
192+
"start_remote_server",
193+
expect.any(Object),
194+
);
186195
});
187196
});
188197

@@ -200,7 +209,10 @@ describe("RemoteSettings", () => {
200209
fireEvent.click(toggle);
201210

202211
await waitFor(() => {
203-
expect(invokeMock).toHaveBeenCalledWith("start_remote_server");
212+
expect(invokeMock).toHaveBeenCalledWith(
213+
"start_remote_server",
214+
expect.any(Object),
215+
);
204216
expect(toastErrorMock).toHaveBeenCalled();
205217
});
206218
});

0 commit comments

Comments
 (0)