=item HASHREF C<OPTS> - Options for getting the tests
=over 4
=item STRING C<PROJECT> - name of Project to look for tests in
=item STRING C<RUN> - name of Run to get tests from
=item STRING C<PLAN> (optional) - name of Plan to get run from
=item ARRAYREF[STRING] C<CONFIGS> (optional) - names of configs run must satisfy, if part of a plan
=item ARRAYREF[STRING] C<USERS> (optional) - names of users to filter cases by assignee
=item ARRAYREF[STRING] C<STATUSES> (optional) - names of statuses to filter cases by
=back
=back
Returns ARRAYREF of tests, and the run in which they belong.
=head2 findTests(opts,case1,...,caseN)
Given an ARRAY of tests, find tests meeting your criteria (or not) in the specified directory.
=over 4
=item HASHREF C<OPTS> - Options for finding tests:
=over 4
=item STRING C<MATCH> - Only return tests which exist in the path provided, and in TestRail. Mutually exclusive with no-match, orphans.
=item STRING C<NO-MATCH> - Only return tests which are in the path provided, but not in TestRail. Mutually exclusive with match, orphans.
=item STRING C<ORPHANS> - Only return tests which are in TestRail, and not in the path provided. Mutually exclusive with match, no-match
=item BOOL C<NO-RECURSE> - Do not do a recursive scan for files.
=item BOOL C<NAMES-ONLY> - Only return the names of the tests rather than the entire test objects.
=item STRING C<EXTENSION> (optional) - Only return files ending with the provided text (e.g. .t, .test, .pl, .pm)
=item CODE C<FINDER> (optional) - Use the provided sub to get the list of files on disk. Provides the directory & extension based on above options as arguments. Must return list of tests.
=back
=item ARRAY C<CASES> - Array of cases to translate to pathnames based on above options.
=back
Returns tests found that meet the criteria laid out in the options.
Provides absolute path to tests if match is passed; this is the 'full_title' key if names-only is false/undef.
Dies if mutually exclusive options are passed.
=head2 getCases
Get cases in a testsuite matching your parameters passed
=head2 findCases(opts,@cases)
Find orphan, missing and needing-update cases.
They are returned as the hash keys 'orphans', 'missing', and 'updates' respectively.
The testsuite_id is also returned in the output hashref.
Option hash keys for input are 'no-missing', 'orphans', and 'update'.
Returns HASHREF.
=head2 getResults(options, @cases)
Get results for tests by name, filtered by the provided options, and skipping any runs found in the provided ARRAYREF of run IDs.
Probably should have called this findResults, but we all prefer to get results right?
Returns ARRAYREF of results, and an ARRAYREF of seen plan IDs
Valid Options:
=over 4
=item B<plans> - ARRAYREF of plan names to check.
=item B<runs> - ARRAYREF of runs names to check.
=item B<plan_ids> - ARRAYREF of plan IDs to NOT check.
=item B<run_ids> - ARRAYREF of run IDs to NOT check.
=item B<pattern> - Pattern to filter case results on.
=item B<defects> - ARRAYREF of defects of which at least one must be present in a result.
=item B<fast> - Whether to get only the latest result from the test in your run(s). This can significantly speed up operations when gathering metrics for large numbers of tests.
=back
=head1 SPECIAL THANKS
Thanks to cPanel Inc, for graciously funding the creation of this module.