Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ticket/11465] Use extension finder when adding extensions' acp modules #1313

Merged
merged 12 commits into from May 12, 2013

Conversation

marc1706
Copy link
Member

The method acp_modules::get_module_infos() needs to use the extension
finder whenever it is looking for a module's info file. While
transitioning to the new extension system, only the initial search for all
module info files was changed to the new system. Due to this it is not
possible to add an extension's acp/mcp/ucp module manually in the ACP.
This patch will always use the extension finder for the acp module's info
files and therefore properly find the needed file. Additionally, the code
has been cleaned up a little bit.

It's missing some tests but I'm currently not sure how we'd be able to achieve that. I'm pretty sure that it's not possible to add a functional test with an extension that is inside the tests folder, or is it?

Ticket: http://tracker.phpbb.com/browse/PHPBB3-11465

PHPBB3-11465

The method acp_modules::get_module_infos() needs to use the extension
finder whenever it is looking for a module's info file. While
transitioning to the new extension system, only the initial search for all
module info files was changed to the new system. Due to this it is not
possible to add an extension's acp/mcp/ucp module manually in the ACP.
This patch will always use the extension finder for the acp module's info
files and therefore properly find the needed file. Additionally, the code
has been cleaned up a little bit.

PHPBB3-11465
@EXreaction
Copy link
Contributor

Seeing as there were two other bugs just fixed in this code
http://tracker.phpbb.com/browse/PHPBB3-11371
http://tracker.phpbb.com/browse/PHPBB3-11395

I think we ought to have some unit tests for this function.

@marc1706
Copy link
Member Author

I'm currently tryingt to add unit tests for that function but I'm really having trouble getting an acp module to work from unit tests.

@EXreaction
Copy link
Contributor

Don't try to make functional tests, just unit test the function.

The tests add 3 different modules. One acp module that should be found
(acp/a_module), one acp module that should not be found (acp/fail_module),
and one mcp module that should work again (mcp/a_module). The modules'
info files had to be included as they were not auto-loaded for some
reason.
There are several test stages. First of, it is tested if the correct mcp
and acp module is returned. Afterwards, the proper loading of specified
modules is tested. One with an existing module and one with a not existing
module. Finally, the test concludes with trying to get the module info of
not existing ucp modules. Other classes like foobar would have also worked
for that check but I decided to use the ucp type of class as that is the
one type missing from the added test modules.

PHPBB3-11465
@marc1706
Copy link
Member Author

Done. :D

{
// the modules' info files needs to be included before the test for
// some reason ...
require_once dirname(__FILE__) . '/ext/foo/acp/a_info.php';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

requires should be at the top of the file (see other tests)

@naderman
Copy link
Sponsor Member

Please add another unit test that checks that the old style module files are still found correctly.

@marc1706
Copy link
Member Author

marc1706 commented Apr 4, 2013

Will do.

@nickvergessen
Copy link
Contributor

Tests pass now, was unable to get the "segmentation fault" away

@@ -0,0 +1,16 @@
<?php

class phpbb_ext_foo_acp_foo_info
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

File name is "fail" rather than "foo". If this is intentional, comment should be added explaining why.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is intentional. I'll add a comment to the file.

@marc1706
Copy link
Member Author

I have added some more commits that should explain the tests properly.

* Due to the mismatch between the class name and the file name, this module
* file shouldn't be found by the extension finder
*/
class phpbb_ext_foo_acp_fail_module
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The class name matches the file name here, so you should modify this the class name and the file name of the info file to the

@EXreaction
Copy link
Contributor

Please expand the unit tests a bit to test that the parameters to get_module_infos are all returning expected output, i.e. add a test for get_module_infos('phpbb_ext_foo_acp_a_module') and make sure it returns the correct result and test other combinations of input.

If all options are tested I'm good with merging this.

The possibilities of the first argument have already been covered
previously. The second argument will be covered with an entry that
should exist, an incorrect entry, and the default false entry that
should use the previously set module class. Unfortunately, the third
argument doesn't have an effect in the tests, as the mocked extension
manager will not properly handle enabled/disabled extensions.

PHPBB3-11465
@marc1706
Copy link
Member Author

@EXreaction The added tests should cover all the bases. The third parameter to the get_module_infos() function unfortunately doesn't do anything in the unit tests as the extension manager doesn't seem to support enabled/disabled extensions. If it would, one could add a disabled extension and check if changing the third parameter to true will cause it to all display a disabled extension's module info files.

@marc1706
Copy link
Member Author

You also might want to restart the tests as travis seems to be going nuts today.

@EXreaction
Copy link
Contributor

The mock extension manager inherits from the extension manager from what I'm seeing. To test the third parameter, you'd just put an extension in the ext/ directory, but not enable it, then sending false as the third parameter should not return it, while true should.

The reason that parameter exists is for the extension installation process, extensions are not enabled until they are completely installed, but to install them we need to find the modules included, so we need to make sure this works properly as well.

…_infos()

This will now also enable us to test the $use_all_available parameter of
get_module_infos(), which will not only return the module infos for enabled
extensions but also those from disabled extensions.

PHPBB3-11465
@marc1706
Copy link
Member Author

@EXreaction better? :D

…al test

The ACP function test checks the amount of disabled extensions. Due to
the added disabled extension for the tests of the acp_modules method
get_module_infos(), this needed to be increased from 4 to 5.

PHPBB3-11465
@marc1706
Copy link
Member Author

Failing functional test should be fixed now ...

@EXreaction EXreaction merged commit bd6cebf into phpbb:develop May 12, 2013
@EXreaction
Copy link
Contributor

This looks great now, thanks!

@marc1706 marc1706 deleted the ticket/11465 branch January 23, 2015 23:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
5 participants