def _change_status(browser, app_name, change_status_to='enabled'): interface.nav_to_module(browser, get_app_module(app_name)) checkbox = browser.find_by_id(get_app_checkbox_id(app_name)) checkbox.check() if change_status_to == 'enabled' else checkbox.uncheck() interface.submit(browser, 'form-configuration') if app_name in apps_with_loaders: wait_for_config_update(browser, app_name)
def make_share_public(browser, name): """Make share publicly accessible.""" row = get_share(browser, name) with wait_for_page_update(browser): row.find_by_css('.share-edit')[0].click() browser.find_by_id('id_sharing-is_public').check() interface.submit(browser)
def add_share(browser, name, path, group): """Add a share in sharing app.""" browser.visit('{}/plinth/apps/sharing/add/'.format(default_url)) browser.fill('sharing-name', name) browser.fill('sharing-path', path) browser.find_by_css( '#id_sharing-groups input[value="{}"]'.format(group)).check() submit(browser)
def gitweb_delete_repo(browser, repo, ignore_missing=False): """Delete repository.""" interface.nav_to_module(browser, 'gitweb') delete_link = browser.find_link_by_href( '/plinth/apps/gitweb/{}/delete/'.format(repo)) if delete_link or not ignore_missing: delete_link.first.click() submit(browser)
def _change_status(browser, app_name, checkbox_id, change_status_to='enabled'): """Change checkbox status.""" checkbox = browser.find_by_id(checkbox_id) checkbox.check() if change_status_to == 'enabled' else checkbox.uncheck() interface.submit(browser, form_class='form-configuration') if app_name in apps_with_loaders: wait_for_config_update(browser, app_name)
def upload_file_to_coquelicot(browser, file_path, password): """Upload a local file from disk to coquelicot.""" verify_coquelicot_upload_password(browser, password) browser.attach_file('file', file_path) interface.submit(browser) assert eventually(browser.is_element_present_by_css, args=['#content .url']) url_textarea = browser.find_by_css('#content .url textarea').first return url_textarea.value
def openvpn_setup(browser): """Setup the OpenVPN application after installation.""" interface.nav_to_module(browser, 'openvpn') setup_form = browser.find_by_css('.form-setup') if not setup_form: return submit(browser, form_class='form-setup') wait_for_config_update(browser, 'openvpn')
def tahoe_add_introducer(browser, domain): """Add a new introducer into tahoe-lafs.""" interface.nav_to_module(browser, 'tahoe') furl = 'pb://ewe4zdz6kxn7xhuvc7izj2da2gpbgeir@tcp:{}:3456/' \ 'fko4ivfwgqvybppwar3uehkx6spaaou7'.format(domain) browser.fill('pet_name', 'testintroducer') browser.fill('furl', furl) submit(browser, form_class='form-add-introducer')
def gitweb_set_repo_access(browser, repo, access): """Set repository as public or private.""" interface.nav_to_module(browser, 'gitweb') browser.find_link_by_href( '/plinth/apps/gitweb/{}/edit/'.format(repo)).first.click() if access == 'private': browser.find_by_id('id_gitweb-is_private').check() else: browser.find_by_id('id_gitweb-is_private').uncheck() submit(browser)
def edit_share(browser, old_name, new_name, path, group): """Edit a share in sharing app.""" row = get_share(browser, old_name) with wait_for_page_update(browser): row.find_by_css('.share-edit')[0].click() browser.fill('sharing-name', new_name) browser.fill('sharing-path', path) browser.find_by_css('#id_sharing-groups input').uncheck() browser.find_by_css( '#id_sharing-groups input[value="{}"]'.format(group)).check() submit(browser)
def upload_image_mediawiki(browser, username, password, image): """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 = pathlib.Path(__file__).parent file_path /= '../../static/themes/default/img/' + image browser.attach_file('wpUploadFile', str(file_path.resolve())) interface.submit(browser, element=browser.find_by_name('wpUpload')[0])
def ikiwiki_create_wiki_if_needed(browser): """Create wiki if it does not exist.""" interface.nav_to_module(browser, 'ikiwiki') wiki = browser.find_link_by_href('/ikiwiki/wiki') if not wiki: browser.find_link_by_href('/plinth/apps/ikiwiki/create/').first.click() browser.find_by_id('id_ikiwiki-name').fill('wiki') browser.find_by_id('id_ikiwiki-admin_name').fill( config['DEFAULT']['username']) browser.find_by_id('id_ikiwiki-admin_password').fill( config['DEFAULT']['password']) submit(browser)
def gitweb_create_repo(browser, repo, access=None, ok_if_exists=False): """Create repository.""" if not gitweb_repo_exists(browser, repo, access): gitweb_delete_repo(browser, repo, ignore_missing=True) browser.find_link_by_href('/plinth/apps/gitweb/create/').first.click() browser.find_by_id('id_gitweb-name').fill(repo) if access == 'private': browser.find_by_id('id_gitweb-is_private').check() elif access == 'public': browser.find_by_id('id_gitweb-is_private').uncheck() submit(browser) elif not ok_if_exists: assert False, 'Repo already exists.'
def _change_app_status(browser, app_name, change_status_to='enabled'): """Enable or disable application.""" button = browser.find_by_id('app-toggle-button') checkbox_id = get_app_checkbox_id(app_name) checkbox = browser.find_by_id(checkbox_id) if button: if checkbox.checked and change_status_to == 'disabled' or ( not checkbox.checked and change_status_to == 'enabled'): interface.submit(browser, element=button) else: _change_status(browser, app_name, checkbox_id, change_status_to) if app_name in apps_with_loaders: wait_for_config_update(browser, app_name)
def gitweb_edit_repo_metadata(browser, repo, metadata): """Set repository metadata.""" interface.nav_to_module(browser, 'gitweb') browser.find_link_by_href( '/plinth/apps/gitweb/{}/edit/'.format(repo)).first.click() if 'name' in metadata: browser.find_by_id('id_gitweb-name').fill(metadata['name']) if 'description' in metadata: browser.find_by_id('id_gitweb-description').fill( metadata['description']) if 'owner' in metadata: browser.find_by_id('id_gitweb-owner').fill(metadata['owner']) if 'access' in metadata: if metadata['access'] == 'private': browser.find_by_id('id_gitweb-is_private').check() else: browser.find_by_id('id_gitweb-is_private').uncheck() submit(browser)
def tor_feature_enable(browser, feature, should_enable): """Enable/disable a Tor feature.""" if not isinstance(should_enable, bool): should_enable = should_enable in ('enable', 'enabled') element_name = _TOR_FEATURE_TO_ELEMENT[feature] interface.nav_to_module(browser, 'tor') checkbox_element = browser.find_by_name(element_name).first if should_enable == checkbox_element.checked: return if should_enable: if feature == 'bridge-relay': browser.find_by_name('tor-relay_enabled').first.check() checkbox_element.check() else: checkbox_element.uncheck() interface.submit(browser, form_class='form-configuration') wait_for_config_update(browser, 'tor')
def set_mediawiki_admin_password(browser, password): """Set a password for the MediaWiki user called admin.""" interface.nav_to_module(browser, 'mediawiki') browser.find_by_id('id_password').fill(password) interface.submit(browser, form_class='form-configuration')
def ikiwiki_delete_wiki(browser): """Delete wiki.""" interface.nav_to_module(browser, 'ikiwiki') browser.find_link_by_href( '/plinth/apps/ikiwiki/wiki/delete/').first.click() submit(browser)
def time_zone_set(browser, time_zone): """Set the system time zone.""" interface.nav_to_module(browser, 'datetime') browser.select('time_zone', time_zone) interface.submit(browser, form_class='form-configuration')
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')
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')
def configure_shadowsocks(browser): """Configure shadowsocks client with some fake server details""" 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')
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')
def configure_shadowsocks(browser, server, password): """Configure shadowsocks client with given server details.""" browser.visit('{}/plinth/apps/shadowsocks/'.format(default_url)) browser.find_by_id('id_server').fill(server) browser.find_by_id('id_password').fill(password) interface.submit(browser, form_class='form-configuration')
def radicale_set_access_rights(browser, access_rights_type): interface.nav_to_module(browser, 'radicale') browser.choose('access_rights', access_rights_type) interface.submit(browser, form_class='form-configuration')
def tahoe_remove_introducer(browser, domain): """Remove an introducer from tahoe-lafs.""" introducer = tahoe_get_introducer(browser, domain, 'connected') submit(browser, element=introducer.find_by_css('.form-remove'))
def searx_disable_public_access(browser): """Enable Public Access in SearX""" interface.nav_to_module(browser, 'searx') browser.find_by_id('id_public_access').uncheck() interface.submit(browser, form_class='form-configuration')