Completed
Push — master ( 0a7932...aee286 )
by Maksim
13s
created

testShouldResolveWithFewPathsAndSingleFilter()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 12
rs 9.4285
cc 1
eloc 8
nc 1
nop 0
1
<?php
2
3
namespace Liip\ImagineBundle\Tests\Functional\Command;
4
5
use Liip\ImagineBundle\Tests\Functional\WebTestCase;
6
use Liip\ImagineBundle\Command\ResolveCacheCommand;
7
use Symfony\Component\Filesystem\Filesystem;
8
use Symfony\Component\Console\Command\Command;
9
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
10
use Symfony\Component\Console\Application;
11
use Symfony\Component\Console\Tester\CommandTester;
12
13
/**
14
 * @covers Liip\ImagineBundle\Command\ResolveCacheCommand
15
 */
16
class ResolveCacheTest extends WebTestCase
17
{
18
    protected $client;
19
20
    protected $webRoot;
21
22
    protected $filesystem;
23
24
    protected $cacheRoot;
25
26 View Code Duplication
    public function setUp()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
27
    {
28
        parent::setUp();
29
30
        $this->client = $this->createClient();
31
32
        $this->webRoot = self::$kernel->getContainer()->getParameter('kernel.root_dir').'/web';
33
        $this->cacheRoot = $this->webRoot.'/media/cache';
34
35
        $this->filesystem = new Filesystem();
36
        $this->filesystem->remove($this->cacheRoot);
37
    }
38
39 View Code Duplication
    public function testShouldResolveWithEmptyCache()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
40
    {
41
        $this->assertFileNotExists($this->cacheRoot.'/thumbnail_web_path/images/cats.jpeg');
42
43
        $output = $this->executeConsole(
44
            new ResolveCacheCommand(),
45
            array(
46
                'paths' => array('images/cats.jpeg'),
47
                '--filters' => array('thumbnail_web_path'), )
48
        );
49
50
        $this->assertFileExists($this->cacheRoot.'/thumbnail_web_path/images/cats.jpeg');
51
        $this->assertFileNotExists($this->cacheRoot.'/thumbnail_default/images/cats.jpeg');
52
        $this->assertContains('http://localhost/media/cache/thumbnail_web_path/images/cats.jpeg', $output);
53
    }
54
55 View Code Duplication
    public function testShouldResolveWithCacheExists()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
56
    {
57
        $this->filesystem->dumpFile(
58
            $this->cacheRoot.'/thumbnail_web_path/images/cats.jpeg',
59
            'anImageContent'
60
        );
61
62
        $output = $this->executeConsole(
63
            new ResolveCacheCommand(),
64
            array(
65
                'paths' => array('images/cats.jpeg'),
66
                '--filters' => array('thumbnail_web_path'), )
67
        );
68
69
        $this->assertFileExists($this->cacheRoot.'/thumbnail_web_path/images/cats.jpeg');
70
        $this->assertFileNotExists($this->cacheRoot.'/thumbnail_default/images/cats.jpeg');
71
        $this->assertContains('http://localhost/media/cache/thumbnail_web_path/images/cats.jpeg', $output);
72
    }
73
74
    public function testShouldResolveWithFewPathsAndSingleFilter()
75
    {
76
        $output = $this->executeConsole(
77
            new ResolveCacheCommand(),
78
            array(
79
                'paths' => array('images/cats.jpeg', 'images/cats2.jpeg'),
80
                '--filters' => array('thumbnail_web_path'), )
81
        );
82
83
        $this->assertContains('http://localhost/media/cache/thumbnail_web_path/images/cats.jpeg', $output);
84
        $this->assertContains('http://localhost/media/cache/thumbnail_web_path/images/cats2.jpeg', $output);
85
    }
86
87
    public function testShouldResolveWithFewPathsSingleFilterAndPartiallyFullCache()
88
    {
89
        $this->assertFileNotExists($this->cacheRoot.'/thumbnail_web_path/images/cats.jpeg');
90
91
        $this->filesystem->dumpFile(
92
            $this->cacheRoot.'/thumbnail_web_path/images/cats2.jpeg',
93
            'anImageContent'
94
        );
95
96
        $output = $this->executeConsole(
97
            new ResolveCacheCommand(),
98
            array(
99
                'paths' => array('images/cats.jpeg', 'images/cats2.jpeg'),
100
                '--filters' => array('thumbnail_web_path'), )
101
        );
102
103
        $this->assertFileNotExists($this->cacheRoot.'/thumbnail_default/images/cats.jpeg');
104
        $this->assertFileExists($this->cacheRoot.'/thumbnail_web_path/images/cats.jpeg');
105
        $this->assertFileExists($this->cacheRoot.'/thumbnail_web_path/images/cats2.jpeg');
106
        $this->assertContains('http://localhost/media/cache/thumbnail_web_path/images/cats.jpeg', $output);
107
        $this->assertContains('http://localhost/media/cache/thumbnail_web_path/images/cats2.jpeg', $output);
108
    }
109
110
    public function testShouldResolveWithFewPathsAndFewFilters()
111
    {
112
        $output = $this->executeConsole(
113
            new ResolveCacheCommand(),
114
            array(
115
                'paths' => array('images/cats.jpeg', 'images/cats2.jpeg'),
116
                '--filters' => array('thumbnail_web_path', 'thumbnail_default'), )
117
        );
118
119
        $this->assertContains('http://localhost/media/cache/thumbnail_web_path/images/cats.jpeg', $output);
120
        $this->assertContains('http://localhost/media/cache/thumbnail_web_path/images/cats2.jpeg', $output);
121
        $this->assertContains('http://localhost/media/cache/thumbnail_default/images/cats.jpeg', $output);
122
        $this->assertContains('http://localhost/media/cache/thumbnail_default/images/cats2.jpeg', $output);
123
    }
124
125
    public function testShouldResolveWithFewPathsAndWithoutFilters()
126
    {
127
        $output = $this->executeConsole(
128
            new ResolveCacheCommand(),
129
            array('paths' => array('images/cats.jpeg', 'images/cats2.jpeg'))
130
        );
131
132
        $this->assertContains('http://localhost/media/cache/thumbnail_web_path/images/cats.jpeg', $output);
133
        $this->assertContains('http://localhost/media/cache/thumbnail_web_path/images/cats2.jpeg', $output);
134
        $this->assertContains('http://localhost/media/cache/thumbnail_default/images/cats.jpeg', $output);
135
        $this->assertContains('http://localhost/media/cache/thumbnail_default/images/cats2.jpeg', $output);
136
    }
137
138
    /**
139
     * Helper function return the result of command execution.
140
     *
141
     * @param Command $command
142
     * @param array   $arguments
143
     * @param array   $options
144
     *
145
     * @return string
146
     */
147 View Code Duplication
    protected function executeConsole(Command $command, array $arguments = array(), array $options = array())
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
148
    {
149
        $command->setApplication(new Application($this->createClient()->getKernel()));
0 ignored issues
show
Documentation introduced by
$this->createClient()->getKernel() is of type object<Symfony\Component...Kernel\KernelInterface>, but the function expects a string.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
150
        if ($command instanceof ContainerAwareCommand) {
151
            $command->setContainer($this->createClient()->getContainer());
152
        }
153
154
        $arguments = array_replace(array('command' => $command->getName()), $arguments);
155
        $options = array_replace(array('--env' => 'test'), $options);
156
157
        $commandTester = new CommandTester($command);
158
        $commandTester->execute($arguments, $options);
159
160
        return $commandTester->getDisplay();
161
    }
162
}
163