Skip to content

Commit

Permalink
[qacode] fix for cognitive complexity at #267 (#272)
Browse files Browse the repository at this point in the history
* [qacode] fix for cognitive complexity at #267

+ renamed settings_ methos to cfg_

* [qacode] complexity fixes for PR #272

+ related to issue #267
+ improved times for control_table suite
  • Loading branch information
netzulo committed Apr 19, 2019
1 parent dd7de5a commit 4f97654
Show file tree
Hide file tree
Showing 10 changed files with 96 additions and 115 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Function with Cognitive Complexity of 13 (exceeds 5 allowed) #265
- New internal method to reduce duplication at ControlDropdown #untracked
- Fix similar code at #271
- Renamed settings_ methods to cfg_ #267

### Fixed
- Can't use dropdown methods if ControlForm strict_tags is disabled #247
Expand Down
8 changes: 4 additions & 4 deletions USAGE.rst
Original file line number Diff line number Diff line change
Expand Up @@ -233,10 +233,10 @@ TestInfoBase
+ method **load** : Load default config dict
+ method **bot_open** : Open browser using BotBase instance
+ method **bot_close** : Close bot calling bot.close() from param
+ method **settings_apps** : Obtain inherit dict from 'cls.config' dict named 'config.tests.apps'
+ method **settings_app** : Obtain inherit dict from 'cls.config' dict named 'config.tests.apps' filtering by 'app_name' param
+ method **settings_page** : Obtain inherit dict from 'cls.config' dict named 'config.tests.apps[i].pages' filtering by 'page_name' param
+ method **settings_control** : Obtain inherit dict from 'cls.config' dict named 'config.tests.apps[i].pages[j].controls' filtering by 'control_name' param
+ method **cfg_apps** : Obtain inherit dict from 'cls.config' dict named 'config.tests.apps'
+ method **cfg_app** : Obtain inherit dict from 'cls.config' dict named 'config.tests.apps' filtering by 'app_name' param
+ method **cfg_page** : Obtain inherit dict from 'cls.config' dict named 'config.tests.apps[i].pages' filtering by 'page_name' param
+ method **cfg_control** : Obtain inherit dict from 'cls.config' dict named 'config.tests.apps[i].pages[j].controls' filtering by 'control_name' param
- Methods for **Test Suites + Test Cases**

+ method **setup_method** : Configure self.attribute
Expand Down
49 changes: 22 additions & 27 deletions qacode/core/testing/test_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def bot_close(cls, bot):
return bot.close()

@classmethod
def settings_apps(cls):
def cfg_apps(cls):
"""Obtain inherit dict from 'cls.config' dict named
'config.tests.apps'
"""
Expand All @@ -69,75 +69,70 @@ def settings_apps(cls):
return cls.config.get('tests').get('apps')

@classmethod
def settings_pages(cls):
def cfg_pages(cls):
"""Obtain inherit dict from 'cls.config' dict named
'config.tests.apps[i].pages'
"""
if cls.config is None:
raise CoreException(msg="Call to cls.load() first")
pages = []
for app in cls.settings_apps():
for app in cls.cfg_apps():
pages.extend(app.get('pages'))
return pages

@classmethod
def settings_controls(cls):
def cfg_controls(cls):
"""Obtain inherit dict from 'cls.config' dict named
'config.tests.apps[i].pages[j].controls'
"""
if cls.config is None:
raise CoreException(msg="Call to cls.load() first")
controls = []
for page in cls.settings_pages():
for page in cls.cfg_pages():
controls.extend(page.get('controls'))
return controls

@classmethod
def settings_app(cls, app_name):
def cfg_app(cls, app_name):
"""Obtain inherit dict from 'cls.config' dict named
'config.tests.apps' filtering by 'app_name' param
"""
for app in cls.settings_apps():
for app in cls.cfg_apps():
if app.get('name') == app_name:
return app
raise Exception(
"Not found for: app_name={}".format(
app_name))

@classmethod
def settings_page(cls, page_name, app_name=None):
def cfg_page(cls, page_name, app_name=None):
"""Obtain inherit dict from 'cls.config' dict named
'config.tests.apps[i].pages' filtering by 'page_name' param
"""
page_selected = None
apps = cls.settings_apps()
if isinstance(app_name, str):
apps = [cls.settings_app(app_name)]
apps = []
if app_name is None:
apps.extend(cls.cfg_apps())
else:
apps.append(cls.cfg_app(app_name))
for app in apps:
for page in app.get('pages'):
if page.get('name') == page_name:
page_selected = page
return page_selected
return page

@classmethod
def settings_control(cls, control_name, page_name=None, app_name=None):
def cfg_control(cls, control_name, page_name=None, app_name=None):
"""Obtain inherit dict from 'cls.config' dict named
'config.tests.apps[i].pages[j].controls' filtering by
'control_name' param
"""
page_selected = None
if isinstance(page_name, str):
page_selected = cls.settings_page(
page_name, app_name=app_name)
if page_selected:
for control in page_selected.get('controls'):
if control.get('name') == control_name:
return control
controls = []
if page_name is None:
controls.extend(cls.cfg_controls())
else:
controls = cls.settings_controls()
for control in controls:
if control.get('name') == control_name:
return control
controls.extend(cls.cfg_page(page_name, app_name=app_name))
for control in controls:
if control.get('name') == control_name:
return control

@classmethod
def assert_message(cls, assert_name, actual, expected, msg=None):
Expand Down
1 change: 1 addition & 0 deletions qacode/core/webs/controls/control_form.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ def __init__(self, bot, **kwargs):

def __load_settings_keys__(self, settings, update=False):
"""Load default setting for ControlForm instance"""
settings.update({"strict_rules": settings.get('strict_rules') or []})
super(ControlForm, self).__load_settings_keys__(
settings,
update=update,
Expand Down
29 changes: 12 additions & 17 deletions tests/001_functionals/suite_004_navbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,27 +33,22 @@ def setup_method(self, test_method, close=True):
super(TestNavBase, self).setup_method(
test_method,
config=settings(file_path="qacode/configs/"))
self.add_property('app', self.settings_app('qadmin'))
self.add_property('page', self.settings_page('qacode_login'))
self.add_property('app', self.cfg_app('qadmin'))
self.add_property('page', self.cfg_page('qacode_login'))
self.add_property('txt_username', self.cfg_control('txt_username'))
self.add_property('txt_password', self.cfg_control('txt_password'))
self.add_property('btn_submit', self.cfg_control('btn_submit'))
self.add_property('lst_ordered', self.cfg_control('lst_ordered'))
self.add_property(
'txt_username', self.settings_control('txt_username'))
'lst_ordered_child', self.cfg_control('lst_ordered_child'))
self.add_property('dd_menu_data', self.cfg_control('dd_menu_data'))
self.add_property(
'txt_password', self.settings_control('txt_password'))
self.add_property('btn_submit', self.settings_control('btn_submit'))
self.add_property('lst_ordered', self.settings_control('lst_ordered'))
'dd_menu_data_lists', self.cfg_control('dd_menu_data_lists'))
self.add_property(
'lst_ordered_child', self.settings_control('lst_ordered_child'))
'btn_click_invisible', self.cfg_control('btn_click_invisible'))
self.add_property(
'dd_menu_data', self.settings_control('dd_menu_data'))
self.add_property(
'dd_menu_data_lists', self.settings_control('dd_menu_data_lists'))
self.add_property(
'btn_click_invisible',
self.settings_control('btn_click_invisible'))
self.add_property(
'btn_click_visible', self.settings_control('btn_click_visible'))
self.add_property(
'title_buttons', self.settings_control('title_buttons'))
'btn_click_visible', self.cfg_control('btn_click_visible'))
self.add_property('title_buttons', self.cfg_control('title_buttons'))

def setup_login_to_inputs(self):
"""Do login before to exec some testcases"""
Expand Down
31 changes: 13 additions & 18 deletions tests/001_functionals/suite_005_controlbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,30 +40,25 @@ def setup_method(self, test_method):
"""Configure self.attribute"""
super(TestControlBase, self).setup_method(
test_method, config=settings(file_path="qacode/configs/"))
self.add_property('app', self.settings_app('qadmin'))
self.add_property('page', self.settings_page('qacode_login'))
self.add_property('app', self.cfg_app('qadmin'))
self.add_property('page', self.cfg_page('qacode_login'))
self.add_property('url', self.page.get('url'))
self.add_property('txt_username', self.cfg_control('txt_username'))
self.add_property('txt_password', self.cfg_control('txt_password'))
self.add_property('btn_submit', self.cfg_control('btn_submit'))
self.add_property('form_login', self.cfg_control('form_login'))
self.add_property('lst_ordered', self.cfg_control('lst_ordered'))
self.add_property(
'txt_username', self.settings_control('txt_username'))
'lst_ordered_child', self.cfg_control('lst_ordered_child'))
self.add_property('dd_menu_data', self.cfg_control('dd_menu_data'))
self.add_property(
'txt_password', self.settings_control('txt_password'))
self.add_property('btn_submit', self.settings_control('btn_submit'))
self.add_property('form_login', self.settings_control('form_login'))
self.add_property('lst_ordered', self.settings_control('lst_ordered'))
self.add_property(
'lst_ordered_child', self.settings_control('lst_ordered_child'))
self.add_property(
'dd_menu_data', self.settings_control('dd_menu_data'))
self.add_property(
'dd_menu_data_lists', self.settings_control('dd_menu_data_lists'))
'dd_menu_data_lists', self.cfg_control('dd_menu_data_lists'))
self.bot.navigation.get_url(self.url, wait_for_load=10)
self.add_property(
'btn_click_invisible',
self.settings_control('btn_click_invisible'))
self.add_property(
'btn_click_visible', self.settings_control('btn_click_visible'))
'btn_click_invisible', self.cfg_control('btn_click_invisible'))
self.add_property(
'title_buttons', self.settings_control('title_buttons'))
'btn_click_visible', self.cfg_control('btn_click_visible'))
self.add_property('title_buttons', self.cfg_control('title_buttons'))

def setup_login_to_inputs(self):
"""Do login before to exec some testcases"""
Expand Down
26 changes: 15 additions & 11 deletions tests/001_functionals/suite_006_controlform.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,19 @@ def setup_class(cls, **kwargs):
super(TestControlForm, cls).setup_class(
config=settings(file_path="qacode/configs/"),
skip_force=SKIP_CONTROLS)
cls.add_property('app', cls.settings_app('qadmin'))
cls.add_property('app', cls.cfg_app('qadmin'))
# page
cls.add_property('page', cls.settings_page('qacode_login'))
cls.add_property('page', cls.cfg_page('qacode_login'))
cls.add_property('url', cls.page.get('url'))
cls.add_property('form_login', cls.settings_control('form_login'))
cls.add_property('txt_username', cls.settings_control('txt_username'))
cls.add_property('txt_password', cls.settings_control('txt_password'))
cls.add_property('btn_submit', cls.settings_control('btn_submit'))
cls.add_property('form_login', cls.cfg_control('form_login'))
cls.add_property('txt_username', cls.cfg_control('txt_username'))
cls.add_property('txt_password', cls.cfg_control('txt_password'))
cls.add_property('btn_submit', cls.cfg_control('btn_submit'))
# page_inputs
cls.add_property('page_inputs', cls.settings_page('qacode_inputs'))
cls.add_property('page_inputs', cls.cfg_page('qacode_inputs'))
cls.add_property('url_inputs', cls.page_inputs.get('url'))
cls.add_property('dd_base', cls.settings_control('dd_base'))
cls.add_property('dd_multiple', cls.settings_control('dd_multiple'))
cls.add_property('dd_base', cls.cfg_control('dd_base'))
cls.add_property('dd_multiple', cls.cfg_control('dd_multiple'))
# start setup
cls.bot.navigation.get_url(cls.url)
# login
Expand All @@ -75,7 +75,8 @@ def setup_method(self, test_method):
@pytest.mark.parametrize("on_instance_search", [True, False])
@pytest.mark.parametrize("auto_reload", [True, False])
@pytest.mark.parametrize("strict_rules", [
[{"tag": "select", "type": "tag", "severity": "hight"}]
[{"tag": "select", "type": "tag", "severity": "hight"}],
[]
])
def test_controlform_instance(self, on_instance_search,
strict_rules, auto_reload):
Expand All @@ -102,7 +103,10 @@ def test_controlform_instance(self, on_instance_search,
if on_instance_search:
self.assert_is_instance(ctl.element, WebElement)
if ctl.tag == 'select':
self.assert_true(ctl.IS_DROPDOWN)
if bool(strict_rules):
self.assert_true(ctl.IS_DROPDOWN)
else:
self.assert_none(ctl.IS_DROPDOWN)

@pytest.mark.skipIf(SKIP_CONTROLS, SKIP_CONTROLS_MSG)
@pytest.mark.parametrize("auto_reload", [True, False])
Expand Down
18 changes: 9 additions & 9 deletions tests/001_functionals/suite_007_controldropdown.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,19 @@ def setup_class(cls, **kwargs):
super(TestControlDropdown, cls).setup_class(
config=settings(file_path="qacode/configs/"),
skip_force=SKIP_CONTROLS)
cls.add_property('app', cls.settings_app('qadmin'))
cls.add_property('app', cls.cfg_app('qadmin'))
# page
cls.add_property('page', cls.settings_page('qacode_login'))
cls.add_property('page', cls.cfg_page('qacode_login'))
cls.add_property('url', cls.page.get('url'))
cls.add_property('form_login', cls.settings_control('form_login'))
cls.add_property('txt_username', cls.settings_control('txt_username'))
cls.add_property('txt_password', cls.settings_control('txt_password'))
cls.add_property('btn_submit', cls.settings_control('btn_submit'))
cls.add_property('form_login', cls.cfg_control('form_login'))
cls.add_property('txt_username', cls.cfg_control('txt_username'))
cls.add_property('txt_password', cls.cfg_control('txt_password'))
cls.add_property('btn_submit', cls.cfg_control('btn_submit'))
# page_inputs
cls.add_property('page_inputs', cls.settings_page('qacode_inputs'))
cls.add_property('page_inputs', cls.cfg_page('qacode_inputs'))
cls.add_property('url_inputs', cls.page_inputs.get('url'))
cls.add_property('dd_base', cls.settings_control('dd_base'))
cls.add_property('dd_multiple', cls.settings_control('dd_multiple'))
cls.add_property('dd_base', cls.cfg_control('dd_base'))
cls.add_property('dd_multiple', cls.cfg_control('dd_multiple'))
# start setup
cls.bot.navigation.get_url(cls.url)
# login
Expand Down
28 changes: 13 additions & 15 deletions tests/001_functionals/suite_008_controltable.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,23 +43,23 @@ def setup_class(cls, **kwargs):
super(TestControlTable, cls).setup_class(
config=settings(file_path="qacode/configs/"),
skip_force=SKIP_CONTROLS)
cls.add_property('app', cls.settings_app('qadmin'))
cls.add_property('app', cls.cfg_app('qadmin'))
# page
cls.add_property('page', cls.settings_page('qacode_login'))
cls.add_property('page', cls.cfg_page('qacode_login'))
cls.add_property('url', cls.page.get('url'))
cls.add_property('form_login', cls.settings_control('form_login'))
cls.add_property('txt_username', cls.settings_control('txt_username'))
cls.add_property('txt_password', cls.settings_control('txt_password'))
cls.add_property('btn_submit', cls.settings_control('btn_submit'))
cls.add_property('form_login', cls.cfg_control('form_login'))
cls.add_property('txt_username', cls.cfg_control('txt_username'))
cls.add_property('txt_password', cls.cfg_control('txt_password'))
cls.add_property('btn_submit', cls.cfg_control('btn_submit'))
# page_inputs
cls.add_property('page_inputs', cls.settings_page('qacode_inputs'))
cls.add_property('page_inputs', cls.cfg_page('qacode_inputs'))
cls.add_property('url_inputs', cls.page_inputs.get('url'))
cls.add_property('dd_base', cls.settings_control('dd_base'))
cls.add_property('dd_menu_data', cls.settings_control('dd_menu_data'))
cls.add_property('dd_base', cls.cfg_control('dd_base'))
cls.add_property('dd_menu_data', cls.cfg_control('dd_menu_data'))
cls.add_property(
'dd_menu_data_lists', cls.settings_control('dd_menu_data_lists'))
cls.add_property('tbl_ok', cls.settings_control('tbl_ok'))
cls.add_property('tbl_html5_ok', cls.settings_control('tbl_html5_ok'))
'dd_menu_data_lists', cls.cfg_control('dd_menu_data_lists'))
cls.add_property('tbl_ok', cls.cfg_control('tbl_ok'))
cls.add_property('tbl_html5_ok', cls.cfg_control('tbl_html5_ok'))

def setup_method(self, test_method):
"""Configure self.attribute"""
Expand Down Expand Up @@ -92,9 +92,7 @@ def setup_login_to_data(self):
@pytest.mark.parametrize("on_instance_search", [True, False])
@pytest.mark.parametrize("auto_reload", [True, False])
@pytest.mark.parametrize("strict_rules", [
[{"tag": "table", "type": "tag", "severity": "hight"}],
[]
])
[{"tag": "table", "type": "tag", "severity": "hight"}]])
@pytest.mark.parametrize("ctl_name", ['tbl_ok', 'tbl_html5_ok'])
def test_controltable_instance(self, on_instance_search,
strict_rules, auto_reload, ctl_name):
Expand Down
20 changes: 6 additions & 14 deletions tests/001_functionals/suite_009_pagebase.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,21 +42,13 @@ def setup_method(self, test_method):
"""Configure self.attribute"""
super(TestPageBase, self).setup_method(
test_method, config=settings(file_path="qacode/configs/"))
self.add_property(
'app', value=self.settings_app('qadmin'))
self.add_property('app', self.cfg_app('qadmin'))
# page
self.add_property(
'page', value=self.settings_page('qacode_logout'))
self.add_property(
'url', value=self.page.get('url'))
self.add_property(
'btn_logout',
value=self.settings_control('btn_logout'))
self.add_property(
'btn_login',
value=self.settings_control('btn_login'))
self.add_property(
'page_base', value=self.settings_page('qacode_login'))
self.add_property('page', self.cfg_page('qacode_logout'))
self.add_property('url', self.page.get('url'))
self.add_property('btn_logout', self.cfg_control('btn_logout'))
self.add_property('btn_login', self.cfg_control('btn_login'))
self.add_property('page_base', self.cfg_page('qacode_login'))
self.bot.navigation.get_url(self.page_base.get('url'))

@pytest.mark.skipIf(SKIP_PAGES, SKIP_PAGES_MSG)
Expand Down

0 comments on commit 4f97654

Please sign in to comment.