]>
Commit | Line | Data |
---|---|---|
13470c35 JB |
1 | <?php |
2 | ||
3 | namespace Tests\Wallabag\ImportBundle\Consumer\AMQP; | |
4 | ||
b3437d58 | 5 | use Wallabag\ImportBundle\Consumer\RedisEntryConsumer; |
13470c35 JB |
6 | use Wallabag\UserBundle\Entity\User; |
7 | use Wallabag\CoreBundle\Entity\Entry; | |
8 | ||
b3437d58 | 9 | class RedisEntryConsumerTest extends \PHPUnit_Framework_TestCase |
13470c35 JB |
10 | { |
11 | public function testMessageOk() | |
12 | { | |
13 | $em = $this->getMockBuilder('Doctrine\ORM\EntityManager') | |
14 | ->disableOriginalConstructor() | |
15 | ->getMock(); | |
16 | ||
17 | $em | |
18 | ->expects($this->once()) | |
19 | ->method('flush'); | |
20 | ||
21 | $em | |
22 | ->expects($this->exactly(2)) | |
23 | ->method('clear'); | |
24 | ||
25 | $body = <<<'JSON' | |
26 | { | |
27 | "item_id": "1402935436", | |
28 | "resolved_id": "1402935436", | |
29 | "given_url": "http://mashable.com/2016/09/04/leslie-jones-back-on-twitter-after-hack/?utm_campaign=Mash-Prod-RSS-Feedburner-All-Partial&utm_cid=Mash-Prod-RSS-Feedburner-All-Partial", | |
30 | "given_title": "Leslie Jones is back on Twitter and her comeback tweet rules", | |
31 | "favorite": "0", | |
32 | "status": "0", | |
33 | "time_added": "1473020899", | |
34 | "time_updated": "1473020899", | |
35 | "time_read": "0", | |
36 | "time_favorited": "0", | |
37 | "sort_id": 0, | |
38 | "resolved_title": "Leslie Jones is back on Twitter and her comeback tweet rules", | |
39 | "resolved_url": "http://mashable.com/2016/09/04/leslie-jones-back-on-twitter-after-hack/?utm_campaign=Mash-Prod-RSS-Feedburner-All-Partial&utm_cid=Mash-Prod-RSS-Feedburner-All-Partial", | |
40 | "excerpt": "Leslie Jones is back to communicating with her adoring public on Twitter after cowardly hacker-trolls drove her away, probably to compensate for their own failings. It all started with a mic drop ...", | |
41 | "is_article": "1", | |
42 | "is_index": "0", | |
43 | "has_video": "0", | |
44 | "has_image": "1", | |
45 | "word_count": "200", | |
46 | "tags": { | |
47 | "ifttt": { | |
48 | "item_id": "1402935436", | |
49 | "tag": "ifttt" | |
50 | }, | |
51 | "mashable": { | |
52 | "item_id": "1402935436", | |
53 | "tag": "mashable" | |
54 | } | |
55 | }, | |
56 | "authors": { | |
57 | "2484273": { | |
58 | "item_id": "1402935436", | |
59 | "author_id": "2484273", | |
60 | "name": "Adam Rosenberg", | |
61 | "url": "http://mashable.com/author/adam-rosenberg/" | |
62 | } | |
63 | }, | |
64 | "image": { | |
65 | "item_id": "1402935436", | |
66 | "src": "http://i.amz.mshcdn.com/i-V5cS6_sDqFABaVR0hVSBJqG_w=/950x534/https%3A%2F%2Fblueprint-api-production.s3.amazonaws.com%2Fuploads%2Fcard%2Fimage%2F199899%2Fleslie_jones_war_dogs.jpg", | |
67 | "width": "0", | |
68 | "height": "0" | |
69 | }, | |
70 | "images": { | |
71 | "1": { | |
72 | "item_id": "1402935436", | |
73 | "image_id": "1", | |
74 | "src": "http://i.amz.mshcdn.com/i-V5cS6_sDqFABaVR0hVSBJqG_w=/950x534/https%3A%2F%2Fblueprint-api-production.s3.amazonaws.com%2Fuploads%2Fcard%2Fimage%2F199899%2Fleslie_jones_war_dogs.jpg", | |
75 | "width": "0", | |
76 | "height": "0", | |
77 | "credit": "Image: Steve Eichner/NameFace/Sipa USA", | |
78 | "caption": "" | |
79 | } | |
80 | }, | |
81 | "userId": 1 | |
82 | } | |
83 | JSON; | |
84 | ||
85 | $user = new User(); | |
86 | $entry = new Entry($user); | |
87 | ||
88 | $userRepository = $this->getMockBuilder('Wallabag\UserBundle\Repository\UserRepository') | |
89 | ->disableOriginalConstructor() | |
90 | ->getMock(); | |
91 | ||
92 | $userRepository | |
93 | ->expects($this->once()) | |
94 | ->method('find') | |
95 | // userId from the body json above | |
96 | ->with(1) | |
97 | ->willReturn($user); | |
98 | ||
99 | $import = $this->getMockBuilder('Wallabag\ImportBundle\Import\AbstractImport') | |
100 | ->disableOriginalConstructor() | |
101 | ->getMock(); | |
102 | ||
103 | $import | |
104 | ->expects($this->once()) | |
105 | ->method('setUser') | |
106 | ->with($user); | |
107 | ||
108 | $import | |
109 | ->expects($this->once()) | |
110 | ->method('parseEntry') | |
111 | ->with(json_decode($body, true)) | |
112 | ->willReturn($entry); | |
113 | ||
b3437d58 | 114 | $consumer = new RedisEntryConsumer( |
13470c35 JB |
115 | $em, |
116 | $userRepository, | |
117 | $import | |
118 | ); | |
119 | ||
b3437d58 | 120 | $res = $consumer->manage($body); |
13470c35 | 121 | |
b3437d58 | 122 | $this->assertTrue($res); |
13470c35 JB |
123 | } |
124 | ||
125 | public function testMessageWithBadUser() | |
126 | { | |
127 | $em = $this->getMockBuilder('Doctrine\ORM\EntityManager') | |
128 | ->disableOriginalConstructor() | |
129 | ->getMock(); | |
130 | ||
131 | $em | |
132 | ->expects($this->never()) | |
133 | ->method('flush'); | |
134 | ||
135 | $em | |
136 | ->expects($this->never()) | |
137 | ->method('clear'); | |
138 | ||
139 | $body = '{ "userId": 123 }'; | |
140 | ||
141 | $user = new User(); | |
142 | $entry = new Entry($user); | |
143 | ||
144 | $userRepository = $this->getMockBuilder('Wallabag\UserBundle\Repository\UserRepository') | |
145 | ->disableOriginalConstructor() | |
146 | ->getMock(); | |
147 | ||
148 | $userRepository | |
149 | ->expects($this->once()) | |
150 | ->method('find') | |
151 | // userId from the body json above | |
152 | ->with(123) | |
153 | ->willReturn(null); | |
154 | ||
155 | $import = $this->getMockBuilder('Wallabag\ImportBundle\Import\AbstractImport') | |
156 | ->disableOriginalConstructor() | |
157 | ->getMock(); | |
158 | ||
b3437d58 | 159 | $consumer = new RedisEntryConsumer( |
13470c35 JB |
160 | $em, |
161 | $userRepository, | |
162 | $import | |
163 | ); | |
164 | ||
b3437d58 | 165 | $res = $consumer->manage($body); |
13470c35 | 166 | |
b3437d58 | 167 | $this->assertFalse($res); |
13470c35 JB |
168 | } |
169 | ||
170 | public function testMessageWithEntryProcessed() | |
171 | { | |
172 | $em = $this->getMockBuilder('Doctrine\ORM\EntityManager') | |
173 | ->disableOriginalConstructor() | |
174 | ->getMock(); | |
175 | ||
176 | $em | |
177 | ->expects($this->never()) | |
178 | ->method('flush'); | |
179 | ||
180 | $em | |
181 | ->expects($this->never()) | |
182 | ->method('clear'); | |
183 | ||
184 | $body = '{ "userId": 123 }'; | |
185 | ||
186 | $user = new User(); | |
187 | ||
188 | $userRepository = $this->getMockBuilder('Wallabag\UserBundle\Repository\UserRepository') | |
189 | ->disableOriginalConstructor() | |
190 | ->getMock(); | |
191 | ||
192 | $userRepository | |
193 | ->expects($this->once()) | |
194 | ->method('find') | |
195 | // userId from the body json above | |
196 | ->with(123) | |
197 | ->willReturn($user); | |
198 | ||
199 | $import = $this->getMockBuilder('Wallabag\ImportBundle\Import\AbstractImport') | |
200 | ->disableOriginalConstructor() | |
201 | ->getMock(); | |
202 | ||
203 | $import | |
204 | ->expects($this->once()) | |
205 | ->method('setUser') | |
206 | ->with($user); | |
207 | ||
208 | $import | |
209 | ->expects($this->once()) | |
210 | ->method('parseEntry') | |
211 | ->with(json_decode($body, true)) | |
212 | ->willReturn(null); | |
213 | ||
b3437d58 | 214 | $consumer = new RedisEntryConsumer( |
13470c35 JB |
215 | $em, |
216 | $userRepository, | |
217 | $import | |
218 | ); | |
219 | ||
b3437d58 | 220 | $res = $consumer->manage($body); |
13470c35 | 221 | |
90954971 | 222 | $this->assertTrue($res); |
015c7a83 | 223 | $this->assertFalse($consumer->isStopJob($body)); |
13470c35 JB |
224 | } |
225 | } |