diff --git a/data/etc/apache2/conf-available/mediawiki-freedombox.conf b/data/etc/apache2/conf-available/mediawiki-freedombox.conf
index d5c8207e4..e95c0980f 100644
--- a/data/etc/apache2/conf-available/mediawiki-freedombox.conf
+++ b/data/etc/apache2/conf-available/mediawiki-freedombox.conf
@@ -7,3 +7,15 @@
RewriteRule ^(.*)$ index.php [L]
+
+
+
+ RewriteEngine Off
+
+
+
+
+
+ RewriteEngine Off
+
+
diff --git a/functional_tests/features/mediawiki.feature b/functional_tests/features/mediawiki.feature
index 01f4466d9..3d0f70e0e 100644
--- a/functional_tests/features/mediawiki.feature
+++ b/functional_tests/features/mediawiki.feature
@@ -67,7 +67,13 @@ Scenario: Enabling public registrations disables private mode
And I enable mediawiki public registrations
Then the mediawiki site should allow creating accounts
+# Requires JS
Scenario: Logged in user can see upload files option
Given the mediawiki application is enabled
When I set the mediawiki admin password to whatever123
Then I should see the Upload File option in the side pane when logged in with credentials admin and whatever123
+
+Scenario: Upload images
+ Given the mediawiki application is enabled
+ When I upload an image to mediawiki with credentials admin and whatever123
+ Then there should be 1 uploaded images
diff --git a/functional_tests/step_definitions/site.py b/functional_tests/step_definitions/site.py
index 686b0830a..b97cdca90 100644
--- a/functional_tests/step_definitions/site.py
+++ b/functional_tests/step_definitions/site.py
@@ -35,6 +35,20 @@ def access_application(browser, app_name):
site.access_url(browser, app_name)
+@when(
+ parsers.parse(
+ 'I upload an image to mediawiki with credentials {username:w} and {password:w}'
+ ))
+def upload_image(browser, username, password):
+ site.upload_image_mediawiki(browser, username, password)
+
+
+@then(parsers.parse('there should be {count:d} uploaded images'))
+def uploaded_image_should_be_available(browser, count):
+ num_images = site.get_number_of_uploaded_images_in_mediawiki(browser)
+ assert count == num_images
+
+
@then(
parsers.parse(
'I should be able to login to coquelicot with password {password:w}'))
diff --git a/functional_tests/support/application.py b/functional_tests/support/application.py
index bbd0c456c..46ceab4dd 100644
--- a/functional_tests/support/application.py
+++ b/functional_tests/support/application.py
@@ -91,7 +91,7 @@ def _change_status(browser, app_name, change_status_to='enabled',
checkbox_id = checkbox_id or get_app_checkbox_id(app_name)
checkbox = browser.find_by_id(checkbox_id)
checkbox.check() if change_status_to == 'enabled' else checkbox.uncheck()
- interface.submit(browser, 'form-configuration')
+ interface.submit(browser, form_class='form-configuration')
if app_name in apps_with_loaders:
wait_for_config_update(browser, app_name)
@@ -113,7 +113,7 @@ def select_domain_name(browser, app_name, domain_name):
browser.visit('{}/plinth/apps/{}/setup/'.format(default_url, app_name))
drop_down = browser.find_by_id('id_domain_name')
drop_down.select(domain_name)
- interface.submit(browser, 'form-configuration')
+ interface.submit(browser, form_class='form-configuration')
def configure_shadowsocks(browser):
@@ -121,14 +121,14 @@ def configure_shadowsocks(browser):
browser.visit('{}/plinth/apps/shadowsocks/'.format(default_url))
browser.find_by_id('id_server').fill('some.shadow.tunnel')
browser.find_by_id('id_password').fill('fakepassword')
- interface.submit(browser, 'form-configuration')
+ interface.submit(browser, form_class='form-configuration')
def modify_max_file_size(browser, size):
"""Change the maximum file size of coquelicot to the given value"""
browser.visit('{}/plinth/apps/coquelicot/'.format(default_url))
browser.find_by_id('id_max_file_size').fill(size)
- interface.submit(browser, 'form-configuration')
+ interface.submit(browser, form_class='form-configuration')
def get_max_file_size(browser):
@@ -141,7 +141,7 @@ def modify_upload_password(browser, password):
"""Change the upload password for coquelicot to the given value"""
browser.visit('{}/plinth/apps/coquelicot/'.format(default_url))
browser.find_by_id('id_upload_password').fill(password)
- interface.submit(browser, 'form-configuration')
+ interface.submit(browser, form_class='form-configuration')
# Sharing app helper functions
diff --git a/functional_tests/support/interface.py b/functional_tests/support/interface.py
index ce33f3db6..b28f59230 100644
--- a/functional_tests/support/interface.py
+++ b/functional_tests/support/interface.py
@@ -106,9 +106,11 @@ def create_admin_account(browser, username, password):
submit(browser)
-def submit(browser, form_class=None):
+def submit(browser, element=None, form_class=None):
with wait_for_page_update(browser):
- if form_class:
+ if element:
+ element.click()
+ elif form_class:
browser.find_by_css(
'.{} input[type=submit]'.format(form_class)).click()
else:
diff --git a/functional_tests/support/site.py b/functional_tests/support/site.py
index 7fcc39c2a..9dddd87f5 100644
--- a/functional_tests/support/site.py
+++ b/functional_tests/support/site.py
@@ -15,6 +15,7 @@
# along with this program. If not, see .
#
+import os
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
@@ -84,13 +85,35 @@ def verify_mediawiki_no_anonymous_reads_edits_link(browser):
args=['ca-nstab-special'])
-def login_to_mediawiki_with_credentials(browser, username, password):
+def _login_to_mediawiki(browser, username, password):
browser.visit(config['DEFAULT']['url'] + '/mediawiki')
browser.find_by_id('pt-login').click()
browser.find_by_id('wpName1').fill(username)
browser.find_by_id('wpPassword1').fill(password)
with wait_for_page_update(browser):
browser.find_by_id('wpLoginAttempt').click()
+
+
+def login_to_mediawiki_with_credentials(browser, username, password):
+ _login_to_mediawiki(browser, username, password)
# Had to put it in the same step because sessions don't
# persist between steps
assert eventually(browser.is_element_present_by_id, args=['t-upload'])
+
+
+def upload_image_mediawiki(browser, username, password):
+ """Upload an image to MediaWiki. Idempotent."""
+ browser.visit(config['DEFAULT']['url'] + '/mediawiki')
+ _login_to_mediawiki(browser, username, password)
+
+ # Upload file
+ browser.visit(config['DEFAULT']['url'] + '/mediawiki/Special:Upload')
+ file_path = os.path.realpath(
+ '../static/themes/default/img/freedombox-logo-32px.png')
+ browser.attach_file('wpUploadFile', file_path)
+ interface.submit(browser, element=browser.find_by_name('wpUpload')[0])
+
+
+def get_number_of_uploaded_images_in_mediawiki(browser):
+ browser.visit(config['DEFAULT']['url'] + '/mediawiki/Special:ListFiles')
+ return len(browser.find_by_css('.TablePager_col_img_timestamp'))
diff --git a/plinth/modules/mediawiki/__init__.py b/plinth/modules/mediawiki/__init__.py
index 88d9bf37d..879e351e8 100644
--- a/plinth/modules/mediawiki/__init__.py
+++ b/plinth/modules/mediawiki/__init__.py
@@ -26,7 +26,7 @@ from plinth.menu import main_menu
from .manifest import backup, clients
-version = 4
+version = 5
managed_packages = ['mediawiki', 'imagemagick', 'php-sqlite3']
@@ -59,8 +59,7 @@ clients = clients
def init():
"""Intialize the module."""
menu = main_menu.get('apps')
- menu.add_urlname(name, 'mediawiki', 'mediawiki:index',
- short_description)
+ menu.add_urlname(name, 'mediawiki', 'mediawiki:index', short_description)
global service
setup_helper = globals()['setup_helper']
@@ -96,9 +95,9 @@ def setup(helper, old_version=None):
def add_shortcut():
"""Helper method to add a shortcut to the frontpage."""
- frontpage.add_shortcut('mediawiki', name,
- short_description=short_description,
- url='/mediawiki', login_required=is_private_mode_enabled())
+ frontpage.add_shortcut(
+ 'mediawiki', name, short_description=short_description,
+ url='/mediawiki', login_required=is_private_mode_enabled())
def is_enabled():
@@ -137,6 +136,5 @@ def is_public_registration_enabled():
def is_private_mode_enabled():
""" Return wheter private mode is enabled or disabled"""
- output = actions.superuser_run('mediawiki',
- ['private-mode', 'status'])
+ output = actions.superuser_run('mediawiki', ['private-mode', 'status'])
return output.strip() == 'enabled'