Completed
Push — master ( 003b34...bd032d )
by
unknown
02:17
created

InvalidStatusCodeRule::doValidation()   B

Complexity

Conditions 6
Paths 10

Size

Total Lines 29
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 29
rs 8.439
cc 6
eloc 18
nc 10
nop 1
1
<?php
2
3
namespace whm\Smoke\Rules\Html;
4
5
use phm\HttpWebdriverClient\Http\Client\HeadlessChrome\HeadlessChromeResponse;
6
use phm\HttpWebdriverClient\Http\Response\ResourcesAwareResponse;
7
use Psr\Http\Message\ResponseInterface;
8
use whm\Smoke\Rules\CheckResult;
9
use whm\Smoke\Rules\StandardRule;
10
11
/**
12
 * This rule checks if a scanned resource has 4xx or 5xx links
13
 */
14
class InvalidStatusCodeRule extends StandardRule
15
{
16
    protected $contentTypes = ['text/html'];
17
18
    public function doValidation(ResponseInterface $response)
19
    {
20
21
        if ($response instanceof ResourcesAwareResponse) {
22
            $resources = $response->getResources();
23
24
            $errorList = [];
25
26
            foreach ($resources as $resource) {
27
                if ($resource['http_status'] >= 400) {
28
                    $errorList[] = $resource;
29
                }
30
            }
31
32
            if (count($errorList) > 0) {
33
                $count = count($errorList);
34
                $msg = 'Found ' . $count . ' resources with status code 4xx or 5xx. <ul>';
35
                foreach ($errorList as $error) {
36
                    $msg .= '<li>' . $error['name'] . ' (' . $error['http_status'] . ')</li>';
37
                }
38
                $msg .= '</ul>';
39
                return new CheckResult(CheckResult::STATUS_FAILURE, $msg, $count);
40
            } else {
41
                return new CheckResult(CheckResult::STATUS_SUCCESS, 'No resources with status 4xx or 5xx found.', 0);
42
            }
43
        } else {
44
            return new CheckResult(CheckResult::STATUS_SKIPPED, 'Expected ResourcesAwareResponse. Skipped.');
45
        }
46
    }
47
}
48