Completed
Push — master ( 4e4cd8...063296 )
by Maksim
16s
created

ObjectPersisterTest::testThatCanReplaceObject()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 16
c 0
b 0
f 0
rs 9.4285
cc 1
eloc 10
nc 1
nop 0
1
<?php
2
3
/*
4
 * This file is part of the FOSElasticaBundle package.
5
 *
6
 * (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
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
namespace FOS\ElasticaBundle\Tests\Persister;
13
14
use FOS\ElasticaBundle\Persister\ObjectPersister;
15
use FOS\ElasticaBundle\Transformer\ModelToElasticaAutoTransformer;
16
use FOS\ElasticaBundle\Tests\Mocks\ObjectPersisterPOPO as POPO;
17
use Symfony\Component\PropertyAccess\PropertyAccess;
18
19
class InvalidObjectPersister extends ObjectPersister
20
{
21
    public function transformToElasticaDocument($object)
22
    {
23
        throw new \BadMethodCallException('Invalid transformation');
24
    }
25
}
26
27
class ObjectPersisterTest extends \PHPUnit_Framework_TestCase
28
{
29
    public function testThatCanReplaceObject()
30
    {
31
        $transformer = $this->getTransformer();
32
33
        /** @var $typeMock \PHPUnit_Framework_MockObject_MockObject|\Elastica\Type */
34
        $typeMock = $this->getMockBuilder('Elastica\Type')
35
            ->disableOriginalConstructor()
36
            ->getMock();
37
        $typeMock->expects($this->once())
38
            ->method('updateDocuments');
39
40
        $fields = ['name' => []];
41
42
        $objectPersister = new ObjectPersister($typeMock, $transformer, 'SomeClass', $fields);
43
        $objectPersister->replaceOne(new POPO());
44
    }
45
46
    /**
47
     * @expectedException \BadMethodCallException
48
     */
49 View Code Duplication
    public function testThatErrorIsHandledWhenCannotReplaceObject()
50
    {
51
        $transformer = $this->getTransformer();
52
53
        /** @var $typeMock \PHPUnit_Framework_MockObject_MockObject|\Elastica\Type */
54
        $typeMock = $this->getMockBuilder('Elastica\Type')
55
            ->disableOriginalConstructor()
56
            ->getMock();
57
        $typeMock->expects($this->never())
58
            ->method('deleteById');
59
        $typeMock->expects($this->never())
60
            ->method('addDocument');
61
62
        $fields = ['name' => []];
63
64
        $objectPersister = new InvalidObjectPersister($typeMock, $transformer, 'SomeClass', $fields);
65
        $objectPersister->replaceOne(new POPO());
66
    }
67
68 View Code Duplication
    public function testThatCanInsertObject()
69
    {
70
        $transformer = $this->getTransformer();
71
72
        /** @var $typeMock \PHPUnit_Framework_MockObject_MockObject|\Elastica\Type */
73
        $typeMock = $this->getMockBuilder('Elastica\Type')
74
            ->disableOriginalConstructor()
75
            ->getMock();
76
        $typeMock->expects($this->never())
77
            ->method('deleteById');
78
        $typeMock->expects($this->once())
79
            ->method('addDocuments');
80
81
        $fields = ['name' => []];
82
83
        $objectPersister = new ObjectPersister($typeMock, $transformer, 'SomeClass', $fields);
84
        $objectPersister->insertOne(new POPO());
85
    }
86
87
    /**
88
     * @expectedException \BadMethodCallException
89
     */
90 View Code Duplication
    public function testThatErrorIsHandledWhenCannotInsertObject()
91
    {
92
        $transformer = $this->getTransformer();
93
94
        /** @var $typeMock \PHPUnit_Framework_MockObject_MockObject|\Elastica\Type */
95
        $typeMock = $this->getMockBuilder('Elastica\Type')
96
            ->disableOriginalConstructor()
97
            ->getMock();
98
        $typeMock->expects($this->never())
99
            ->method('deleteById');
100
        $typeMock->expects($this->never())
101
            ->method('addDocument');
102
103
        $fields = ['name' => []];
104
105
        $objectPersister = new InvalidObjectPersister($typeMock, $transformer, 'SomeClass', $fields);
106
        $objectPersister->insertOne(new POPO());
107
    }
108
109 View Code Duplication
    public function testThatCanDeleteObject()
110
    {
111
        $transformer = $this->getTransformer();
112
113
        /** @var $typeMock \PHPUnit_Framework_MockObject_MockObject|\Elastica\Type */
114
        $typeMock = $this->getMockBuilder('Elastica\Type')
115
            ->disableOriginalConstructor()
116
            ->getMock();
117
        $typeMock->expects($this->once())
118
            ->method('deleteDocuments');
119
        $typeMock->expects($this->never())
120
            ->method('addDocument');
121
122
        $fields = ['name' => []];
123
124
        $objectPersister = new ObjectPersister($typeMock, $transformer, 'SomeClass', $fields);
125
        $objectPersister->deleteOne(new POPO());
126
    }
127
128
    /**
129
     * @expectedException \BadMethodCallException
130
     */
131 View Code Duplication
    public function testThatErrorIsHandledWhenCannotDeleteObject()
132
    {
133
        $transformer = $this->getTransformer();
134
135
        /** @var $typeMock \PHPUnit_Framework_MockObject_MockObject|\Elastica\Type */
136
        $typeMock = $this->getMockBuilder('Elastica\Type')
137
            ->disableOriginalConstructor()
138
            ->getMock();
139
        $typeMock->expects($this->never())
140
            ->method('deleteById');
141
        $typeMock->expects($this->never())
142
            ->method('addDocument');
143
144
        $fields = ['name' => []];
145
146
        $objectPersister = new InvalidObjectPersister($typeMock, $transformer, 'SomeClass', $fields);
147
        $objectPersister->deleteOne(new POPO());
148
    }
149
150 View Code Duplication
    public function testThatCanInsertManyObjects()
151
    {
152
        $transformer = $this->getTransformer();
153
154
        /** @var $typeMock \PHPUnit_Framework_MockObject_MockObject|\Elastica\Type */
155
        $typeMock = $this->getMockBuilder('Elastica\Type')
156
            ->disableOriginalConstructor()
157
            ->getMock();
158
        $typeMock->expects($this->never())
159
            ->method('deleteById');
160
        $typeMock->expects($this->never())
161
            ->method('addDocument');
162
        $typeMock->expects($this->once())
163
            ->method('addDocuments');
164
165
        $fields = ['name' => []];
166
167
        $objectPersister = new ObjectPersister($typeMock, $transformer, 'SomeClass', $fields);
168
        $objectPersister->insertMany([new POPO(), new POPO()]);
169
    }
170
171
    /**
172
     * @expectedException \BadMethodCallException
173
     */
174 View Code Duplication
    public function testThatErrorIsHandledWhenCannotInsertManyObject()
175
    {
176
        $transformer = $this->getTransformer();
177
178
        /** @var $typeMock \PHPUnit_Framework_MockObject_MockObject|\Elastica\Type */
179
        $typeMock = $this->getMockBuilder('Elastica\Type')
180
            ->disableOriginalConstructor()
181
            ->getMock();
182
        $typeMock->expects($this->never())
183
            ->method('deleteById');
184
        $typeMock->expects($this->never())
185
            ->method('addDocument');
186
        $typeMock->expects($this->never())
187
            ->method('addDocuments');
188
189
        $fields = ['name' => []];
190
191
        $objectPersister = new InvalidObjectPersister($typeMock, $transformer, 'SomeClass', $fields);
192
        $objectPersister->insertMany([new POPO(), new POPO()]);
193
    }
194
195
    /**
196
     * @return ModelToElasticaAutoTransformer
197
     */
198
    private function getTransformer()
199
    {
200
        $transformer = new ModelToElasticaAutoTransformer();
201
        $transformer->setPropertyAccessor(PropertyAccess::createPropertyAccessor());
202
203
        return $transformer;
204
    }
205
}
206