chadtmiller.com/knotless
Git hosted in your atproto account, on any stock PDS, fast enough for agents.
git clone knotless://chadtmiller.com/knotlessneeds the knotless git helper. set it up
Tests: editing and taking back what was said
Showing 1 changed file with 44 additions and 0 deletions
crates/knotless-serve/tests/forge.rs+44−0
| @@ -458,6 +458,50 @@ fn issues_and_who_may_close_them() { | ||
fails(&owner, &["issue", &url, "t", "-m"]); | ||
fails(&owner, &["fork", &owner.url("nothing")]); | ||
| ||
// Its author changes what an issue or a comment says, and takes a | ||
// comment back; nobody else can, and the web pages only read. | ||
fails(&owner, &["edit", &url, &issue, "--title", "Hijacked"]); | ||
fails(&author, &["edit", &url, &issue]); | ||
fails(&author, &["edit", &url, &issue, "--sideways", "x"]); | ||
let state = format!("at://{}/dev.knotless.state/3abc", author.account.did); | ||
fails(&author, &["edit", &url, &state, "-m", "x"]); | ||
assert_eq!( | ||
ok( | ||
&author, | ||
&[ | ||
"edit", | ||
&url, | ||
&issue, | ||
"--title", | ||
"It breaks badly", | ||
"-m", | ||
"every time" | ||
] | ||
), | ||
"edited" | ||
); | ||
wait_until(|| { | ||
let shown = ok(&owner, &["show", &url, &issue]); | ||
shown.contains("It breaks badly") && shown.contains("every time") | ||
}); | ||
ok(&author, &["edit", &url, &issue, "-m", ""]); | ||
wait_until(|| !ok(&owner, &["show", &url, &issue]).contains("every time")); | ||
let said = ok(&author, &["comment", &url, &issue, "first try"]); | ||
fails(&author, &["edit", &url, &said, "--title", "x"]); | ||
fails(&author, &["edit", &url, &said, "-m", ""]); | ||
ok(&author, &["edit", &url, &said, "-m", "second try"]); | ||
wait_until(|| ok(&owner, &["show", &url, &issue]).contains("second try")); | ||
fails(&owner, &["delete-comment", &url, &said]); | ||
fails(&author, &["delete-comment", &url, &issue]); | ||
assert_eq!(ok(&author, &["delete-comment", &url, &said]), "deleted"); | ||
wait_until(|| !ok(&owner, &["show", &url, &issue]).contains("second try")); | ||
// One gone, or about another repository, is not there to change. | ||
fails(&author, &["delete-comment", &url, &said]); | ||
fails( | ||
&author, | ||
&["edit", &owner.url("elsewhere"), &issue, "--title", "x"], | ||
); | ||
| ||
// Without an appview there is nowhere to find them. | ||
let mut lost = person(owner.account.clone(), &av); | ||
lost.set("KNOTLESS_APPVIEW", ""); | ||