forked from 1b-agent/fieldcraft-upstream
The updater's release endpoint, docs, README, release notes and the Pages URL point at the tangency-labs org. App IDs (io.github.jyviko.fieldcraft) stay unchanged so installed copies keep their identity and settings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
37 lines
1.9 KiB
Rust
37 lines
1.9 KiB
Rust
//! `fieldcraft-cli update --check` against a local release server (FIELDCRAFT_UPDATE_HOST).
|
|
|
|
use std::process::Command;
|
|
|
|
use fieldcraft_update::mock::Server;
|
|
use serde_json::{Value, json};
|
|
|
|
fn cli(host: &str, args: &[&str]) -> std::process::Output {
|
|
Command::new(env!("CARGO_BIN_EXE_fieldcraft-cli")).args(args).env("FIELDCRAFT_UPDATE_HOST", host).output().unwrap()
|
|
}
|
|
|
|
#[test]
|
|
fn update_check_reports_the_latest_release() {
|
|
let server = Server::start().unwrap();
|
|
server.release("latest", &json!({"tag_name": "v99.0.0", "html_url": "https://github.com/tangency-labs/fieldcraft/releases/tag/v99.0.0", "assets": []}));
|
|
let out = cli(&server.url(), &["update", "--check"]);
|
|
assert!(out.status.success(), "{out:?}");
|
|
let report: Value = serde_json::from_slice(&out.stdout).unwrap();
|
|
assert_eq!(report["current"], env!("CARGO_PKG_VERSION"));
|
|
assert_eq!((report["latest"].as_str(), report["newer"].as_bool(), report["signed"].as_bool()), (Some("99.0.0"), Some(true), Some(false)));
|
|
// A test build is not a release package: it checks but would not install.
|
|
assert_eq!(report["asset"], Value::Null);
|
|
assert_eq!(server.requests(), 1);
|
|
|
|
// The same version: not newer, and --install has nothing to do.
|
|
server.release("latest", &json!({"tag_name": format!("v{}", env!("CARGO_PKG_VERSION")), "assets": []}));
|
|
let out = cli(&server.url(), &["update", "--check"]);
|
|
assert_eq!(serde_json::from_slice::<Value>(&out.stdout).unwrap()["newer"], false);
|
|
let out = cli(&server.url(), &["update", "--install"]);
|
|
assert!(out.status.success() && String::from_utf8_lossy(&out.stdout).contains("is up to date"), "{out:?}");
|
|
|
|
// Unreachable: an error, not a crash.
|
|
let out = cli("http://127.0.0.1:1", &["update", "--check"]);
|
|
assert!(!out.status.success() && String::from_utf8_lossy(&out.stderr).contains("could not reach"), "{out:?}");
|
|
assert!(!cli(&server.url(), &["update"]).status.success());
|
|
}
|