Initial work on RA tests

This commit is contained in:
2020-09-12 14:00:03 +01:00
parent eb7d8e49e8
commit aa0184a5dc
4 changed files with 138 additions and 2 deletions

View File

@@ -1,7 +1,7 @@
<div class="row">
<label for="{{ formitem.id_for_label }}"
class="col-8 control-label">{{ formitem.help_text|safe }}</label>
<div class="col-4 pb-3">
<div class="col-4 pb-3" id="{{ formitem.id_for_label|slice:'-2' }}">
{% for radio in formitem %}
<div class="custom-control custom-radio">
{{ radio.tag }}

View File

@@ -162,6 +162,47 @@ class CreateEvent(FormPage):
return '/create' not in self.driver.current_url
class CreateRiskAssessment(FormPage):
URL_TEMPLATE = 'event/{event_id}/ra/'
_submit_locator = (By.XPATH, "//button[@type='submit' and contains(., 'Save')]")
_power_mic_selector = (By.CSS_SELECTOR, ".bootstrap-select")
form_items = {
'nonstandard_equipment': (regions.RadioSelect, (By.ID, 'id_nonstandard_equipment')),
'nonstandard_use': (regions.RadioSelect, (By.ID, 'id_nonstandard_use')),
'contractors': (regions.RadioSelect, (By.ID, 'id_contractors')),
'other_companies': (regions.RadioSelect, (By.ID, 'id_other_companies')),
'crew_fatigue': (regions.RadioSelect, (By.ID, 'id_crew_fatigue')),
'general_notes': (regions.TextBox, (By.ID, 'id_general_notes')),
'big_power': (regions.RadioSelect, (By.ID, 'id_big_power')),
#'power_mic': (regions.RadioSelect, (By.ID, 'id_power_mic')),
'generators': (regions.RadioSelect, (By.ID, 'id_generators')),
'other_companies_power': (regions.RadioSelect, (By.ID, 'id_other_companies_power')),
'nonstandard_equipment_power': (regions.RadioSelect, (By.ID, 'id_nonstandard_equipment_power')),
'multiple_electrical_environments': (regions.RadioSelect, (By.ID, 'id_multiple_electrical_environments')),
'power_notes': (regions.TextBox, (By.ID, 'id_power_notes')),
'noise_monitoring': (regions.RadioSelect, (By.ID, 'id_noise_monitoring')),
'sound_notes': (regions.TextBox, (By.ID, 'id_sound_notes')),
'known_venue': (regions.RadioSelect, (By.ID, 'id_known_venue')),
'safe_loading': (regions.RadioSelect, (By.ID, 'id_safe_loading')),
'safe_storage': (regions.RadioSelect, (By.ID, 'id_safe_storage')),
'area_outside_of_control': (regions.RadioSelect, (By.ID, 'id_area_outside_of_control')),
'barrier_required': (regions.RadioSelect, (By.ID, 'id_barrier_required')),
'nonstandard_emergency_procedure': (regions.RadioSelect, (By.ID, 'id_nonstandard_emergency_procedure')),
'special_structures': (regions.RadioSelect, (By.ID, 'id_special_structures')),
'persons_responsible_structures': (regions.TextBox, (By.ID, 'id_persons_responsible_structures')),
'suspended_structures': (regions.RadioSelect, (By.ID, 'id_suspended_structures')),
}
@property
def power_mic(self):
return regions.BootstrapSelectElement(self, self.find_element(*self._power_mic_selector))
@property
def success(self):
return '/event/ra' in self.driver.current_url
class DuplicateEvent(CreateEvent):
URL_TEMPLATE = 'event/{event_id}/duplicate'
_submit_locator = (By.XPATH, '/html/body/div[1]/form/div/div[5]/div/button')

View File

@@ -23,6 +23,7 @@ from django.test.client import Client
from django.core import mail, signing
from django.http import HttpResponseBadRequest
from django.conf import settings
from selenium.common.exceptions import NoSuchElementException
@screenshot_failure_cls
@@ -809,7 +810,6 @@ class ClientEventAuthorisationTest(TestCase):
self.assertEqual(mail.outbox[1].to, [settings.AUTHORISATION_NOTIFICATION_ADDRESS])
@screenshot_failure_cls
class TECEventAuthorisationTest(TestCase):
@classmethod
def setUpTestData(cls):
@@ -866,3 +866,82 @@ class TECEventAuthorisationTest(TestCase):
self.assertEqual(self.event.auth_request_by, self.profile)
self.assertEqual(self.event.auth_request_to, 'client@functional.test')
self.assertIsNotNone(self.event.auth_request_at)
@screenshot_failure_cls
class TestHealthAndSafety(BaseRigboardTest):
def setUp(self):
super().setUp()
self.profile = models.Profile.objects.get_or_create(
first_name='Test',
last_name='TEC User',
username='eventauthtest',
email='teccie@functional.test',
is_superuser=True # lazily grant all permissions
)[0]
self.testEvent = models.Event.objects.create(name="TE E1", status=models.Event.PROVISIONAL,
start_date=date.today() + timedelta(days=6),
description="start future no end",
purchase_order='TESTPO',
person=self.client,
auth_request_by=self.profile,
auth_request_at=base.create_datetime(2015, 0o6, 0o4, 10, 00),
auth_request_to="some@email.address")
item1 = models.EventItem(
event=self.testEvent,
name="Test Item 1",
cost="10.00",
quantity="1",
order=1
).save()
item2 = models.EventItem(
event=self.testEvent,
name="Test Item 2",
description="Foo",
cost="9.72",
quantity="3",
order=2,
).save()
self.page = pages.EventDetail(self.driver, self.live_server_url, event_id=self.testEvent.pk).open()
def test_ra_creation(self):
self.page = pages.CreateRiskAssessment(self.driver, self.live_server_url, event_id=self.testEvent.pk).open()
# Check there are no defaults
self.assertIsNone(self.page.nonstandard_equipment)
# No database side validation, only HTML5.
self.page.nonstandard_equipment = False
self.page.nonstandard_use = False
self.page.contractors = False
self.page.other_companies = False
self.page.crew_fatigue = False
self.page.general_notes = "There are no notes."
self.page.big_power = False
self.page.power_mic.search(self.profile.name)
self.page.power_mic.set_option(self.profile.name, True)
# TODO This should not be necessary, normally closes automatically
self.page.power_mic.toggle()
self.assertFalse(self.page.power_mic.is_open)
self.page.generators = False
self.page.other_companies_power = False
self.page.nonstandard_equipment_power = False
self.page.multiple_electrical_environments = False
self.page.power_notes = "Remember to bring some power"
self.page.noise_monitoring = False
self.page.sound_notes = "Loud, but not too loud"
self.page.known_venue = True
self.page.safe_loading = True
self.page.safe_storage = True
self.page.area_outside_of_control = False
self.page.barrier_required = False
self.page.nonstandard_emergency_procedure = False
self.page.special_structures = False
self.page.persons_responsible_structures = "Nobody and her cat, She"
self.page.suspended_structures = False
self.page.submit()
self.assertTrue(self.page.success)