Esempio n. 1
0
            lambda _: _check_url(current_url),
            message='waiting for url to change.'
                    'Current url: {:s}'.format(driver.current_url)
        )

    menu_tab = MAIN_MENU_TAB_TO_URL[tab]
    css_path = '.primary-sidebar a#main-{:s}'.format(menu_tab)

    Wait(driver, WAIT_BACKEND).until(
        lambda _: _load_main_menu_tab_page(menu_tab),
        message='waiting for {:s} main menu tab page to load'
                ''.format(tab)
    )


@given(parsers.re('users? of (?P<browser_id_list>.*) clicked on the '
                  '"(?P<main_menu_tab>.*)" tab in main menu sidebar'))
def g_click_on_the_given_main_menu_tab(selenium, browser_id_list,
                                       main_menu_tab):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
        _click_on_tab_in_main_menu_sidebar(driver, main_menu_tab)


@when(parsers.re('users? of (?P<browser_id_list>.*) clicks on the '
                 '"(?P<main_menu_tab>.*)" tab in main menu sidebar'))
@then(parsers.re('users? of (?P<browser_id_list>.*) clicks on the '
                 '"(?P<main_menu_tab>.*)" tab in main menu sidebar'))
def wt_click_on_the_given_main_menu_tab(selenium, browser_id_list,
                                        main_menu_tab):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
                                                             item_name))

    options = item.find_elements_by_css_selector('.settings-dropdown '
                                                 '.dropdown-menu-settings '
                                                 'li.clickable .item-label')
    option_name = option_name.lower()
    for option in options:
        if option.text.lower() == option_name:
            option.click()
            break
    else:
        raise RuntimeError('no option named {:s} found'.format(option_name))


# TODO remove refresh after gui will become more responsive
@when(parsers.re(r'user of (?P<browser_id>.*?) sees that (?P<item_list>.*?) '
                 r'(has|have) disappeared from (?P<item_type>.*?) sidebar list'))
@then(parsers.re(r'user of (?P<browser_id>.*?) sees that (?P<item_list>.*?) '
                 r'(has|have) disappeared from (?P<item_type>.*?) sidebar list'))
@when(parsers.re(r'user of (?P<browser_id>.*?) does not see (?P<item_list>.*?) '
                 r'in (?P<item_type>.*?) sidebar list'))
@then(parsers.re(r'user of (?P<browser_id>.*?) does not see (?P<item_list>.*?) '
                 r'in (?P<item_type>.*?) sidebar list'))
def is_not_present_in_sidebar_list(selenium, browser_id, item_list, item_type):
    driver = selenium[browser_id]
    Wait(driver, MAX_REFRESH_COUNT * WAIT_BACKEND).until(
        lambda d: refresh_and_call(d, _not_in_sidebar_list,
                                   item_list, item_type),
        message='searching for absence of {item} '
                'on {list} list'.format(item=item_list,
                                        list=item_type)
    )
Esempio n. 3
0
            lambda _: _check_url(current_url),
            message='waiting for url to change.'
                    'Current url: {:s}'.format(driver.current_url)
        )

    menu_tab = MAIN_MENU_TAB_TO_URL[tab]
    css_path = '.primary-sidebar a#main-{:s}'.format(menu_tab)

    Wait(driver, WAIT_BACKEND).until(
        lambda _: _load_main_menu_tab_page(),
        message='waiting for {:s} main menu tab page to load'
                ''.format(tab)
    )


@given(parsers.re('users? of (?P<browser_id_list>.*) clicked on the '
                  '"(?P<main_menu_tab>.*)" tab in main menu sidebar'))
def g_click_on_the_given_main_menu_tab(selenium, browser_id_list,
                                       main_menu_tab):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
        _click_on_tab_in_main_menu_sidebar(driver, main_menu_tab)


@when(parsers.re('users? of (?P<browser_id_list>.*) clicks on the '
                 '"(?P<main_menu_tab>.*)" tab in main menu sidebar'))
@then(parsers.re('users? of (?P<browser_id_list>.*) clicks on the '
                 '"(?P<main_menu_tab>.*)" tab in main menu sidebar'))
def wt_click_on_the_given_main_menu_tab(selenium, browser_id_list,
                                        main_menu_tab):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
Esempio n. 4
0
@when(parsers.parse('user of {browser_id} uses spaces select to change '
                    'data space to "{space_name}"'))
@then(parsers.parse('user of {browser_id} uses spaces select to change '
                    'data space to "{space_name}"'))
@repeat_failed(timeout=WAIT_BACKEND)
def change_space_view_in_data_tab_in_op(selenium, browser_id,
                                        space_name, op_page):
    driver = selenium[browser_id]
    selector = op_page(driver).data.sidebar.space_selector
    selector.expand()
    selector.spaces[space_name].click()


@when(parsers.re(r'user of (?P<browser_id>.*?) clicks the button '
                 r'from top menu bar with tooltip '
                 r'"(?P<tooltip>Create directory|Create file|Share element|'
                 r'Edit metadata|Rename element|Change element permissions|'
                 r'Copy element|Cut element|Remove element|'
                 r'Show file distribution)"'))
@then(parsers.re(r'user of (?P<browser_id>.*?) clicks the button '
                 r'from top menu bar with tooltip '
                 r'"(?P<tooltip>Create directory|Create file|Share element|'
                 r'Edit metadata|Rename element|Change element permissions|'
                 r'Copy element|Cut element|Remove element|'
                 r'Show file distribution)"'))
@repeat_failed(timeout=WAIT_FRONTEND)
def click_tooltip_from_toolbar_in_data_tab_in_op(selenium, browser_id,
                                                 tooltip, op_page):
    driver = selenium[browser_id]
    btn = getattr(op_page(driver).data.toolbar, transform(tooltip))
    btn.click()
Esempio n. 5
0

@when('I try to login via facebook')
def facebook_attempt(browser):
    browser.delete_all_cookies()
    browser.get("http://*****:*****@when('I succeed at logging in via facebook')
def facebook_succeed(browser):
    try:
        elem = browser.find_element_by_id("email")
        elem.send_keys("*****@*****.**")
        elem = browser.find_element_by_id("pass")
        elem.send_keys("phracking")
        elem.send_keys(Keys.RETURN)
        elem = browser.find_element_by_name("login")
        elem.click()
    except:
        pass


@then(re(r'I should be redirected to (?P<destination>.*)'))
def redirected(browser, destination):
    assert destination in browser.current_url


@then('the title should be backend.fail')
def page_viable(browser):
    assert "backend.fail" in browser.title
Esempio n. 6
0
        with fake_logger("allure_pytest_bdd.plugin.AllureFileLogger", logger):
            self.testdir.runpytest("-s", "-v", "--alluredir", self.testdir.tmpdir)
            # print(a.stdout.lines)
            # print(a.stderr.lines)
            self.allure_report = AllureReport(self.testdir.tmpdir.strpath)


@pytest.fixture
def allured_testdir(testdir, request):
    return AlluredTestdir(testdir, request)


@pytest.fixture
def context():
    return dict()


@pytest.fixture
def allure_report(allured_testdir, context):
    return allured_testdir.allure_report


@given(parsers.re("(?P<name>\\w+)(?P<extension>\\.\\w+) with content:(?:\n)(?P<content>[\\S|\\s]*)"))
def feature_definition(name, extension, content, testdir):
    testdir.makefile(extension, **dict([(name, content)]))


@when("run pytest-bdd with allure")
def run(allured_testdir):
    allured_testdir.run_with_allure()
Esempio n. 7
0
__author__ = "Bartek Walkowicz"
__copyright__ = "Copyright (C) 2017 ACK CYFRONET AGH"
__license__ = "This software is released under the MIT license cited in " \
              "LICENSE.txt"


def _click_on_btn_for_token(driver, oz_page, ordinal, btn):
    token = oz_page(driver)['access tokens'].tokens[int(ordinal[:-2]) - 1]
    action = getattr(token, btn)
    action()


@given(
    parsers.re(
        r'user of (?P<browser_id>.*?) clicked on (?P<btn>copy|remove) '
        r'icon for (?P<ordinal>1st|2nd|3rd|\d*?[4567890]th|\d*?11th|'
        r'\d*?12th|\d*?13th|\d*?[^1]1st|\d*?[^1]2nd|\d*?[^1]3rd) '
        r'item on tokens list in expanded "ACCESS TOKENS" Onezone panel'))
@repeat_failed(timeout=WAIT_BACKEND)
def g_click_on_btn_for_oz_access_token(selenium, browser_id, btn, ordinal,
                                       oz_page):
    driver = selenium[browser_id]
    _click_on_btn_for_token(driver, oz_page, ordinal, btn)


@when(
    parsers.re(
        r'user of (?P<browser_id>.*?) clicks on (?P<btn>copy|remove) '
        r'icon for (?P<ordinal>1st|2nd|3rd|\d*?[4567890]th|\d*?11th|'
        r'\d*?12th|\d*?13th|\d*?[^1]1st|\d*?[^1]2nd|\d*?[^1]3rd) '
        r'item on tokens list in expanded "ACCESS TOKENS" Onezone panel'))
Esempio n. 8
0
@then(parsers.parse('user of {browser_id} presses backspace on keyboard'))
def press_enter_on_active_element(selenium, browser_id):
    driver = selenium[browser_id]
    driver.switch_to.active_element.send_keys(Keys.BACKSPACE)


@then(parsers.parse('user of {browser_id} should see {links_names} links'))
def link_with_text_present(selenium, browser_id, links_names):
    driver = selenium[browser_id]
    for name in parse_seq(links_names):
        assert driver.find_element_by_link_text(name), \
            '{} link not found'.format(name)


@given(
    parsers.re('users? of (?P<browser_id_list>.*) clicked on the '
               '"(?P<link_name>.*)" link'))
def g_click_on_link_with_text(selenium, browser_id_list, link_name):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
        driver.find_element_by_link_text(link_name).click()


@when(
    parsers.re('users? of (?P<browser_id_list>.*) clicks on the '
               '"(?P<link_name>.*)" link'))
@then(
    parsers.re('users? of (?P<browser_id_list>.*) clicks on the '
               '"(?P<link_name>.*)" link'))
def wt_click_on_link_with_text(selenium, browser_id_list, link_name):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
Esempio n. 9
0
                  'of file browser'))
@then(
    parsers.parse('user of {browser_id} scrolls to the bottom '
                  'of file browser'))
@repeat_failed(timeout=WAIT_FRONTEND)
def scroll_to_bottom_of_file_browser(browser_id, tmp_memory):
    browser = tmp_memory[browser_id]['file_browser']
    browser.scroll_to_bottom()


# @when(parsers.parse('user of {browser_id} sees that there is(are) {num:d} '
#                     'item(s) in file browser'))
# @then(parsers.parse('user of {browser_id} sees that there is(are) {num:d} '
#                     'item(s) in file browser'))
@when(
    parsers.re('user of (?P<browser_id>.+?) sees that there '
               '(is 1|are (?P<num>\d+)) items? in file browser'))
@then(
    parsers.re('user of (?P<browser_id>.+?) sees that there '
               '(is 1|are (?P<num>\d+)) items? in file browser'))
@repeat_failed(timeout=WAIT_BACKEND)
def assert_num_of_files_are_displayed_in_file_browser(browser_id, num,
                                                      tmp_memory):
    browser = tmp_memory[browser_id]['file_browser']
    err_msg = 'displayed number of files {} does not match expected {}'
    files_num = browser.files_count
    num = int(num) if num is not None else 1
    assert files_num == num, err_msg.format(files_num, num)


@when(
    parsers.parse('user of {browser_id} sees that item named "{item_name}" '
Esempio n. 10
0
def when_browser_back_button(browser):
    browser.back()


@when("I move forward one page")
def when_browser_forward_button(browser):
    browser.forward()


@when("I reload the page")
def when_reload_the_page(browser):
    browser.reload()


# too greedy: @when(parse('I press "{text}"'))
@when(parsers.re('^I press "(?P<text>[^"]+)"$'))
def when_press_button(browser: BaseWebDriver, text):
    elm = find_by_text(browser, text).first
    elm.click()


@when(parse('I press "{text}" in "{element}"'))
def when_press_button_form(browser: BaseWebDriver, text, element):
    elm = find_child_by_text(browser, element, text).first
    elm.click()


@then(parse('I should be on "{page}"'))
def should_be_on_page(browser, browser_base_url, page):
    assert browser.url == absolute_url(browser_base_url, page)
Esempio n. 11
0
            'grains.get {grain}'.format(grain=grains[plane]),
            '--out json',
        ]))
    ip = json.loads(ip_output)['local']

    try:
        context['response'] = requests.get(
            '{proto}://{ip}:{port}'.format(proto=protocols[protocol],
                                           ip=ip,
                                           port=port),
            verify=False,
        )
    except Exception as exc:
        context['exception'] = exc


@then(parsers.re(r"the server returns (?P<status_code>\d+) '(?P<reason>.+)'"),
      converters=dict(status_code=int))
def server_returns(host, context, status_code, reason):
    response = context.get('response')
    assert response is not None
    assert response.status_code == int(status_code)
    assert response.reason == reason


@then("the server should not respond")
def server_does_not_respond(host, context):
    assert 'exception' in context
    assert isinstance(context['exception'],
                      requests.exceptions.ConnectionError)
Esempio n. 12
0
import os.path

import pytest
from pytest_bdd import then, parsers


@pytest.fixture()
def test_context():
    return {"last checked attachment": None}


@then(
    parsers.re(
        "this attachment with content:(?:\n)(?P<expected_content>[\\S|\\s]*)"))
def check_attachment_content(expected_content, test_context, testdir):
    last_checked_attachment = test_context["last checked attachment"]

    file_path = os.path.join(testdir.tmpdir.strpath,
                             last_checked_attachment["source"])
    with open(file_path, "r") as file:
        actual_content = file.read()

    assert actual_content == expected_content


@then(parsers.parse("attachment {attachment_name} must be in {location_name}"))
def suitable_attachment(attachment_name, location_name, test_context,
                        allure_report):
    test_case_report = allure_report.test_cases[0]

    if location_name == "attachments":
Esempio n. 13
0
@then(
    parsers.parse('user of {browser_id} sees that provider popup for provider '
                  'named "{provider}" has appeared on world map'))
@repeat_failed(timeout=WAIT_FRONTEND)
def assert_provider_popup_has_appeared_on_map(selenium, browser_id, provider,
                                              oz_page):
    driver = selenium[browser_id]
    err_msg = 'Popup displayed for provider named "{}" ' \
              'instead of "{}"'
    prov = oz_page(driver)['world map'].get_provider_with_displayed_popup()
    assert provider == prov.name, err_msg.format(prov.name, provider)


@when(
    parsers.re(r'user of (?P<browser_id>.+?) clicks on the '
               r'"(?P<btn>Go to your files|copy hostname)" button in '
               r'"(?P<provider>.+?)" provider\'s popup displayed on world map')
)
@then(
    parsers.re(r'user of (?P<browser_id>.+?) clicks on the '
               r'"(?P<btn>Go to your files|copy hostname)" button in '
               r'"(?P<provider>.+?)" provider\'s popup displayed on world map')
)
@repeat_failed(timeout=WAIT_BACKEND)
def click_on_btn_in_provider_popup(selenium, browser_id, btn, provider,
                                   oz_page):
    driver = selenium[browser_id]
    err_msg = 'Popup displayed for provider named "{}" ' \
              'instead of "{}"'
    prov = oz_page(driver)['world map'].get_provider_with_displayed_popup()
    assert provider == prov.name, err_msg.format(prov.name, provider)
Esempio n. 14
0
    collapse_providers = driver.find_element_by_css_selector('#collapse-providers')

    Wait(driver, WAIT_FRONTEND).until(
        lambda s: collapse_providers.get_attribute('aria-expanded') == 'true',
        message='waiting for list of providers to appear'
    )

    def the_provider_is_present(s):
        providers = s.find_elements_by_css_selector('.provider-header')
        named_providers = [e for e in providers if e.text == name]
        if len(named_providers) > 0:
            return named_providers[0]
        else:
            return None

    Wait(driver, WAIT_FRONTEND).until(
        the_provider_is_present,
        message='waiting for provider {:s} to appear on the list'.format(name)
    ).click()


@given(parsers.re('users? of (?P<browser_id_list>.*) clicked on the (?P<providers>.*) '
                  'provider in Onezone providers sidebar panel'))
def g_click_on_provider_in_sidebar(selenium, browser_id_list, providers):
    browser_ids = parse_seq(browser_id_list)
    providers = parse_seq(providers)
    for browser_id, provider in izip_longest(browser_ids, providers,
                                             fillvalue=providers[-1]):
        driver = selenium[browser_id]
        _click_on_provider(driver, provider)
Esempio n. 15
0
                  'named "{name}" in expanded "DATA SPACE MANAGEMENT" '
                  'Onezone panel by clicking on settings icon'))
@then(
    parsers.parse('user of {browser_id} expands settings dropdown for space '
                  'named "{name}" in expanded "DATA SPACE MANAGEMENT" '
                  'Onezone panel by clicking on settings icon'))
@repeat_failed(timeout=WAIT_FRONTEND)
def expand_settings_dropdown_for_space_in_panel(selenium, browser_id, name,
                                                oz_page):
    driver = selenium[browser_id]
    oz_page(driver)['data space management'].spaces[name].settings.expand()


@when(
    parsers.re(r'user of (?P<browser_id>.+?) clicks on the '
               r'"(?P<option>LEAVE|RENAME|ADD STORAGE|SET AS HOME)" item in '
               r'settings dropdown for space named "(?P<name>.+?)" '
               r'in expanded "DATA SPACE MANAGEMENT" Onezone panel'))
@then(
    parsers.re(r'user of (?P<browser_id>.+?) clicks on the '
               r'"(?P<option>LEAVE|RENAME|ADD STORAGE|SET AS HOME)" item in '
               r'settings dropdown for space named "(?P<name>.+?)" '
               r'in expanded "DATA SPACE MANAGEMENT" Onezone panel'))
@repeat_failed(timeout=WAIT_FRONTEND)
def click_on_settings_option_for_space_in_panel(selenium, browser_id, option,
                                                name, oz_page):
    driver = selenium[browser_id]
    settings = oz_page(driver)['data space management'].spaces[name].settings
    action = getattr(settings, option.lower().replace(' ', '_'))
    action()

Esempio n. 16
0
__author__ = "Jakub Kudzia"
__copyright__ = "Copyright (C) 2016 ACK CYFRONET AGH"
__license__ = "This software is released under the MIT license cited in " \
              "LICENSE.txt"

from tests.utils.space_utils import unsupport_space
from tests.utils.acceptance_utils import list_parser
from tests.utils.space_utils import (create_space, support_space,
                                     request_support, invite_to_space,
                                     join_space, remove_user, delete_space,
                                     assign_privileges)

from pytest_bdd import parsers, then, when


@when(parsers.re('(?P<user>\w+) creates spaces (?P<spaces>.*)'))
def spaces_creation(user, spaces, onedata_environment, context):
    spaces = list_parser(spaces)
    user = context.get_user(user)
    for space in spaces:
        space_id = create_space(user, space)
        user.spaces.update({space: space_id})
        user.created_spaces.update({space: space_id})


@when(parsers.re('(?P<user>\w+) gets token to support spaces (?P<spaces>.*)'))
def request_spaces_support(user, spaces, onedata_environment, context):
    spaces = list_parser(spaces)
    user = context.get_user(user)
    for space in spaces:
        token = request_support(user, space)
Esempio n. 17
0
from tests.gui.utils.generic import repeat_failed, implicit_wait
from tests.utils.acceptance_utils import list_parser


__author__ = "Jakub Liput, Bartek Walkowicz"
__copyright__ = "Copyright (C) 2017 ACK CYFRONET AGH"
__license__ = "This software is released under the MIT license cited in " \
              "LICENSE.txt"


@repeat_failed(timeout=WAIT_BACKEND)
def _expand_oz_panel(oz_page, driver, panel):
    oz_page(driver)[panel].expand()


@given(parsers.re(r'users? of (?P<browser_id_list>.*) expanded the '
                  r'"(?P<panel_name>.*)" Onezone sidebar panel'))
def g_expand_oz_panel(selenium, browser_id_list, panel_name, oz_page):
    for browser_id in list_parser(browser_id_list):
        driver = selenium[browser_id]
        _expand_oz_panel(oz_page, driver, panel_name)


@when(parsers.re(r'users? of (?P<browser_id_list>.*) expands? the '
                 r'"(?P<panel_name>.*)" Onezone sidebar panel'))
@then(parsers.re(r'users? of (?P<browser_id_list>.*) expands? the '
                 r'"(?P<panel_name>.*)" Onezone sidebar panel'))
def wt_expand_oz_panel(selenium, browser_id_list, panel_name, oz_page):
    for browser_id in list_parser(browser_id_list):
        driver = selenium[browser_id]
        _expand_oz_panel(oz_page, driver, panel_name)
Esempio n. 18
0
    'new': cli.cmd_new,
    'info': cli.cmd_info,
    'stop': cli.cmd_stop,
    'start': cli.cmd_start,
}


@given('I have a clean database')
def i_have_a_clean_slate():
    database.init()
    database.server.delete(database.db.name)
    database.init()
    view.sync_views(database.db)


@given(parsers.re('I have a stopped task "(?P<task_id>.+?)"'))
def i_have_a_stopped_task(doc_mgr, task_id):
    task = doc_mgr.create_task(_id=task_id, is_active=True)
    task.time_slices.append(document.TimeSlice(
        start_time=datetime.datetime.utcnow() - datetime.timedelta(hours=1),
        end_time=datetime.datetime.utcnow() - datetime.timedelta(minutes=30),
    ))
    doc_mgr.update_task(task)


@given(parsers.re('I have a running task "(?P<task_id>.+?)"'))
def i_have_a_running_task(doc_mgr, task_id):
    task = doc_mgr.create_task(_id=task_id, is_active=True)
    task.time_slices.append(document.TimeSlice(
        start_time=datetime.datetime.utcnow() - datetime.timedelta(hours=1),
    ))
Esempio n. 19
0
    parsers.parse('user of {browser_id} should see login button '
                  'for {provider_name}'))
def login_provider_buttons(selenium, browser_id, provider_name):
    driver = selenium[browser_id]
    assert driver.find_element_by_css_selector(
        '.login-box a.login-icon-box.idp-{name}'.format(name=provider_name)
    ), 'login for provider {} not found'.format(provider_name)


def _click_login_provider_button(driver, provider_name):
    driver.find_element_by_css_selector(
        '.login-box a.login-icon-box.idp-{:s}'.format(provider_name)).click()


@given(
    parsers.re('users? of (?P<browser_id_list>.*) clicked on the '
               '"(?P<provider_name>.*)" login button'))
def g_click_login_provider_button(selenium, browser_id_list, provider_name):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
        _click_login_provider_button(driver, provider_name)


@when(
    parsers.re('users? of (?P<browser_id_list>.*) clicks on the '
               '"(?P<provider_name>.*)" login button'))
def w_click_login_provider_button(selenium, browser_id_list, provider_name):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
        _click_login_provider_button(driver, provider_name)

Esempio n. 20
0
def _click_on_button_in_provider_popup(driver, name):
    def go_to_files_button(s):
        links = s.find_elements_by_css_selector('.provider-place-drop a, '
                                                '.provider-place-drop button')
        for e in links:
            if e.text == name:
                return e

    Wait(driver, WAIT_FRONTEND).until(
        go_to_files_button,
        message='clicking on "{:s}" button in providers popup'.format(name)
    ).click()


@given(parsers.re('users? of (?P<browser_id_list>.*) clicked on the '
                  '"(?P<btn_name>.+?)" button in provider popup'))
def g_click_on_go_to_files_provider(selenium, browser_id_list, btn_name):
    for browser_id in list_parser(browser_id_list):
        driver = selenium[browser_id]
        _click_on_button_in_provider_popup(driver, btn_name)


@when(parsers.re('users? of (?P<browser_id_list>.*) clicks? on the '
                 '"(?P<btn_name>.+?)" button in provider popup'))
@then(parsers.re('users? of (?P<browser_id_list>.*) clicks? on the '
                 '"(?P<btn_name>.+?)" button in provider popup'))
def wt_click_on_go_to_files_provider(selenium, browser_id_list, btn_name):
    for browser_id in list_parser(browser_id_list):
        driver = selenium[browser_id]
        _click_on_button_in_provider_popup(driver, btn_name)
Esempio n. 21
0
@then(parsers.parse('user of {browser_id} should see login button '
                    'for {provider_name}'))
def login_provider_buttons(selenium, browser_id, provider_name):
    driver = selenium[browser_id]
    assert driver.find_element_by_css_selector(
            '.login-box a.login-icon-box.{name}'.format(name=provider_name)
        ), 'login for provider {} not found'.format(provider_name)


def _click_login_provider_button(driver, provider_name):
    driver.find_element_by_css_selector(
        '.login-box a.login-icon-box.{:s}'.format(provider_name)
    ).click()


@given(parsers.re('users? of (?P<browser_id_list>.*) clicked on the '
                  '"(?P<provider_name>.*)" login button'))
def g_click_login_provider_button(selenium, browser_id_list, provider_name):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
        _click_login_provider_button(driver, provider_name)


@when(parsers.re('users? of (?P<browser_id_list>.*) clicks on the '
                 '"(?P<provider_name>.*)" login button'))
def w_click_login_provider_button(selenium, browser_id_list, provider_name):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
        _click_login_provider_button(driver, provider_name)


@given(parsers.re('users? of (?P<browser_id_list>.*) logged '
    try:
        s.connect((ip, int(port)))
        s.shutdown(socket.SHUT_RDWR)
        return True
    except:
        return False
    finally:
        s.close()


@given('The webserver is Online')
def webserver():
    """Given: The webserver is Online."""


@when(parsers.re(r'I go to port "(?P<port>\d+)" on the webserver'))
def lb_port(port):
    """When: I go to port ## on the webserver."""


@then(parsers.re(r'a status code of 200 is returned for port "(?P<port>\d+)"'))
def port_online(port):
    """Then: a status code of 200 is returned"""
    assert isOpen(webserver_ip, port)

    r = requests.get(webserver_url[port])
    assert r.status_code == 200


@then(parsers.re(r'I do not get a response from port "(?P<port>\d+)"'))
def port_offline(port):
Esempio n. 23
0
@given("an empty wiki-scripts database")
def empty_wsdb(db):
    # TODO: the db is currently function-scoped, so clearing is useless
#    db.clear()
    pass

@when("I synchronize the wiki-scripts database")
def sync_page_tables(mediawiki, db):
    db.sync_with_api(mediawiki.api, with_content=True)

@when(parsers.parse("I create page \"{title}\""))
def create_page(mediawiki, title):
    # all pages are created as empty
    mediawiki.api.create(title, "", title)

@when(parsers.re("I move page \"(?P<src_title>.+?)\" to \"(?P<dest_title>.+?)\"(?P<noredirect> without leaving a redirect)?"))
def move_page(mediawiki, src_title, dest_title, noredirect):
    noredirect = False if noredirect is None else True
    mediawiki.api.move(src_title, dest_title, "moved due to BDD tests", noredirect=noredirect)

def _get_content_api(api, title):
    result = api.call_api(action="query", titles=title, prop="revisions", rvprop="content|timestamp")
    page = list(result["pages"].values())[0]
    text = page["revisions"][0]["*"]
    timestamp = page["revisions"][0]["timestamp"]
    return text, timestamp, page["pageid"]

@when(parsers.parse("I edit page \"{title}\" to contain \"{content}\""))
def edit_page(mediawiki, title, content):
    api = mediawiki.api
    old_text, timestamp, pageid = _get_content_api(api, title)
Esempio n. 24
0
__license__ = "This software is released under the MIT license cited in " \
              "LICENSE.txt"

import re

from pytest_bdd import given, when, then, parsers
from selenium.webdriver.support.ui import WebDriverWait as Wait
from selenium.webdriver.support.expected_conditions import staleness_of


from tests.gui.utils.generic import parse_seq, repeat_failed, \
    parse_url, redirect_display
from tests.gui.conftest import WAIT_BACKEND


@given(parsers.re("users? of (?P<browser_id_list>.*) opened Onezone URL"))
def g_visit_onezone(base_url, selenium, browser_id_list):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
        driver.get(base_url)


@when(
    parsers.re('user of (?P<browser_id>.+) should be '
               'redirected to (?P<page>.+) page'))
@then(
    parsers.re('user of (?P<browser_id>.+) should be '
               'redirected to (?P<page>.+) page'))
def being_redirected_to_page(page, selenium, browser_id):
    driver = selenium[browser_id]
    Wait(driver, 5).until(lambda d: re.match(r'https?://.*?(/#)?(/.*)', d.
Esempio n. 25
0
    pass


@pytest.mark.integration
@scenario('fiddlefiles.feature', 'Viewing editing files of others')
def test_edit_copy_view():
    pass


@pytest.mark.integration
@scenario('fiddlefiles.feature', 'Editing files of others')
def test_edit_copy():
    pass


@given(re(r"I'm logged in as (?P<user>.*)"))
def myclient(user, client, admin_client, db):
    if user == "no one":
        return client
    if user == "an admin":
        return admin_client
    obj = UserFactory(username=user)
    client.login(user=obj)
    return client


@given("There is a file")
def fiddlefile(db):
    obj = UserFactory(username="******")
    fiddle=DjangoFiddleFactory.build(owner=obj)
    fiddle.save()
Esempio n. 26
0
from assertpy import assert_that
from pytest_bdd import then, parsers
from pytest_selenium_enhancer import CustomWait
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from page_objects.selenium_generics import SeleniumGenerics
from utils.locators import Locators
from page_objects.dashboard_homepage import DashboardHomePage
from page_objects.dashboard_homeObject import DashboardWebsitePage
from page_objects.dashboard_websitepageObject import DashboardWebsitesPage
from page_objects.dashboard_mtps_pageObject import DashboardMTPsPage
from page_objects.locators import DashboardLoginPageLocators


@then(parsers.re("I expect that the title is '(?P<title>.*)'"))
def check_title_is(selenium, title):
    assert_that(selenium.title).is_equal_to(title)


@then(parsers.re("I expect that the title is not '(?P<title>.*)'"))
def check_title_is_not(selenium, title):
    assert_that(selenium.title).is_not_equal_to(title)


@then(parsers.re("I expect that the title contains '(?P<title>.*)'"))
def check_title_contains(selenium, title):
        assert_that(selenium.title).contains(title)


@then(parsers.re("I expect that the title does not contain '(?P<title>.*)'"))
def check_title_not_contains(selenium, title):
Esempio n. 27
0
def match_scenario(allure_report, context, scenario_name):
    matcher = partial(match, has_test_case, scenario_name)
    assert_that(allure_report, matcher())
    context['scenario'] = matcher


@then(parsers.parse("this {item:w} has {status:w} status"))
def item_status(allure_report, context, item, status):
    context_matcher = context[item]
    matcher = partial(context_matcher, with_status, status)
    assert_that(allure_report, matcher())


@then(
    parsers.re("this (?P<item>\\w+) "
               "has parameter (?:\")(?P<param_name>[\\w|\\s]*)(?:\") "
               "with value (?:\")(?P<param_value>[\\w|\\s]*)(?:\")"))
def item_parameter(allure_report, context, item, param_name, param_value):
    context_matcher = context[item]
    matcher = partial(context_matcher, has_parameter, param_name, param_value)
    assert_that(allure_report, matcher())


@then(
    parsers.
    re("this (?P<item>\\w+) contains (?:\")(?P<step>[\\w|\\s|>|<]+)(?:\") step"
       ))
def step_step(allure_report, context, item, step):
    context_matcher = context[item]
    matcher = partial(context_matcher, has_step, step)
    context["step"] = matcher
Esempio n. 28
0
    @scenario(
        "background.feature",
        "Background steps are executed first",
    )
    def test():
        pass

    test(request)


@pytest.fixture
def foo():
    return {}


@given(parsers.re(r'a background step with multiple lines:\n(?P<data>.+)', flags=re.DOTALL))
def multi_line(foo, data):
    assert data == "one\ntwo"


@given('foo has a value "bar"')
def bar(foo):
    foo["bar"] = "bar"
    return foo["bar"]


@given('foo has a value "dummy"')
def dummy(foo):
    foo["dummy"] = "dummy"
    return foo["dummy"]
Esempio n. 29
0
@then(
    parsers.parse('user of {browser_id} uses spaces select to change '
                  'data space to "{space_name}"'))
@repeat_failed(timeout=WAIT_BACKEND)
def change_space_view_in_data_tab_in_op(selenium, browser_id, space_name,
                                        op_page):
    driver = selenium[browser_id]
    selector = op_page(driver).data.sidebar.space_selector
    selector.expand()
    selector.spaces[space_name].click()


@when(
    parsers.re(r'user of (?P<browser_id>.*?) clicks the button '
               r'from top menu bar with tooltip '
               r'"(?P<tooltip>Create directory|Create file|Share element|'
               r'Edit metadata|Rename element|Change element permissions|'
               r'Copy element|Cut element|Remove element|'
               r'Show file distribution)"'))
@then(
    parsers.re(r'user of (?P<browser_id>.*?) clicks the button '
               r'from top menu bar with tooltip '
               r'"(?P<tooltip>Create directory|Create file|Share element|'
               r'Edit metadata|Rename element|Change element permissions|'
               r'Copy element|Cut element|Remove element|'
               r'Show file distribution)"'))
@repeat_failed(timeout=WAIT_FRONTEND)
def click_tooltip_from_toolbar_in_data_tab_in_op(selenium, browser_id, tooltip,
                                                 op_page):
    driver = selenium[browser_id]
    btn = getattr(op_page(driver).data.toolbar, transform(tooltip))
    btn.click()
Esempio n. 30
0
                  '{item_type} named "{item_name}"'))
def is_tool_icon_displayed(selenium, browser_id, tool_type, item_type,
                           item_name):
    driver = selenium[browser_id]
    Wait(driver, WAIT_FRONTEND).until(
        lambda s: _is_tool_icon_displayed(driver, item_name, item_type,
                                          tool_type),
        message='checking if {tool_type} icon for {item_type} named '
        '"{item_name}" is displayed'.format(tool_type=tool_type,
                                            item_type=item_type,
                                            item_name=item_name))


@when(
    parsers.re(
        r'user of (?P<browser_id>.*?) sees that (?P<item_type>.*?)s? '
        r'named (?P<item_list>.*?) (has|have) disappeared from files list'))
@then(
    parsers.re(
        r'user of (?P<browser_id>.*?) sees that (?P<item_type>.*?)s? '
        r'named (?P<item_list>.*?) (has|have) disappeared from files list'))
@when(
    parsers.re(r'user of (?P<browser_id>.*?) does not see any '
               r'(?P<item_type>.*?)s? named (?P<item_list>.*?) on files list'))
@then(
    parsers.re(r'user of (?P<browser_id>.*?) does not see any '
               r'(?P<item_type>.*?)s? named (?P<item_list>.*?) on files list'))
def is_not_present_in_file_list(selenium, browser_id, item_list, item_type):
    driver = selenium[browser_id]
    item_type = item_type.replace('directorie', 'directory')
    Wait(driver, WAIT_FRONTEND).until(
Esempio n. 31
0
        )
        assert len(pods) == pods_count

    error_msg = (
        "There is not exactly '{count}' pod(s) labeled '{label}' running "
        "in namespace '{namespace}'".format(count=pods_count,
                                            label=label,
                                            namespace=namespace))
    if node:
        error_msg += "on node '{node}'".format(node=node)

    utils.retry(_check_pods_count, times=20, wait=3, error_msg=error_msg)


_COUNT_RUNNING_PODS_PARSER = parsers.re(
    r"we have (?P<pods_count>\d+) running pod labeled '(?P<label>[^']+)' "
    r"in namespace '(?P<namespace>[^']+)'(?: on node '(?P<node>[^']+)')?")

# }}}
# Given {{{


@given('the Kubernetes API is available')
def check_service(host):
    _verify_kubeapi_service(host)


@given(_COUNT_RUNNING_PODS_PARSER, converters=dict(pods_count=int))
def given_count_running_pods(request, k8s_client, pods_count, label, namespace,
                             node):
    return count_running_pods(request, k8s_client, pods_count, label,
Esempio n. 32
0
    desc = yaml.load(desc)
    for key, val in desc.items():
        transfer_val = getattr(transfer, key.replace(' ', '_'))
        assert transfer_val == str(val), \
            'Transfer {} is {} instead of {} in {}'.format(key, transfer_val,
                                                           val, sufix)


def wt(name, func=None, converters=None):
    if not func:
        return partial(wt, name, converters=converters)
    return then(name, converters)(when(name, converters)(func))


@wt(
    parsers.re('user of (?P<browser_id>.*) sees (?P<item_type>file|directory)'
               ' in ongoing transfers:\n(?P<desc>(.|\s)*)'))
@repeat_failed(interval=0.5)
def assert_ongoing_transfer(selenium, browser_id, item_type, desc):
    transfer = op_page(selenium[browser_id]).transfers.ongoing[0]
    _assert_transfer(transfer, item_type, desc, 'ongoing')


@wt(
    parsers.re('user of (?P<browser_id>.*) sees (?P<item_type>file|directory)'
               ' in ended transfers:\n(?P<desc>(.|\s)*)'))
@repeat_failed(interval=0.5, timeout=40)
def assert_finished_transfer(selenium, browser_id, item_type, desc):
    transfer = op_page(selenium[browser_id]).transfers.ended[0]
    _assert_transfer(transfer, item_type, desc, 'ended')

Esempio n. 33
0
def test_background_check_order(request):
    """Test feature background to ensure that backound steps are executed first."""

    @scenario("background.feature", "Background steps are executed first")
    def test():
        pass

    test(request)


@pytest.fixture
def foo():
    return {}


@given(parsers.re(r"a background step with multiple lines:\n(?P<data>.+)", flags=re.DOTALL))
def multi_line(foo, data):
    assert data == "one\ntwo"


@given('foo has a value "bar"')
def bar(foo):
    foo["bar"] = "bar"
    return foo["bar"]


@given('foo has a value "dummy"')
def dummy(foo):
    foo["dummy"] = "dummy"
    return foo["dummy"]
Esempio n. 34
0
@when(parsers.parse('user of {browser_id} presses backspace on keyboard'))
@then(parsers.parse('user of {browser_id} presses backspace on keyboard'))
def press_enter_on_active_element(selenium, browser_id):
    driver = selenium[browser_id]
    driver.switch_to.active_element.send_keys(Keys.BACKSPACE)


@then(parsers.parse('user of {browser_id} should see {links_names} links'))
def link_with_text_present(selenium, browser_id, links_names):
    driver = selenium[browser_id]
    for name in parse_seq(links_names):
        assert driver.find_element_by_link_text(name), \
            '{} link not found'.format(name)


@given(parsers.re('users? of (?P<browser_id_list>.*) clicked on the '
                  '"(?P<link_name>.*)" link'))
def g_click_on_link_with_text(selenium, browser_id_list, link_name):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
        driver.find_element_by_link_text(link_name).click()


@when(parsers.re('users? of (?P<browser_id_list>.*) clicks on the '
                 '"(?P<link_name>.*)" link'))
@then(parsers.re('users? of (?P<browser_id_list>.*) clicks on the '
                 '"(?P<link_name>.*)" link'))
def wt_click_on_link_with_text(selenium, browser_id_list, link_name):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
        driver.find_element_by_link_text(link_name).click()
Esempio n. 35
0
    pass


@pytest.mark.integration
@scenario('fiddlefiles.feature', 'Viewing editing files of others')
def test_edit_copy_view():
    pass


@pytest.mark.integration
@scenario('fiddlefiles.feature', 'Editing files of others')
def test_edit_copy():
    pass


@given(re(r"I'm logged in as (?P<user>.*)"))
def myclient(user, client, admin_client, db):
    if user == "no one":
        return client
    if user == "an admin":
        return admin_client
    obj = UserFactory(username=user)
    client.login(user=obj)
    return client


@given("There is a file")
def fiddlefile(db):
    obj = UserFactory(username="******")
    fiddle = DjangoFiddleFactory.build(owner=obj)
    fiddle.save()
Esempio n. 36
0
@scenario_when('Argument in when, step 2')
def test_argument_in_when_step_2():
    pass


def test_multiple_given(request):
    """Using the same given fixture raises an error."""
    @scenario_args('Using the same given fixture raises an error')
    def test():
        pass
    with pytest.raises(exceptions.GivenAlreadyUsed):
        test(request)


@given(parsers.re(r'I have (?P<euro>\d+) Euro'), converters=dict(euro=int))
def i_have(euro, values):
    assert euro == values.pop(0)


@when(parsers.re(r'I pay (?P<euro>\d+) Euro'), converters=dict(euro=int))
def i_pay(euro, values, request):
    assert euro == values.pop(0)


@then(parsers.re(r'I should have (?P<euro>\d+) Euro'), converters=dict(euro=int))
def i_should_have(euro, values):
    assert euro == values.pop(0)


# test backwards compartibility
from assertpy import assert_that
import os
import json
from utils.locators import Locators
from pytest_bdd import given, parsers
from pytest_selenium_enhancer import CustomWait
from selenium.webdriver.common.by import By
from page_objects.selenium_generics import SeleniumGenerics
from page_objects.dashboard_loginpage import DashboardLoginPage
from page_objects.dashboard_homeObject import DashboardWebsitePage
from page_objects.dashboard_websitepageObject import DashboardWebsitesPage
from page_objects.dashboard_mtps_pageObject import DashboardMTPsPage
from page_objects.changelog_loginpage import ChangeLogLoginPage
from page_objects.create_changelogpage import CreateChangeLogPage

@given(parsers.re("I open the url '(?P<page_url>.*)'"))
@given(parsers.re("I open the site '(?P<page_url>.*)'"))
@given(parsers.re("I navigate to page '(?P<page_url>.*)'"))
def open_webpage(selenium, base_url, page_url):
    selenium.get('%s%s' % (base_url, page_url))


@given(parsers.re("I open the external url '(?P<site_url>.*)'"))
@given(parsers.re("I open the external site '(?P<site_url>.*)'"))
def open_external_webpage(selenium, site_url):
    selenium.get(site_url)


@given(parsers.re("The element '(?P<locator_path>.*)' is displayed"))
def element_displayed(selenium, locators: Locators, locator_path):
    CustomWait(selenium).wait_for_element_visible(value=locators.parse_and_get(locator_path))
Esempio n. 38
0
@when(parsers.parse('user of {browser_id} scrolls to the bottom '
                    'of file browser'))
@then(parsers.parse('user of {browser_id} scrolls to the bottom '
                    'of file browser'))
@repeat_failed(timeout=WAIT_FRONTEND)
def scroll_to_bottom_of_file_browser(browser_id, tmp_memory):
    browser = tmp_memory[browser_id]['file_browser']
    browser.scroll_to_bottom()


# @when(parsers.parse('user of {browser_id} sees that there is(are) {num:d} '
#                     'item(s) in file browser'))
# @then(parsers.parse('user of {browser_id} sees that there is(are) {num:d} '
#                     'item(s) in file browser'))
@when(parsers.re('user of (?P<browser_id>.+?) sees that there '
                 '(is 1|are (?P<num>\d+)) items? in file browser'))
@then(parsers.re('user of (?P<browser_id>.+?) sees that there '
                 '(is 1|are (?P<num>\d+)) items? in file browser'))
@repeat_failed(timeout=WAIT_BACKEND)
def assert_num_of_files_are_displayed_in_file_browser(browser_id, num,
                                                      tmp_memory):
    browser = tmp_memory[browser_id]['file_browser']
    err_msg = 'displayed number of files {} does not match expected {}'
    files_num = browser.files_count
    num = int(num) if num is not None else 1
    assert files_num == num, err_msg.format(files_num, num)


@when(parsers.parse('user of {browser_id} sees that item named "{item_name}" '
                    'is {item_attr} in file browser'))
@then(parsers.parse('user of {browser_id} sees that item named "{item_name}" '
Esempio n. 39
0
@then(parsers.parse('user of {browser_id} sees {tool_type} icon for '
                    '{item_type} named "{item_name}"'))
def is_tool_icon_displayed(selenium, browser_id, tool_type,
                           item_type, item_name):
    driver = selenium[browser_id]
    Wait(driver, WAIT_FRONTEND).until(
        lambda s: _is_tool_icon_displayed(driver, item_name,
                                          item_type, tool_type),
        message='checking if {tool_type} icon for {item_type} named '
                '"{item_name}" is displayed'.format(tool_type=tool_type,
                                                    item_type=item_type,
                                                    item_name=item_name)
    )


@when(parsers.re(r'user of (?P<browser_id>.*?) sees that (?P<item_type>.*?)s? '
                 r'named (?P<item_list>.*?) (has|have) disappeared from files list'))
@then(parsers.re(r'user of (?P<browser_id>.*?) sees that (?P<item_type>.*?)s? '
                 r'named (?P<item_list>.*?) (has|have) disappeared from files list'))
@when(parsers.re(r'user of (?P<browser_id>.*?) does not see any '
                 r'(?P<item_type>.*?)s? named (?P<item_list>.*?) on files list'))
@then(parsers.re(r'user of (?P<browser_id>.*?) does not see any '
                 r'(?P<item_type>.*?)s? named (?P<item_list>.*?) on files list'))
def is_not_present_in_file_list(selenium, browser_id, item_list, item_type):
    driver = selenium[browser_id]
    item_type = item_type.replace('directorie', 'directory')
    Wait(driver, WAIT_FRONTEND).until(
        lambda _: _not_in_file_list(driver, item_list, item_type),
        message='waiting for {:s} item/items '
                'to disappear from file list'.format(item_list)
    )
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select


# Application imports
from utils.locators import Locators
from page_objects.dashboard_loginpage import DashboardLoginPage
from page_objects.dashboard_homepage import DashboardHomePage
from page_objects.dashboard_homeObject import DashboardWebsitePage
from page_objects.dashboard_websitepageObject import DashboardWebsitesPage
from page_objects.dashboard_prepare_MTPObject import DashboardPrepareMTPPage
from page_objects.dashboard_mtps_pageObject import DashboardMTPsPage
from page_objects.create_changelogpage import CreateChangeLogPage


@when(parsers.re("I set the locale for locators to '(?P<locale>.*)'"))
@when(parsers.re("I set the language for locators to '(?P<locale>.*)'"))

def set_locale(locators: Locators, locale):
    locators.set_locale(locale)


@when(parsers.re("I click on '(?P<locator_path>.*)'"))
def click_element(selenium, locators: Locators, locator_path):
    selenium.find_element(By.XPATH, locators.parse_and_get(locator_path)).click()


@when(parsers.re("I double click on '(?P<locator_path>.*)'"))
@when(parsers.re("I doubleclick on '(?P<locator_path>.*)'"))
def dbl_click_element(selenium, locators: Locators, locator_path):
    element = selenium.find_element(By.XPATH, locators.parse_and_get(locator_path))
Esempio n. 41
0
        "background.feature",
        "Background steps are executed first",
    )
    def test():
        pass

    test(request)


@pytest.fixture
def foo():
    return {}


@given(
    parsers.re(r'a background step with multiple lines:\n(?P<data>.+)',
               flags=re.DOTALL))
def multi_line(foo, data):
    assert data == "one\ntwo"


@given('foo has a value "bar"')
def bar(foo):
    foo["bar"] = "bar"
    return foo["bar"]


@given('foo has a value "dummy"')
def dummy(foo):
    foo["dummy"] = "dummy"
    return foo["dummy"]
Esempio n. 42
0
"""Common steps using copy or paste text
"""

from pytest_bdd import when, then, parsers

from tests.gui.utils.generic import parse_seq

__author__ = "Bartosz Walkowicz"
__copyright__ = "Copyright (C) 2017 ACK CYFRONET AGH"
__license__ = "This software is released under the MIT license cited in " \
              "LICENSE.txt"


@when(
    parsers.re('user of (?P<browser_id>.*?) sends copied (?P<item_type>.*?) '
               'to users? of (?P<browser_list>.*)'))
@then(
    parsers.re('user of (?P<browser_id>.*?) sends copied (?P<item_type>.*?) '
               'to users? of (?P<browser_list>.*)'))
def send_copied_item_to_other_users(browser_id, item_type, browser_list,
                                    tmp_memory, displays, clipboard):
    item = clipboard.paste(display=displays[browser_id])
    for browser in parse_seq(browser_list):
        tmp_memory[browser]['mailbox'][item_type.lower()] = item


@when(
    parsers.parse('user of {browser_id} sees that copied token '
                  'matches displayed one'))
@then(
    parsers.parse('user of {browser_id} sees that copied token '
Esempio n. 43
0
              "LICENSE.txt"


import re

from pytest_bdd import given, when, then, parsers
from selenium.webdriver.support.ui import WebDriverWait as Wait
from selenium.webdriver.support.expected_conditions import staleness_of


from tests.gui.utils.generic import parse_seq, repeat_failed, \
    parse_url, redirect_display
from tests.gui.conftest import WAIT_BACKEND


@given(parsers.re("users? of (?P<browser_id_list>.*) opened Onezone URL"))
def g_visit_onezone(base_url, selenium, browser_id_list):
    for browser_id in parse_seq(browser_id_list):
        driver = selenium[browser_id]
        driver.get(base_url)


@when(parsers.re('user of (?P<browser_id>.+) should be '
                 'redirected to (?P<page>.+) page'))
@then(parsers.re('user of (?P<browser_id>.+) should be '
                 'redirected to (?P<page>.+) page'))
def being_redirected_to_page(page, selenium, browser_id):
    driver = selenium[browser_id]
    Wait(driver, 5).until(
        lambda d: re.match(r'https?://.*?(/#)?(/.*)',
                           d.current_url).group(2) == page,
Esempio n. 44
0
@scenario_when('Argument in when, step 2')
def test_argument_in_when_step_2():
    pass


def test_multiple_given(request):
    """Using the same given fixture raises an error."""
    @scenario_args('Using the same given fixture raises an error')
    def test():
        pass

    with pytest.raises(exceptions.GivenAlreadyUsed):
        test(request)


@given(parsers.re(r'I have (?P<euro>\d+) Euro'), converters=dict(euro=int))
def i_have(euro, values):
    assert euro == values.pop(0)


@when(parsers.re(r'I pay (?P<euro>\d+) Euro'), converters=dict(euro=int))
def i_pay(euro, values, request):
    assert euro == values.pop(0)


@then(parsers.re(r'I should have (?P<euro>\d+) Euro'),
      converters=dict(euro=int))
def i_should_have(euro, values):
    assert euro == values.pop(0)

Esempio n. 45
0
@when(parsers.parse('user of {browser_id} clicks on {tab_name} navigation '
                    'tab in metadata panel opened for "{item_name}"'))
@then(parsers.parse('user of {browser_id} clicks on {tab_name} navigation '
                    'tab in metadata panel opened for "{item_name}"'))
@repeat_failed(timeout=WAIT_FRONTEND)
def click_on_navigation_tab_in_metadata_panel(browser_id, tab_name,
                                              item_name, tmp_memory):
    browser = tmp_memory[browser_id]['file_browser']
    tab = getattr(browser.get_metadata_for(item_name).navigation,
                  tab_name.lower())
    tab()


@when(parsers.re('user of (?P<browser_id>.+?) sees that (?P<tab>JSON|RDF) '
                 'textarea placed in metadata panel opened for '
                 '"(?P<item_name>.+?)" contains "(?P<metadata_record>.+?)"'))
@then(parsers.re('user of (?P<browser_id>.+?) sees that (?P<tab>JSON|RDF) '
                 'textarea placed in metadata panel opened for '
                 '"(?P<item_name>.+?)" contains "(?P<metadata_record>.+?)"'))
@repeat_failed(timeout=WAIT_FRONTEND)
def assert_textarea_contains_record(browser_id, metadata_record, tab,
                                    item_name, tmp_memory):
    browser = tmp_memory[browser_id]['file_browser']
    metadata_row = browser.get_metadata_for(item_name)
    tab = getattr(metadata_row, tab.lower())
    assert metadata_record in tab.text_area, \
        'text in textarea : {} does not contain {}'.format(tab.text_area,
                                                           metadata_record)

Esempio n. 46
0
def isOpen(ip, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(timeout)
    try:
        s.connect((ip, int(port)))
        s.shutdown(socket.SHUT_RDWR)
        return True
    except:
        return False
    finally:
        s.close()


@given('The Load Balancer is Online')
def load_balancer():
    """Given: The Load Balancer is Online."""


@when(parsers.re(r'I go to port "(?P<port>\d+)" on the Load Balancer'))
def lb_port(port):
    """When: I go to port ## on the Load Balancer."""


@then(parsers.re(r'a status code of 200 is returned for port "(?P<port>\d+)"'))
def port_online(port):
    """Then: a status code of 200 is returned"""
    assert isOpen(load_balancer_ip, port)

    r = requests.get(load_balancer_url[port])
    assert r.status_code == 200
Esempio n. 47
0
"""Common steps using copy or paste text
"""

from pytest_bdd import when, then, parsers

from tests.gui.utils.generic import parse_seq


__author__ = "Bartosz Walkowicz"
__copyright__ = "Copyright (C) 2017 ACK CYFRONET AGH"
__license__ = "This software is released under the MIT license cited in " \
              "LICENSE.txt"


@when(parsers.re('user of (?P<browser_id>.*?) sends copied (?P<item_type>.*?) '
                 'to users? of (?P<browser_list>.*)'))
@then(parsers.re('user of (?P<browser_id>.*?) sends copied (?P<item_type>.*?) '
                 'to users? of (?P<browser_list>.*)'))
def send_copied_item_to_other_users(browser_id, item_type, browser_list,
                                    tmp_memory, displays, clipboard):
    item = clipboard.paste(display=displays[browser_id])
    for browser in parse_seq(browser_list):
        tmp_memory[browser]['mailbox'][item_type.lower()] = item


@when(parsers.parse('user of {browser_id} sees that copied token '
                    'matches displayed one'))
@then(parsers.parse('user of {browser_id} sees that copied token '
                    'matches displayed one'))
def assert_copied_token_match_displayed_one(browser_id, tmp_memory,
                                            displays, clipboard):
Esempio n. 48
0
@when(parsers.parse('user of {browser_id} sees '
                    'non-empty token in active modal'))
@then(parsers.parse('user of {browser_id} sees '
                    'non-empty token in active modal'))
def get_token_from_modal(selenium, browser_id, tmp_memory):
    driver = selenium[browser_id]
    modal = tmp_memory[browser_id]['window']['modal']
    token_box = modal.find_element_by_css_selector('input[readonly]')
    token = Wait(driver, WAIT_BACKEND).until(
        lambda _: token_box.get_attribute('value'),
        message='waiting for token to appear'
    )
    tmp_memory[browser_id]['token'] = token


@when(parsers.re(r'user of (?P<browser_id>.*?) clicks on '
                 r'((?P<in_type>.*?) )?input box in active modal'))
@then(parsers.re(r'user of (?P<browser_id>.*?) clicks on '
                 r'((?P<in_type>.*?) )?input box in active modal'))
def activate_input_box_in_modal(browser_id, in_type, tmp_memory):
    modal = tmp_memory[browser_id]['window']['modal']
    css_path = 'input#{}'.format(in_type_to_id[in_type]) if in_type else 'input'
    in_box = modal.find_element_by_css_selector(css_path)
    # send NULL to activates input box
    in_box.send_keys(Keys.NULL)


@when(parsers.parse('user of {browser_id} clicks on '
                    'copy button in active modal'))
@then(parsers.parse('user of {browser_id} clicks on '
                    'copy button in active modal'))
def click_on_copy_btn_in_modal(selenium, browser_id, tmp_memory):
Esempio n. 49
0
@when(parsers.parse('user of {browser_id} sees that provider popup for provider '
                    'named "{provider}" has appeared on world map'))
@then(parsers.parse('user of {browser_id} sees that provider popup for provider '
                    'named "{provider}" has appeared on world map'))
@repeat_failed(timeout=WAIT_FRONTEND)
def assert_provider_popup_has_appeared_on_map(selenium, browser_id,
                                              provider, oz_page):
    driver = selenium[browser_id]
    err_msg = 'Popup displayed for provider named "{}" ' \
              'instead of "{}"'
    prov = oz_page(driver)['world map'].get_provider_with_displayed_popup()
    assert provider == prov.name, err_msg.format(prov.name, provider)


@when(parsers.re(r'user of (?P<browser_id>.+?) clicks on the '
                 r'"(?P<btn>Go to your files|copy hostname)" button in '
                 r'"(?P<provider>.+?)" provider\'s popup displayed on world map'))
@then(parsers.re(r'user of (?P<browser_id>.+?) clicks on the '
                 r'"(?P<btn>Go to your files|copy hostname)" button in '
                 r'"(?P<provider>.+?)" provider\'s popup displayed on world map'))
@repeat_failed(timeout=WAIT_BACKEND)
def click_on_btn_in_provider_popup(selenium, browser_id, btn, provider, oz_page):
    driver = selenium[browser_id]
    err_msg = 'Popup displayed for provider named "{}" ' \
              'instead of "{}"'
    prov = oz_page(driver)['world map'].get_provider_with_displayed_popup()
    assert provider == prov.name, err_msg.format(prov.name, provider)
    action = getattr(prov, btn.lower().replace(' ', '_'))
    action()

Esempio n. 50
0
@when(parsers.parse('user of {browser_id} expands settings dropdown for space '
                    'named "{name}" in expanded "DATA SPACE MANAGEMENT" '
                    'Onezone panel by clicking on settings icon'))
@then(parsers.parse('user of {browser_id} expands settings dropdown for space '
                    'named "{name}" in expanded "DATA SPACE MANAGEMENT" '
                    'Onezone panel by clicking on settings icon'))
@repeat_failed(timeout=WAIT_FRONTEND)
def expand_settings_dropdown_for_space_in_panel(selenium, browser_id,
                                                name, oz_page):
    driver = selenium[browser_id]
    oz_page(driver)['data space management'].spaces[name].settings.expand()


@when(parsers.re(r'user of (?P<browser_id>.+?) clicks on the '
                 r'"(?P<option>LEAVE|RENAME|ADD STORAGE|SET AS HOME)" item in '
                 r'settings dropdown for space named "(?P<name>.+?)" '
                 r'in expanded "DATA SPACE MANAGEMENT" Onezone panel'))
@then(parsers.re(r'user of (?P<browser_id>.+?) clicks on the '
                 r'"(?P<option>LEAVE|RENAME|ADD STORAGE|SET AS HOME)" item in '
                 r'settings dropdown for space named "(?P<name>.+?)" '
                 r'in expanded "DATA SPACE MANAGEMENT" Onezone panel'))
@repeat_failed(timeout=WAIT_FRONTEND)
def click_on_settings_option_for_space_in_panel(selenium, browser_id,
                                                option, name, oz_page):
    driver = selenium[browser_id]
    settings = oz_page(driver)['data space management'].spaces[name].settings
    action = getattr(settings, option.lower().replace(' ', '_'))
    action()


@when(parsers.parse('user of {browser_id} clicks on "Add storage" button in '