Source code for stepler.horizon.steps.projects
"""
--------------
Projects steps
--------------
"""
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from hamcrest import assert_that, equal_to # noqa H301
from stepler.horizon.steps import base
from stepler.third_party import steps_checker
from stepler.third_party import utils
from stepler.third_party import waiter
[docs]class ProjectsSteps(base.BaseSteps):
"""Projects steps."""
def _page_projects(self):
"""Open projects page if it isn't opened."""
return self._open(self.app.page_projects)
@steps_checker.step
[docs] def create_project(self, project_name=None, check=True):
"""Step to create project."""
project_name = project_name or next(utils.generate_ids('project'))
page_projects = self._page_projects()
page_projects.button_create_project.click()
with page_projects.form_create_project as form:
form.field_name.value = project_name
form.submit()
if check:
self.close_notification('success')
page_projects.table_projects.row(
name=project_name).wait_for_presence()
return project_name
@steps_checker.step
[docs] def delete_project(self, project_name, check=True):
"""Step to delete project."""
page_projects = self._page_projects()
with page_projects.table_projects.row(
name=project_name).dropdown_menu as menu:
menu.button_toggle.click()
menu.item_delete.click()
page_projects.form_confirm.submit()
if check:
self.close_notification('success')
page_projects.table_projects.row(
name=project_name).wait_for_absence()
@steps_checker.step
[docs] def filter_projects(self, query, check=True):
"""Step to filter projects."""
page_projects = self._page_projects()
page_projects.field_filter_projects.value = query
page_projects.button_filter_projects.click()
if check:
def check_rows():
is_present = False
for row in page_projects.table_projects.rows:
if not (row.is_present and
query in row.link_project.value):
break
is_present = True
return waiter.expect_that(is_present, equal_to(True))
waiter.wait(check_rows,
timeout_seconds=10,
sleep_seconds=0.1)
@steps_checker.step
[docs] def toggle_project(self, project, enable, check=True):
"""Step to disable/enable project."""
page_projects = self._page_projects()
project_name = project.name
if enable:
curr_status = 'No'
need_status = 'Yes'
else:
curr_status = 'Yes'
need_status = 'No'
with self._page_projects().table_projects.row(
name=project_name) as row:
assert_that(row.cell('enabled').value, equal_to(curr_status))
with row.dropdown_menu as menu:
menu.button_toggle.click()
menu.item_edit.click()
with page_projects.form_edit_project as form:
form.checkbox_enable.click()
form.submit()
if check:
self.close_notification('success')
assert_that(row.cell('enabled').value, equal_to(need_status))
@steps_checker.step
[docs] def check_project_cant_disable_itself(self):
"""Step for trying to disable current project."""
page_projects = self._page_projects()
project_name = self.app.current_project
with page_projects.table_projects.row(
name=project_name).dropdown_menu as menu:
menu.button_toggle.click()
menu.item_edit.click()
with page_projects.form_edit_project as form:
form.checkbox_enable.click()
form.submit()
assert_that(page_projects.table_projects.row(
name=project_name).is_enabled, equal_to(True))
@steps_checker.step
[docs] def manage_project_members(self, project_name, admin_project_resources,
check=True):
"""Step to manage project members."""
page_projects = self._page_projects()
with page_projects.table_projects.row(
name=project_name).dropdown_menu as menu:
menu.item_default.click()
with page_projects.form_available_members as form:
form.item_members(admin_project_resources["user"].name).click()
form.submit()
if check:
self.close_notification('success')
@steps_checker.step
[docs] def update_project_name(self, project_name, new_project_name, check=True):
"""Step to update project name."""
page_projects = self._page_projects()
with page_projects.table_projects.row(
name=project_name).dropdown_menu as menu:
menu.button_toggle.click()
menu.item_edit.click()
with page_projects.form_edit_project as form:
form.field_name.value = new_project_name
form.submit()
if check:
self.close_notification('success')
page_projects.table_projects.row(
name=new_project_name).wait_for_presence()