Skip to content

Commit 4153267

Browse files
Fix Apostrophe Handling in SeeInOrder.php and Enhance Test Coverage (#52627)
* Update SeeInOrder.php The issue is happening when in the in order array, one of the string has apostrophe on it. So this PR will resolve that issue. * Update MailMailableAssertionsTest.php Updated tests for apostrophe * Update SeeInOrder.php --------- Co-authored-by: Taylor Otwell <taylor@laravel.com>
1 parent 57249c3 commit 4153267

File tree

2 files changed

+94
-2
lines changed

2 files changed

+94
-2
lines changed

src/Illuminate/Testing/Constraints/SeeInOrder.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,26 @@ public function __construct($content)
4040
*/
4141
public function matches($values): bool
4242
{
43+
$decodedContent = html_entity_decode($this->content, ENT_QUOTES, 'UTF-8');
44+
4345
$position = 0;
4446

4547
foreach ($values as $value) {
4648
if (empty($value)) {
4749
continue;
4850
}
4951

50-
$valuePosition = mb_strpos($this->content, $value, $position);
52+
$decodedValue = html_entity_decode($value, ENT_QUOTES, 'UTF-8');
53+
54+
$valuePosition = mb_strpos($decodedContent, $decodedValue, $position);
5155

5256
if ($valuePosition === false || $valuePosition < $position) {
5357
$this->failedValue = $value;
5458

5559
return false;
5660
}
5761

58-
$position = $valuePosition + mb_strlen($value);
62+
$position = $valuePosition + mb_strlen($decodedValue);
5963
}
6064

6165
return true;

tests/Mail/MailMailableAssertionsTest.php

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,92 @@ public function testMailableAssertInOrderHtmlFailsWhenAbsentInOrder()
136136
'<li>Third Item</li>',
137137
]);
138138
}
139+
140+
public function testMailableAssertSeeInTextWithApostrophePassesWhenPresent()
141+
{
142+
$mailable = new MailableAssertionsStub;
143+
144+
$mailable->assertSeeInText("It's a wonderful day");
145+
}
146+
147+
public function testMailableAssertSeeInTextWithApostropheFailsWhenAbsent()
148+
{
149+
$mailable = new MailableAssertionsStub;
150+
151+
$this->expectException(AssertionFailedError::class);
152+
153+
$mailable->assertSeeInText("It's not a wonderful day");
154+
}
155+
156+
public function testMailableAssertDontSeeInTextWithApostrophePassesWhenAbsent()
157+
{
158+
$mailable = new MailableAssertionsStub;
159+
160+
$mailable->assertDontSeeInText("It's not a wonderful day");
161+
}
162+
163+
public function testMailableAssertDontSeeInTextWithApostropheFailsWhenPresent()
164+
{
165+
$mailable = new MailableAssertionsStub;
166+
167+
$this->expectException(AssertionFailedError::class);
168+
169+
$mailable->assertDontSeeInText("It's a wonderful day");
170+
}
171+
172+
public function testMailableAssertSeeInHtmlWithApostropheFailsWhenAbsent()
173+
{
174+
$mailable = new MailableAssertionsStub;
175+
176+
$this->expectException(AssertionFailedError::class);
177+
178+
$mailable->assertSeeInHtml("<li>It's not a wonderful day</li>");
179+
}
180+
181+
public function testMailableAssertDontSeeInHtmlWithApostrophePassesWhenAbsent()
182+
{
183+
$mailable = new MailableAssertionsStub;
184+
185+
$mailable->assertDontSeeInHtml("<li>It's not a wonderful day</li>");
186+
}
187+
188+
public function testMailableAssertDontSeeInHtmlWithApostropheFailsWhenPresent()
189+
{
190+
$mailable = new MailableAssertionsStub;
191+
192+
$this->expectException(AssertionFailedError::class);
193+
194+
$mailable->assertDontSeeInHtml("<li>It's a wonderful day</li>", false);
195+
}
196+
197+
public function testMailableAssertSeeInOrderInHtmlWithApostrophePassesWhenPresentInOrder()
198+
{
199+
$mailable = new MailableAssertionsStub;
200+
201+
$mailable->assertSeeInOrderInHtml([
202+
'First Item',
203+
'Sixth Item',
204+
'It\'s a wonderful day',
205+
]);
206+
207+
$mailable->assertSeeInOrderInHtml([
208+
'<li>First Item</li>',
209+
'<li>It\'s a wonderful day</li>',
210+
], false);
211+
}
212+
213+
public function testMailableAssertSeeInOrderInHtmlWithApostropheFailsWhenAbsentInOrder()
214+
{
215+
$mailable = new MailableAssertionsStub;
216+
217+
$this->expectException(AssertionFailedError::class);
218+
219+
$mailable->assertSeeInOrderInHtml([
220+
'It\'s a wonderful day',
221+
'First Item',
222+
'Sixth Item',
223+
]);
224+
}
139225
}
140226

141227
class MailableAssertionsStub extends Mailable
@@ -149,6 +235,7 @@ protected function renderForAssertions()
149235
- Third Item
150236
- Fourth & Fifth Item
151237
- Sixth Item
238+
- It's a wonderful day
152239
EOD;
153240

154241
$html = <<<'EOD'
@@ -167,6 +254,7 @@ protected function renderForAssertions()
167254
<li>Third Item</li>
168255
<li>Fourth &amp; Fifth Item</li>
169256
<li>Sixth Item</li>
257+
<li>It's a wonderful day</li>
170258
</ul>
171259
</body>
172260
</html>

0 commit comments

Comments
 (0)