@ -966,9 +966,9 @@ fn list_filter_type_and_status_wildcard_includes_done_bugs() {
// ── nbd archive tests ─────────────────────────────────────────────────────────
// ── nbd archive tests ─────────────────────────────────────────────────────────
/// `nbd archive <id>` sets the ticket status to ` clos ed`.
/// `nbd archive <id>` sets the ticket status to ` archiv ed`.
#[ test ]
#[ test ]
fn archive_sets_status_ clos ed( ) {
fn archive_sets_status_ archiv ed( ) {
let env = TestEnv ::new ( ) ;
let env = TestEnv ::new ( ) ;
let id = env . create ( & [ "--title" , "Archive me" ] ) ;
let id = env . create ( & [ "--title" , "Archive me" ] ) ;
@ -982,11 +982,29 @@ fn archive_sets_status_closed() {
let stdout = String ::from_utf8 ( output . stdout ) . unwrap ( ) ;
let stdout = String ::from_utf8 ( output . stdout ) . unwrap ( ) ;
let parsed : serde_json ::Value = serde_json ::from_str ( & stdout ) . expect ( "should be valid JSON" ) ;
let parsed : serde_json ::Value = serde_json ::from_str ( & stdout ) . expect ( "should be valid JSON" ) ;
assert_eq! (
assert_eq! (
parsed [ "status" ] , " clos ed",
parsed [ "status" ] , " archiv ed",
"archive should set status to clos ed"
"archive should set status to archiv ed"
) ;
) ;
}
}
/// `nbd list` does not show archived tickets by default.
#[ test ]
fn list_excludes_archived_by_default ( ) {
let env = TestEnv ::new ( ) ;
let todo_id = env . create ( & [ "--title" , "Active ticket" ] ) ;
let archived_id = env . create ( & [ "--title" , "Archived ticket" ] ) ;
env . run ( & [ "archive" , & archived_id ] ) ;
let output = env . run ( & [ "list" , "--json" ] ) ;
assert! ( output . status . success ( ) ) ;
let stdout = String ::from_utf8 ( output . stdout ) . unwrap ( ) ;
let parsed : serde_json ::Value = serde_json ::from_str ( & stdout ) . unwrap ( ) ;
let arr = parsed . as_array ( ) . unwrap ( ) ;
assert_eq! ( arr . len ( ) , 1 , "only the active ticket should appear" ) ;
assert_eq! ( arr [ 0 ] [ "id" ] , todo_id ) ;
}
/// `nbd list` does not show closed tickets by default.
/// `nbd list` does not show closed tickets by default.
#[ test ]
#[ test ]
fn list_excludes_closed_by_default ( ) {
fn list_excludes_closed_by_default ( ) {
@ -994,7 +1012,7 @@ fn list_excludes_closed_by_default() {
let todo_id = env . create ( & [ "--title" , "Active ticket" ] ) ;
let todo_id = env . create ( & [ "--title" , "Active ticket" ] ) ;
let closed_id = env . create ( & [ "--title" , "Closed ticket" ] ) ;
let closed_id = env . create ( & [ "--title" , "Closed ticket" ] ) ;
env . run ( & [ " archiv e", & closed_id ] ) ;
env . run ( & [ " updat e", & closed_id , "--status" , "closed" ] ) ;
let output = env . run ( & [ "list" , "--json" ] ) ;
let output = env . run ( & [ "list" , "--json" ] ) ;
assert! ( output . status . success ( ) ) ;
assert! ( output . status . success ( ) ) ;
@ -1005,14 +1023,16 @@ fn list_excludes_closed_by_default() {
assert_eq! ( arr [ 0 ] [ "id" ] , todo_id ) ;
assert_eq! ( arr [ 0 ] [ "id" ] , todo_id ) ;
}
}
/// `nbd list --all` includes closed tickets.
/// `nbd list --all` includes archived and closed tickets.
#[ test ]
#[ test ]
fn list_all_includes_ closed( ) {
fn list_all_includes_ archived_and_ closed( ) {
let env = TestEnv ::new ( ) ;
let env = TestEnv ::new ( ) ;
env . create ( & [ "--title" , "Active ticket" ] ) ;
env . create ( & [ "--title" , "Active ticket" ] ) ;
let archived_id = env . create ( & [ "--title" , "Archived ticket" ] ) ;
env . run ( & [ "archive" , & archived_id ] ) ;
let closed_id = env . create ( & [ "--title" , "Closed ticket" ] ) ;
let closed_id = env . create ( & [ "--title" , "Closed ticket" ] ) ;
env . run ( & [ "archive" , & closed_id ] ) ;
env . run ( & [ " updat e", & closed_id , "--status" , "closed" ] ) ;
let output = env . run ( & [ "list" , "--all" , "--json" ] ) ;
let output = env . run ( & [ "list" , "--all" , "--json" ] ) ;
assert! ( output . status . success ( ) ) ;
assert! ( output . status . success ( ) ) ;
@ -1021,11 +1041,29 @@ fn list_all_includes_closed() {
let arr = parsed . as_array ( ) . unwrap ( ) ;
let arr = parsed . as_array ( ) . unwrap ( ) ;
assert_eq! (
assert_eq! (
arr . len ( ) ,
arr . len ( ) ,
2 ,
3 ,
"--all should show all tickets including closed"
"--all should show all tickets including archived and closed"
) ;
) ;
}
}
/// `nbd list --filter status=archived` shows only archived tickets.
#[ test ]
fn list_filter_status_archived_shows_only_archived ( ) {
let env = TestEnv ::new ( ) ;
env . create ( & [ "--title" , "Active ticket" ] ) ;
let archived_id = env . create ( & [ "--title" , "Archived ticket" ] ) ;
env . run ( & [ "archive" , & archived_id ] ) ;
let output = env . run ( & [ "list" , "--filter" , "status=archived" , "--json" ] ) ;
assert! ( output . status . success ( ) ) ;
let stdout = String ::from_utf8 ( output . stdout ) . unwrap ( ) ;
let parsed : serde_json ::Value = serde_json ::from_str ( & stdout ) . unwrap ( ) ;
let arr = parsed . as_array ( ) . unwrap ( ) ;
assert_eq! ( arr . len ( ) , 1 , "only the archived ticket should appear" ) ;
assert_eq! ( arr [ 0 ] [ "id" ] , archived_id ) ;
}
/// `nbd list --filter status=closed` shows only closed tickets.
/// `nbd list --filter status=closed` shows only closed tickets.
#[ test ]
#[ test ]
fn list_filter_status_closed_shows_only_closed ( ) {
fn list_filter_status_closed_shows_only_closed ( ) {
@ -1033,7 +1071,7 @@ fn list_filter_status_closed_shows_only_closed() {
env . create ( & [ "--title" , "Active ticket" ] ) ;
env . create ( & [ "--title" , "Active ticket" ] ) ;
let closed_id = env . create ( & [ "--title" , "Closed ticket" ] ) ;
let closed_id = env . create ( & [ "--title" , "Closed ticket" ] ) ;
env . run ( & [ " archiv e", & closed_id ] ) ;
env . run ( & [ " updat e", & closed_id , "--status" , "closed" ] ) ;
let output = env . run ( & [ "list" , "--filter" , "status=closed" , "--json" ] ) ;
let output = env . run ( & [ "list" , "--filter" , "status=closed" , "--json" ] ) ;
assert! ( output . status . success ( ) ) ;
assert! ( output . status . success ( ) ) ;
@ -1060,7 +1098,32 @@ fn archive_accepts_prefix() {
) ;
) ;
let stdout = String ::from_utf8 ( output . stdout ) . unwrap ( ) ;
let stdout = String ::from_utf8 ( output . stdout ) . unwrap ( ) ;
let parsed : serde_json ::Value = serde_json ::from_str ( & stdout ) . unwrap ( ) ;
let parsed : serde_json ::Value = serde_json ::from_str ( & stdout ) . unwrap ( ) ;
assert_eq! ( parsed [ "status" ] , "closed" ) ;
assert_eq! ( parsed [ "status" ] , "archived" ) ;
}
/// An archived dependency unblocks dependent tickets (archived counts as resolved).
#[ test ]
fn archived_dep_unblocks_dependent ( ) {
let env = TestEnv ::new ( ) ;
let dep = env . create ( & [ "--title" , "Dep ticket" ] ) ;
env . run ( & [ "create" , "--title" , "Dependent" , "--deps" , & dep , "--json" ] ) ;
// Archive the dependency.
env . run ( & [ "archive" , & dep ] ) ;
// The dependent should now be ready.
let output = env . run ( & [ "ready" , "--json" ] ) ;
assert! ( output . status . success ( ) ) ;
let stdout = String ::from_utf8 ( output . stdout ) . unwrap ( ) ;
let parsed : serde_json ::Value = serde_json ::from_str ( & stdout ) . unwrap ( ) ;
let arr = parsed . as_array ( ) . unwrap ( ) ;
assert_eq! (
arr . len ( ) ,
1 ,
"dependent should be ready after dep is archived"
) ;
assert_eq! ( arr [ 0 ] [ "title" ] , "Dependent" ) ;
}
}
/// A closed dependency unblocks dependent tickets (closed counts as resolved).
/// A closed dependency unblocks dependent tickets (closed counts as resolved).
@ -1071,8 +1134,8 @@ fn closed_dep_unblocks_dependent() {
let dep = env . create ( & [ "--title" , "Dep ticket" ] ) ;
let dep = env . create ( & [ "--title" , "Dep ticket" ] ) ;
env . run ( & [ "create" , "--title" , "Dependent" , "--deps" , & dep , "--json" ] ) ;
env . run ( & [ "create" , "--title" , "Dependent" , "--deps" , & dep , "--json" ] ) ;
// Archive (close ) the dependency.
// Close (won't-fix ) the dependency.
env . run ( & [ " archive", & dep ] ) ;
env . run ( & [ " update", & dep , "--status" , "closed" ] ) ;
// The dependent should now be ready.
// The dependent should now be ready.
let output = env . run ( & [ "ready" , "--json" ] ) ;
let output = env . run ( & [ "ready" , "--json" ] ) ;
@ -1088,13 +1151,29 @@ fn closed_dep_unblocks_dependent() {
assert_eq! ( arr [ 0 ] [ "title" ] , "Dependent" ) ;
assert_eq! ( arr [ 0 ] [ "title" ] , "Dependent" ) ;
}
}
/// `nbd ready` does not include archived tickets.
#[ test ]
fn ready_excludes_archived_tickets ( ) {
let env = TestEnv ::new ( ) ;
let id = env . create ( & [ "--title" , "Will be archived" ] ) ;
env . run ( & [ "archive" , & id ] ) ;
let output = env . run ( & [ "ready" , "--json" ] ) ;
assert! ( output . status . success ( ) ) ;
let stdout = String ::from_utf8 ( output . stdout ) . unwrap ( ) ;
let parsed : serde_json ::Value = serde_json ::from_str ( & stdout ) . unwrap ( ) ;
let arr = parsed . as_array ( ) . unwrap ( ) ;
assert_eq! ( arr . len ( ) , 0 , "archived tickets should not appear in ready" ) ;
}
/// `nbd ready` does not include closed tickets.
/// `nbd ready` does not include closed tickets.
#[ test ]
#[ test ]
fn ready_excludes_closed_tickets ( ) {
fn ready_excludes_closed_tickets ( ) {
let env = TestEnv ::new ( ) ;
let env = TestEnv ::new ( ) ;
let id = env . create ( & [ "--title" , "Will be closed" ] ) ;
let id = env . create ( & [ "--title" , "Will be closed" ] ) ;
env . run ( & [ "archive" , & id ] ) ;
env . run ( & [ " update", & id , "--status" , "closed" ] ) ;
let output = env . run ( & [ "ready" , "--json" ] ) ;
let output = env . run ( & [ "ready" , "--json" ] ) ;
assert! ( output . status . success ( ) ) ;
assert! ( output . status . success ( ) ) ;