testDestroyEmptySuspectResource()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1.0046

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 7
ccs 5
cts 6
cp 0.8333
rs 9.4285
cc 1
eloc 5
nc 1
nop 0
crap 1.0046
1
<?php
2
namespace Staticus\Resources\Commands;
3
4
use League\Flysystem\Filesystem;
5
use League\Flysystem\Memory\MemoryAdapter;
6
use Staticus\Resources\File\ResourceDO;
7
8
class DestroyEqualResourceCommandTest extends \PHPUnit_Framework_TestCase
9
{
10
    /**
11
     * @var ResourceDO
12
     */
13
    protected $resourceDO;
14
    /**
15
     * @var Filesystem
16
     */
17
    protected $filesystem;
18
19 5
    protected function setUp()
20
    {
21 5
        parent::setUp();
22 5
        $this->resourceDO = new ResourceDO();
23 5
        $this->filesystem = new Filesystem(new MemoryAdapter());
24 5
    }
25
26
    /**
27
     * @return DestroyEqualResourceCommand
28
     */
29 5
    public function getCommand(ResourceDO $resourceDOOrigin, ResourceDO $resourceDOSuspect)
30
    {
31 5
        return new DestroyEqualResourceCommand($resourceDOOrigin, $resourceDOSuspect, $this->filesystem);
32
    }
33
34
    /**
35
     * @return ResourceDO
36
     */
37 2
    public function getResourceDO()
38
    {
39 2
        return clone $this->resourceDO;
40
    }
41
42
    /**
43
     * @return ResourceDO
44
     */
45 4
    public function getResourceDOMock()
46
    {
47 4
        $resourceDO = clone $this->resourceDO;
48
49
        return $resourceDO
50 4
            ->setBaseDirectory('testBase')
51 4
            ->setName('testResource')
52 4
            ->setType('testType')
53 4
            ;
54
    }
55
56
    /**
57
     * @expectedException \Staticus\Resources\Exceptions\CommandErrorException
58
     * @expectedExceptionMessage Cannot destroy equal resource: the origin resource is empty
59
     */
60 1
    public function testDestroyEmptyOriginResource()
61
    {
62 1
        $resourceDOOrigin = $this->getResourceDO();
63 1
        $resourceDOSuspect = $this->getResourceDO();
64 1
        $command = $this->getCommand($resourceDOOrigin, $resourceDOSuspect);
65 1
        $command();
66
    }
67
68
    /**
69
     * @expectedException \Staticus\Resources\Exceptions\CommandErrorException
70
     * @expectedExceptionMessage Cannot destroy equal resource: the suspect resource is empty
71
     */
72 1
    public function testDestroyEmptySuspectResource()
73
    {
74 1
        $resourceDOOrigin = $this->getResourceDOMock();
75 1
        $resourceDOSuspect = $this->getResourceDO();
76 1
        $command = $this->getCommand($resourceDOOrigin, $resourceDOSuspect);
77 1
        $command();
78
    }
79
80
    /**
81
     * @expectedException \Staticus\Resources\Exceptions\CommandErrorException
82
     * @expectedExceptionMessage Cannot destroy equal resource: Origin and Suspect have same paths
83
     */
84 1
    public function testDestroyEqualResourceWithSamePaths()
85
    {
86 1
        $resourceDOOrigin = $this->getResourceDOMock();
87 1
        $resourceDOSuspect = $this->getResourceDOMock();
88 1
        $this->filesystem->put($resourceDOOrigin->getFilePath(), '');
89 1
        $this->filesystem->put($resourceDOSuspect->getFilePath(), '');
90
91 1
        $command = $this->getCommand($resourceDOOrigin, $resourceDOSuspect);
92 1
        $command();
93
94
        $this->assertTrue($this->filesystem->has($resourceDOSuspect->getFilePath()));
95
    }
96
97 1
    public function testDestroyEqualResourceWithDifferentPaths()
98
    {
99 1
        $resourceDOOrigin = $this->getResourceDOMock();
100 1
        $resourceDOSuspect = $this->getResourceDOMock();
101 1
        $resourceDOSuspect->setVersion($resourceDOOrigin->getVersion() + 1);
102 1
        $this->filesystem->put($resourceDOOrigin->getFilePath(), 'Same content');
103 1
        $this->filesystem->put($resourceDOSuspect->getFilePath(), 'Same content');
104
105 1
        $command = $this->getCommand($resourceDOOrigin, $resourceDOSuspect);
106 1
        $result = $command();
107
108 1
        $this->assertEquals($resourceDOSuspect, $result);
109 1
        $this->assertTrue($this->filesystem->has($resourceDOOrigin->getFilePath()));
110 1
        $this->assertFalse($this->filesystem->has($resourceDOSuspect->getFilePath()));
111 1
    }
112
113 1
    public function testDestroyEqualResourceWithDifferentContent()
114
    {
115 1
        $resourceDOOrigin = $this->getResourceDOMock();
116 1
        $resourceDOSuspect = $this->getResourceDOMock();
117 1
        $resourceDOSuspect->setVersion($resourceDOOrigin->getVersion() + 1);
118 1
        $this->filesystem->put($resourceDOOrigin->getFilePath(), 'Same content');
119 1
        $this->filesystem->put($resourceDOSuspect->getFilePath(), 'Different content');
120
121 1
        $command = $this->getCommand($resourceDOOrigin, $resourceDOSuspect);
122 1
        $result = $command();
123
124 1
        $this->assertEquals($resourceDOOrigin, $result);
125 1
        $this->assertTrue($this->filesystem->has($resourceDOOrigin->getFilePath()));
126 1
        $this->assertTrue($this->filesystem->has($resourceDOSuspect->getFilePath()));
127 1
    }
128
}
129