Skip to content

Commit ae91c6e

Browse files
committed
Merge pull request #217 from symfony-cmf/auto_admin_test
Added automated 200 testing for admin
2 parents 9e80fd3 + 20815e6 commit ae91c6e

File tree

1 file changed

+124
-28
lines changed

1 file changed

+124
-28
lines changed

app/tests/AdminTest.php

Lines changed: 124 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,50 +2,146 @@
22

33
namespace Sandbox;
44

5+
use Symfony\Component\Routing\Exception\MissingMandatoryParametersException;
6+
57
class AdminTest extends WebTestCase
68
{
7-
public function testList()
8-
{
9-
$client = $this->createClientAuthenticated();
9+
protected $pool;
10+
protected $router;
1011

11-
$client->request('GET', '/en/admin/cmf/menu/menunode/list');
12+
protected $verifiablePatterns = array(
13+
'/cmf/content/staticcontent/list',
14+
'/cmf/content/staticcontent/create',
15+
'/cmf/content/staticcontent/{id}/edit',
16+
'/cmf/content/staticcontent/{id}/delete',
17+
'/cmf/block/simpleblock/list',
18+
'/cmf/block/simpleblock/create',
19+
'/cmf/block/simpleblock/{id}/edit',
20+
'/cmf/block/simpleblock/{id}/delete',
21+
'/cmf/block/containerblock/list',
22+
'/cmf/block/containerblock/create',
23+
'/cmf/block/containerblock/{id}/edit',
24+
'/cmf/block/containerblock/{id}/delete',
25+
'/cmf/block/referenceblock/list',
26+
'/cmf/block/referenceblock/create',
27+
'/cmf/block/referenceblock/{id}/edit',
28+
'/cmf/block/referenceblock/{id}/delete',
29+
'/cmf/block/actionblock/list',
30+
'/cmf/block/actionblock/create',
31+
'/cmf/block/actionblock/{id}/edit',
32+
'/cmf/block/actionblock/{id}/delete',
33+
'/cmf/block/imagine/list',
34+
'/cmf/block/imagine/create',
35+
'/cmf/routing/route/list',
36+
'/cmf/routing/route/create',
37+
'/cmf/routing/route/{id}/edit',
38+
'/cmf/routing/route/{id}/delete',
39+
'/cmf/routing/redirectroute/list',
40+
'/cmf/routing/redirectroute/create',
41+
'/cmf/routing/redirectroute/{id}/edit',
42+
'/cmf/routing/redirectroute/{id}/delete',
43+
'/cmf/menu/menu/list',
44+
'/cmf/menu/menu/create',
45+
'/cmf/menu/menu/{id}/edit',
46+
'/cmf/menu/menu/{id}/delete',
47+
'/cmf/menu/menunode/list',
48+
'/cmf/menu/menunode/create',
49+
'/cmf/menu/menunode/{id}/edit',
50+
'/cmf/menu/menunode/{id}/delete',
51+
'/cmf/blog/blog/list',
52+
'/cmf/blog/blog/create',
53+
'/cmf/blog/blog/{id}/edit',
54+
'/cmf/blog/blog/{id}/delete',
55+
'/cmf/blog/post/list',
56+
'/cmf/blog/post/create',
57+
'/cmf/blog/post/{id}/edit',
58+
'/cmf/blog/post/{id}/delete',
59+
'/cmf/simplecms/page/list',
60+
'/cmf/simplecms/page/create',
61+
'/cmf/simplecms/page/{id}/edit',
62+
'/cmf/simplecms/page/{id}/delete',
63+
);
1264

13-
$response = $client->getResponse();
14-
$this->assertEquals(200, $response->getStatusCode());
15-
$this->assertContains('Menus', $response->getContent());
65+
protected $testedPatterns = array();
1666

17-
$menuCount = $this->isSearchSupported() ? 17 : 16;
18-
$this->assertContains("$menuCount results", $response->getContent());
19-
$this->assertContains('Explicit template', $response->getContent());
67+
public function setUp()
68+
{
69+
parent::setUp();
70+
$this->pool = $this->getContainer()->get('sonata.admin.pool');
71+
$this->router = $this->getContainer()->get('router');
72+
$this->client = $this->createClientAuthenticated();
73+
$this->dm = $this->getContainer()->get('doctrine_phpcr.odm.default_document_manager');
2074
}
2175

22-
public function testCreate()
76+
public function testAdmin()
2377
{
24-
$client = $this->createClientAuthenticated();
78+
$adminGroups = $this->pool->getAdminGroups();
79+
$admins = array();
2580

26-
$crawler = $client->request('GET', '/en/admin/cmf/menu/menunode/create');
81+
foreach (array_keys($adminGroups) as $adminName) {
82+
$admins = array_merge($admins, $this->pool->getAdminsByGroup($adminName));
83+
}
2784

28-
$response = $client->getResponse();
29-
$this->assertEquals(200, $response->getStatusCode());
30-
$this->assertContains('Create', $response->getContent());
85+
foreach ($admins as $admin) {
86+
$this->doTestReachableAdminRoutes($admin);
87+
}
3188

32-
$this->assertCount(11, $crawler->filter('.control-group'));
33-
$this->assertContains('Parent', $crawler->filter('.control-group')->first()->children()->first()->text());
34-
$this->assertContains(' *', $crawler->filter('.control-group')->first()->children()->first()->text());
89+
// verify that we have tested everything we wanted to test.
90+
$this->assertEquals($this->verifiablePatterns, $this->testedPatterns);
3591
}
3692

37-
public function testEdit()
93+
protected function doTestReachableAdminRoutes($admin)
3894
{
39-
$client = $this->createClientAuthenticated();
95+
$routeCollection = $admin->getRoutes();
96+
$class = $admin->getClass();
97+
$routeParams = array('_locale' => 'en');
98+
99+
foreach ($routeCollection->getElements() as $route) {
100+
$requirements = $route->getRequirements();
101+
102+
// fix this one later
103+
if (strpos($route->getPattern(), 'export')) {
104+
continue;
105+
}
106+
107+
// these don't all work atm
108+
if (strpos($route->getPattern(), 'show')) {
109+
continue;
110+
}
111+
112+
// do not test POST routes
113+
if (isset($requirements['_method'])) {
114+
if ($requirements['_method'] != 'GET') {
115+
continue;
116+
}
117+
}
118+
119+
// if an ID is required, try and find a document to test
120+
if (isset($requirements['id'])) {
121+
if ($document = $this->dm->getRepository($class)->findOneBy(array())) {
122+
$node = $this->dm->getNodeForDocument($document);
123+
$routeParams['id'] = $node->getPath();
124+
} else {
125+
// we should throw an exception here maybe and fix the missing fixtures
126+
}
127+
}
128+
129+
try {
130+
$url = $this->router->generate($route->getDefault('_sonata_name'), $routeParams);
131+
} catch (MissingMandatoryParametersException $e) {
132+
// do not try and load pages with parameters, e.g. edit, show, etc.
133+
continue;
134+
}
40135

41-
$crawler = $client->request('GET', '/en/admin/cmf/menu/menunode/cms/menu/main/demo-item/external-item/edit');
136+
$crawler = $this->client->request('GET', $url);
137+
$res = $this->client->getResponse();
138+
$statusCode = $res->getStatusCode();
42139

43-
$response = $client->getResponse();
44-
$this->assertEquals(200, $response->getStatusCode());
45-
$this->assertContains('Edit "external-item"', $response->getContent());
140+
$this->assertEquals(200, $statusCode, sprintf(
141+
'URL %s returns 200 OK HTTP Code', $url
142+
));
46143

47-
$this->assertCount(11, $crawler->filter('.control-group'));
48-
$this->assertContains('Parent', $crawler->filter('.control-group')->first()->children()->first()->text());
49-
$this->assertContains(' *', $crawler->filter('.control-group')->first()->children()->first()->text());
144+
$this->testedPatterns[] = $route->getPattern();
145+
}
50146
}
51147
}

0 commit comments

Comments
 (0)