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

Reply via email to