Completed
Pull Request — master (#15)
by Marco
02:37
created

ApiCompareTest::testExecute()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 39
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 27
nc 1
nop 0
dl 0
loc 39
c 0
b 0
f 0
cc 1
rs 8.8571
1
<?php
2
declare(strict_types=1);
3
4
namespace RoaveTest\ApiCompare\Command;
5
6
use Assert\InvalidArgumentException;
7
use PHPUnit\Framework\MockObject\MockObject;
8
use Roave\ApiCompare\Command\ApiCompare;
9
use PHPUnit\Framework\TestCase;
10
use Roave\ApiCompare\Factory\DirectoryReflectorFactory;
11
use Roave\ApiCompare\Git\CheckedOutRepository;
12
use Roave\ApiCompare\Git\PerformCheckoutOfRevision;
13
use Symfony\Component\Console\Input\InputInterface;
14
use Symfony\Component\Console\Output\OutputInterface;
15
16
/**
17
 * @covers \Roave\ApiCompare\Command\ApiCompare
18
 */
19
final class ApiCompareTest extends TestCase
20
{
21
    public function testExecute() : void
22
    {
23
        $sourceRepository = CheckedOutRepository::fromPath(realpath(__DIR__ . '/../../../'));
24
25
        $fromSha = sha1('fromRevision', false);
26
        $toSha = sha1('toRevision', false);
27
28
        /** @var InputInterface|MockObject $input */
29
        $input = $this->createMock(InputInterface::class);
30
31
        $input->expects(self::any())->method('getArgument')->willReturnMap([
0 ignored issues
show
Bug introduced by
The method expects() does not exist on Symfony\Component\Console\Input\InputInterface. ( Ignorable by Annotation )

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

31
        $input->/** @scrutinizer ignore-call */ 
32
                expects(self::any())->method('getArgument')->willReturnMap([

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...
32
            ['from', $fromSha],
33
            ['to', $toSha],
34
            ['sources-path', 'src'],
35
        ]);
36
37
        /** @var OutputInterface|MockObject $output */
38
        $output = $this->createMock(OutputInterface::class);
39
        /** @var PerformCheckoutOfRevision|MockObject $git */
40
        $git = $this->createMock(PerformCheckoutOfRevision::class);
41
        $git->expects(self::at(0))
0 ignored issues
show
Bug introduced by
The method expects() does not exist on Roave\ApiCompare\Git\PerformCheckoutOfRevision. ( Ignorable by Annotation )

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

41
        $git->/** @scrutinizer ignore-call */ 
42
              expects(self::at(0))

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...
42
            ->method('checkout')
43
            ->with($sourceRepository, $fromSha)
44
            ->willReturn($sourceRepository);
45
        $git->expects(self::at(1))
46
            ->method('checkout')
47
            ->with($sourceRepository, $toSha)
48
            ->willReturn($sourceRepository);
49
        $git->expects(self::at(2))
50
            ->method('remove')
51
            ->with($sourceRepository);
52
        $git->expects(self::at(3))
53
            ->method('remove')
54
            ->with($sourceRepository);
55
56
        $command = new ApiCompare($git, new DirectoryReflectorFactory());
57
58
        chdir((string)$sourceRepository);
59
        $command->execute($input, $output);
60
    }
61
62
    public function testExecuteFailsIfCheckedOutRepositoryDoesNotExist() : void
63
    {
64
        $sourceRepository = CheckedOutRepository::fromPath(realpath(__DIR__ . '/../../../'));
65
66
        $fromSha = sha1('fromRevision', false);
67
        $toSha = sha1('toRevision', false);
68
69
        /** @var InputInterface|MockObject $input */
70
        $input = $this->createMock(InputInterface::class);
71
72
        $input->expects(self::any())->method('getArgument')->willReturnMap([
73
            ['from', $fromSha],
74
            ['to', $toSha],
75
            ['sources-path', uniqid('src', true)],
76
        ]);
77
78
        /** @var OutputInterface|MockObject $output */
79
        $output = $this->createMock(OutputInterface::class);
80
        /** @var PerformCheckoutOfRevision|MockObject $git */
81
        $git = $this->createMock(PerformCheckoutOfRevision::class);
82
        $git->expects(self::at(0))
83
            ->method('checkout')
84
            ->with($sourceRepository, $fromSha)
85
            ->willReturn($sourceRepository);
86
        $git->expects(self::at(1))
87
            ->method('checkout')
88
            ->with($sourceRepository, $toSha)
89
            ->willReturn($sourceRepository);
90
        $git->expects(self::at(2))
91
            ->method('remove')
92
            ->with($sourceRepository);
93
        $git->expects(self::at(3))
94
            ->method('remove')
95
            ->with($sourceRepository);
96
97
        $command = new ApiCompare($git, new DirectoryReflectorFactory());
98
99
        $this->expectException(InvalidArgumentException::class);
100
101
        chdir((string)$sourceRepository);
102
103
        $command->execute($input, $output);
104
    }
105
}
106