Extension:Page Forms/Testing

This page covers the ways in which the Page Forms code can be tested.

Unit testing with PHPUnit
To run unit tests for the Page Forms extension, install PHPUnit (See Installing PHPUnit) and run the following command from the MediaWiki root directory: php tests/phpunit/phpunit.php extensions/PageForms/tests

The unit tests for Page Forms only cover the following at present:
 * Testing of the tag processing in the formHTML method in the pFFormPrinter class.

Page Forms could benefit from additional unit tests to improve test coverage. To get started with writing tests for Page Forms, see Manual:PHP unit testing.

Front-end testing with Cucumber
Cucumber is a tool (written in Ruby) that lets you do testing of an application's front-end UI.

How to run
To run Cucumber tests for the Page Forms extension follow these steps:

Temporarily: obtain the Cucumber tests equipped SF codebase
This step is necessary until the Cucumber tests have been integrated upstream.

git clone https://github.com/LinuxCompetenceCenter/mediawiki-extensions-SemanticForms.git

Install Firefox
The Cucumber tests require Firefox, and, if run in a VM, ssh forwarding settings (see e.g. for Vagrant) as for the time being they're not headless.

Note: You might need to investigate the correct combination of selenium-webdriver and your version of Firefox, although the newest versions of both should work together.

Install Ruby and Bundler
First, install Ruby 2.2 (including its corresponding DevKit). Then, call the following:

w/extensions/PageForms$ gem install bundler w/extensions/PageForms$ bundle install

Set permissions for the anonymous user
The Cucumber tests require your MediaWiki instance to grant the anonymous user the following permissions:

Create the test form page
If your MediaWiki instance is at "mywiki.com" and your $wgScriptPath is "/w", then in your browser:


 * 1) Log into MediaWiki as user "WikiSysop" (or any other user that has API write permissions).
 * 2) Then go to:

http://mywiki.com/w/extensions/PageForms/tests/browser/features/support/inject_test_meta_pages.php

MediaWiki should now have created the page "Form:Main_Test_Form".

Run the Cucumber tests in Page Forms
w/extensions/PageForms/tests/browser$ bundle exec cucumber -q

Implementation details

 * The test server's loopback addresses are expected to be mapped to the hostname "localhost".
 * The value for $wgScriptPath is "reverse-detected" by the env.rb file.
 * The value for $wgArticlePath is detected by env.rb and inject_test_meta_pages.php.
 * To see the set of Page Forms functionality that is tested, see the files main.feature_part and form_elements.feature_part.
 * To see how the test form is created, see inject_test_meta_pages.php.

Work in progress

 * 1) Add more expectations to be met in terms of what ends up in the templates instantiated.
 * 2) Add an option to run the Cucumber tests headless.
 * 3) Speed up the xpath location processes.
 * 4) Add more form inputs. (See Allowed input types for data types)
 * 5) Have the main test form declaration be injected into the test SMW automatically.
 * 6) Make the tests independent of the user interface language set. Currently only English is supported.