On 03/08/2016 12:43 PM, Pavel Vomacka wrote:


On 02/23/2016 03:20 PM, Lenka Doudova wrote:
Hi,

attached is patch providing missing test coverage for ID views in webUI.

Lenka


Hi,

Thank you for your patch. I have small one comment: The delete_associtaion() function duplicates code, it would be good to create auxiliary function and move that code there. NACK.

--
Pavel^3 Vomacka


Hi,

thanks for review, fixed patch attached.

Lenka
From 1b705000574722e57850b51792254f8e1f96b88f Mon Sep 17 00:00:00 2001
From: Lenka Doudova <ldoud...@redhat.com>
Date: Fri, 19 Feb 2016 14:59:19 +0100
Subject: [PATCH] WebUI test: ID views

Provides missing test coverage for ID views web UI.
---
 ipatests/test_webui/data_idviews.py |  20 ++++++
 ipatests/test_webui/test_idviews.py | 127 ++++++++++++++++++++++++++++++++++++
 ipatests/test_webui/ui_driver.py    |  66 ++++++++++++++-----
 3 files changed, 195 insertions(+), 18 deletions(-)
 create mode 100644 ipatests/test_webui/data_idviews.py
 create mode 100644 ipatests/test_webui/test_idviews.py

diff --git a/ipatests/test_webui/data_idviews.py b/ipatests/test_webui/data_idviews.py
new file mode 100644
index 0000000000000000000000000000000000000000..9d62f33fe47dcf2cbde525d687ddd80c50b367e0
--- /dev/null
+++ b/ipatests/test_webui/data_idviews.py
@@ -0,0 +1,20 @@
+#
+# Copyright (C) 2015  FreeIPA Contributors see COPYING for license
+#
+
+ENTITY = 'idview'
+USER_FACET = 'idoverrideuser'
+GROUP_FACET = 'idoverridegroup'
+HOST_FACET = 'appliedtohosts'
+
+PKEY = 'itest-view'
+DATA = {
+    'pkey': PKEY,
+    'add': [
+        ('textbox', 'cn', PKEY),
+        ('textarea', 'description', 'Description of ID view'),
+    ],
+    'mod': [
+        ('textarea', 'description', 'Different description'),
+    ],
+}
diff --git a/ipatests/test_webui/test_idviews.py b/ipatests/test_webui/test_idviews.py
new file mode 100644
index 0000000000000000000000000000000000000000..b7f5c312eb2a5a7680b55126ae91446b5010a5b8
--- /dev/null
+++ b/ipatests/test_webui/test_idviews.py
@@ -0,0 +1,127 @@
+#
+# Copyright (C) 2015  FreeIPA Contributors see COPYING for license
+#
+
+from ipatests.test_webui.ui_driver import UI_driver
+from ipatests.test_webui.ui_driver import screenshot
+import ipatests.test_webui.data_idviews as idview
+import ipatests.test_webui.data_user as user
+import ipatests.test_webui.data_group as group
+import ipatests.test_webui.data_hostgroup as hostgroup
+from ipatests.test_webui.test_host import host_tasks, ENTITY as HOST_ENTITY
+import pytest
+
+DATA_USER = {
+    'pkey': user.PKEY,
+    'add': [
+        ('combobox', 'ipaanchoruuid', user.PKEY),
+        ('textbox', 'uid', 'iduser'),
+        ('textbox', 'gecos', 'id user'),
+        ('textbox', 'uidnumber', 1),
+        ('textbox', 'gidnumber', 1),
+        ('textbox', 'loginshell', 'shell'),
+        ('textbox', 'homedirectory', 'home'),
+        ('textarea', 'description', 'desc'),
+    ],
+    'mod': [
+        ('textbox', 'uid', 'moduser'),
+        ('textbox', 'uidnumber', 3),
+    ],
+}
+
+DATA_GROUP = {
+    'pkey': group.PKEY,
+    'add': [
+        ('combobox', 'ipaanchoruuid', group.PKEY),
+        ('textbox', 'cn', 'idgroup'),
+        ('textbox', 'gidnumber', 2),
+        ('textarea', 'description', 'desc'),
+    ],
+    'mod': [
+        ('textbox', 'cn', 'modgroup'),
+        ('textbox', 'gidnumber', 3),
+    ],
+}
+
+
+@pytest.mark.tier1
+class test_idviews(UI_driver):
+
+    @screenshot
+    def test_crud(self):
+        """
+        Basic CRUD: ID view
+        """
+        self.init_app()
+        self.basic_crud(
+            idview.ENTITY, idview.DATA, default_facet=idview.USER_FACET)
+
+    @screenshot
+    def test_overrides(self):
+        """
+        User and group overrides
+        """
+        self.init_app()
+
+        self.add_record(user.ENTITY, user.DATA, navigate=False)
+        self.add_record(group.ENTITY, group.DATA)
+        self.add_record(idview.ENTITY, idview.DATA)
+
+        self.navigate_to_record(idview.PKEY)
+        parent_entity = 'idview'
+
+        # user override
+        self.add_record(parent_entity, DATA_USER, facet=idview.USER_FACET)
+        self.navigate_to_record(user.PKEY)
+        self.mod_record(idview.USER_FACET, DATA_USER)
+        self.delete_action(idview.ENTITY, user.PKEY)
+
+        # group override
+        self.navigate_to_record(idview.PKEY)
+        self.switch_to_facet(idview.GROUP_FACET)
+        self.add_record(parent_entity, DATA_GROUP, facet=idview.GROUP_FACET)
+        self.navigate_to_record(group.PKEY)
+        self.mod_record(idview.GROUP_FACET, DATA_GROUP)
+        self.delete_action(idview.ENTITY, group.PKEY)
+
+        # cleanup
+        self.delete(idview.ENTITY, [idview.DATA])
+        self.delete(user.ENTITY, [user.DATA])
+        self.delete(group.ENTITY, [group.DATA])
+
+    @screenshot
+    def test_hosts(self):
+        """
+        Apply to hosts and host groups
+        """
+        self.init_app()
+        host = host_tasks()
+        host.setup(self.driver, self.config)
+
+        self.add_record(HOST_ENTITY, host.data)
+        self.add_record(hostgroup.ENTITY, hostgroup.DATA)
+        self.navigate_to_record(hostgroup.PKEY)
+        self.add_associations([host.pkey])
+        self.add_record(idview.ENTITY, idview.DATA)
+
+        self.navigate_to_record(idview.PKEY)
+        self.switch_to_facet(idview.HOST_FACET)
+        parent_entity = 'idview'
+
+        # apply to host
+        self.add_associations(
+            [host.pkey], facet='appliedtohosts', facet_btn='idview_apply')
+        self.delete_record([host.pkey], facet_btn='idview_unapply')
+
+        # apply to hostgroup
+        self.add_associations(
+            [hostgroup.PKEY], facet_btn='idview_apply_hostgroups',
+            member_pkeys=[host.pkey])
+        self.delete_associations(
+            [hostgroup.PKEY], facet_btn='idview_unapply_hostgroups',
+            member_pkeys=[host.pkey])
+
+        # cleanup
+        self.delete(idview.ENTITY, [idview.DATA])
+        self.delete(hostgroup.ENTITY, [hostgroup.DATA])
+        self.delete(HOST_ENTITY, [host.data])
diff --git a/ipatests/test_webui/ui_driver.py b/ipatests/test_webui/ui_driver.py
index ad3a9100f65f8ce64aaaf707df04a2bd411c3299..8611ad3ca0ca3f9447157f66789785da9b1fe907 100644
--- a/ipatests/test_webui/ui_driver.py
+++ b/ipatests/test_webui/ui_driver.py
@@ -983,7 +983,9 @@ class UI_driver(object):
         link.click()
         self.wait_for_request()
 
-    def delete_record(self, pkeys, fields=None, parent=None, table_name=None):
+    def delete_record(
+            self, pkeys, fields=None, parent=None, table_name=None,
+            facet_btn='remove'):
         """
         Delete records with given pkeys in currently opened search table.
         """
@@ -1003,9 +1005,9 @@ class UI_driver(object):
             if table_name and parent:
                 s = self.get_table_selector(table_name)
                 table = self.find(s, By.CSS_SELECTOR, parent, strict=True)
-                self.button_click('remove', table)
+                self.button_click(facet_btn, table)
             else:
-                self.facet_button_click('remove')
+                self.facet_button_click(facet_btn)
             if fields:
                 self.fill_fields(fields)
             self.dialog_button_click('ok')
@@ -1323,30 +1325,58 @@ class UI_driver(object):
         self.dialog_button_click('add')
         self.wait_for_request()
 
-    def add_associations(self, pkeys, facet=None, delete=False):
+    def prepare_associations(
+            self, pkeys, facet=None, facet_btn='add', member_pkeys=None):
+        """
+        Helper function for add_associations and delete_associations
+        """
+        if facet:
+            self.switch_to_facet(facet)
+
+        self.facet_button_click(facet_btn)
+        self.wait()
+        self.wait_for_request()
+
+        for key in pkeys:
+            self.select_record(key, table_name='available')
+            self.button_click('add')
+
+        self.dialog_button_click('add')
+        self.wait_for_request()
+
+        if member_pkeys:
+            check_pkeys = member_pkeys
+        else:
+            check_pkeys = pkeys
+
+        return check_pkeys
+
+    def add_associations(
+            self, pkeys, facet=None, delete=False, facet_btn='add',
+            member_pkeys=None):
         """
         Add associations
         """
-        if facet:
-            self.switch_to_facet(facet)
+        check_pkeys = self.prepare_associations(
+            pkeys, facet, facet_btn, member_pkeys)
 
-        self.facet_button_click('add')
-        self.wait()
-        self.wait_for_request()
-
-        for key in pkeys:
-            self.select_record(key, table_name='available')
-            self.button_click('add')
-
-        self.dialog_button_click('add')
-        self.wait_for_request()
-
-        for key in pkeys:
+        for key in check_pkeys:
             self.assert_record(key)
             if delete:
                 self.delete_record(key)
                 self.assert_record(key, negative=True)
 
+    def delete_associations(
+            self, pkeys, facet=None, facet_btn='remove', member_pkeys=None):
+        """
+        Remove associations
+        """
+        check_pkeys = self.prepare_associations(
+            pkeys, facet, facet_btn, member_pkeys)
+
+        for key in check_pkeys:
+            self.assert_record(key, negative=True)
+
     def add_table_associations(self, table_name, pkeys, parent=False, delete=False):
         """
         Add value to table (association|rule|...)
-- 
2.5.0

-- 
Manage your subscription for the Freeipa-devel mailing list:
https://www.redhat.com/mailman/listinfo/freeipa-devel
Contribute to FreeIPA: http://www.freeipa.org/page/Contribute/Code

Reply via email to