test(nbd): add integration tests for nbd graph command [9c1f2c]
8 integration tests covering: empty store, independent tickets (no indentation), chain rendering (└──), single-ticket subtree (excludes unrelated), --json output (nodes/edges arrays), --json subtree scoping, --filter narrowing, and 3-char prefix resolution. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>quotesdb
parent
b0359c4392
commit
84a75f4531
@ -0,0 +1,90 @@
|
|||||||
|
+++
|
||||||
|
title = "Tests for nbd graph command"
|
||||||
|
priority = 5
|
||||||
|
status = "done"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["9ad11f"]
|
||||||
|
+++
|
||||||
|
Add comprehensive unit and integration tests for the `nbd graph` command introduced across tickets `9c9ebe`, `e14172`, and `9ad11f`.
|
||||||
|
|
||||||
|
## Unit tests (src/tests.rs)
|
||||||
|
|
||||||
|
These test `graph.rs` and the rendering helpers in `display.rs` in isolation using in-memory `Ticket` values (no temp files needed).
|
||||||
|
|
||||||
|
### graph.rs tests
|
||||||
|
|
||||||
|
```
|
||||||
|
test_graph_build_empty
|
||||||
|
TicketGraph::build(&[]) has no nodes.
|
||||||
|
|
||||||
|
test_graph_roots_no_deps
|
||||||
|
Two tickets with no dependencies → both appear in roots().
|
||||||
|
|
||||||
|
test_graph_roots_with_chain
|
||||||
|
Ticket B depends on A → only A is a root.
|
||||||
|
|
||||||
|
test_graph_subtree_linear
|
||||||
|
A → B → C; subtree("a") returns ["a", "b", "c"] (DFS order).
|
||||||
|
|
||||||
|
test_graph_subtree_single
|
||||||
|
subtree of a leaf returns just that ID.
|
||||||
|
|
||||||
|
test_graph_subtree_cycle
|
||||||
|
A.deps = [B], B.deps = [A] → subtree("a") returns both without panic/infinite loop.
|
||||||
|
|
||||||
|
test_graph_to_json_nodes_and_edges
|
||||||
|
Three tickets with two edges → JSON "nodes" has 3 entries, "edges" has 2.
|
||||||
|
```
|
||||||
|
|
||||||
|
### display.rs tests
|
||||||
|
|
||||||
|
```
|
||||||
|
test_format_graph_single_ticket
|
||||||
|
One ticket, no deps → output contains the ID, status, and title on one line; no connector chars.
|
||||||
|
|
||||||
|
test_format_graph_two_ticket_chain
|
||||||
|
A → B; output has A at col 0 and B indented with "└──".
|
||||||
|
|
||||||
|
test_format_graph_branching
|
||||||
|
A has two dependents B and C; B's line uses "├──" and C's uses "└──".
|
||||||
|
|
||||||
|
test_format_subtree_scope
|
||||||
|
A → B, C (unrelated root); format_subtree(graph, "a") does not contain C's ID.
|
||||||
|
|
||||||
|
test_format_graph_cycle_label
|
||||||
|
Cycle present → output contains "[cycle]" and does not repeat infinitely.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Integration tests (tests/integration.rs)
|
||||||
|
|
||||||
|
Use a real temp directory set up with `cargo run -- init` and tickets created via `cmd_create`.
|
||||||
|
|
||||||
|
```
|
||||||
|
test_graph_empty_store
|
||||||
|
`nbd graph` on an empty store produces an empty line (or at least exits 0).
|
||||||
|
|
||||||
|
test_graph_all_no_deps
|
||||||
|
Create two tickets without deps; `nbd graph` output contains both IDs with no indentation.
|
||||||
|
|
||||||
|
test_graph_chain
|
||||||
|
Create A (no deps) and B (--deps A); `nbd graph` output shows A at top level and B indented.
|
||||||
|
|
||||||
|
test_graph_single_ticket
|
||||||
|
`nbd graph <id>` for A returns only A and its subtree, not unrelated tickets.
|
||||||
|
|
||||||
|
test_graph_json_output
|
||||||
|
`nbd graph --json` parses as valid JSON with "nodes" and "edges" arrays.
|
||||||
|
|
||||||
|
test_graph_json_subtree
|
||||||
|
`nbd graph <id> --json` returns JSON whose "nodes" array contains only reachable tickets.
|
||||||
|
|
||||||
|
test_graph_filter
|
||||||
|
`nbd graph --filter type=bug` only shows bug tickets and their reachable deps.
|
||||||
|
|
||||||
|
test_graph_partial_id
|
||||||
|
`nbd graph <3-char-prefix>` resolves to the correct ticket (prefix resolution).
|
||||||
|
```
|
||||||
|
|
||||||
|
## Files touched
|
||||||
|
- `src/tests.rs` — unit tests for `TicketGraph` and `format_graph` / `format_subtree`
|
||||||
|
- `tests/integration.rs` — CLI-level integration tests
|
||||||
Loading…
Reference in New Issue