Skip to content

Commit f0e7894

Browse files
committed
Add offline mode handling and JSON output test for browser path
1 parent db05817 commit f0e7894

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

rust/src/main.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ fn main() {
249249
&driver_path,
250250
&selenium_manager.get_browser_path_or_latest_from_cache(),
251251
selenium_manager.get_receiver(),
252+
selenium_manager.is_offline(),
252253
);
253254
flush_and_exit(OK, log, None);
254255
})
@@ -271,12 +272,20 @@ fn main() {
271272
&best_driver_from_cache,
272273
&selenium_manager.get_browser_path_or_latest_from_cache(),
273274
selenium_manager.get_receiver(),
275+
selenium_manager.is_offline(),
274276
);
275277
flush_and_exit(OK, log, Some(err));
276278
}
277279
}
278280
if selenium_manager.is_offline() {
279281
log.warn(&err);
282+
log_driver_and_browser_path(
283+
log,
284+
&Path::new(""),
285+
&selenium_manager.get_browser_path_or_latest_from_cache(),
286+
selenium_manager.get_receiver(),
287+
selenium_manager.is_offline(),
288+
);
280289
flush_and_exit(OK, log, Some(err));
281290
} else {
282291
let error_msg = log
@@ -294,13 +303,15 @@ fn log_driver_and_browser_path(
294303
driver_path: &Path,
295304
browser_path: &str,
296305
receiver: &Receiver<String>,
306+
is_offline: bool,
297307
) {
298308
if let Ok(err) = receiver.try_recv() {
299309
log.warn(err);
300310
}
301-
if driver_path.exists() {
311+
312+
if !driver_path.as_os_str().is_empty() && driver_path.exists() {
302313
log.info(format!("{}{}", DRIVER_PATH, driver_path.display()));
303-
} else {
314+
} else if !is_offline {
304315
log.error(format!("Driver unavailable: {}", driver_path.display()));
305316
flush_and_exit(UNAVAILABLE, log, None);
306317
}

rust/tests/offline_tests.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,36 @@ fn offline_test() {
3131

3232
assert!(stdout.contains("offline mode"));
3333
}
34+
35+
#[test]
36+
fn offline_json_output_includes_browser_path_test() {
37+
use serde_json::Value;
38+
39+
let mut cmd = get_selenium_manager();
40+
cmd.args([
41+
"--debug",
42+
"--browser",
43+
"chrome",
44+
"--offline",
45+
"--output",
46+
"json"
47+
])
48+
.assert()
49+
.success()
50+
.code(0);
51+
52+
let stdout = get_stdout(&mut cmd);
53+
54+
let json: Value = serde_json::from_str(&stdout)
55+
.expect("Should be valid JSON");
56+
57+
assert!(json["result"].is_object(), "Result should be an object");
58+
assert!(json["result"]["code"].is_number(), "Code should be a number");
59+
assert_eq!(json["result"]["code"], 0, "Code should be 0 for success");
60+
61+
assert!(json["result"]["browser_path"].is_string(), "browser_path should be a string");
62+
63+
assert!(json["logs"].is_array(), "Logs should be an array");
64+
let logs_str = json["logs"].to_string();
65+
assert!(logs_str.contains("offline mode"), "Should mention offline mode in logs");
66+
}

0 commit comments

Comments
 (0)