use super::*;
#[test]
fn parse_root_ready_accepts_plain_true() {
assert!(parse_root_ready_value(&json!(true)));
}
#[test]
fn parse_root_ready_accepts_wrapped_ok_true() {
assert!(parse_root_ready_value(&json!({ "Ok": true })));
}
#[test]
fn parse_root_ready_accepts_icp_cli_response_candid_true() {
assert!(parse_root_ready_value(&json!({
"response_candid": "(true)"
})));
}
#[test]
fn parse_root_ready_rejects_false_shapes() {
assert!(!parse_root_ready_value(&json!(false)));
assert!(!parse_root_ready_value(&json!({ "Ok": false })));
assert!(!parse_root_ready_value(&json!({ "Err": "nope" })));
}
#[test]
fn parse_bootstrap_status_accepts_plain_record() {
let status = parse_bootstrap_status_value(&json!({
"ready": false,
"phase": "root:init:create_canisters",
"last_error": null
}))
.expect("plain bootstrap status must parse");
assert!(!status.ready);
assert_eq!(status.phase, "root:init:create_canisters");
assert_eq!(status.last_error, None);
}
#[test]
fn parse_bootstrap_status_accepts_wrapped_ok_record() {
let status = parse_bootstrap_status_value(&json!({
"Ok": {
"ready": false,
"phase": "failed",
"last_error": "registry phase failed"
}
}))
.expect("wrapped bootstrap status must parse");
assert!(!status.ready);
assert_eq!(status.phase, "failed");
assert_eq!(status.last_error.as_deref(), Some("registry phase failed"));
}
#[test]
fn parse_bootstrap_status_accepts_icp_cli_response_candid() {
let status = parse_bootstrap_status_value(&json!({
"response_candid": r#"(
record {
89_620_959 = opt "registry phase failed";
3_253_282_875 = "failed";
3_870_990_435 = false;
},
)"#
}))
.expect("icp cli response_candid bootstrap status must parse");
assert!(!status.ready);
assert_eq!(status.phase, "failed");
assert_eq!(status.last_error.as_deref(), Some("registry phase failed"));
}
#[test]
fn parses_quiet_canister_create_output() {
assert_eq!(
parse_created_canister_id("Created canister:\nt63gs-up777-77776-aaaba-cai\n"),
Some("t63gs-up777-77776-aaaba-cai".to_string())
);
assert_eq!(parse_created_canister_id("created root\n"), None);
}
#[test]
fn parses_json_canister_ids() {
assert_eq!(
parse_created_canister_id(r#"{"canister_id":"t63gs-up777-77776-aaaba-cai"}"#),
Some("t63gs-up777-77776-aaaba-cai".to_string())
);
assert_eq!(
parse_created_canister_id(r#"{"id":"t63gs-up777-77776-aaaba-cai","name":"root"}"#),
Some("t63gs-up777-77776-aaaba-cai".to_string())
);
assert_eq!(
parse_canister_id_json(&json!([{ "principal": "t63gs-up777-77776-aaaba-cai" }])),
Some("t63gs-up777-77776-aaaba-cai".to_string())
);
assert_eq!(
parse_created_canister_id(r#"{"canister_id":"not-a-principal"}"#),
None
);
}
#[test]
fn detects_missing_canister_id_errors() {
assert!(is_missing_canister_id_error(
"Error: failed to lookup canister ID for canister 'root' in environment 'local'"
));
assert!(is_missing_canister_id_error(
"could not find ID for canister 'root' in environment 'local'"
));
assert!(!is_missing_canister_id_error(
"Error: failed to connect to replica"
));
}
#[test]
fn parses_root_cycle_balance_response() {
assert_eq!(
parse_cycle_balance_response("(variant { 17_724 = 4_487_280_757_485 : nat })"),
Some(4_487_280_757_485)
);
assert_eq!(
parse_cycle_balance_response(
r"
(
variant {
Ok = 99_999_000_000_000 : nat;
},
)
"
),
Some(99_999_000_000_000)
);
assert_eq!(
parse_cycle_balance_response(
r#"{"response_candid":"(variant { Ok = 99_999_000_000_000 : nat })"}"#
),
Some(99_999_000_000_000)
);
assert_eq!(
parse_cycle_balance_response("(variant { Err = record { code = 1 : nat } })"),
None
);
}