Extension:Page Forms/Testing

Cucumber testing
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 Semantic 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

 * Install Ruby 2.2 (including its corresponding DevKit)
 * Install Bundler

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

$wgGroupPermissions['*']['read'] = true; $wgGroupPermissions['*']['edit'] = true; $wgGroupPermissions['*']['createpage'] = true;

Install the main test form page
For example, if your MediaWiki instance runs on a virtual machine at "http://localhost:20011" 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://localhost:20011/w/extensions/SemanticForms/tests/browser/features/support/inject_test_meta_pages.php

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

Install necessary Ruby gems
w/extensions/SemanticForms$ gem install bundler w/extensions/SemanticForms$ bundle install

Run the Cucumber tests in Semantic Forms
w/extensions/SemanticForms/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 also detected by env.rb, which queries the article path through API:Siteinfo.
 * To see the set of Semantic 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 and Extension:Semantic_Forms_Inputs)
 * 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.