diff --git a/Pipfile b/Pipfile index 69be4258..596e2ea4 100644 --- a/Pipfile +++ b/Pipfile @@ -78,6 +78,7 @@ zipp = "==3.4.0" "zope.proxy" = "==4.3.5" "zope.schema" = "==6.0.1" sentry-sdk = "*" +pytest-splinter = "*" [dev-packages] pycodestyle = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 86312b75..248ac76a 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "d8a6e0dad40718af879d0bb1a932892ab6aec5405bdc875bf9499d1ebcc1499b" + "sha256": "5829b746578681f0e8c44e47a0a07d896b2626923f2986ef51e6198dc069e508" }, "pipfile-spec": 6, "requires": { @@ -32,6 +32,14 @@ "index": "pypi", "version": "==3.3.1" }, + "attrs": { + "hashes": [ + "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6", + "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==20.3.0" + }, "backports.tempfile": { "hashes": [ "sha256:05aa50940946f05759696156a8c39be118169a0e0f94a49d0bb106503891ff54", @@ -306,6 +314,13 @@ "index": "pypi", "version": "==3.4.0" }, + "iniconfig": { + "hashes": [ + "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", + "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32" + ], + "version": "==1.1.1" + }, "lxml": { "hashes": [ "sha256:0448576c148c129594d890265b1a83b9cd76fd1f0a6a04620753d9a6bcfd0a4d", @@ -391,6 +406,14 @@ "index": "pypi", "version": "==1.0.2" }, + "packaging": { + "hashes": [ + "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5", + "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==20.9" + }, "pep517": { "hashes": [ "sha256:3985b91ebf576883efe5fa501f42a16de2607684f3797ddba7202b71b7d0da51", @@ -544,6 +567,14 @@ "index": "pypi", "version": "==2.8.6" }, + "py": { + "hashes": [ + "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3", + "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.10.0" + }, "pygments": { "hashes": [ "sha256:bc9591213a8f0e0ca1a5e68a479b4887fdc3e75d0774e5c71c31920c427de435", @@ -575,6 +606,21 @@ "index": "pypi", "version": "==2.2.0" }, + "pytest": { + "hashes": [ + "sha256:9d1edf9e7d0b84d72ea3dbcdfd22b35fb543a5e8f2a60092dd578936bf63d7f9", + "sha256:b574b57423e818210672e07ca1fa90aaf194a4f63f3ab909a2c67ebb22913839" + ], + "markers": "python_version >= '3.6'", + "version": "==6.2.2" + }, + "pytest-splinter": { + "hashes": [ + "sha256:16d93db719bcad19342935c1707b5c3ec7e34d9ae10df683f6fc2e9e982ddb39" + ], + "index": "pypi", + "version": "==3.3.1" + }, "python-dateutil": { "hashes": [ "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", @@ -670,11 +716,10 @@ }, "sentry-sdk": { "hashes": [ - "sha256:0a711ec952441c2ec89b8f5d226c33bc697914f46e876b44a4edd3e7864cf4d0", - "sha256:737a094e49a529dd0fdcaafa9e97cf7c3d5eb964bd229821d640bc77f3502b3f" + "sha256:3693cb47ba8d90c004ac002425770b32aaf0c83a846ec48e2d1364e7db1d072d" ], "index": "pypi", - "version": "==0.19.5" + "version": "==0.20.1" }, "simplejson": { "hashes": [ @@ -743,6 +788,13 @@ "index": "pypi", "version": "==2.1" }, + "splinter": { + "hashes": [ + "sha256:459e39e7a9f7572db6f1cdb5fdc5ccfc6404f021dccb969ee6287be2386a40db", + "sha256:7e5e69c5b76ada909283465cdc3636e2632f7e557932ce96ab9c0432b0b32f7f" + ], + "version": "==0.14.0" + }, "sqlparse": { "hashes": [ "sha256:017cde379adbd6a1f15a61873f43e8274179378e95ef3fede90b5aa64d304ed0", diff --git a/RIGS/tests/test_interaction.py b/RIGS/tests/test_interaction.py index f67927c9..7f070716 100644 --- a/RIGS/tests/test_interaction.py +++ b/RIGS/tests/test_interaction.py @@ -651,6 +651,21 @@ class TestCalendar(BaseRigboardTest): self.assertIn(target_date.strftime("%m"), self.driver.current_url) +def test_ra_edit(logged_in_browser, live_server, ra): + page = pages.EditRiskAssessment(logged_in_browser.driver, live_server.url, pk=ra.pk).open() + page.nonstandard_equipment = nse = True + page.general_notes = gn = "There are some notes, but I've not written them here as that would be helpful" + page.submit() + assert not page.success + page.supervisor_consulted = True + page.submit() + assert page.success + # Check that data is right + ra = models.RiskAssessment.objects.get(pk=ra.pk) + assert ra.general_notes == gn + assert ra.nonstandard_equipment == nse + + @screenshot_failure_cls class TestHealthAndSafety(BaseRigboardTest): def setUp(self): @@ -776,20 +791,6 @@ class TestHealthAndSafety(BaseRigboardTest): self.page = pages.CreateRiskAssessment(self.driver, self.live_server_url, event_id=self.testEvent.pk).open() self.assertIn('edit', self.driver.current_url) - def test_ra_edit(self): - self.page = pages.EditRiskAssessment(self.driver, self.live_server_url, pk=self.testRA.pk).open() - self.page.nonstandard_equipment = nse = True - self.page.general_notes = gn = "There are some notes, but I've not written them here as that would be helpful" - self.page.submit() - self.assertFalse(self.page.success) - self.page.supervisor_consulted = True - self.page.submit() - self.assertTrue(self.page.success) - # Check that data is right - ra = models.RiskAssessment.objects.get(pk=self.testRA.pk) - self.assertEqual(ra.general_notes, gn) - self.assertEqual(ra.nonstandard_equipment, nse) - def test_ec_create_small(self): self.page = pages.CreateEventChecklist(self.driver, self.live_server_url, event_id=self.testEvent2.pk).open() diff --git a/assets/tests/conftest.py b/assets/tests/conftest.py index 334b7bb6..fbe8982f 100644 --- a/assets/tests/conftest.py +++ b/assets/tests/conftest.py @@ -30,6 +30,6 @@ def test_cable(db, category, status): @pytest.fixture def test_asset(db, category, status): - asset = models.Asset.objects.create(asset_id="91991", description="Spaceflower", status=status, category=category, date_acquired=datetime.date(1991, 12, 26)) + asset, created = models.Asset.objects.get_or_create(asset_id="91991", description="Spaceflower", status=status, category=category, date_acquired=datetime.date(1991, 12, 26)) yield asset asset.delete() diff --git a/conftest.py b/conftest.py index b29e1d4c..37ad4674 100644 --- a/conftest.py +++ b/conftest.py @@ -2,9 +2,12 @@ from django.conf import settings import django import pytest from django.core.management import call_command -from RIGS.models import VatRate +from RIGS.models import VatRate, Profile import random from django.db import connection +from PyRIGS.tests import pages +import os +from selenium import webdriver def pytest_configure(): @@ -13,9 +16,34 @@ def pytest_configure(): ) settings.WHITENOISE_USE_FINDERS = True settings.WHITENOISE_AUTOREFRESH = True + # TODO Why do we need this, with the above options enabled? + settings.STATICFILES_DIRS += [ + os.path.join(settings.BASE_DIR, 'static/'), + ] django.setup() +@pytest.fixture +def logged_in_browser(live_server, browser): + profile = Profile( + username="EventTest", first_name="Event", last_name="Test", initials="ETU", is_superuser=True) + profile.set_password("EventTestPassword") + profile.save() + login_page = pages.LoginPage(browser.driver, live_server.url).open() + login_page.login("EventTest", "EventTestPassword") + return browser + + +@pytest.fixture(scope='session') +def splinter_driver_kwargs(): + options = webdriver.ChromeOptions() + options.add_argument("--window-size=1920,1080") + options.add_argument("--headless") + if settings.CI: + options.add_argument("--no-sandbox") + return {"options": options} + + @pytest.fixture(scope='session') def splinter_webdriver(): return 'chrome'