feat(cli/org): interactive per-type org edit via shared edit helpers
This commit is contained in:
@@ -184,21 +184,17 @@ fn org_add_rejects_unknown_collection() {
|
||||
#[test]
|
||||
fn org_edit_updates_fields_and_commits_update_trailer() {
|
||||
let f = OrgFixture::new();
|
||||
let owner = f.owner_member_id();
|
||||
assert!(f.run(&["org", "create-collection", "prod", "--name", "Production"]).status.success());
|
||||
assert!(f.run(&["org", "grant", &owner, "prod"]).status.success());
|
||||
f.create_collection_and_grant("prod");
|
||||
assert!(f.run(&[
|
||||
"org", "add", "login", "--collection", "prod",
|
||||
"--title", "Mail", "--username", "old", "--password", "pw",
|
||||
]).status.success());
|
||||
|
||||
// Edit the username.
|
||||
let out = f.run(&[
|
||||
"org", "edit", "Mail", "--username", "new-user",
|
||||
]);
|
||||
// org edit is now interactive per-type: keep title, set username=new-user,
|
||||
// keep URL, decline password change.
|
||||
let out = f.run_stdin(&["org", "edit", "Mail"], "\nnew-user\n\nn\n");
|
||||
assert!(out.status.success(), "org edit: {}", String::from_utf8_lossy(&out.stderr));
|
||||
|
||||
// get --show reflects the new username.
|
||||
let out = f.run(&["org", "get", "Mail", "--show"]);
|
||||
let stdout = String::from_utf8_lossy(&out.stdout).to_string();
|
||||
assert!(stdout.contains("new-user"), "edit did not take: {stdout}");
|
||||
@@ -321,3 +317,44 @@ fn org_add_totp_with_secret_flag_round_trips() {
|
||||
assert!(stdout.contains("AWS root"), "title missing: {stdout}");
|
||||
assert!(stdout.contains("Issuer: AWS"), "issuer missing: {stdout}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn org_edit_card_interactive_changes_holder() {
|
||||
let f = OrgFixture::new();
|
||||
f.create_collection_and_grant("eng");
|
||||
let out = f.run_stdin(
|
||||
&[
|
||||
"org", "add", "card", "--collection", "eng", "--title", "Corp Visa",
|
||||
"--kind", "credit", "--number-stdin", "--cvv-stdin", "--pin-stdin",
|
||||
],
|
||||
"4111111111111111\n123\n4321\n",
|
||||
);
|
||||
assert!(out.status.success(), "add card: {}", String::from_utf8_lossy(&out.stderr));
|
||||
|
||||
// Interactive edit: keep title, set holder, decline number change.
|
||||
let out = f.run_stdin(&["org", "edit", "Corp Visa"], "\nJane Q. Public\nn\n");
|
||||
assert!(out.status.success(), "org edit card: {}", String::from_utf8_lossy(&out.stderr));
|
||||
|
||||
let got = f.run(&["org", "get", "Corp Visa"]);
|
||||
let stdout = String::from_utf8_lossy(&got.stdout).to_string();
|
||||
assert!(stdout.contains("Holder: Jane Q. Public"), "holder edit did not take: {stdout}");
|
||||
assert!(stdout.contains("********"), "number must stay masked after declining change: {stdout}");
|
||||
assert!(!stdout.contains("4111111111111111"), "number leaked without --show: {stdout}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn org_edit_totp_interactive_changes_issuer() {
|
||||
let f = OrgFixture::new();
|
||||
f.create_collection_and_grant("eng");
|
||||
assert!(f.run(&[
|
||||
"org", "add", "totp", "--collection", "eng", "--title", "AWS root",
|
||||
"--issuer", "AWS", "--secret", "JBSWY3DPEHPK3PXP",
|
||||
]).status.success());
|
||||
|
||||
// Interactive edit: keep title, set issuer=GitHub, keep label, decline secret change.
|
||||
let out = f.run_stdin(&["org", "edit", "AWS root"], "\nGitHub\n\nn\n");
|
||||
assert!(out.status.success(), "org edit totp: {}", String::from_utf8_lossy(&out.stderr));
|
||||
|
||||
let got = f.run(&["org", "get", "AWS root"]);
|
||||
assert!(String::from_utf8_lossy(&got.stdout).contains("Issuer: GitHub"), "issuer edit did not take");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user