diff options
| author | Joas Schilling <nickvergessen@gmx.de> | 2012-12-20 22:51:38 +0100 |
|---|---|---|
| committer | Joas Schilling <nickvergessen@gmx.de> | 2012-12-20 22:51:38 +0100 |
| commit | e34b8ed094affdaedbf457406c98b29c125e5d8b (patch) | |
| tree | 7cc51ba4ead71cb48a76747770edf622f8fe85f9 /tests/functional/extension_controller_test.php | |
| parent | 70a409d4b5411bf9e50a70d1cf3855b686304bbe (diff) | |
| parent | d11829567603e6ac37170b919efc4659b2be20cb (diff) | |
| download | forums-e34b8ed094affdaedbf457406c98b29c125e5d8b.tar forums-e34b8ed094affdaedbf457406c98b29c125e5d8b.tar.gz forums-e34b8ed094affdaedbf457406c98b29c125e5d8b.tar.bz2 forums-e34b8ed094affdaedbf457406c98b29c125e5d8b.tar.xz forums-e34b8ed094affdaedbf457406c98b29c125e5d8b.zip | |
Merge branch 'develop' of https://github.com/phpbb/phpbb3 into feature/softdelete-1-permission-rebase
* 'develop' of https://github.com/phpbb/phpbb3: (544 commits)
[feature/events] Fix improperly named event in documentation
[feature/events] Fix alphabetization of events
[feature/events] Put events in alphabetical order
[feature/events] Make EVENTS.md lowercase
[ticket/11285] Use more granularity in dependency checks in compress test
[ticket/10880] The m_approve permisson no longer implies f_noapprove.
[ticket/10803] Show failure message until user dismisses it
[ticket/10954] Add missing semi-colon
[ticket/10954] Make sure to mark subforums unread and add small fixes
[feature/events] Use ` to escape HTML tags in markdown
[feature/events] Remove HTML tags from markdown so they don't get parsed
[ticket/10954] Miscellaneous coding fixes
[feature/events] Remove extraneous space
[feature/events] Add markdown template event documentation file
[feature/events] forumlist_body_last_post_title_after -> _prepend (subsilver2)
[feature/events] Fix overall_footer_end -> overall_footer_after (subsilver2)
[feature/events] Fix typo in event name
[ticket/10763] Use self when calling get_extension() in filespec class
[feature/events] Fix more subsilver2 events
[feature/events] Fix some subsilver2 events
...
Conflicts:
phpBB/install/database_update.php
phpBB/posting.php
Diffstat (limited to 'tests/functional/extension_controller_test.php')
| -rw-r--r-- | tests/functional/extension_controller_test.php | 139 |
1 files changed, 73 insertions, 66 deletions
diff --git a/tests/functional/extension_controller_test.php b/tests/functional/extension_controller_test.php index e9409d9d3f..f28b321942 100644 --- a/tests/functional/extension_controller_test.php +++ b/tests/functional/extension_controller_test.php @@ -13,6 +13,14 @@ class phpbb_functional_extension_controller_test extends phpbb_functional_test_case { protected $phpbb_extension_manager; + + static protected $fixtures = array( + 'foo/bar/config/routing.yml', + 'foo/bar/config/services.yml', + 'foo/bar/controller/controller.php', + 'foo/bar/styles/prosilver/template/foo_bar_body.html', + ); + /** * This should only be called once before the tests are run. * This is used to copy the fixtures to the phpBB install @@ -22,15 +30,11 @@ class phpbb_functional_extension_controller_test extends phpbb_functional_test_c global $phpbb_root_path; parent::setUpBeforeClass(); - // these directories need to be created before the files can be copied $directories = array( - $phpbb_root_path . 'ext/error/class/', - $phpbb_root_path . 'ext/error/classtype/', - $phpbb_root_path . 'ext/error/disabled/', $phpbb_root_path . 'ext/foo/bar/', - $phpbb_root_path . 'ext/foo/bar/styles/prosilver/template/', - $phpbb_root_path . 'ext/foobar/', - $phpbb_root_path . 'ext/foobar/styles/prosilver/template/', + $phpbb_root_path . 'ext/foo/bar/config/', + $phpbb_root_path . 'ext/foo/bar/controller/', + $phpbb_root_path . 'ext/foo/bar/styles/prosilver/template', ); foreach ($directories as $dir) @@ -41,28 +45,34 @@ class phpbb_functional_extension_controller_test extends phpbb_functional_test_c } } - $fixtures = array( - 'error/class/controller.php', - 'error/class/ext.php', - 'error/classtype/controller.php', - 'error/classtype/ext.php', - 'error/disabled/controller.php', - 'error/disabled/ext.php', - 'foo/bar/controller.php', - 'foo/bar/ext.php', - 'foo/bar/styles/prosilver/template/foobar_body.html', - 'foobar/controller.php', - 'foobar/ext.php', - 'foobar/styles/prosilver/template/foobar_body.html', - ); + foreach (self::$fixtures as $fixture) + { + copy( + "tests/functional/fixtures/ext/$fixture", + "{$phpbb_root_path}ext/$fixture"); + } + } - foreach ($fixtures as $fixture) + /** + * This should only be called once after the tests are run. + * This is used to remove the fixtures from the phpBB install + */ + static public function tearDownAfterClass() + { + global $phpbb_root_path; + + foreach (self::$fixtures as $fixture) { - if (!copy("tests/functional/fixtures/ext/$fixture", "{$phpbb_root_path}ext/$fixture")) - { - echo 'Could not copy file ' . $fixture; - } + unlink("{$phpbb_root_path}ext/$fixture"); } + + rmdir("{$phpbb_root_path}ext/foo/bar/config"); + rmdir("{$phpbb_root_path}ext/foo/bar/controller"); + rmdir("{$phpbb_root_path}ext/foo/bar/styles/prosilver/template"); + rmdir("{$phpbb_root_path}ext/foo/bar/styles/prosilver"); + rmdir("{$phpbb_root_path}ext/foo/bar/styles"); + rmdir("{$phpbb_root_path}ext/foo/bar"); + rmdir("{$phpbb_root_path}ext/foo"); } public function setUp() @@ -75,70 +85,67 @@ class phpbb_functional_extension_controller_test extends phpbb_functional_test_c } /** - * Check an extension at ./ext/foobar/ which should have the class - * phpbb_ext_foobar_controller - */ - public function test_foobar() - { - $this->phpbb_extension_manager->enable('foobar'); - $crawler = $this->request('GET', 'index.php?ext=foobar'); - $this->assertContains("This is for testing purposes.", $crawler->filter('#page-body')->text()); - $this->phpbb_extension_manager->purge('foobar'); - } - - /** - * Check an extension at ./ext/foo/bar/ which should have the class - * phpbb_ext_foo_bar_controller + * Check a controller for extension foo/bar. */ public function test_foo_bar() { $this->phpbb_extension_manager->enable('foo/bar'); - $crawler = $this->request('GET', 'index.php?ext=foo/bar'); - $this->assertContains("This is for testing purposes.", $crawler->filter('#page-body')->text()); + $crawler = $this->request('GET', 'app.php?controller=foo/bar'); + $this->assert_response_success(); + $this->assertContains("foo/bar controller handle() method", $crawler->filter('body')->text()); $this->phpbb_extension_manager->purge('foo/bar'); } /** - * Check the error produced by extension at ./ext/error/class which has class - * phpbb_ext_foobar_controller + * Check the output of a controller using the template system */ - public function test_error_class_name() + public function test_controller_with_template() { - $this->phpbb_extension_manager->enable('error/class'); - $crawler = $this->request('GET', 'index.php?ext=error/class'); - $this->assertContains("The extension error/class is missing a controller class and cannot be accessed through the front-end.", $crawler->filter('#message')->text()); - $this->phpbb_extension_manager->purge('error/class'); + $this->phpbb_extension_manager->enable('foo/bar'); + $crawler = $this->request('GET', 'app.php?controller=foo/template'); + $this->assert_response_success(); + $this->assertContains("I am a variable", $crawler->filter('#content')->text()); + $this->phpbb_extension_manager->purge('foo/bar'); } /** - * Check the error produced by extension at ./ext/error/classtype which has class - * phpbb_ext_error_classtype_controller but does not implement phpbb_extension_controller_interface + * Check the error produced by calling a controller without a required + * argument. */ - public function test_error_class_type() + public function test_missing_argument() { - $this->phpbb_extension_manager->enable('error/classtype'); - $crawler = $this->request('GET', 'index.php?ext=error/classtype'); - $this->assertContains("The extension controller class phpbb_ext_error_classtype_controller is not an instance of the phpbb_extension_controller_interface.", $crawler->filter('#message')->text()); - $this->phpbb_extension_manager->purge('error/classtype'); + $this->phpbb_extension_manager->enable('foo/bar'); + $crawler = $this->request('GET', 'app.php?controller=foo/baz'); + $this->assertEquals(500, $this->client->getResponse()->getStatus()); + $this->assertContains('Missing value for argument #1: test in class phpbb_ext_foo_bar_controller:baz', $crawler->filter('body')->text()); + $this->phpbb_extension_manager->purge('foo/bar'); } /** - * Check the error produced by extension at ./ext/error/disabled that is (obviously) - * a disabled extension + * Check the status code resulting from an exception thrown by a controller */ - public function test_error_ext_disabled() + public function test_exception_should_result_in_500_status_code() { - $crawler = $this->request('GET', 'index.php?ext=error/disabled'); - $this->assertContains("The extension error/disabled is not enabled", $crawler->filter('#message')->text()); + $this->phpbb_extension_manager->enable('foo/bar'); + $crawler = $this->request('GET', 'app.php?controller=foo/exception'); + $this->assertEquals(500, $this->client->getResponse()->getStatus()); + $this->assertContains('Exception thrown from foo/exception route', $crawler->filter('body')->text()); + $this->phpbb_extension_manager->purge('foo/bar'); } /** - * Check the error produced by extension at ./ext/error/404 that is (obviously) - * not existant + * Check the error produced by extension at ./ext/does/not/exist. + * + * If an extension is disabled, its routes are not loaded. Because we + * are not looking for a controller based on a specified extension, + * we don't know the difference between a route in a disabled + * extension and a route that is not defined anyway; it is the same + * error message. */ - public function test_error_ext_missing() + public function test_error_ext_disabled_or_404() { - $crawler = $this->request('GET', 'index.php?ext=error/404'); - $this->assertContains("The extension error/404 does not exist.", $crawler->filter('#message')->text()); + $crawler = $this->request('GET', 'app.php?controller=does/not/exist'); + $this->assertEquals(404, $this->client->getResponse()->getStatus()); + $this->assertContains('No route found for "GET /does/not/exist"', $crawler->filter('body')->text()); } } |
