Passed
Pull Request — develop (#5)
by ANTHONIUS
05:33
created

CoverageController::getSubscribedEvents()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1.037

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 0
dl 0
loc 5
ccs 2
cts 3
cp 0.6667
crap 1.037
rs 10
c 0
b 0
f 0
1
<?php
2
3
/*
4
 * This file is part of the DoyoUserBundle project.
5
 *
6
 * (c) Anthonius Munthi <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
declare(strict_types=1);
13
14
/*
15
 * This file is part of the doyo/behat-code-coverage project.
16
 *
17
 * (c) Anthonius Munthi <[email protected]>
18
 *
19
 * For the full copyright and license information, please view the LICENSE
20
 * file that was distributed with this source code.
21
 */
22
23
namespace Doyo\Behat\Coverage\Controller\Cli;
24
25
use Behat\Testwork\Cli\Controller;
26
use Doyo\Behat\Coverage\Event\ReportEvent;
27
use Symfony\Component\Console\Command\Command;
28
use Symfony\Component\Console\Input\InputInterface;
29
use Symfony\Component\Console\Input\InputOption;
30
use Symfony\Component\Console\Output\OutputInterface;
31
use Symfony\Component\Console\Style\StyleInterface;
32
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
33
34
/**
35
 * Code Coverage Cli Controller.
36
 *
37
 * @author Anthonius Munthi <[email protected]>
38
 */
39
class CoverageController implements Controller, EventSubscriberInterface
40
{
41
    /**
42
     * @var StyleInterface|null
43
     */
44
    private $style;
45
46
    /**
47
     * CoverageController constructor.
48
     *
49
     * @param StyleInterface|null $style
50
     */
51 4
    public function __construct(StyleInterface $style)
52
    {
53 4
        $this->style = $style;
54
    }
55
56
    /**
57
     * {@inheritdoc}
58
     */
59
    public function configure(Command $command)
60
    {
61
        $command->addOption('coverage', null, InputOption::VALUE_NONE, 'Collecting code coverage');
62
    }
63
64 2
    public static function getSubscribedEvents()
65
    {
66
        return [
67 2
            ReportEvent::BEFORE_PROCESS => 'onBeforeReportProcess',
68
            ReportEvent::AFTER_PROCESS  => 'onAfterReportProcess',
69
        ];
70
    }
71
72
    /**
73
     * {@inheritdoc}
74
     */
75
    public function execute(InputInterface $input, OutputInterface $output)
76
    {
77
        if ($input->hasParameterOption(['--coverage'])) {
78
            $this->style->note('Running with code coverage');
0 ignored issues
show
Bug introduced by
The method note() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

78
            $this->style->/** @scrutinizer ignore-call */ 
79
                          note('Running with code coverage');

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
79
        }
80
    }
81
82 1
    public function onBeforeReportProcess(ReportEvent $event)
83
    {
84 1
        $io = $this->style;
85 1
        $io->section('behat coverage reports process started');
1 ignored issue
show
Bug introduced by
The method section() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

85
        $io->/** @scrutinizer ignore-call */ 
86
             section('behat coverage reports process started');

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
86 1
        $event->setIO($io);
0 ignored issues
show
Bug introduced by
It seems like $io can also be of type null; however, parameter $io of Doyo\Behat\Coverage\Event\ReportEvent::setIO() does only seem to accept Symfony\Component\Console\Style\StyleInterface, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

86
        $event->setIO(/** @scrutinizer ignore-type */ $io);
Loading history...
87
    }
88
89
    public function onAfterReportProcess(ReportEvent $event)
90
    {
91
        $exceptions = $event->getExceptions();
92
        $io = $event->getIO();
93
        if(0 === count($exceptions)){
94
            $this->style->success('behat coverage reports process completed');
95
            return;
96
        }
97
98
        $io->newLine(2);
99
        $io->section('behat coverage reports process failed');
100
        foreach($exceptions as $exception){
101
            $io->error($exception->getMessage());
102
        }
103
    }
104
}
105