Skip to content

Filtering the list

GET /v1/test-cases takes its filter from the query string. Nothing else — no body, no saved filter object — so a filtered list is a URL you can hand to someone, and the dashboard’s own address bar carries exactly the query it sent.

GET /v1/test-cases?suiteId=6f1c…f1&tag=smoke&tag=payments&priorityMin=high&type=automated
ParameterMatchesRepeatable
suiteIdthe cases of that suite — or, for a folder, the cases of every suite beneath ityes
taga tag of the title, verbatim — Smoke is not smokeyes
priorityexactly this levelyes
priorityMinthis level and above — high means high and criticalno
typemanual, automated or evalyes
statedraft, in_review, active, detached or deprecatedyes
assigneewho is to run it — me (whoever asks), none (nobody) or a member’s userIdyes
qtext found in the title or the description, case-insensitively — text, not a patternno
defects1 — only the cases that carry at least one defect link; absent, or 0, is every caseno
flaky1 or true — only the cases marked Flaky; 0 or false — only the othersno
muted1 or true — only the muted cases; 0 or false — only the othersno

Two rules make the combinations:

  • Repeating a parameter is “any of”. tag=smoke&tag=payments is a case carrying either tag.
  • Different parameters are “all of”. tag=smoke&type=automated is an automated case tagged smoke.

Absent means everything: with no query at all you get every case of the project. The answer is in tree order — suite by suite, cases by their position, unfiled cases last — whatever the filter, so a filtered list reads like the tree with rows taken out, not like a search result.

suiteId with a folder’s id does not answer “nothing — a folder holds no cases”. It answers the cases of every suite under it, at any depth, which is what “everything in checkout” means when checkout is a folder of four suites. The Suite or folder section of the Filters drawer lists the tree, indented, for that reason: pick a folder to see a branch, pick a suite to see one leaf.

A value outside the vocabulary is refused, not ignored

Section titled “A value outside the vocabulary is refused, not ignored”

A priority, type or state that does not exist — or a flaky or muted that is not one of its four words — answers 400, and the message lists what does:

unknown priority "urgent" — priorities are low, normal, important, high, critical
unknown type "e2e" — types are manual, automated, eval
unknown state "gone" — states are draft, in_review, active, detached, deprecated
unknown flaky "yes" — the values of flaky are 1, true, 0, false

Refused rather than ignored on purpose: a mistyped value that silently matched nothing would look like an empty project. A tag, a suiteId or an assignee id nobody has is simply a filter with no matches — the vocabulary of those is yours, not the platform’s.

assignee=me is resolved on the server from whoever sends the request, so a link with it in — or a plan collection saved with it — means “mine” for each person who opens it.

The filter on Test cases writes what you pick into the page’s URL with the same names — /cases?tag=smoke&priorityMin=high — and reads it back on load. So a link is a filter:

  • a link to a filtered view restores the controls, the chips and the tree in another window;
  • Back is a filter change;
  • a link that carries a value outside the vocabulary shows the API’s refusal verbatim, as a notice, with Check the link — it may have been edited by hand. and a Clear filters button beside it, and the bar still usable.

For example, /cases?type=manual&priorityMin=high&tag=smoke opens the tree narrowed to the manual cases tagged smoke of priority high and above — high and critical. The page head says 3 of 11: how many cases match, of how many the project has.

Test cases of Webshop, 3 of 11, opened from the link with type, priorityMin and tag in it: the search field and the buttons Tags 1, Priority 1, Type 1 and Filters 3; under them the chips @smoke, ≥ high and manual, Clear all and Run manually; then the tree narrowed to Checkout 2 with Payment 1 and Delivery 1 and Account 1 with Sign-in 1, holding Pay by card, Pick a delivery slot and Sign in with a password. Test cases of Webshop, 3 of 11, opened from the link with type, priorityMin and tag in it: the search field and the buttons Tags 1, Priority 1, Type 1 and Filters 3; under them the chips @smoke, ≥ high and manual, Clear all and Run manually; then the tree narrowed to Checkout 2 with Payment 1 and Delivery 1 and Account 1 with Sign-in 1, holding Pay by card, Pick a delivery slot and Sign in with a password.
A link that is a filter: three chips, three counts in the head of the bar, and only the matching cases in the tree.

At every width the bar has a search field — name and description, / focuses it — and Filters, with the number of dimensions that narrow (the search is not counted). From 1024 px the three facets people use most, Tags, Priority and Type, stand beside them and apply as you tick. Under the bar each applied value is a chip with a ×; Clear all drops them, and Esc clears the whole filter.

Filters opens a drawer with all nine sections — Suite or folder, Tags, Priority, Type, State, Assignee, Defects, Flaky and Muted. It edits a draft that leaves only with Apply (n); Cancel and Esc close it and change nothing. Each section says what it holds — @smoke, ≥ high, Any — and clears on its own. Priority has one more control, and above, which is the priorityMin parameter; Defects, Flaky and Muted are one option each with the number of cases that carry them.

The Filters drawer over the dimmed list of Webshop: Clear all and a close button; the sections Suite or folder Any, Tags @smoke, Priority ≥ high open, Type manual, State Any, Assignee Anyone, Defects Any and Flaky; under Priority the five levels critical, high, important, normal and low, the line and above with high chosen, ≥ high with a Clear button; at the foot Cancel and Apply (3). The Filters drawer over the dimmed list of Webshop: Clear all and a close button; the sections Suite or folder Any, Tags @smoke, Priority ≥ high open, Type manual, State Any, Assignee Anyone, Defects Any and Flaky; under Priority the five levels critical, high, important, normal and low, the line and above with high chosen, ≥ high with a Clear button; at the foot Cancel and Apply (3).
The drawer with Priority open: the five levels, and the floor “and above”.

Below 1024 px the three facets leave the bar and the drawer carries them all; the chips stay.

Test cases at 375 px wide with 3 of 11: the search field and Filters 2, the chips @smoke and ≥ high with Clear all and Run manually under them, and the tree with the folders Checkout and Account and the cases Pay by …, Pick a delive… and Sign in with …. Test cases at 375 px wide with 3 of 11: the search field and Filters 2, the chips @smoke and ≥ high with Clear all and Run manually under them, and the tree with the folders Checkout and Account and the cases Pay by …, Pick a delive… and Sign in with ….
At 375 px: the search and Filters, then the chips.

A filtered view that finds nothing is its own screen — Nothing matches. with Try fewer words or clear the facets. and Clear filters — not the empty-project screen, which offers to create the first case.

Test cases of Webshop, 0 of 11, with the search field holding zzz-nothing and a chip for it with Clear all and Run manually; below, TEST CASES, Nothing matches., Try fewer words or clear the facets. and a Clear filters button. Test cases of Webshop, 0 of 11, with the search field holding zzz-nothing and a chip for it with Clear all and Run manually; below, TEST CASES, Nothing matches., Try fewer words or clear the facets. and a Clear filters button.
A filter that matches nothing.

The same filter on the API, for a script:

Terminal window
curl -H "Authorization: Bearer $PLUNE_TOKEN" "$PLUNE_API_URL/v1/test-cases?tag=smoke"