Completed
Push — master ( addbd6...574e3d )
by Nils
14:35
created

ResourcesCountRule::doValidation()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 17
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 17
rs 9.4285
cc 3
eloc 13
nc 3
nop 1
1
<?php
2
3
namespace whm\Smoke\Rules\Html;
4
5
use phm\HttpWebdriverClient\Http\Response\ResourcesAwareResponse;
6
use Psr\Http\Message\ResponseInterface;
7
use whm\Smoke\Rules\Attribute;
8
use whm\Smoke\Rules\CheckResult;
9
use whm\Smoke\Rules\StandardRule;
10
11
/**
12
 * This rule calculates the size of a html document. If the document is bigger than a given value
13
 * the test will fail.
14
 */
15
class ResourcesCountRule extends StandardRule
16
{
17
    private $maxElements;
18
19
    protected $contentTypes = array('text/html');
20
21
    public function init($maxElements = 200)
22
    {
23
        $this->maxElements = $maxElements;
24
    }
25
26
    protected function doValidation(ResponseInterface $response)
27
    {
28
        if ($response instanceof ResourcesAwareResponse) {
29
            $resourceCount = count($response->getResources());
30
            if ($resourceCount > $this->maxElements) {
31
                $message = 'Too many resources were loaded. ' . $resourceCount . ' resources loaded, maximum was ' . $this->maxElements . '.';
32
                $result = new CheckResult(CheckResult::STATUS_FAILURE, $message, $resourceCount);
33
                $result->addAttribute(new Attribute('resources', $response->getResources(), true));
34
                return $result;
35
            } else {
36
                $message = $resourceCount . ' resources were loaded.';
37
                return new CheckResult(CheckResult::STATUS_SUCCESS, $message, $resourceCount);
38
            }
39
        } else {
40
            throw new \RuntimeException('Unable to analyze resources count. Please use another response retriever.');
41
        }
42
    }
43
}
44