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 abovehigh means high and criticalno
typemanual, automated or evalyes
statedraft, in_review, active, detached or deprecatedyes
qtext found in the title or the description, case-insensitively — text, not a patternno

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 dashboard’s suite picker in the filter bar shows the tree 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 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

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

The filter bar 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 to a filtered view restores the controls and the selection in another window;
  • Back is a filter change;
  • a link that carries a value outside the vocabulary shows the API’s refusal verbatim, with a “Reset filter” beside it and the bar still usable.