URL: https://github.com/freeipa/freeipa/pull/1728 Author: varunmylaraiah Title: #1728: Updated existing test_group Action: opened
PR body: """ Patch 1 1. Partially updated test_group 2. Added few missing test scenarios (Negative test-cases, add/edit multiple groups etc..) Signed-off-by: v27 <v...@mvarun.blr.redhat.com> Signed-off-by: Varun Mylaraiah <mva...@redhat.com> """ To pull the PR as Git branch: git remote add ghfreeipa https://github.com/freeipa/freeipa git fetch ghfreeipa pull/1728/head:pr1728 git checkout pr1728
From 5b763f3bd8751d906fb5ce3e44b663ee6dd72944 Mon Sep 17 00:00:00 2001 From: v27 <v...@mvarun.blr.redhat.com> Date: Thu, 22 Mar 2018 17:26:08 +0530 Subject: [PATCH] Updated existing test_group Patch 1 1. Partially updated test_group 2. Added few missing test scenarios (Negative test-cases, add/edit multiple groups etc..) Signed-off-by: v27 <v...@mvarun.blr.redhat.com> Signed-off-by: Varun Mylaraiah <mva...@redhat.com> --- ipatests/test_webui/data_group.py | 39 ++++++++++++ ipatests/test_webui/test_group.py | 109 ++++++++++++++++++++++++++++++++ ipatests/test_webui/ui_driver.py | 129 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 277 insertions(+) diff --git a/ipatests/test_webui/data_group.py b/ipatests/test_webui/data_group.py index 517f98f04b..cb041c9794 100644 --- a/ipatests/test_webui/data_group.py +++ b/ipatests/test_webui/data_group.py @@ -78,3 +78,42 @@ ('textbox', 'gidnumber', '77777'), ] } + +PKEY7 = '' +DATA7 = { + 'pkey': PKEY7, + 'add': [ + ('textbox', 'cn', PKEY7), + ('textarea', 'description', 'Empty Group name'), + ] +} + +PKEY8 = ';test-gr@up' +DATA8 = { + 'pkey': PKEY8, + 'add': [ + ('textbox', 'cn', PKEY8), + ('textarea', 'description', 'Invalid Group name'), + ] +} + +PKEY9 = 'itest-group9' +DATA9 = { + 'pkey': PKEY9, + 'add': [ + ('textbox', 'cn', PKEY9), + ('textarea', 'description', 'test-group9 desc'), + ('radio', 'type', 'nonposix'), + ] +} + +PKEY10 = 'itest-group10' +DATA10 = { + 'pkey': PKEY10, + 'add': [ + ('textbox', 'cn', PKEY10), + ('textarea', 'description', 'test-group10 desc'), + ('radio', 'type', 'nonposix'), + ] +} + diff --git a/ipatests/test_webui/test_group.py b/ipatests/test_webui/test_group.py index db9acef345..18957d5b74 100644 --- a/ipatests/test_webui/test_group.py +++ b/ipatests/test_webui/test_group.py @@ -1,3 +1,4 @@ +#testing # Authors: # Petr Vobornik <pvobo...@redhat.com> # @@ -75,6 +76,114 @@ def test_group_types(self): def check_posix_enabled(self, enabled): self.assert_disabled("[name=gidnumber]", negative=enabled) + @screenshot + def test_add_group_negative(self): + """ + Negative test for adding groups + """ + self.init_app() + + self.empty_group_name() + self.invalid_group_name() + self.duplicate_group_name() + self.tailing_spaces_in_group_description() + self.leading_spaces_in_group_description() + + def empty_group_name(self): + expected_error = 'Required field' + self.navigate_to_entity(group.ENTITY) + self.facet_button_click('add') + self.dialog_button_click('add') + elem = self.find(".widget[name='cn']") + self.assert_field_validation(expected_error, parent=elem) + self.dialog_button_click('cancel') + + def invalid_group_name(self): + expected_error = 'may only include letters, numbers, _, -, . and $' + pkey = ';test-gr@up' + self.navigate_to_entity(group.ENTITY) + self.facet_button_click('add') + self.fill_input('cn', pkey) + elem = self.find(".widget[name='cn']") + self.assert_field_validation(expected_error, parent=elem) + self.dialog_button_click('cancel') + + def duplicate_group_name(self): + pkey = 'editors' + expected_error = 'group with name "editors" already exists' + self.navigate_to_entity(group.ENTITY) + self.facet_button_click('add') + self.fill_input('cn', pkey) + self.cancel_retry_dialog(expected_error) + + def tailing_spaces_in_group_description(self): + pkey = 'itest_group0' + desc = 'with_trailing_space ' + expected_error = 'invalid \'desc\': Leading and trailing spaces are not allowed' + self.navigate_to_entity(group.ENTITY) + self.facet_button_click('add') + self.fill_input('cn', pkey) + self.fill_textarea('description', desc) + self.cancel_retry_dialog(expected_error) + + def leading_spaces_in_group_description(self): + pkey = 'itest_group0' + desc = ' with_leading_space' + expected_error = 'invalid \'desc\': Leading and trailing spaces are not allowed' + self.navigate_to_entity(group.ENTITY) + self.facet_button_click('add') + self.fill_input('cn', pkey) + self.fill_textarea('description', desc) + self.cancel_retry_dialog(expected_error) + + def cancel_retry_dialog(self, expected_error): + self.dialog_button_click('add') + dialog = self.get_last_error_dialog() + assert (expected_error in dialog.text) + self.wait_for_request() + self.dialog_button_click('retry') + self.wait_for_request() + self.dialog_button_click('cancel') + self.dialog_button_click('cancel') + + @screenshot + def test_add_multiple_group(self): + """ + Use 'add and add another' button to create multiple groups at one shot + """ + self.init_app() + + self.add_posix_and_nonposix_group() + self.add_two_nonposix_group() + self.add_two_posix_group() + + def add_posix_and_nonposix_group(self): + self.add_multiple_record(group.ENTITY, group.DATA, group.DATA2, dialog_btn='add_and_add_another') + + def add_two_nonposix_group(self): + self.add_multiple_record(group.ENTITY, group.DATA9, group.DATA10, dialog_btn='add_and_add_another') + + def add_two_posix_group(self): + self.add_multiple_record(group.ENTITY, group.DATA5, group.DATA6, dialog_btn='add_and_add_another') + + @screenshot + def test_add_and_edit_group(self): + """ + 1. add and switch to edit mode + 2. add and cancel + """ + self.init_app() + + self.add_and_edit() + self.add_and_cancel() + + def add_and_edit(self): + self.add_and_edit_record(group.ENTITY, group.DATA, dialog_btn='add_and_edit') + self.delete_action() + + def add_and_cancel(self): + self.add_and_edit_record(group.ENTITY, group.DATA, dialog_btn='cancel') + @screenshot def test_actions(self): """ diff --git a/ipatests/test_webui/ui_driver.py b/ipatests/test_webui/ui_driver.py index 71efe6705c..2b7f819af9 100644 --- a/ipatests/test_webui/ui_driver.py +++ b/ipatests/test_webui/ui_driver.py @@ -1875,3 +1875,132 @@ def assert_action_list_action(self, action, visible=True, enabled=True, is_enabled = not self.has_class(li, 'disabled') assert is_enabled == enabled, ('Invalid enabled state of action item %s. ' 'Expected: %s') % (action, str(visible)) + + def assert_field_validation(self, expect_error, parent=None): + """ + Assert for error in field validation + """ + + if not parent: + parent = self.get_form() + + req_field_css = '.help-block[name="error_link"]' + + res = self.find(req_field_css, By.CSS_SELECTOR, context=parent) + assert expect_error in res.text, 'No error found' + + def add_multiple_record(self, entity, data1, data2, facet='search', facet_btn='add', + dialog_btn='add', dialog_btn2='add', pre_delete=True, dialog_name='add', navigate=True, + combobox_input=None): + """ + Add records. + + Expected data format: + { + 'pkey': 'key', + add: [ + ('widget_type', 'key', 'value'), + ('widget_type', 'key2', 'value2'), + ], + } + """ + pkey1 = data1['pkey'] + pkey2 = data2['pkey'] + pkey = [pkey1, pkey2] + + if navigate: + self.navigate_to_entity(entity, facet) + + # check facet + self.assert_facet(entity, facet) + + # delete if already exists + if pre_delete: + self.delete_record(pkey) + + # open add dialog + self.assert_no_dialog() + self.facet_button_click(facet_btn) + self.assert_dialog(dialog_name) + + # fill dialog + self.fill_fields(data1['add'], combobox_input=combobox_input) + + # confirm dialog + self.dialog_button_click(dialog_btn) + self.wait_for_request() + self.wait_for_request() + + # fill dialog-2 + self.fill_fields(data2['add'], combobox_input=combobox_input) + + # confirm dialog-2 + self.dialog_button_click(dialog_btn2) + self.wait_for_request() + self.wait_for_request() + + # check expected error/warning/info + expected = ['error_4304_info'] + dialog_info = self.get_dialog_info() + if dialog_info and dialog_info['name'] in expected: + self.dialog_button_click('ok') + self.wait_for_request() + + # check for error + self.assert_no_error_dialog() + self.wait_for_request() + self.wait_for_request(0.4) + + # Select multiple records and delete + self.delete_record(pkey) + + def add_and_edit_record(self, entity, data1, facet='search', facet_btn='add', dialog_btn=None, pre_delete=True, + dialog_name='add', navigate=True, combobox_input=None): + """ + Add and edit records. + """ + pkey1 = data1['pkey'] + + if navigate: + self.navigate_to_entity(entity, facet) + + # check facet + self.assert_facet(entity, facet) + + # delete if already exists + if pre_delete: + self.delete_record(pkey1, data1.get('del')) + + # open add dialog + self.assert_no_dialog() + self.facet_button_click(facet_btn) + self.assert_dialog(dialog_name) + + # fill dialog + self.fill_fields(data1['add'], combobox_input=combobox_input) + + if dialog_btn == 'add_and_edit': + # confirm dialog + self.dialog_button_click(dialog_btn) + self.wait_for_request(n=2) + self.switch_to_facet('details') + self.action_list_action('make_posix') + self.wait_for_request(n=2) + self.assert_no_error_dialog() + self.assert_text_field('external', 'POSIX', element='span') + + # check expected error/warning/info + expected = ['error_4304_info'] + dialog_info = self.get_dialog_info() + if dialog_info and dialog_info['name'] in expected: + self.dialog_button_click('ok') + self.wait_for_request() + + # check for error + self.assert_no_error_dialog() + self.wait_for_request() + self.wait_for_request(0.4) + + if dialog_btn == 'cancel': + self.dialog_button_click(dialog_btn) +
_______________________________________________ FreeIPA-devel mailing list -- freeipa-devel@lists.fedorahosted.org To unsubscribe send an email to freeipa-devel-le...@lists.fedorahosted.org