Add test_images_pagination()

Test for images pagination has been added.
Changes of TableRegion class:
1) Locators of 'Next' and 'Prev' links are added
2) Methods is_next_link_available() and is_prev_link_available()
3) Methods for pages navigation added: next_page() and prev_page()a
4) update assert_definition method to have list instead of srt for
'Names' key
5) change 'next' locator
6) Minor changes: remove unused class,
rename next_page/prev_page methods

Implements blueprint: horizon-integration-tests-coverage
Change-Id: Ibaf9dd02a06cf9d945bc9b894394695512a934b9
This commit is contained in:
AlexandraAllakhverdieva 2016-01-15 11:18:38 -05:00 committed by Timur Sufiev
parent d1c6ad8829
commit 600a67301d
6 changed files with 189 additions and 0 deletions

View File

@ -47,6 +47,11 @@ ImageGroup = [
default='http://download.cirros-cloud.net/0.3.1/'
'cirros-0.3.1-x86_64-uec.tar.gz',
help='http accessible image'),
cfg.ListOpt('images_list',
default=['cirros-0.3.4-x86_64-uec',
'cirros-0.3.4-x86_64-uec-kernel',
'cirros-0.3.4-x86_64-uec-ramdisk'],
help='default list of images')
]
SeleniumGroup = [

View File

@ -32,6 +32,9 @@ explicit_wait=300
[image]
# http accessible image (string value)
http_image=http://download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-uec.tar.gz
images_list=cirros-0.3.4-x86_64-uec,
cirros-0.3.4-x86_64-uec-kernel,
cirros-0.3.4-x86_64-uec-ramdisk
[identity]
# Username to use for non-admin API requests. (string value)

View File

@ -0,0 +1,17 @@
# 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 imagespage
class ImagesPage(imagespage.ImagesPage):
pass

View File

@ -19,6 +19,7 @@ from openstack_dashboard.test.integration_tests.regions import tables
class ImagesTable(tables.TableRegion):
name = "images"
CREATE_IMAGE_FORM_FIELDS = (
"name", "description", "source_type", "image_url",
"image_file", "kernel", "ramdisk",

View File

@ -53,6 +53,10 @@ class TableRegion(baseregion.BaseRegion):
'div.table_search.client > input')
_search_button_locator = (by.By.CSS_SELECTOR,
'div.table_search.client > button')
_next_locator = (by.By.CSS_SELECTOR,
'tfoot > tr > td > a[href^="?marker"]')
_prev_locator = (by.By.CSS_SELECTOR,
'tfoot > tr > td > a[href*="prev_marker"]')
def _table_locator(self, table_name):
return by.By.CSS_SELECTOR, 'table#%s' % table_name
@ -124,6 +128,36 @@ class TableRegion(baseregion.BaseRegion):
return [RowRegion(self.driver, self.conf, elem, self.column_names)
for elem in self._get_elements(*self._rows_locator)]
def is_next_link_available(self):
return self._is_element_visible(*self._next_locator)
def is_prev_link_available(self):
return self._is_element_visible(*self._prev_locator)
def turn_next_page(self):
if self.is_next_link_available():
lnk = self._get_element(*self._next_locator)
lnk.click()
def turn_prev_page(self):
if self.is_prev_link_available():
lnk = self._get_element(*self._prev_locator)
lnk.click()
def assert_definition(self, expected_table_definition):
"""Checks that actual image table is expected one.
Items to compare: 'next' and 'prev' links, count of rows and names of
images in list
:param expected_table_definition: expected values (dictionary)
:return:
"""
names = [row.cells['name'].text for row in self.rows]
actual_table = {'Next': self.is_next_link_available(),
'Prev': self.is_prev_link_available(),
'Count': len(self.rows),
'Names': names}
self.assertDictEqual(actual_table, expected_table_definition)
def bind_table_action(action_name):
"""A decorator to bind table region method to an actual table action

View File

@ -37,3 +37,132 @@ class TestImage(helpers.TestCase):
self.assertTrue(images_page.find_message_and_dismiss(messages.SUCCESS))
self.assertFalse(images_page.find_message_and_dismiss(messages.ERROR))
self.assertFalse(images_page.is_image_present(self.IMAGE_NAME))
def test_images_pagination(self):
"""This test checks images pagination
Steps:
1) Login to Horizon Dashboard as horizon user
2) Navigate to user settings page
3) Change 'Items Per Page' value to 1
4) Go to Project -> Compute -> Images page
5) Check that only 'Next' link is available, only one image is
available (and it has correct name)
6) Click 'Next' and check that both 'Prev' and 'Next' links are
available, only one image is available (and it has correct name)
7) Click 'Next' and check that only 'Prev' link is available,
only one image is visible (and it has correct name)
8) Click 'Prev' and check results (should be the same as for step6)
9) Click 'Prev' and check results (should be the same as for step5)
10) Go to user settings page and restore 'Items Per Page'
"""
default_image_list = self.CONFIG.image.images_list
items_per_page = 1
first_page_definition = {'Next': True, 'Prev': False,
'Count': items_per_page,
'Names': [default_image_list[0]]}
second_page_definition = {'Next': True, 'Prev': True,
'Count': items_per_page,
'Names': [default_image_list[1]]}
third_page_definition = {'Next': False, 'Prev': True,
'Count': items_per_page,
'Names': [default_image_list[2]]}
settings_page = self.home_pg.go_to_settings_usersettingspage()
settings_page.change_pagesize(items_per_page)
settings_page.find_message_and_dismiss(messages.SUCCESS)
images_page = self.home_pg.go_to_compute_imagespage()
images_page.images_table.assert_definition(first_page_definition)
images_page.images_table.turn_next_page()
images_page.images_table.assert_definition(second_page_definition)
images_page.images_table.turn_next_page()
images_page.images_table.assert_definition(third_page_definition)
images_page.images_table.turn_prev_page()
images_page.images_table.assert_definition(second_page_definition)
images_page.images_table.turn_prev_page()
images_page.images_table.assert_definition(first_page_definition)
settings_page = self.home_pg.go_to_settings_usersettingspage()
settings_page.change_pagesize()
settings_page.find_message_and_dismiss(messages.SUCCESS)
class TestImageAdmin(helpers.AdminTestCase):
IMAGE_NAME = helpers.gen_random_resource_name("image")
def test_image_create_delete_under_admin(self):
"""tests the image creation and deletion functionalities under Admin:
* creates a new image from horizon.conf http_image
* verifies the image appears in the images table as active
* deletes the newly created image
* verifies the image does not appear in the table after deletion
"""
images_page = self.home_pg.go_to_system_imagespage()
images_page.create_image(self.IMAGE_NAME)
self.assertTrue(images_page.find_message_and_dismiss(messages.SUCCESS))
self.assertFalse(images_page.find_message_and_dismiss(messages.ERROR))
self.assertTrue(images_page.is_image_present(self.IMAGE_NAME))
self.assertTrue(images_page.is_image_active(self.IMAGE_NAME))
images_page.delete_image(self.IMAGE_NAME)
self.assertTrue(images_page.find_message_and_dismiss(messages.SUCCESS))
self.assertFalse(images_page.find_message_and_dismiss(messages.ERROR))
self.assertFalse(images_page.is_image_present(self.IMAGE_NAME))
def test_images_pagination_under_admin(self):
"""This test checks images pagination under admin user
Steps:
1) Login to Horizon Dashboard as admin user
2) Navigate to user settings page
3) Change 'Items Per Page' value to 1
4) Go to Admin -> System -> Images page
5) Check that only 'Next' link is available, only one image is
available (and it has correct name)
6) Click 'Next' and check that both 'Prev' and 'Next' links are
available, only one image is available (and it has correct name)
7) Click 'Next' and check that only 'Prev' link is available,
only one image is visible (and it has correct name)
8) Click 'Prev' and check results (should be the same as for step6)
9) Click 'Prev' and check results (should be the same as for step5)
10) Go to user settings page and restore 'Items Per Page'
"""
default_image_list = self.CONFIG.image.images_list
items_per_page = 1
first_page_definition = {'Next': True, 'Prev': False,
'Count': items_per_page,
'Names': [default_image_list[0]]}
second_page_definition = {'Next': True, 'Prev': True,
'Count': items_per_page,
'Names': [default_image_list[1]]}
third_page_definition = {'Next': False, 'Prev': True,
'Count': items_per_page,
'Names': [default_image_list[2]]}
settings_page = self.home_pg.go_to_settings_usersettingspage()
settings_page.change_pagesize(items_per_page)
settings_page.find_message_and_dismiss(messages.SUCCESS)
images_page = self.home_pg.go_to_system_imagespage()
images_page.images_table.assert_definition(first_page_definition)
images_page.images_table.turn_next_page()
images_page.images_table.assert_definition(second_page_definition)
images_page.images_table.turn_next_page()
images_page.images_table.assert_definition(third_page_definition)
images_page.images_table.turn_prev_page()
images_page.images_table.assert_definition(second_page_definition)
images_page.images_table.turn_prev_page()
images_page.images_table.assert_definition(first_page_definition)
settings_page = self.home_pg.go_to_settings_usersettingspage()
settings_page.change_pagesize()
settings_page.find_message_and_dismiss(messages.SUCCESS)