URL: https://github.com/freeipa/freeipa/pull/1740
Author: Rezney
 Title: #1740: test_webui: user life-cycles
Action: opened

PR body:
"""
Add user life-cycles test cases.

https://pagure.io/freeipa/issue/7463
"""

To pull the PR as Git branch:
git remote add ghfreeipa https://github.com/freeipa/freeipa
git fetch ghfreeipa pull/1740/head:pr1740
git checkout pr1740
From da41318adea1ab733b4eaf0dd6a866d7e2f0552c Mon Sep 17 00:00:00 2001
From: Michal Reznik <mrez...@redhat.com>
Date: Mon, 26 Mar 2018 12:32:29 +0200
Subject: [PATCH 1/3] test_webui: add user life-cycles tests

Add user life-cycles test cases.

https://pagure.io/freeipa/issue/7463
---
 ipatests/test_webui/test_user.py | 100 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 100 insertions(+)

diff --git a/ipatests/test_webui/test_user.py b/ipatests/test_webui/test_user.py
index bf3d359408..7a1f7a47a2 100644
--- a/ipatests/test_webui/test_user.py
+++ b/ipatests/test_webui/test_user.py
@@ -37,6 +37,10 @@
     pass
 
 
+USR_EXIST = 'user with name "{}" already exists'
+ENTRY_EXIST = 'This entry already exists'
+ACTIVE_ERR = 'active user with name "{}" already exists'
+
 @pytest.mark.tier1
 class user_tasks(UI_driver):
     def load_file(self, path):
@@ -408,3 +412,99 @@ def test_noprivate_gidnumber(self):
 
         self.add_record(user.ENTITY, user.DATA4, combobox_input='gidnumber')
         self.delete(user.ENTITY, [user.DATA4])
+
+@pytest.mark.tier1
+class TestLifeCycles(UI_driver):
+
+    def test_life_cycles(self):
+        """
+        Test user life-cycles
+        """
+
+        self.init_app()
+
+        # create "itest-user" and send him to preserved
+        self.add_record(user.ENTITY, user.DATA)
+        self.delete_record(user.DATA.get('pkey'), confirm_btn=None)
+        self.check_option('preserve', value='true')
+        self.dialog_button_click('ok')
+
+        # try to add the same user again (should fail)
+        self.add_record(user.ENTITY, user.DATA, assert_on=False)
+        err_dialog_txt = self.get_last_error_dialog().text
+        assert USR_EXIST.format(user.DATA.get('pkey')) in err_dialog_txt
+        self.close_all_dialogs()
+        self.wait()
+
+        # restore "itest-user" user
+        self.switch_to_facet('search_preserved')
+        self.select_record(user.DATA.get('pkey'))
+        self.button_click('undel')
+        self.dialog_button_click('ok')
+        self.assert_no_error_dialog()
+        self.assert_notification(assert_text='1 user(s) restored')
+        self.wait()
+
+        # add already existing user "itest-user" to stage and try to activate
+        # the latter (should fail)
+        self.add_record('stageuser', user.DATA)
+        self.select_record(user.DATA.get('pkey'))
+        self.button_click('activate')
+        self.dialog_button_click('ok')
+
+        err_msg = ACTIVE_ERR.format(user.DATA.get('pkey'))
+        self.assert_last_dialog_details(err_msg)
+        self.dialog_button_click('ok')
+
+        # delete "itest-user" staged user
+        self.delete_record(user.DATA.get('pkey'))
+        self.assert_record(user.DATA.get('pkey'), negative=True)
+
+        # add "itest-user2" and send him to staged (through preserved)
+        self.close_all_dialogs()
+        self.add_record(user.ENTITY, user.DATA2)
+        self.delete_record(user.DATA2.get('pkey'), confirm_btn=None)
+        self.check_option('preserve', value='true')
+        self.dialog_button_click('ok')
+
+        self.switch_to_facet('search_preserved')
+        self.select_record(user.DATA2.get('pkey'))
+        self.button_click('batch_stage')
+        self.dialog_button_click('ok')
+        self.assert_no_error_dialog()
+        self.wait(0.7)
+        self.assert_notification(assert_text='1 users(s) staged')
+
+        # add new "itest-user2" - one is already staged (should pass)
+        self.add_record(user.ENTITY, user.DATA2)
+        self.assert_record(user.DATA2.get('pkey'))
+
+        # send active "itest-user2" to preserved
+        self.delete_record(user.DATA2.get('pkey'), confirm_btn=None)
+        self.check_option('preserve', value='true')
+        self.dialog_button_click('ok')
+
+        # try to activate staged "itest-user2" while one is already preserved
+        # (should fail)
+        self.navigate_to_entity('stageuser')
+        self.select_record(user.DATA2.get('pkey'))
+        self.button_click('activate')
+        self.dialog_button_click('ok')
+        self.assert_last_dialog_details(ENTRY_EXIST)
+        self.dialog_button_click('ok')
+
+        # delete preserved "itest-user2" and activate the staged one
+        # (should pass)
+        self.switch_to_facet('search_preserved')
+        self.delete_record(user.DATA2.get('pkey'))
+
+        self.navigate_to_entity('stageuser')
+        self.select_record(user.DATA2.get('pkey'))
+        self.button_click('activate')
+        self.wait()
+        self.dialog_button_click('ok')
+
+        # cleanup
+        self.navigate_to_entity('user')
+        self.delete_record(user.DATA2.get('pkey'))
+        self.delete_record(user.DATA.get('pkey'))

From 000839ac85a0c67bd4f4e8d28f5a5ae0fa6ce7a8 Mon Sep 17 00:00:00 2001
From: Michal Reznik <mrez...@redhat.com>
Date: Mon, 26 Mar 2018 12:34:25 +0200
Subject: [PATCH 2/3] test_web_ui: extend ui_driver methods

Add close_all_dialogs(), assert_last_dialog_details() methods and
tweak add_record() method to skip asserts so we can assert later.

https://pagure.io/freeipa/issue/7463
---
 ipatests/test_webui/ui_driver.py | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/ipatests/test_webui/ui_driver.py b/ipatests/test_webui/ui_driver.py
index 6b42218be1..e17809f5d7 100644
--- a/ipatests/test_webui/ui_driver.py
+++ b/ipatests/test_webui/ui_driver.py
@@ -727,6 +727,20 @@ def close_notifications(self):
             else:
                 break
 
+    def close_all_dialogs(self):
+        """
+        Close all currently opened dialogs
+        """
+        self.wait()
+        while True:
+            s = ".modal.fade.in .modal-header button.close"
+            btn = self.find(s, By.CSS_SELECTOR)
+            if btn:
+                btn.click()
+                self.wait(0.5)
+            else:
+                break
+
     def get_form(self):
         """
         Get last dialog or visible facet
@@ -1241,6 +1255,8 @@ def find_record(self, entity, data, facet='search', dummy='XXXXXXX'):
     def add_record(self, entity, data, facet='search', facet_btn='add',
                    dialog_btn='add', delete=False, pre_delete=True,
                    dialog_name='add', navigate=True, combobox_input=None):
+                   dialog_name='add', navigate=True, combobox_input=None,
+                   assert_on=True):
         """
         Add records.
 
@@ -1289,6 +1305,9 @@ def add_record(self, entity, data, facet='search', facet_btn='add',
             self.dialog_button_click('ok')
             self.wait_for_request()
 
+        if not assert_on:
+            return
+
         # check for error
         self.assert_no_error_dialog()
         self.wait_for_request()
@@ -1969,3 +1988,19 @@ def assert_notification(self, type='success', assert_text=None):
         assert is_present, "Notification not present"
         if assert_text:
             assert assert_text in is_present.text
+
+    def assert_last_dialog_details(self, text_tba):
+        """
+        Assert clickable "Show details" paragraph text of last opened dialog
+        """
+
+        err_dialog = self.get_last_error_dialog()
+
+        # open "Show details" paragraph
+        s = 'a[title="Show details"]'
+        details = self.find(s, By.CSS_SELECTOR)
+        details.click()
+
+        s = 'ul li p'
+        err_msg = self.find(s, By.CSS_SELECTOR, context=err_dialog).text
+        assert text_tba in err_msg

From 785fb48a5d9a5cf4974f4b2a4fc262fe175c7a68 Mon Sep 17 00:00:00 2001
From: Michal Reznik <mrez...@redhat.com>
Date: Mon, 26 Mar 2018 13:21:08 +0200
Subject: [PATCH 3/3] temp commit: activate WebUI tests

---
 .freeipa-pr-ci.yaml | 158 +++-------------------------------------------------
 1 file changed, 9 insertions(+), 149 deletions(-)

diff --git a/.freeipa-pr-ci.yaml b/.freeipa-pr-ci.yaml
index c95bef79e2..7de92aab11 100644
--- a/.freeipa-pr-ci.yaml
+++ b/.freeipa-pr-ci.yaml
@@ -3,6 +3,10 @@ topologies:
     name: build
     cpu: 2
     memory: 3800
+  ipaserver: &ipaserver
+    name: ipaserver
+    cpu: 1
+    memory: 2400
   master_1repl: &master_1repl
     name: master_1repl
     cpu: 4
@@ -27,158 +31,14 @@ jobs:
         timeout: 1800
         topology: *build
 
-  fedora-27/simple_replication:
+  fedora-27/test_webui:
     requires: [fedora-27/build]
     priority: 50
     job:
-      class: RunPytest
+      class: RunWebuiTests
       args:
         build_url: '{fedora-27/build_url}'
-        test_suite: test_integration/test_simple_replication.py
+        test_suite: test_webui
         template: *ci-master-f27
-        timeout: 3600
-        topology: *master_1repl
-
-  fedora-27/caless:
-    requires: [fedora-27/build]
-    priority: 50
-    job:
-      class: RunPytest
-      args:
-        build_url: '{fedora-27/build_url}'
-        test_suite: test_integration/test_caless.py::TestServerReplicaCALessToCAFull
-        template: *ci-master-f27
-        timeout: 3600
-        topology: *master_1repl
-
-  fedora-27/external_ca:
-    requires: [fedora-27/build]
-    priority: 50
-    job:
-      class: RunPytest
-      args:
-        build_url: '{fedora-27/build_url}'
-        test_suite: test_integration/test_external_ca.py
-        template: *ci-master-f27
-        timeout: 3600
-        topology: *master_1repl
-
-  fedora-27/test_topologies:
-    requires: [fedora-27/build]
-    priority: 50
-    job:
-      class: RunPytest
-      args:
-        build_url: '{fedora-27/build_url}'
-        test_suite: test_integration/test_topologies.py
-        template: *ci-master-f27
-        timeout: 3600
-        topology: *master_1repl
-
-  fedora-27/test_sudo:
-    requires: [fedora-27/build]
-    priority: 50
-    job:
-      class: RunPytest
-      args:
-        build_url: '{fedora-27/build_url}'
-        test_suite: test_integration/test_sudo.py
-        template: *ci-master-f27
-        timeout: 3600
-        topology: *master_1repl_1client
-
-  fedora-27/test_kerberos_flags:
-    requires: [fedora-27/build]
-    priority: 50
-    job:
-      class: RunPytest
-      args:
-        build_url: '{fedora-27/build_url}'
-        test_suite: test_integration/test_kerberos_flags.py
-        template: *ci-master-f27
-        timeout: 3600
-        topology: *master_1repl_1client
-
-  fedora-27/test_http_kdc_proxy:
-    requires: [fedora-27/build]
-    priority: 50
-    job:
-      class: RunPytest
-      args:
-        build_url: '{fedora-27/build_url}'
-        test_suite: test_integration/test_http_kdc_proxy.py
-        template: *ci-master-f27
-        timeout: 3600
-        topology: *master_1repl_1client
-
-  fedora-27/test_forced_client_enrolment:
-    requires: [fedora-27/build]
-    priority: 50
-    job:
-      class: RunPytest
-      args:
-        build_url: '{fedora-27/build_url}'
-        test_suite: test_integration/test_forced_client_reenrollment.py
-        template: *ci-master-f27
-        timeout: 3600
-        topology: *master_1repl_1client
-
-  fedora-27/test_advise:
-    requires: [fedora-27/build]
-    priority: 50
-    job:
-      class: RunPytest
-      args:
-        build_url: '{fedora-27/build_url}'
-        test_suite: test_integration/test_advise.py
-        template: *ci-master-f27
-        timeout: 3600
-        topology: *master_1repl
-
-  fedora-27/test_testconfig:
-    requires: [fedora-27/build]
-    priority: 50
-    job:
-      class: RunPytest
-      args:
-        build_url: '{fedora-27/build_url}'
-        test_suite: test_integration/test_testconfig.py
-        template: *ci-master-f27
-        timeout: 3600
-        topology: *master_1repl
-
-  fedora-27/test_service_permissions:
-    requires: [fedora-27/build]
-    priority: 50
-    job:
-      class: RunPytest
-      args:
-        build_url: '{fedora-27/build_url}'
-        test_suite: test_integration/test_service_permissions.py
-        template: *ci-master-f27
-        timeout: 3600
-        topology: *master_1repl
-
-  fedora-27/test_netgroup:
-    requires: [fedora-27/build]
-    priority: 50
-    job:
-      class: RunPytest
-      args:
-        build_url: '{fedora-27/build_url}'
-        test_suite: test_integration/test_netgroup.py
-        template: *ci-master-f27
-        timeout: 3600
-        topology: *master_1repl
-
-  fedora-27/test_vault:
-    requires: [fedora-27/build]
-    priority: 50
-    job:
-      class: RunPytest
-      args:
-        build_url: '{fedora-27/build_url}'
-        test_suite: test_integration/test_vault.py
-        template: *ci-master-f27
-        timeout: 3600
-        topology: *master_1repl
+        timeout: 7200
+        topology: *ipaserver
_______________________________________________
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