def _rename_user(browser, old_name, new_name): functional.nav_to_module(browser, 'users') with functional.wait_for_page_update(browser): browser.find_link_by_href('/plinth/sys/users/' + old_name + '/edit/').first.click() browser.find_by_id('id_username').fill(new_name) functional.submit(browser)
def _make_share_public(browser, name): """Make share publicly accessible.""" row = _get_share(browser, name) with functional.wait_for_page_update(browser): row.find_by_css('.share-edit')[0].click() browser.find_by_id('id_sharing-is_public').check() functional.submit(browser)
def _edit_client(self, browser, key1, key2): """Edit a client""" functional.nav_to_module(browser, 'wireguard') browser.links.find_by_href(self._get_client_href(key1)).first.click() browser.find_by_css('.btn-edit-client').first.click() browser.find_by_id('id_public_key').fill(key2) functional.submit(browser, form_class='form-edit-client')
def _visit_site(browser): """Visit WordPress and run the first setup wizard if needed.""" _load_site(browser) if '/install.php' in browser.url: browser.fill('weblog_title', 'Test Blog') browser.fill('user_name', functional.config['DEFAULT']['username']) # browser.fill() once does not work for some reason for password field browser.fill('admin_password', functional.config['DEFAULT']['password']) browser.fill('admin_password', functional.config['DEFAULT']['password']) browser.check('pw_weak') browser.fill('admin_email', '*****@*****.**') functional.submit(browser) if not browser.find_by_css('.install-success'): raise Exception('WordPress installation failed') functional.visit(browser, '/wordpress/wp-admin/') if not browser.find_by_id('wpadminbar'): functional.visit(browser, '/wordpress/wp-login.php') browser.fill('log', functional.config['DEFAULT']['username']) browser.fill('pwd', functional.config['DEFAULT']['password']) functional.submit(browser)
def _set_language(browser, language_code): username = functional.config['DEFAULT']['username'] functional.visit(browser, '/plinth/sys/users/{}/edit/'.format(username)) browser.find_by_xpath('//select[@id="id_language"]//option[@value="' + language_code + '"]').first.click() browser.find_by_id('id_confirm_password').fill(_admin_password) functional.submit(browser)
def _add_password(browser): functional.visit(browser, '/plinth/apps/bepasty/add') for permission in ['read', 'create', 'list', 'delete', 'admin']: browser.find_by_css('#id_bepasty-permissions input[value="{}"]'.format( permission)).check() browser.fill('bepasty-comment', 'bepasty functional test') functional.submit(browser, form_class='form-add')
def _delete_image(browser, username, password, image): """Delete an image from MediaWiki.""" _login(browser, username, password) path = f'/mediawiki/index.php?title=File:{image}&action=delete' functional.visit(browser, path) delete_button = browser.find_by_id('mw-filedelete-submit') functional.submit(browser, element=delete_button)
def _can_login(browser, password): _logout(browser) browser.fill('token', password) login = browser.find_by_xpath('//form//button') functional.submit(browser, login, '/bepasty') return bool(browser.find_by_value('Logout'))
def _set_default_branch(browser, repo, branch): """Set default branch of the repository.""" functional.nav_to_module(browser, 'gitweb') browser.links.find_by_href( '/plinth/apps/gitweb/{}/edit/'.format(repo)).first.click() browser.find_by_id('id_gitweb-default_branch').select(branch) functional.submit(browser)
def _set_home_page(browser, home_page): if 'plinth' not in home_page and 'apache' not in home_page: home_page = 'shortcut-' + home_page functional.nav_to_module(browser, 'config') drop_down = browser.find_by_id('id_homepage') drop_down.select(home_page) functional.submit(browser)
def _create_user(browser, name, password): functional.nav_to_module(browser, 'users') with functional.wait_for_page_update(browser): browser.find_link_by_href('/plinth/sys/users/create/').first.click() browser.find_by_id('id_username').fill(name) browser.find_by_id('id_password1').fill(password) browser.find_by_id('id_password2').fill(password) functional.submit(browser)
def _delete_user(browser, name): functional.nav_to_module(browser, 'users') delete_link = browser.find_link_by_href('/plinth/sys/users/' + name + '/delete/') if delete_link: with functional.wait_for_page_update(browser): delete_link.first.click() functional.submit(browser)
def _add_share(browser, name, path, group): """Add a share in sharing app.""" functional.visit(browser, '/plinth/apps/sharing/add/') browser.fill('sharing-name', name) browser.fill('sharing-path', path) browser.find_by_css( '#id_sharing-groups input[value="{}"]'.format(group)).check() functional.submit(browser)
def _remove_all_passwords(browser): functional.nav_to_module(browser, 'bepasty') while True: remove_button = browser.find_by_css('.password-remove') if remove_button: functional.submit(browser, remove_button) else: break
def _delete_repo(browser, repo, ignore_missing=False): """Delete repository.""" functional.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() functional.submit(browser)
def _set_home_page(browser, home_page): if 'plinth' not in home_page and 'apache' not in home_page: home_page = 'shortcut-' + home_page functional.nav_to_module(browser, 'config') drop_down = browser.find_by_id('id_homepage') drop_down.select(home_page) update_setup = browser.find_by_css('.btn-primary') functional.submit(browser, element=update_setup)
def _enable_public_mode(browser, should_enable): """Enable/disable the public mode.""" checkbox = browser.find_by_id('id_is_public') if should_enable: checkbox.check() else: checkbox.uncheck() functional.submit(browser, form_class='form-configuration')
def _configure(browser, host, port, kite_name, kite_secret): """Configure pagekite basic parameters.""" functional.nav_to_module(browser, 'pagekite') # time.sleep(0.250) # Wait for 200ms show animation to complete browser.fill('pagekite-server_domain', host) browser.fill('pagekite-server_port', str(port)) browser.fill('pagekite-kite_name', kite_name) browser.fill('pagekite-kite_secret', kite_secret) functional.submit(browser, form_class='form-configuration')
def _add_introducer(browser, domain): """Add a new introducer into tahoe-lafs.""" functional.nav_to_module(browser, 'tahoe') furl = 'pb://ewe4zdz6kxn7xhuvc7izj2da2gpbgeir@tcp:{}:3456/' \ 'fko4ivfwgqvybppwar3uehkx6spaaou7'.format(domain) browser.fill('pet_name', 'testintroducer') browser.fill('furl', furl) functional.submit(browser, form_class='form-add-introducer')
def openvpn_setup(session_browser): """Setup the OpenVPN application after installation.""" functional.nav_to_module(session_browser, 'openvpn') setup_form = session_browser.find_by_css('.form-setup') if not setup_form: return functional.submit(session_browser, form_class='form-setup') functional.wait_for_config_update(session_browser, 'openvpn')
def _enable_restricted_logins(browser, should_enable): """Enable/disable restricted logins in security module.""" functional.nav_to_module(browser, 'security') if should_enable: browser.check('security-restricted_access') else: browser.uncheck('security-restricted_access') functional.submit(browser)
def _enable_dnssec(browser, enable): """Enable/disable DNSSEC in bind configuration.""" functional.nav_to_module(browser, 'bind') if enable: browser.check('enable_dnssec') else: browser.uncheck('enable_dnssec') functional.submit(browser, form_class='form-configuration')
def _upload_file(browser, file_path, password): """Upload a local file from disk to coquelicot.""" _verify_upload_password(browser, password) browser.attach_file('file', file_path) functional.submit(browser) assert functional.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 _add_library(browser, name): """Add a new library.""" if _is_library_available(browser, name): return browser.links.find_by_href( '/plinth/apps/calibre/library/create/').first.click() browser.find_by_id('id_calibre-name').fill(name) functional.submit(browser)
def _set_repo_access(browser, repo, access): """Set repository as public or private.""" functional.nav_to_module(browser, 'gitweb') browser.links.find_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() functional.submit(browser)
def _delete_all(browser): functional.visit(browser, '/plinth/sys/snapshot/manage/') delete_button = browser.find_by_name('delete_selected').first if not delete_button['disabled']: browser.find_by_id('select-all').check() functional.submit(browser, delete_button) confirm_button = browser.find_by_name('delete_confirm') if confirm_button: # Only if redirected to confirm page functional.submit(browser, confirm_button)
def _configure_domain(browser, domain): functional.nav_to_module(browser, 'dynamicdns') browser.find_link_by_href( '/plinth/sys/dynamicdns/configure/').first.click() browser.find_by_id('id_dynamicdns_domain').fill(domain) functional.submit(browser) # After a domain name change, Let's Encrypt will restart the web # server and could cause a connection failure. time.sleep(1) functional.eventually(functional.nav_to_module, [browser, 'dynamicdns'])
def _upload_image(browser, username, password, image): """Upload an image to MediaWiki. Idempotent.""" functional.visit(browser, '/mediawiki') _login(browser, username, password) # Upload file functional.visit(browser, '/mediawiki/Special:Upload') file_path = pathlib.Path(__file__).parent file_path /= '../../../../static/themes/default/img/' + image browser.attach_file('wpUploadFile', str(file_path.resolve())) functional.submit(browser, element=browser.find_by_name('wpUpload')[0])
def _upload_and_restore(browser, app_name, downloaded_file_path): functional.nav_to_module(browser, 'backups') browser.find_link_by_href('/plinth/sys/backups/upload/').first.click() fileinput = browser.driver.find_element_by_id('id_backups-file') fileinput.send_keys(downloaded_file_path) # submit upload form functional.submit(browser) # submit restore form with functional.wait_for_page_update(browser, expected_url='/plinth/sys/backups/'): functional.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 functional.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() functional.submit(browser)