<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
  <testsuite name="/home/runner/work/forge-dashboard-sdk-php/forge-dashboard-sdk-php/phpunit.xml.dist" tests="32" assertions="81" errors="0" failures="0" skipped="3" time="3.168963">
    <testsuite name="unit" tests="29" assertions="81" errors="0" failures="0" skipped="0" time="3.168963">
      <testsuite name="Tests\ClientTest" file="tests/ClientTest.php" tests="11" assertions="35" errors="0" failures="0" skipped="0" time="3.122259">
        <testcase name="it sends an explicit bearer token on every request" file="tests/ClientTest.php::it sends an explicit bearer token on every request" class="Tests\ClientTest" classname="Tests.ClientTest" assertions="3" time="0.046658"/>
        <testcase name="it falls back to the environment variable when no token is passed" file="tests/ClientTest.php::it falls back to the environment variable when no token is passed" class="Tests\ClientTest" classname="Tests.ClientTest" assertions="3" time="0.000996"/>
        <testcase name="it lets an explicit token override the environment variable" file="tests/ClientTest.php::it lets an explicit token override the environment variable" class="Tests\ClientTest" classname="Tests.ClientTest" assertions="3" time="0.000767"/>
        <testcase name="it sends no authorization header when no token is available" file="tests/ClientTest.php::it sends no authorization header when no token is available" class="Tests\ClientTest" classname="Tests.ClientTest" assertions="3" time="0.001044"/>
        <testcase name="it does not produce a double slash when the base url has a trailing slash" file="tests/ClientTest.php::it does not produce a double slash when the base url has a trailing slash" class="Tests\ClientTest" classname="Tests.ClientTest" assertions="4" time="0.002461"/>
        <testcase name="it uses an explicit http client directly instead of building one" file="tests/ClientTest.php::it uses an explicit http client directly instead of building one" class="Tests\ClientTest" classname="Tests.ClientTest" assertions="5" time="0.000845"/>
        <testcase name="it retries a 5xx response and succeeds on the retry" file="tests/ClientTest.php::it retries a 5xx response and succeeds on the retry" class="Tests\ClientTest" classname="Tests.ClientTest" assertions="2" time="0.000931"/>
        <testcase name="it defaults max retries to exactly three" file="tests/ClientTest.php::it defaults max retries to exactly three" class="Tests\ClientTest" classname="Tests.ClientTest" assertions="2" time="3.061106"/>
        <testcase name="it never retries a 400" file="tests/ClientTest.php::it never retries a 400" class="Tests\ClientTest" classname="Tests.ClientTest" assertions="2" time="0.000970"/>
        <testcase name="it decodes an error response into an api error" file="tests/ClientTest.php::it decodes an error response into an api error" class="Tests\ClientTest" classname="Tests.ClientTest" assertions="2" time="0.005129"/>
        <testcase name="it sends a boolean query parameter as true or false, not 1 or 0" file="tests/ClientTest.php::it sends a boolean query parameter as true or false, not 1 or 0" class="Tests\ClientTest" classname="Tests.ClientTest" assertions="6" time="0.001350"/>
      </testsuite>
      <testsuite name="Tests\Exception\ApiErrorTest" file="tests/Exception/ApiErrorTest.php" tests="5" assertions="8" errors="0" failures="0" skipped="0" time="0.016949">
        <testcase name="it prefers the deserialized error model when one was attached" file="tests/Exception/ApiErrorTest.php::it prefers the deserialized error model when one was attached" class="Tests\Exception\ApiErrorTest" classname="Tests.Exception.ApiErrorTest" assertions="2" time="0.015328"/>
        <testcase name="it decodes the raw body when no model was attached" file="tests/Exception/ApiErrorTest.php::it decodes the raw body when no model was attached" class="Tests\Exception\ApiErrorTest" classname="Tests.Exception.ApiErrorTest" assertions="2" time="0.000439"/>
        <testcase name="it falls back to the raw body when the response object is missing getError" file="tests/Exception/ApiErrorTest.php::it falls back to the raw body when the response object is missing getError" class="Tests\Exception\ApiErrorTest" classname="Tests.Exception.ApiErrorTest" assertions="1" time="0.000425"/>
        <testcase name="it falls back gracefully when the body isn't the expected shape" file="tests/Exception/ApiErrorTest.php::it falls back gracefully when the body isn't the expected shape" class="Tests\Exception\ApiErrorTest" classname="Tests.Exception.ApiErrorTest" assertions="2" time="0.000395"/>
        <testcase name="it formats status code and message" file="tests/Exception/ApiErrorTest.php::it formats status code and message" class="Tests\Exception\ApiErrorTest" classname="Tests.Exception.ApiErrorTest" assertions="1" time="0.000361"/>
      </testsuite>
      <testsuite name="Tests\ReportsScriptTest" file="tests/ReportsScriptTest.php" tests="2" assertions="9" errors="0" failures="0" skipped="0" time="0.020281">
        <testcase name="it lays the reports out where the catalogue links them" file="tests/ReportsScriptTest.php::it lays the reports out where the catalogue links them" class="Tests\ReportsScriptTest" classname="Tests.ReportsScriptTest" assertions="8" time="0.017197"/>
        <testcase name="it fails rather than publish a half-built report set" file="tests/ReportsScriptTest.php::it fails rather than publish a half-built report set" class="Tests\ReportsScriptTest" classname="Tests.ReportsScriptTest" assertions="1" time="0.003084"/>
      </testsuite>
      <testsuite name="Tests\Retry\RetryMiddlewareTest" file="tests/Retry/RetryMiddlewareTest.php" tests="11" assertions="29" errors="0" failures="0" skipped="0" time="0.009474">
        <testcase name="it retries a 429" file="tests/Retry/RetryMiddlewareTest.php::it retries a 429" class="Tests\Retry\RetryMiddlewareTest" classname="Tests.Retry.RetryMiddlewareTest" assertions="1" time="0.004004"/>
        <testcase name="it retries a 5xx" file="tests/Retry/RetryMiddlewareTest.php::it retries a 5xx" class="Tests\Retry\RetryMiddlewareTest" classname="Tests.Retry.RetryMiddlewareTest" assertions="1" time="0.000455"/>
        <testcase name="it never retries an otherwise 4xx" file="tests/Retry/RetryMiddlewareTest.php::it never retries an otherwise 4xx" class="Tests\Retry\RetryMiddlewareTest" classname="Tests.Retry.RetryMiddlewareTest" assertions="2" time="0.000453"/>
        <testcase name="it retries a connection failure" file="tests/Retry/RetryMiddlewareTest.php::it retries a connection failure" class="Tests\Retry\RetryMiddlewareTest" classname="Tests.Retry.RetryMiddlewareTest" assertions="1" time="0.000708"/>
        <testcase name="it never retries any other request exception" file="tests/Retry/RetryMiddlewareTest.php::it never retries any other request exception" class="Tests\Retry\RetryMiddlewareTest" classname="Tests.Retry.RetryMiddlewareTest" assertions="1" time="0.000494"/>
        <testcase name="it stops once max retries is reached" file="tests/Retry/RetryMiddlewareTest.php::it stops once max retries is reached" class="Tests\Retry\RetryMiddlewareTest" classname="Tests.Retry.RetryMiddlewareTest" assertions="3" time="0.000465"/>
        <testcase name="it stops after exactly three retries by default" file="tests/Retry/RetryMiddlewareTest.php::it stops after exactly three retries by default" class="Tests\Retry\RetryMiddlewareTest" classname="Tests.Retry.RetryMiddlewareTest" assertions="4" time="0.000438"/>
        <testcase name="it ignores a malformed retry-after header" file="tests/Retry/RetryMiddlewareTest.php::it ignores a malformed retry-after header" class="Tests\Retry\RetryMiddlewareTest" classname="Tests.Retry.RetryMiddlewareTest" assertions="4" time="0.001021"/>
        <testcase name="it honors retry-after in seconds" file="tests/Retry/RetryMiddlewareTest.php::it honors retry-after in seconds" class="Tests\Retry\RetryMiddlewareTest" classname="Tests.Retry.RetryMiddlewareTest" assertions="1" time="0.000417"/>
        <testcase name="it honors retry-after as an http date" file="tests/Retry/RetryMiddlewareTest.php::it honors retry-after as an http date" class="Tests\Retry\RetryMiddlewareTest" classname="Tests.Retry.RetryMiddlewareTest" assertions="3" time="0.000508"/>
        <testcase name="it falls back to exponential backoff with jitter without retry-after" file="tests/Retry/RetryMiddlewareTest.php::it falls back to exponential backoff with jitter without retry-after" class="Tests\Retry\RetryMiddlewareTest" classname="Tests.Retry.RetryMiddlewareTest" assertions="8" time="0.000511"/>
      </testsuite>
    </testsuite>
    <testsuite name="contract" tests="3" assertions="0" errors="0" failures="0" skipped="3" time="0.000000">
      <testsuite name="ForgeDashboard\Tests\Contract\ClientTest" file="Client (ForgeDashboard\Tests\Contract\Client)" tests="3" assertions="0" errors="0" failures="0" skipped="3" time="0.000000">
        <testcase name="Fetches the servers version" file="Client (ForgeDashboard\Tests\Contract\Client)::Fetches the servers version" class="ForgeDashboard\Tests\Contract\ClientTest" classname="ForgeDashboard.Tests.Contract.ClientTest" assertions="0" time="0.000000">
          <skipped/>
        </testcase>
        <testcase name="Reports healthy" file="Client (ForgeDashboard\Tests\Contract\Client)::Reports healthy" class="ForgeDashboard\Tests\Contract\ClientTest" classname="ForgeDashboard.Tests.Contract.ClientTest" assertions="0" time="0.000000">
          <skipped/>
        </testcase>
        <testcase name="Calls an authenticated endpoint" file="Client (ForgeDashboard\Tests\Contract\Client)::Calls an authenticated endpoint" class="ForgeDashboard\Tests\Contract\ClientTest" classname="ForgeDashboard.Tests.Contract.ClientTest" assertions="0" time="0.000000">
          <skipped/>
        </testcase>
      </testsuite>
    </testsuite>
  </testsuite>
</testsuites>
