1
0
mirror of https://github.com/peeringdb/peeringdb.git synced 2024-05-11 05:55:09 +00:00
Files
peeringdb-peeringdb/selenium-tests/test_exchange.py
Stefan Pratter 2ee1220c58 Support 202209 (#1259)
* Add export tool to https://peeringdb.com/cp/peeringdb_server #586

* IX-F importer fails on nulled ipv4 / ipv6 properties in vlan_list entries #1244

* Adding a POC must require an email address or phone number #1044

* Selenium tests

* ping django-peeringdb and rdap and poetry relock

* linting

* linting

* remove selenium tests cruft

* comment out django-peeringdb and search data mounts

* regen docs
2022-10-11 07:45:07 -05:00

227 lines
7.2 KiB
Python

import pytest
import selenium.webdriver.support.expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException, TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
@pytest.mark.key("test-writes")
@pytest.mark.lvl("verified")
def test_submit_exchange(config, driver):
driver.get(config["url"])
ix_name = config["test_submit_exchange"]["name"]
ix_prefix = config["test_submit_exchange"]["prefix"]
org_id = config["test_submit_exchange"]["org_id"]
driver.get(config["url"] + f"/org/{org_id}")
# check whether element already exists
try:
driver.find_element(
By.XPATH,
f'//div[@id="api-listing-ix"]//div[@data-filter-value="{ix_name}"]',
)
assert False, "Test IX already exists please specify another exchange name!"
except NoSuchElementException:
pass
add_ix(driver, ix_name, ix_prefix)
# Check if new IX appears in list
try:
assert WebDriverWait(driver, 10).until(
EC.presence_of_element_located(
(
By.XPATH,
f'//div[@id="api-listing-ix"]//*[normalize-space()="{ix_name}"]',
)
)
)
except TimeoutException as exc:
assert False, f"Element not found: {exc}"
def add_ix(driver, ix_name, ix_prefix):
driver.find_element(By.XPATH, '//a[@href="#add_ix"]').click()
driver.find_element(
By.XPATH, '//div[@id="create-ix-form"]//div[@data-edit-name="name"]//input'
).send_keys(ix_name)
driver.find_element(
By.XPATH, '//div[@id="create-ix-form"]//div[@data-edit-name="website"]//input'
).send_keys("http://www.testix.com")
driver.find_element(
By.XPATH, '//div[@id="create-ix-form"]//div[@data-edit-name="city"]//input'
).send_keys("Test City")
Select(
driver.find_element(
By.XPATH,
'//div[@id="create-ix-form"]//div[@data-edit-name="proto_unicast"]//select',
)
).select_by_value("0")
Select(
driver.find_element(
By.XPATH,
'//div[@id="create-ix-form"]//div[@data-edit-name="proto_multicast"]//select',
)
).select_by_value("0")
Select(
driver.find_element(
By.XPATH,
'//div[@id="create-ix-form"]//div[@data-edit-name="proto_ipv6"]//select',
)
).select_by_value("0")
driver.find_element(
By.XPATH,
'//div[@id="create-ix-form"]//div[@data-edit-name="tech_email"]//input',
).send_keys("tech@testix.com")
driver.find_element(
By.XPATH, '//div[@id="create-ix-form"]//div[@data-edit-name="prefix"]//input'
).send_keys(ix_prefix)
driver.find_element(
By.XPATH, '//div[@id="create-ix-form"]//a[@data-edit-action="submit"]'
).click()
@pytest.mark.key("test-writes")
@pytest.mark.lvl("verified")
def test_edit_exchange(config, driver):
driver.get(config["url"])
old_ix_name = config["test_edit_exchange"]["old_name"]
new_ix_name = config["test_edit_exchange"]["name"]
new_ix_website = config["test_edit_exchange"]["website"]
new_ix_email = config["test_edit_exchange"]["email"]
org_id = config["test_edit_exchange"]["org_id"]
driver.get(config["url"] + f"/org/{org_id}")
# check if exchange exists and is approved
try:
exchange_link = driver.find_element(
By.XPATH,
f'//div[@id="api-listing-ix"]//a[normalize-space()="{old_ix_name}"]',
)
except NoSuchElementException:
assert False, "Exchange not found, please check if it exists."
assert exchange_link.get_attribute("href") is not None, "Exchange is not approved."
exchange_link.click()
# edit
driver.find_element(
By.CSS_SELECTOR, '.button-bar a[data-edit-action="toggle-edit"]'
).click()
name_input = driver.find_element(
By.CSS_SELECTOR, 'div[data-edit-name="name"] input'
)
name_input.clear()
name_input.send_keys(new_ix_name)
website_input = driver.find_element(
By.CSS_SELECTOR, 'div[data-edit-name="website"] input'
)
website_input.clear()
website_input.send_keys(new_ix_website)
email_input = driver.find_element(
By.CSS_SELECTOR, 'div[data-edit-name="tech_email"] input'
)
email_input.clear()
email_input.send_keys(new_ix_email)
driver.find_element(By.CSS_SELECTOR, 'a[data-edit-action="submit"]').click()
# check if changed
WebDriverWait(driver, 10).until(
EC.invisibility_of_element(
(By.CSS_SELECTOR, 'div[data-edit-name="name"] input')
)
)
assert (
new_ix_name
== driver.find_element(By.CSS_SELECTOR, 'div[data-edit-name="name"]').text
)
assert (
new_ix_website
== driver.find_element(By.CSS_SELECTOR, 'div[data-edit-name="website"] a').text
)
assert (
new_ix_email
== driver.find_element(
By.CSS_SELECTOR, 'div[data-edit-name="tech_email"] a'
).text
)
# restore name
driver.find_element(
By.CSS_SELECTOR, '.button-bar a[data-edit-action="toggle-edit"]'
).click()
name_input = driver.find_element(
By.CSS_SELECTOR, 'div[data-edit-name="name"] input'
)
name_input.clear()
name_input.send_keys(old_ix_name)
driver.find_element(By.CSS_SELECTOR, 'a[data-edit-action="submit"]').click()
@pytest.mark.key("test-writes")
@pytest.mark.lvl("verified")
def test_delete_exchange(config, driver):
driver.get(config["url"])
ix_name = config["test_delete_exchange"]["name"]
org_id = config["test_delete_exchange"]["org_id"]
driver.get(config["url"] + f"/org/{org_id}")
# check whether ix already exists
try:
driver.find_element(
By.XPATH,
f'//div[@id="api-listing-ix"]//div[@data-filter-value="{ix_name}"]',
)
# if doesn't exist create it
except NoSuchElementException:
ix_prefix = config["test_delete_exchange"]["prefix"]
add_ix(driver, ix_name, ix_prefix)
WebDriverWait(driver, 10).until(
EC.presence_of_element_located(
(
By.XPATH,
'//div[@id="api-listing-ix"]//*[normalize-space()="'
+ ix_name
+ '"]',
)
)
)
# delete ix
driver.find_element(
By.CSS_SELECTOR, '.button-bar a[data-edit-action="toggle-edit"]'
).click()
driver.find_element(
By.XPATH,
'//div[@id="api-listing-ix"]//div[normalize-space()="'
+ ix_name
+ '"]/preceding-sibling::a[@data-edit-action="remove"]',
).click()
WebDriverWait(driver, 10).until(EC.alert_is_present()).accept()
driver.find_element(
By.CSS_SELECTOR, '.button-bar a[data-edit-action="submit"]'
).click()
# check if ix is removed from list
try:
WebDriverWait(driver, 5).until(
EC.invisibility_of_element(
(
By.XPATH,
f'//div[@id="api-listing-ix"]//*[normalize-space()="{ix_name}"]',
)
)
)
except TimeoutException as exc:
assert False, f"Exchange doesn't seem to be deleted {exc}"