Adapt for all horizon i9n refactoring changes
Adapt to the cumulative change in Horizon i9n tests being merged in https://goo.gl/HLQCe7 Also there was https://review.openstack.org/#/c/269123 that dropped all pre-Django18 code from Horizon, that was another cause of failed tests (missing horizon.utils.urlresolvers). Fixed that. Change-Id: I12b85202e79089fa5b1e7464dd0d529c81cde07b
This commit is contained in:
parent
f722378b9f
commit
823139cc8e
@ -10,32 +10,31 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from selenium.webdriver.common import by
|
|
||||||
|
|
||||||
from openstack_dashboard.test.integration_tests.pages import basepage
|
from openstack_dashboard.test.integration_tests.pages import basepage
|
||||||
from openstack_dashboard.test.integration_tests.regions import forms
|
from openstack_dashboard.test.integration_tests.regions import forms
|
||||||
from openstack_dashboard.test.integration_tests.regions import tables
|
from openstack_dashboard.test.integration_tests.regions import tables
|
||||||
|
|
||||||
|
|
||||||
|
class ImageRegistryTable(tables.TableRegion):
|
||||||
|
name = "image_registry"
|
||||||
|
REGISTER_FORM_FIELDS = ('image_id', 'user_name', 'description')
|
||||||
|
|
||||||
|
@tables.bind_table_action('register')
|
||||||
|
def register_image(self, register_button):
|
||||||
|
register_button.click()
|
||||||
|
return forms.FormRegion(self.driver, self.conf,
|
||||||
|
field_mappings=self.REGISTER_FORM_FIELDS)
|
||||||
|
|
||||||
|
@tables.bind_table_action('unregister')
|
||||||
|
def unregister_image(self, unregister_button):
|
||||||
|
unregister_button.click()
|
||||||
|
return forms.BaseFormRegion(self.driver, self.conf)
|
||||||
|
|
||||||
|
|
||||||
class ImageregistryPage(basepage.BaseNavigationPage):
|
class ImageregistryPage(basepage.BaseNavigationPage):
|
||||||
|
|
||||||
_unregister_form_locator = (by.By.CSS_SELECTOR, 'div.modal-dialog')
|
|
||||||
_register_form_locator = (by.By.CSS_SELECTOR, 'div.modal-dialog')
|
|
||||||
|
|
||||||
IMAGE_TABLE_NAME = "image_registry"
|
|
||||||
IMAGE_TABLE_ACTIONS = ("register", "unregister")
|
|
||||||
IMAGE_TABLE_ROW_ACTIONS = {
|
|
||||||
tables.ComplexActionRowRegion.PRIMARY_ACTION: "edit_tags",
|
|
||||||
tables.ComplexActionRowRegion.SECONDARY_ACTIONS: ("unregister_image",)
|
|
||||||
}
|
|
||||||
TABLE_IMAGE_COLUMN = 'name'
|
TABLE_IMAGE_COLUMN = 'name'
|
||||||
|
|
||||||
REGISTER_FORM_IMAGE = "image_id"
|
|
||||||
REGISTER_FORM_USER_NAME = "user_name"
|
|
||||||
REGISTER_FORM_DESCRIPTION = "description"
|
|
||||||
REGISTER_FORM_FIELDS = (REGISTER_FORM_IMAGE, REGISTER_FORM_USER_NAME,
|
|
||||||
REGISTER_FORM_DESCRIPTION)
|
|
||||||
|
|
||||||
def __init__(self, driver, conf):
|
def __init__(self, driver, conf):
|
||||||
super(ImageregistryPage, self).__init__(driver, conf)
|
super(ImageregistryPage, self).__init__(driver, conf)
|
||||||
self._page_title = "Data Processing"
|
self._page_title = "Data Processing"
|
||||||
@ -45,38 +44,22 @@ class ImageregistryPage(basepage.BaseNavigationPage):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def image_table(self):
|
def image_table(self):
|
||||||
return tables.ComplexActionTableRegion(self.driver, self.conf,
|
return ImageRegistryTable(self.driver, self.conf)
|
||||||
self.IMAGE_TABLE_NAME,
|
|
||||||
self.IMAGE_TABLE_ACTIONS,
|
|
||||||
self.IMAGE_TABLE_ROW_ACTIONS)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def unregister_form(self):
|
|
||||||
src_elem = self._get_element(*self._unregister_form_locator)
|
|
||||||
return forms.BaseFormRegion(self.driver, self.conf, src_elem)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def register_form(self):
|
|
||||||
src_elem = self._get_element(*self._register_form_locator)
|
|
||||||
return forms.FormRegion(self.driver, self.conf, src_elem,
|
|
||||||
self.REGISTER_FORM_FIELDS)
|
|
||||||
|
|
||||||
def is_image_registered(self, name):
|
def is_image_registered(self, name):
|
||||||
return bool(self._get_row_with_image_name(name))
|
return bool(self._get_row_with_image_name(name))
|
||||||
|
|
||||||
def unregister_image(self, name):
|
def unregister_image(self, name):
|
||||||
self._get_row_with_image_name(name).mark()
|
self._get_row_with_image_name(name).mark()
|
||||||
self.image_table.unregister.click()
|
unregister_form = self.image_table.unregister_image()
|
||||||
self.unregister_form.submit.click()
|
unregister_form.submit()
|
||||||
self.wait_till_popups_disappear()
|
|
||||||
|
|
||||||
def register_image(self, image, user_name, description):
|
def register_image(self, image, user_name, description):
|
||||||
self.image_table.register.click()
|
register_form = self.image_table.register_image()
|
||||||
self.register_form.image_id.text = image
|
register_form.image_id.text = image
|
||||||
self.register_form.user_name.text = user_name
|
register_form.user_name.text = user_name
|
||||||
self.register_form.description.text = description
|
register_form.description.text = description
|
||||||
self.register_form.submit.click()
|
register_form.submit()
|
||||||
self.wait_till_popups_disappear()
|
|
||||||
|
|
||||||
def wait_until_image_registered(self, name):
|
def wait_until_image_registered(self, name):
|
||||||
self._wait_until(lambda x: self.is_image_registered(name))
|
self._wait_until(lambda x: self.is_image_registered(name))
|
||||||
|
@ -10,57 +10,43 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from selenium.webdriver.common import by
|
|
||||||
|
|
||||||
from openstack_dashboard.test.integration_tests.pages import basepage
|
from openstack_dashboard.test.integration_tests.pages import basepage
|
||||||
from openstack_dashboard.test.integration_tests.regions import forms
|
from openstack_dashboard.test.integration_tests.regions import forms
|
||||||
from openstack_dashboard.test.integration_tests.regions import tables
|
from openstack_dashboard.test.integration_tests.regions import tables
|
||||||
|
|
||||||
|
|
||||||
class JobbinariesPage(basepage.BaseNavigationPage):
|
class JobBinariesTable(tables.TableRegion):
|
||||||
|
name = 'job_binaries'
|
||||||
_create_job_binary_form_locator = (by.By.CSS_SELECTOR, 'div.modal-dialog')
|
CREATE_BINARY_FORM_FIELDS = {
|
||||||
_confirm_job_binary_deletion_form =\
|
"name": "job_binary_name",
|
||||||
(by.By.CSS_SELECTOR, 'div.modal-dialog')
|
"type": "job_binary_type",
|
||||||
|
"url": "job_binary_url",
|
||||||
JOB_BINARIES_TABLE_NAME = "job_binaries"
|
"internal": "job_binary_internal",
|
||||||
JOB_BINARIES_TABLE_ACTIONS = ("create", "delete")
|
"file": "job_binary_file",
|
||||||
JOB_BINARIES_ROW_ACTIONS = {
|
"script_name": "job_binary_script_name",
|
||||||
tables.ComplexActionRowRegion.PRIMARY_ACTION: "delete_job_binary",
|
"script": "job_binary_script",
|
||||||
tables.ComplexActionRowRegion.SECONDARY_ACTIONS:
|
"username": "job_binary_username",
|
||||||
("download_job_binary",)
|
"password": "job_binary_password",
|
||||||
|
"description": "job_binary_description"
|
||||||
}
|
}
|
||||||
|
|
||||||
BINARY_NAME = "job_binary_name"
|
@tables.bind_table_action('create')
|
||||||
BINARY_STORAGE_TYPE = "job_binary_type"
|
def create_job(self, create_button):
|
||||||
BINARY_URL = "job_binary_url"
|
create_button.click()
|
||||||
INTERNAL_BINARY = "job_binary_internal"
|
return forms.FormRegion(
|
||||||
BINARY_PATH = "job_binary_file"
|
self.driver, self.conf,
|
||||||
SCRIPT_NAME = "job_binary_script_name"
|
field_mappings=self.CREATE_BINARY_FORM_FIELDS)
|
||||||
SCRIPT_TEXT = "job_binary_script"
|
|
||||||
USERNAME = "job_binary_username"
|
|
||||||
PASSWORD = "job_binary_password"
|
|
||||||
DESCRIPTION = "job_binary_description"
|
|
||||||
|
|
||||||
CREATE_BINARY_FORM_FIELDS = (
|
@tables.bind_table_action('delete')
|
||||||
BINARY_NAME,
|
def delete_job(self, delete_button):
|
||||||
BINARY_STORAGE_TYPE,
|
delete_button.click()
|
||||||
BINARY_URL,
|
return forms.BaseFormRegion(self.driver, self.conf)
|
||||||
INTERNAL_BINARY,
|
|
||||||
BINARY_PATH,
|
|
||||||
SCRIPT_NAME,
|
class JobbinariesPage(basepage.BaseNavigationPage):
|
||||||
SCRIPT_TEXT,
|
|
||||||
USERNAME,
|
|
||||||
PASSWORD,
|
|
||||||
DESCRIPTION
|
|
||||||
)
|
|
||||||
|
|
||||||
# index of name column in binary jobs table
|
|
||||||
JOB_BINARIES_TABLE_NAME_COLUMN = 'name'
|
JOB_BINARIES_TABLE_NAME_COLUMN = 'name'
|
||||||
|
|
||||||
# fields that are set via text setter
|
|
||||||
_TEXT_FIELDS = (BINARY_NAME, BINARY_STORAGE_TYPE, INTERNAL_BINARY)
|
|
||||||
|
|
||||||
def __init__(self, driver, conf):
|
def __init__(self, driver, conf):
|
||||||
super(JobbinariesPage, self).__init__(driver, conf)
|
super(JobbinariesPage, self).__init__(driver, conf)
|
||||||
self._page_title = "Data Processing"
|
self._page_title = "Data Processing"
|
||||||
@ -71,35 +57,24 @@ class JobbinariesPage(basepage.BaseNavigationPage):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def job_binaries_table(self):
|
def job_binaries_table(self):
|
||||||
return tables.ComplexActionTableRegion(self.driver, self.conf,
|
return JobBinariesTable(self.driver, self.conf)
|
||||||
self.JOB_BINARIES_TABLE_NAME,
|
|
||||||
self.JOB_BINARIES_TABLE_ACTIONS,
|
|
||||||
self.JOB_BINARIES_ROW_ACTIONS)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def create_job_binary_form(self):
|
|
||||||
src_elem = self._get_element(*self._create_job_binary_form_locator)
|
|
||||||
return forms.FormRegion(self.driver, self.conf, src_elem,
|
|
||||||
self.CREATE_BINARY_FORM_FIELDS)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def confirm_delete_job_binaries_form(self):
|
|
||||||
src_elem = self._get_element(*self._confirm_job_binary_deletion_form)
|
|
||||||
return forms.BaseFormRegion(self.driver, self.conf, src_elem)
|
|
||||||
|
|
||||||
def delete_job_binary(self, name):
|
def delete_job_binary(self, name):
|
||||||
row = self._get_row_with_job_binary_name(name)
|
row = self._get_row_with_job_binary_name(name)
|
||||||
row.mark()
|
row.mark()
|
||||||
self.job_binaries_table.delete.click()
|
confirm_delete_form = self.job_binaries_table.delete_job()
|
||||||
self.confirm_delete_job_binaries_form.submit.click()
|
confirm_delete_form.submit()
|
||||||
self.wait_till_popups_disappear()
|
|
||||||
|
|
||||||
def create_job_binary(self, job_data):
|
def create_job_binary(self, binary_name, script_name):
|
||||||
self.job_binaries_table.create.click()
|
create_job_binary_form = self.job_binaries_table.create_job()
|
||||||
|
|
||||||
self.create_job_binary_form.set_field_values(job_data)
|
create_job_binary_form.name = binary_name
|
||||||
self.create_job_binary_form.submit.click()
|
create_job_binary_form.type = "Internal database"
|
||||||
self.wait_till_popups_disappear()
|
create_job_binary_form.url = "*Create a script"
|
||||||
|
create_job_binary_form.script_name = script_name
|
||||||
|
create_job_binary_form.script = "test_script_text"
|
||||||
|
create_job_binary_form.description = "test description"
|
||||||
|
create_job_binary_form.submit()
|
||||||
|
|
||||||
def is_job_binary_present(self, name):
|
def is_job_binary_present(self, name):
|
||||||
return bool(self._get_row_with_job_binary_name(name))
|
return bool(self._get_row_with_job_binary_name(name))
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from openstack_dashboard.test.integration_tests import helpers
|
from openstack_dashboard.test.integration_tests import helpers
|
||||||
|
from openstack_dashboard.test.integration_tests.regions import messages
|
||||||
|
|
||||||
|
|
||||||
IMAGE_NAME = helpers.gen_random_resource_name("image")
|
IMAGE_NAME = helpers.gen_random_resource_name("image")
|
||||||
@ -32,10 +33,17 @@ class TestSaharaImageRegistry(helpers.TestCase):
|
|||||||
image_reg_pg.wait_until_image_registered(IMAGE_NAME)
|
image_reg_pg.wait_until_image_registered(IMAGE_NAME)
|
||||||
self.assertTrue(image_reg_pg.is_image_registered(IMAGE_NAME),
|
self.assertTrue(image_reg_pg.is_image_registered(IMAGE_NAME),
|
||||||
"Image was not registered.")
|
"Image was not registered.")
|
||||||
self.assertFalse(image_reg_pg.is_error_message_present(),
|
self.assertTrue(
|
||||||
|
image_reg_pg.find_message_and_dismiss(messages.SUCCESS))
|
||||||
|
self.assertFalse(
|
||||||
|
image_reg_pg.find_message_and_dismiss(messages.ERROR),
|
||||||
"Error message occurred during image creation.")
|
"Error message occurred during image creation.")
|
||||||
|
|
||||||
image_reg_pg.unregister_image(IMAGE_NAME)
|
image_reg_pg.unregister_image(IMAGE_NAME)
|
||||||
self.assertFalse(image_reg_pg.is_error_message_present())
|
self.assertTrue(
|
||||||
|
image_reg_pg.find_message_and_dismiss(messages.SUCCESS))
|
||||||
|
self.assertFalse(
|
||||||
|
image_reg_pg.find_message_and_dismiss(messages.ERROR))
|
||||||
self.assertFalse(image_reg_pg.is_image_registered(IMAGE_NAME),
|
self.assertFalse(image_reg_pg.is_image_registered(IMAGE_NAME),
|
||||||
"Image was not unregistered.")
|
"Image was not unregistered.")
|
||||||
|
|
||||||
|
@ -10,50 +10,31 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import collections
|
|
||||||
|
|
||||||
from openstack_dashboard.test.integration_tests import helpers
|
from openstack_dashboard.test.integration_tests import helpers
|
||||||
from sahara_dashboard.test.integration_tests.pages.project.data_processing \
|
from openstack_dashboard.test.integration_tests.regions import messages
|
||||||
import jobbinariespage
|
|
||||||
|
|
||||||
|
|
||||||
# NOTE(tsufiev): beware, ordering matters here because Sahara UI shows fields
|
|
||||||
# based on value of previous fields and for Selenium to be able to fill the
|
|
||||||
# field it's crucial that it's visible
|
|
||||||
JOB_BINARY_INTERNAL = collections.OrderedDict([
|
|
||||||
# Size of binary name is limited to 50 characters
|
# Size of binary name is limited to 50 characters
|
||||||
(jobbinariespage.JobbinariesPage.BINARY_NAME,
|
BINARY_NAME = helpers.gen_random_resource_name(resource='jobbinary',
|
||||||
helpers.gen_random_resource_name(resource='jobbinary',
|
timestamp=False)[0:50]
|
||||||
timestamp=False)[0:50]),
|
SCRIPT_NAME = helpers.gen_random_resource_name(resource='scriptname',
|
||||||
(jobbinariespage.JobbinariesPage.BINARY_STORAGE_TYPE,
|
timestamp=False)
|
||||||
"Internal database"),
|
|
||||||
(jobbinariespage.JobbinariesPage.INTERNAL_BINARY, "*Create a script"),
|
|
||||||
(jobbinariespage.JobbinariesPage.BINARY_URL, None),
|
|
||||||
(jobbinariespage.JobbinariesPage.BINARY_PATH, None),
|
|
||||||
(jobbinariespage.JobbinariesPage.SCRIPT_NAME,
|
|
||||||
helpers.gen_random_resource_name(resource='scriptname', timestamp=False)),
|
|
||||||
(jobbinariespage.JobbinariesPage.SCRIPT_TEXT, "test_script_text"),
|
|
||||||
(jobbinariespage.JobbinariesPage.USERNAME, None),
|
|
||||||
(jobbinariespage.JobbinariesPage.PASSWORD, None),
|
|
||||||
(jobbinariespage.JobbinariesPage.DESCRIPTION, "test description")
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
class TestSaharaJobBinary(helpers.TestCase):
|
class TestSaharaJobBinary(helpers.TestCase):
|
||||||
|
|
||||||
def _sahara_create_delete_job_binary(self, job_binary_template):
|
def _sahara_create_delete_job_binary(self, job_name):
|
||||||
job_name = \
|
|
||||||
job_binary_template[jobbinariespage.JobbinariesPage.BINARY_NAME]
|
|
||||||
|
|
||||||
# create job binary
|
# create job binary
|
||||||
job_binary_pg = self.home_pg.go_to_dataprocessing_jobbinariespage()
|
job_binary_pg = self.home_pg.go_to_dataprocessing_jobbinariespage()
|
||||||
self.assertFalse(job_binary_pg.is_job_binary_present(job_name),
|
self.assertFalse(job_binary_pg.is_job_binary_present(job_name),
|
||||||
"Job binary was present in the binaries table"
|
"Job binary was present in the binaries table"
|
||||||
" before its creation.")
|
" before its creation.")
|
||||||
job_binary_pg.create_job_binary(job_binary_template)
|
job_binary_pg.create_job_binary(job_name, SCRIPT_NAME)
|
||||||
|
|
||||||
# verify that job is created without problems
|
# verify that job is created without problems
|
||||||
self.assertFalse(job_binary_pg.is_error_message_present(),
|
self.assertTrue(
|
||||||
|
job_binary_pg.find_message_and_dismiss(messages.SUCCESS))
|
||||||
|
self.assertFalse(
|
||||||
|
job_binary_pg.find_message_and_dismiss(messages.ERROR),
|
||||||
"Error message occurred during binary job creation.")
|
"Error message occurred during binary job creation.")
|
||||||
self.assertTrue(job_binary_pg.is_job_binary_present(job_name),
|
self.assertTrue(job_binary_pg.is_job_binary_present(job_name),
|
||||||
"Job binary is not in the binaries job table after"
|
"Job binary is not in the binaries job table after"
|
||||||
@ -63,11 +44,14 @@ class TestSaharaJobBinary(helpers.TestCase):
|
|||||||
job_binary_pg.delete_job_binary(job_name)
|
job_binary_pg.delete_job_binary(job_name)
|
||||||
|
|
||||||
# verify that job was successfully deleted
|
# verify that job was successfully deleted
|
||||||
self.assertFalse(job_binary_pg.is_error_message_present(),
|
self.assertTrue(
|
||||||
|
job_binary_pg.find_message_and_dismiss(messages.SUCCESS))
|
||||||
|
self.assertFalse(
|
||||||
|
job_binary_pg.find_message_and_dismiss(messages.ERROR),
|
||||||
"Error message occurred during binary job deletion.")
|
"Error message occurred during binary job deletion.")
|
||||||
self.assertFalse(job_binary_pg.is_job_binary_present(job_name),
|
self.assertFalse(job_binary_pg.is_job_binary_present(job_name),
|
||||||
"Job binary was not removed from binaries job table.")
|
"Job binary was not removed from binaries job table.")
|
||||||
|
|
||||||
def test_sahara_create_delete_job_binary_internaldb(self):
|
def test_sahara_create_delete_job_binary_internaldb(self):
|
||||||
"""Test the creation of a Job Binary in the Internal DB."""
|
"""Test the creation of a Job Binary in the Internal DB."""
|
||||||
self._sahara_create_delete_job_binary(JOB_BINARY_INTERNAL)
|
self._sahara_create_delete_job_binary(BINARY_NAME)
|
||||||
|
@ -2,5 +2,4 @@
|
|||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
export SAHARA_DASHBOARD_SCREENSHOTS_DIR=sahara_dashboard/.tox/py27integration/src/horizon/openstack_dashboard/test/integration_tests/integration_tests_screenshots
|
export SAHARA_DASHBOARD_SCREENSHOTS_DIR=sahara_dashboard/test/integration_tests/integration_tests_screenshots
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user