Skip to content

Support Django 4.1, Python 3.10, and fix Selenium tests #154

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Sep 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,17 @@ jobs:
- "3.7"
- "3.8"
- "3.9"
- "3.10"
django-version:
- "2.2.0"
- "3.2.0"
- "4.0a1"
- "2.2"
- "3.2"
- "4.0"
- "4.1"
exclude:
- python-version: "3.7"
django-version: "4.0a1"
django-version: "4.0"
- python-version: "3.7"
django-version: "4.1"
runs-on: ubuntu-latest
steps:
- name: Set up Python ${{ matrix.python-version }}
Expand All @@ -76,7 +80,7 @@ jobs:
pip install -e .[test]
pip install django~=${{ matrix.django-version }}
- name: Run tests
run: PATH=$PATH:$(pwd)/bin py.test
run: PATH=$PATH:$(pwd)/bin pytest
- run: codecov
env:
CODECOV_TOKEN: ${{secrets.CODECOV_TOKEN}}
2 changes: 2 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,12 @@ classifier =
Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Framework :: Django
Framework :: Django :: 2.2
Framework :: Django :: 3.1
Framework :: Django :: 4.0
Framework :: Django :: 4.1

[options]
include_package_data = True
Expand Down
64 changes: 32 additions & 32 deletions tests/test_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,22 +85,22 @@ def test_allow_clear(self, db):
def test_no_js_error(self, db, live_server, driver):
driver.get(live_server + self.url)
with pytest.raises(NoSuchElementException):
error = driver.find_element_by_xpath("//body[@JSError]")
error = driver.find_element(By.XPATH, "//body[@JSError]")
pytest.fail(error.get_attribute("JSError"))

def test_selecting(self, db, live_server, driver):
driver.get(live_server + self.url)
with pytest.raises(NoSuchElementException):
driver.find_element_by_css_selector(".select2-results")
elem = driver.find_element_by_css_selector(".select2-selection")
driver.find_element(By.CSS_SELECTOR, ".select2-results")
elem = driver.find_element(By.CSS_SELECTOR, ".select2-selection")
elem.click()
results = driver.find_element_by_css_selector(".select2-results")
results = driver.find_element(By.CSS_SELECTOR, ".select2-results")
assert results.is_displayed() is True
elem = results.find_element_by_css_selector(".select2-results__option")
elem = results.find_element(By.CSS_SELECTOR, ".select2-results__option")
elem.click()

with pytest.raises(NoSuchElementException):
error = driver.find_element_by_xpath("//body[@JSError]")
error = driver.find_element(By.XPATH, "//body[@JSError]")
pytest.fail(error.get_attribute("JSError"))

def test_data_url(self):
Expand Down Expand Up @@ -301,12 +301,12 @@ def test_many_selected_option(self, db, genres):
def test_multiple_widgets(self, db, live_server, driver):
driver.get(live_server + self.url)
with pytest.raises(NoSuchElementException):
driver.find_element_by_css_selector(".select2-results")
driver.find_element(By.CSS_SELECTOR, ".select2-results")

elem1, elem2 = driver.find_elements_by_css_selector(".select2-selection")
elem1, elem2 = driver.find_elements(By.CSS_SELECTOR, ".select2-selection")

elem1.click()
search1 = driver.find_element_by_css_selector(".select2-search__field")
search1 = driver.find_element(By.CSS_SELECTOR, ".select2-search__field")
search1.send_keys("fo")
result1 = (
WebDriverWait(driver, 60)
Expand All @@ -319,7 +319,7 @@ def test_multiple_widgets(self, db, live_server, driver):
)

elem2.click()
search2 = driver.find_element_by_css_selector(".select2-search__field")
search2 = driver.find_element(By.CSS_SELECTOR, ".select2-search__field")
search2.send_keys("fo")
result2 = (
WebDriverWait(driver, 60)
Expand All @@ -334,7 +334,7 @@ def test_multiple_widgets(self, db, live_server, driver):
assert result1 != result2

with pytest.raises(NoSuchElementException):
error = driver.find_element_by_xpath("//body[@JSError]")
error = driver.find_element(By.XPATH, "//body[@JSError]")
pytest.fail(error.get_attribute("JSError"))

def test_get_url(self):
Expand Down Expand Up @@ -646,15 +646,15 @@ def test_widgets_selected_after_validation_error(self, db, live_server, driver):
WebDriverWait(driver, 3).until(
expected_conditions.presence_of_element_located((By.ID, "id_title"))
)
title = driver.find_element_by_id("id_title")
title = driver.find_element(By.ID, "id_title")
title.send_keys("fo")
genres, fartists = driver.find_elements_by_css_selector(
".select2-selection--multiple"
genres, fartists = driver.find_elements(
By.CSS_SELECTOR, ".select2-selection--multiple"
)
genres.click()
genres.send_keys("o") # results are Zero One Two Four
# select second element - One
driver.find_element_by_css_selector(".select2-results li:nth-child(2)").click()
driver.find_element(By.CSS_SELECTOR, ".select2-results li:nth-child(2)").click()
genres.submit()
# there is a ValidationError raised, check for it
errstring = (
Expand All @@ -668,8 +668,8 @@ def test_widgets_selected_after_validation_error(self, db, live_server, driver):
)
assert errstring == "Title must have more than 3 characters."
# genres should still have One as selected option
result_title = driver.find_element_by_css_selector(
".select2-selection--multiple li"
result_title = driver.find_element(
By.CSS_SELECTOR, ".select2-selection--multiple li"
).get_attribute("title")
assert result_title == "One"

Expand All @@ -692,7 +692,7 @@ def test_widgets_selected_after_validation_error(
country_container,
city_container,
city2_container,
) = driver.find_elements_by_css_selector(".select2-selection--single")
) = driver.find_elements(By.CSS_SELECTOR, ".select2-selection--single")

# clicking city select2 lists all available cities
city_container.click()
Expand All @@ -701,7 +701,7 @@ def test_widgets_selected_after_validation_error(
(By.CSS_SELECTOR, ".select2-results li")
)
)
city_options = driver.find_elements_by_css_selector(".select2-results li")
city_options = driver.find_elements(By.CSS_SELECTOR, ".select2-results li")
city_names_from_browser = {option.text for option in city_options}
city_names_from_db = set(City.objects.values_list("name", flat=True))
assert len(city_names_from_browser) == City.objects.count()
Expand All @@ -714,8 +714,8 @@ def test_widgets_selected_after_validation_error(
(By.CSS_SELECTOR, ".select2-results li:nth-child(2)")
)
)
country_option = driver.find_element_by_css_selector(
".select2-results li:nth-child(2)"
country_option = driver.find_element(
By.CSS_SELECTOR, ".select2-results li:nth-child(2)"
)
country_name = country_option.text
country_option.click()
Expand All @@ -728,7 +728,7 @@ def test_widgets_selected_after_validation_error(
(By.CSS_SELECTOR, ".select2-results li")
)
)
city_options = driver.find_elements_by_css_selector(".select2-results li")
city_options = driver.find_elements(By.CSS_SELECTOR, ".select2-results li")
city_names_from_browser = {option.text for option in city_options}
city_names_from_db = set(
Country.objects.get(name=country_name).cities.values_list("name", flat=True)
Expand All @@ -737,8 +737,8 @@ def test_widgets_selected_after_validation_error(
assert city_names_from_browser == city_names_from_db

# selecting a city reaaly does it
city_option = driver.find_element_by_css_selector(
".select2-results li:nth-child(2)"
city_option = driver.find_element(
By.CSS_SELECTOR, ".select2-results li:nth-child(2)"
)
city_name = city_option.text
city_option.click()
Expand All @@ -751,7 +751,7 @@ def test_widgets_selected_after_validation_error(
(By.CSS_SELECTOR, ".select2-results li")
)
)
country_options = driver.find_elements_by_css_selector(".select2-results li")
country_options = driver.find_elements(By.CSS_SELECTOR, ".select2-results li")
country_names_from_browser = {option.text for option in country_options}
country_names_from_db = {City.objects.get(name=city_name).country.name}
assert len(country_names_from_browser) != Country.objects.count()
Expand All @@ -765,7 +765,7 @@ def test_dependent_fields_clear_after_change_parent(
country_container,
city_container,
city2_container,
) = driver.find_elements_by_css_selector(".select2-selection--single")
) = driver.find_elements(By.CSS_SELECTOR, ".select2-selection--single")

# selecting a country really does it
country_container.click()
Expand All @@ -774,8 +774,8 @@ def test_dependent_fields_clear_after_change_parent(
(By.CSS_SELECTOR, ".select2-results li:nth-child(2)")
)
)
country_option = driver.find_element_by_css_selector(
".select2-results li:nth-child(2)"
country_option = driver.find_element(
By.CSS_SELECTOR, ".select2-results li:nth-child(2)"
)
country_name = country_option.text
country_option.click()
Expand All @@ -788,8 +788,8 @@ def test_dependent_fields_clear_after_change_parent(
(By.CSS_SELECTOR, ".select2-results li")
)
)
city2_option = driver.find_element_by_css_selector(
".select2-results li:nth-child(2)"
city2_option = driver.find_element(
By.CSS_SELECTOR, ".select2-results li:nth-child(2)"
)
city2_name = city2_option.text
city2_option.click()
Expand All @@ -802,8 +802,8 @@ def test_dependent_fields_clear_after_change_parent(
(By.CSS_SELECTOR, ".select2-results li:nth-child(3)")
)
)
country_option = driver.find_element_by_css_selector(
".select2-results li:nth-child(3)"
country_option = driver.find_element(
By.CSS_SELECTOR, ".select2-results li:nth-child(3)"
)
country_name = country_option.text
country_option.click()
Expand Down
6 changes: 5 additions & 1 deletion tests/testapp/settings.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import os.path

import django

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DEBUG = True

Expand Down Expand Up @@ -37,5 +39,7 @@

SECRET_KEY = "123456"

USE_L10N = True
if django.VERSION < (4, 0):
USE_L10N = True
USE_I18N = True
USE_TZ = True