Skip to content

Commit 3bda7cd

Browse files
committed
Make abstract ShortcodeTest more comfortable
- boot kernel and create client in setUp(), storing client in protected variable - add convenience method getRenderedExampleHtml - allow and encourage arrays for passing custom parameters for readability of one's tests - use the above to shorten code example in README
1 parent aeed96c commit 3bda7cd

2 files changed

Lines changed: 79 additions & 23 deletions

File tree

README.md

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -248,12 +248,24 @@ final class ImageTest extends ShortcodeTest
248248
/** @test */
249249
public function teaser_gets_rendered(): void
250250
{
251-
// without $customParameters, crawlRenderedExample() will crawl a page rendering the example configured in the
252-
// shortcode tag, in this case "image url=https://upload.wikimedia.org/wikipedia/en/f/f7/RickRoll.png"
253-
$crawler = $this->crawlRenderedExample();
251+
// without $customParameters, getRenderedExampleHtml() will get a rendering of the example configured in the
252+
// shortcode tag, in this case "image url=https://upload.wikimedia.org/wikipedia/en/f/f7/RickRoll.png"
253+
$this->assertStringContainsString(
254+
'<img src="https://upload.wikimedia.org/wikipedia/en/f/f7/RickRoll.png" />',
255+
$this->getRenderedExampleHtml()
256+
);
257+
}
254258

255-
$this->assertCount(1, $crawler->filter('.shortcode-container'));
256-
$this->assertCount(1, $crawler->filter('.shortcode-container img[src="https://upload.wikimedia.org/wikipedia/en/f/f7/RickRoll.png"]'));
259+
/** @test */
260+
public function teaser_with_custom_parameters(): void
261+
{
262+
// Pass custom parameters as an array
263+
$this->assertStringContainsString(
264+
'<img src="custom-image-url" />',
265+
$this->getRenderedExampleHtml([
266+
'url' => 'custom-image-url',
267+
])
268+
);
257269
}
258270

259271
/** @test */

Tests/Functional/ShortcodeTest.php

Lines changed: 62 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@
33
namespace Webfactory\ShortcodeBundle\Tests\Functional;
44

55
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
6+
use Symfony\Component\BrowserKit\Client;
67
use Symfony\Component\DomCrawler\Crawler;
78

89
/**
910
* Abstract template for common shortcode tests.
1011
*/
1112
abstract class ShortcodeTest extends WebTestCase
1213
{
14+
/** @var Client */
15+
protected $client;
16+
1317
/**
1418
* @return string name of the shortcode to test.
1519
*/
@@ -24,15 +28,30 @@ protected function setUp(): void
2428
'Albeit being a '.__CLASS__.', '.\get_called_class().' does not define a shortcode to test.'
2529
);
2630
}
31+
32+
static::bootKernel();
33+
$this->client = static::createClient();
2734
}
2835

29-
protected function crawlRenderedExample(string $customParameters = null): Crawler
36+
/**
37+
* @param array|string|null $customParameters use of strings is deprecated, use array instead.
38+
* @return Crawler
39+
*/
40+
protected function getRenderedExampleHtml(?array $customParameters = null): string
41+
{
42+
return $this->crawlRenderedExample($customParameters)->html();
43+
}
44+
45+
/**
46+
* @param array|string|null $customParameters use of strings is deprecated, use array instead.
47+
* @return Crawler
48+
*/
49+
protected function crawlRenderedExample(/*array*/ $customParameters = null): Crawler
3050
{
3151
$urlWithRenderedExample = $this->getUrlWithRenderedExample($customParameters);
3252

33-
$client = static::createClient();
34-
$crawlerOnRenderedExamplePage = $client->request('GET', $urlWithRenderedExample);
35-
$this->assertEquals(200, $client->getResponse()->getStatusCode());
53+
$crawlerOnRenderedExamplePage = $this->client->request('GET', $urlWithRenderedExample);
54+
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
3655

3756
$crawlerOnRenderedExample = $crawlerOnRenderedExamplePage->filter('#rendered-example');
3857
if (0 === $crawlerOnRenderedExample->count()) {
@@ -44,27 +63,52 @@ protected function crawlRenderedExample(string $customParameters = null): Crawle
4463
return $crawlerOnRenderedExample;
4564
}
4665

47-
protected function assertHttpStatusCodeWhenCrawlingRenderedExample(int $expectedStatusCode, string $customParameters = null): Crawler
48-
{
66+
/**
67+
* @param int $expectedStatusCode
68+
* @param array|string|null $customParameters use of strings is deprecated, use array instead.
69+
* @return Crawler
70+
*/
71+
protected function assertHttpStatusCodeWhenCrawlingRenderedExample(
72+
int $expectedStatusCode,
73+
/*array*/ $customParameters = null
74+
): Crawler {
4975
$urlWithRenderedExample = $this->getUrlWithRenderedExample($customParameters);
5076

51-
$client = static::createClient();
52-
$crawlerOnRenderedExamplePage = $client->request('GET', $urlWithRenderedExample);
53-
$this->assertEquals($expectedStatusCode, $client->getResponse()->getStatusCode());
77+
$crawlerOnRenderedExamplePage = $this->client->request('GET', $urlWithRenderedExample);
78+
$this->assertEquals($expectedStatusCode, $this->client->getResponse()->getStatusCode());
5479
}
5580

56-
protected function getUrlWithRenderedExample(string $customParameters = null): string
81+
/**
82+
* @param array|string|null $customParameters use of strings is deprecated, use array instead.
83+
* @return Crawler
84+
*/
85+
private function getUrlWithRenderedExample(/*array*/ $customParameters = null): string
5786
{
58-
static::bootKernel();
59-
6087
$urlParameters = ['shortcode' => $this->getShortcodeToTest()];
61-
if ($customParameters) {
62-
$urlParameters['customParameters'] = $customParameters;
88+
89+
$customParametersAsString = $this->getCustomParametersAsString($customParameters);
90+
if ($customParametersAsString) {
91+
$urlParameters['customParameters'] = $customParametersAsString;
92+
}
93+
94+
return static::$container->get('router')->generate('webfactory.shortcode.guide-detail', $urlParameters);
95+
}
96+
97+
private function getCustomParametersAsString($customParametersAsMixed): ?string
98+
{
99+
if (is_string($customParametersAsMixed)) {
100+
return $customParametersAsMixed;
101+
}
102+
103+
if (is_array($customParametersAsMixed)) {
104+
$customParametersAsString = '';
105+
foreach ($customParametersAsMixed as $name => $value) {
106+
$customParametersAsString .= $name .'='.$value.' ';
107+
}
108+
109+
return $customParametersAsString;
63110
}
64111

65-
return static::$kernel
66-
->getContainer()
67-
->get('router')
68-
->generate('webfactory.shortcode.guide-detail', $urlParameters);
112+
return null;
69113
}
70114
}

0 commit comments

Comments
 (0)