Added test for check instances pagination functionality
-added test for instance creation/deletion functionality under regular user -updated test for instance creation/deletion functionality under admin -added tests for pagination instances under regular user and under admin -added test for pagination and filtration instances under regular user and under admin Changes in TableRegion class: 1) _search_field_locator has been modified (now it works with both classes: "table_search" and "table_search client") 2) _search_button_locator has been modified 3) filter() method has been updated 4) _search_option_locator and set_filter_value() method have been added Implements blueprint: horizon-integration-tests-coverage Change-Id: I6be5511e22644f85a53a781f417c5fde7fbf0275
This commit is contained in:
parent
e1f07e2794
commit
bf32b9eb91
openstack_dashboard/test/integration_tests
@ -0,0 +1,18 @@
|
||||
# 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 openstack_dashboard.test.integration_tests.pages.project.compute \
|
||||
import instancespage
|
||||
|
||||
|
||||
class InstancesPage(instancespage.InstancesPage):
|
||||
pass
|
@ -53,9 +53,11 @@ class TableRegion(baseregion.BaseRegion):
|
||||
_rows_locator = (by.By.CSS_SELECTOR, 'tbody > tr')
|
||||
_empty_table_locator = (by.By.CSS_SELECTOR, 'tbody > tr.empty')
|
||||
_search_field_locator = (by.By.CSS_SELECTOR,
|
||||
'div.table_search.client > input')
|
||||
'div.table_search input.form-control')
|
||||
_search_button_locator = (by.By.CSS_SELECTOR,
|
||||
'div.table_search.client > button')
|
||||
'div.table_search > button')
|
||||
_search_option_locator = (by.By.CSS_SELECTOR,
|
||||
'div.table_search select.form-control')
|
||||
marker_name = 'marker'
|
||||
prev_marker_name = 'prev_marker'
|
||||
|
||||
@ -102,6 +104,10 @@ class TableRegion(baseregion.BaseRegion):
|
||||
self._set_search_field(value)
|
||||
self._click_search_btn()
|
||||
|
||||
def set_filter_value(self, value):
|
||||
srch_option = self._get_element(*self._search_option_locator)
|
||||
return self._select_dropdown_by_value(value, srch_option)
|
||||
|
||||
def get_row(self, column_name, text, exact_match=True):
|
||||
"""Get row that contains specified text in specified column.
|
||||
|
||||
@ -127,6 +133,7 @@ class TableRegion(baseregion.BaseRegion):
|
||||
|
||||
def _set_search_field(self, value):
|
||||
srch_field = self._get_element(*self._search_field_locator)
|
||||
srch_field.clear()
|
||||
srch_field.send_keys(value)
|
||||
|
||||
def _click_search_btn(self):
|
||||
@ -177,14 +184,17 @@ class TableRegion(baseregion.BaseRegion):
|
||||
lnk = self._get_element(*self._prev_locator)
|
||||
lnk.click()
|
||||
|
||||
def assert_definition(self, expected_table_definition):
|
||||
"""Checks that actual image table is expected one.
|
||||
def assert_definition(self, expected_table_definition, sorting=False):
|
||||
"""Checks that actual table is expected one.
|
||||
Items to compare: 'next' and 'prev' links, count of rows and names of
|
||||
images in list
|
||||
elements in list
|
||||
:param expected_table_definition: expected values (dictionary)
|
||||
:param sorting: boolean arg specifying whether to sort actual names
|
||||
:return:
|
||||
"""
|
||||
names = [row.cells['name'].text for row in self.rows]
|
||||
if sorting:
|
||||
names.sort()
|
||||
actual_table = {'Next': self.is_next_link_available(),
|
||||
'Prev': self.is_prev_link_available(),
|
||||
'Count': len(self.rows),
|
||||
|
@ -12,27 +12,171 @@
|
||||
from openstack_dashboard.test.integration_tests import helpers
|
||||
from openstack_dashboard.test.integration_tests.regions import messages
|
||||
|
||||
INSTANCES_NAME = helpers.gen_random_resource_name('instance',
|
||||
timestamp=False)
|
||||
|
||||
class TestInstances(helpers.TestCase):
|
||||
INSTANCE_NAME = helpers.gen_random_resource_name('instance',
|
||||
timestamp=False)
|
||||
|
||||
class TestInstances(helpers.AdminTestCase):
|
||||
"""This is a basic scenario to test:
|
||||
* Create Instance and Delete Instance
|
||||
"""
|
||||
@property
|
||||
def instances_page(self):
|
||||
return self.home_pg.go_to_compute_instancespage()
|
||||
|
||||
def test_create_delete_instance(self):
|
||||
"""tests the instance creation and deletion functionality:
|
||||
* creates a new instance in Project > Compute > Instances page
|
||||
* verifies the instance appears in the instances table as active
|
||||
* deletes the newly created instance via proper page (depends on user)
|
||||
* verifies the instance does not appear in the table after deletion
|
||||
"""
|
||||
instances_page = self.home_pg.go_to_compute_instancespage()
|
||||
instances_page.create_instance(INSTANCES_NAME)
|
||||
self.assertTrue(
|
||||
instances_page.find_message_and_dismiss(messages.SUCCESS))
|
||||
self.assertFalse(
|
||||
instances_page.find_message_and_dismiss(messages.ERROR))
|
||||
self.assertTrue(instances_page.is_instance_active(INSTANCES_NAME))
|
||||
|
||||
instances_page.delete_instance(INSTANCES_NAME)
|
||||
instances_page.create_instance(self.INSTANCE_NAME)
|
||||
self.assertTrue(
|
||||
instances_page.find_message_and_dismiss(messages.SUCCESS))
|
||||
self.assertFalse(
|
||||
instances_page.find_message_and_dismiss(messages.ERROR))
|
||||
self.assertTrue(instances_page.is_instance_deleted(INSTANCES_NAME))
|
||||
self.assertTrue(instances_page.is_instance_active(self.INSTANCE_NAME))
|
||||
|
||||
instances_page = self.instances_page
|
||||
instances_page.delete_instance(self.INSTANCE_NAME)
|
||||
self.assertTrue(
|
||||
instances_page.find_message_and_dismiss(messages.SUCCESS))
|
||||
self.assertFalse(
|
||||
instances_page.find_message_and_dismiss(messages.ERROR))
|
||||
self.assertTrue(instances_page.is_instance_deleted(self.INSTANCE_NAME))
|
||||
|
||||
def test_instances_pagination(self):
|
||||
"""This test checks instance pagination
|
||||
Steps:
|
||||
1) Login to Horizon Dashboard as regular user
|
||||
2) Navigate to user settings page
|
||||
3) Change 'Items Per Page' value to 1
|
||||
4) Go to Project > Compute > Instances page
|
||||
5) Create 2 instances
|
||||
6) Go to appropriate page (depends on user)
|
||||
7) Check that only 'Next' link is available, only one instance is
|
||||
available (and it has correct name) on the first page
|
||||
8) Click 'Next' and check that on the second page only one instance is
|
||||
available (and it has correct name), there is no 'Next' link on page
|
||||
9) Go to user settings page and restore 'Items Per Page'
|
||||
10) Delete created instances via proper page (depends on user)
|
||||
"""
|
||||
items_per_page = 1
|
||||
instance_count = 2
|
||||
instance_list = ["{0}-{1}".format(self.INSTANCE_NAME, item)
|
||||
for item in range(1, instance_count + 1)]
|
||||
first_page_definition = {'Next': True, 'Prev': False,
|
||||
'Count': items_per_page,
|
||||
'Names': [instance_list[1]]}
|
||||
second_page_definition = {'Next': False, 'Prev': False,
|
||||
'Count': items_per_page,
|
||||
'Names': [instance_list[0]]}
|
||||
|
||||
settings_page = self.home_pg.go_to_settings_usersettingspage()
|
||||
settings_page.change_pagesize(items_per_page)
|
||||
settings_page.find_message_and_dismiss(messages.SUCCESS)
|
||||
|
||||
instances_page = self.home_pg.go_to_compute_instancespage()
|
||||
instances_page.create_instance(self.INSTANCE_NAME,
|
||||
instance_count=instance_count)
|
||||
instances_page.find_message_and_dismiss(messages.SUCCESS)
|
||||
self.assertTrue(instances_page.is_instance_active(instance_list[1]))
|
||||
|
||||
instances_page = self.instances_page
|
||||
instances_page.instances_table.assert_definition(
|
||||
first_page_definition, sorting=True)
|
||||
|
||||
instances_page.instances_table.turn_next_page()
|
||||
instances_page.instances_table.assert_definition(
|
||||
second_page_definition, sorting=True)
|
||||
|
||||
instances_page = self.instances_page
|
||||
instances_page.instances_table.assert_definition(
|
||||
first_page_definition, sorting=True)
|
||||
|
||||
settings_page = self.home_pg.go_to_settings_usersettingspage()
|
||||
settings_page.change_pagesize()
|
||||
settings_page.find_message_and_dismiss(messages.SUCCESS)
|
||||
|
||||
instances_page = self.instances_page
|
||||
for instance_name in instance_list:
|
||||
instances_page.delete_instance(instance_name)
|
||||
instances_page.find_message_and_dismiss(messages.SUCCESS)
|
||||
self.assertTrue(instances_page.is_instance_deleted(instance_name))
|
||||
|
||||
def test_instances_pagination_and_filtration(self):
|
||||
"""This test checks instance pagination and filtration
|
||||
Steps:
|
||||
1) Login to Horizon Dashboard as regular user
|
||||
2) Go to to user settings page
|
||||
3) Change 'Items Per Page' value to 1
|
||||
4) Go to Project > Compute > Instances page
|
||||
5) Create 2 instances
|
||||
6) Go to appropriate page (depends on user)
|
||||
7) Check filter by Name of the first and the second instance in order
|
||||
to have one instance in the list (and it should have correct name) and
|
||||
no 'Next' link is available
|
||||
8) Check filter by common part of Name of in order to have one instance
|
||||
in the list (and it should have correct name) and 'Next' link is
|
||||
available on the first page and is not available on the second page
|
||||
9) Go to user settings page and restore 'Items Per Page'
|
||||
10) Delete created instances via proper page (depends on user)
|
||||
|
||||
"""
|
||||
items_per_page = 1
|
||||
instance_count = 2
|
||||
instance_list = ["{0}-{1}".format(self.INSTANCE_NAME, item)
|
||||
for item in range(1, instance_count + 1)]
|
||||
first_page_definition = {'Next': True, 'Prev': False,
|
||||
'Count': items_per_page,
|
||||
'Names': [instance_list[1]]}
|
||||
second_page_definition = {'Next': False, 'Prev': False,
|
||||
'Count': items_per_page,
|
||||
'Names': [instance_list[0]]}
|
||||
filter_first_page_definition = {'Next': False, 'Prev': False,
|
||||
'Count': items_per_page,
|
||||
'Names': [instance_list[1]]}
|
||||
|
||||
settings_page = self.home_pg.go_to_settings_usersettingspage()
|
||||
settings_page.change_pagesize(items_per_page)
|
||||
settings_page.find_message_and_dismiss(messages.SUCCESS)
|
||||
|
||||
instances_page = self.home_pg.go_to_compute_instancespage()
|
||||
instances_page.create_instance(self.INSTANCE_NAME,
|
||||
instance_count=instance_count)
|
||||
instances_page.find_message_and_dismiss(messages.SUCCESS)
|
||||
self.assertTrue(instances_page.is_instance_active(instance_list[1]))
|
||||
|
||||
instances_page = self.instances_page
|
||||
instances_page.instances_table.set_filter_value('name')
|
||||
instances_page.instances_table.filter(instance_list[1])
|
||||
instances_page.instances_table.assert_definition(
|
||||
filter_first_page_definition, sorting=True)
|
||||
|
||||
instances_page.instances_table.filter(instance_list[0])
|
||||
instances_page.instances_table.assert_definition(
|
||||
second_page_definition, sorting=True)
|
||||
|
||||
instances_page.instances_table.filter(self.INSTANCE_NAME)
|
||||
instances_page.instances_table.assert_definition(
|
||||
first_page_definition, sorting=True)
|
||||
instances_page.instances_table.filter('')
|
||||
|
||||
settings_page = self.home_pg.go_to_settings_usersettingspage()
|
||||
settings_page.change_pagesize()
|
||||
settings_page.find_message_and_dismiss(messages.SUCCESS)
|
||||
|
||||
instances_page = self.instances_page
|
||||
for instance_name in instance_list:
|
||||
instances_page.delete_instance(instance_name)
|
||||
instances_page.find_message_and_dismiss(messages.SUCCESS)
|
||||
self.assertTrue(instances_page.is_instance_deleted(instance_name))
|
||||
|
||||
|
||||
class TestAdminInstances(helpers.AdminTestCase, TestInstances):
|
||||
INSTANCE_NAME = helpers.gen_random_resource_name('instance',
|
||||
timestamp=False)
|
||||
|
||||
@property
|
||||
def instances_page(self):
|
||||
return self.home_pg.go_to_system_instancespage()
|
||||
|
Loading…
x
Reference in New Issue
Block a user