From dcfe78e94d8ae5af29d807c073fd740b1c5aa1c3 Mon Sep 17 00:00:00 2001 From: Alexander Koryagin Date: Wed, 24 Feb 2016 12:00:49 +0300 Subject: [PATCH] Add test for sharing Murano App without permission. Scenario: 1) Login as admin; 2) Identity -> Users: Create User: User Name: Test_service_user Primary Project: service Enabled: Yes 3) Login to Horizon as an 'Test_service_user'; 4) Murano -> Manage -> Packages: Import Package Set public Off, Active On; 5) Try to modify created package and set Public = On. Error: You are not allowed to perform this operation 6) Delete new package Targets: blueprint murano-ui-integration-test-coverage Change-Id: I6444b27e137c3bf16d9ea4daf16342d96c2ce8d1 --- muranodashboard/tests/functional/base.py | 31 +++++++- .../tests/functional/sanity_check.py | 71 +++++++++++++++++++ 2 files changed, 99 insertions(+), 3 deletions(-) diff --git a/muranodashboard/tests/functional/base.py b/muranodashboard/tests/functional/base.py index b51b9715..087e690e 100644 --- a/muranodashboard/tests/functional/base.py +++ b/muranodashboard/tests/functional/base.py @@ -110,6 +110,22 @@ class UITestCase(BaseDeps): 'Environment {0} was not deleted in {1} seconds'.format( environment_id, timeout)) + def create_user(self, name, password=None, email=None, tenant_id=None): + if tenant_id is None: + tenant_id = self.keystone_client.tenant_id + self.keystone_client.users.create(name, password=password, email=email, + tenant_id=tenant_id, enabled=True) + + def delete_user(self, name): + self.keystone_client.users.find(name=name).delete() + + def get_tenantid_by_name(self, name): + """Returns TenantID of the project by project's name""" + tenant_id = [tenant.id for tenant + in self.keystone_client.tenants.list() + if tenant.name == name] + return tenant_id[-1] + def create_project(self, name): project = self.keystone_client.tenants.create( tenant_name=name, description="For Test Purposes", enabled=True) @@ -153,14 +169,23 @@ class UITestCase(BaseDeps): filename = os.path.join(screenshot_dir, name + '.png') self.driver.get_screenshot_as_file(filename) - def log_in(self): - self.fill_field(by.By.ID, 'id_username', cfg.common.user) - self.fill_field(by.By.ID, 'id_password', cfg.common.password) + def log_in(self, username=None, password=None): + username = username or cfg.common.user + password = password or cfg.common.password + self.fill_field(by.By.ID, 'id_username', username) + self.fill_field(by.By.ID, 'id_password', password) self.driver.find_element_by_xpath("//button[@type='submit']").click() murano = self.driver.find_element_by_xpath(consts.Murano) if 'collapsed' in murano.get_attribute('class'): murano.click() + def log_out(self): + user_menu = self.driver.find_element( + by.By.XPATH, "//ul[contains(@class, 'navbar-right')]") + user_menu.find_element( + by.By.XPATH, ".//span[@class='user-name']").click() + user_menu.find_element(by.By.LINK_TEXT, 'Sign Out').click() + def fill_field(self, by_find, field, value): self.driver.find_element(by=by_find, value=field).clear() self.driver.find_element(by=by_find, value=field).send_keys(value) diff --git a/muranodashboard/tests/functional/sanity_check.py b/muranodashboard/tests/functional/sanity_check.py index 2ec98987..7ac707b1 100644 --- a/muranodashboard/tests/functional/sanity_check.py +++ b/muranodashboard/tests/functional/sanity_check.py @@ -1095,6 +1095,77 @@ class TestSuitePackages(base.PackageTestCase): self.wait_for_alert_message() self.check_element_not_on_page(by.By.XPATH, delete_new_category_btn) + def test_sharing_app_without_permission(self): + """Tests sharing Murano App without permission + + Scenario: + 1) Login as admin; + 2) Identity -> Users: Create User: + User Name: Test_service_user + Primary Project: service + Enabled: Yes + 3) Login to Horizon as an 'Test_service_user'; + 4) Murano -> Manage -> Packages: Import Package + Set public Off, Active On + 5) Try to modify created package and set Public = On. + Error: You are not allowed to perform this operation + 6) Delete new package + """ + service_prj_name = 'service' + new_user = {'name': 'Test_service_user', + 'password': 'somepassword', + 'email': 'test_serv_user@email.com'} + try: + self.delete_user(new_user['name']) + except Exception: + pass + # Create new user in 'service' prj + service_prj_id = self.get_tenantid_by_name(service_prj_name) + self.create_user(tenant_id=service_prj_id, **new_user) + + # login as 'Test_service_user' + self.log_out() + self.log_in(new_user['name'], new_user['password']) + + # Import package + self.navigate_to('Manage') + self.go_to_submenu('Packages') + self.driver.find_element_by_id(c.UploadPackage).click() + el = self.driver.find_element_by_css_selector( + "input[name='upload-package']") + el.send_keys(self.archive) + self.driver.find_element_by_xpath(c.InputSubmit).click() + # Public = OFF; Active = ON. + public_checkbox = self.driver.find_element_by_id('id_modify-is_public') + active_checkbox = self.driver.find_element_by_id('id_modify-enabled') + if public_checkbox.is_selected() is True: + public_checkbox.click() + elif active_checkbox.is_selected() is False: + active_checkbox.click() + self.driver.find_element_by_xpath(c.InputSubmit).click() + self.driver.find_element_by_xpath(c.InputSubmit).click() + self.wait_for_alert_message() + self.check_element_on_page( + by.By.XPATH, c.AppPackages.format(self.archive_name)) + + # Modify Package to set Public = ON + package = self.driver.find_element_by_xpath( + c.AppPackages.format(self.archive_name)) + pkg_id = package.get_attribute("data-object-id") + self.select_action_for_package(pkg_id, 'modify_package') + self.driver.find_element_by_id('id_is_public').click() + self.driver.find_element_by_xpath(c.InputSubmit).click() + # Expecting Error + self.wait_for_error_message() + + # Clean up + self.select_action_for_package(pkg_id, 'more') + self.select_action_for_package(pkg_id, 'delete_package') + self.driver.find_element_by_xpath(c.ConfirmDeletion).click() + self.log_out() + self.log_in() + self.delete_user(new_user['name']) + class TestSuiteRepository(base.PackageTestCase): _apps_to_delete = set()