mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-02-20 13:29:41 +00:00
Fixing tests for new logic etc
This commit is contained in:
@@ -7,7 +7,6 @@ from django.conf import settings
|
||||
from django.views.decorators.clickjacking import xframe_options_exempt
|
||||
from django.contrib.auth.views import LoginView
|
||||
from django.views.generic import TemplateView
|
||||
from registration.backends.default.views import RegistrationView
|
||||
from PyRIGS.decorators import permission_required_with_403
|
||||
import RIGS
|
||||
import users
|
||||
|
||||
@@ -7,6 +7,7 @@ from reversion import revisions as reversion
|
||||
from django.db.models import AutoField, ManyToOneRel
|
||||
from django.contrib import messages
|
||||
|
||||
|
||||
class EventRiskAssessmentCreate(generic.CreateView):
|
||||
model = models.RiskAssessment
|
||||
template_name = 'risk_assessment_form.html'
|
||||
|
||||
@@ -102,7 +102,7 @@ class CalendarICS(ICalFeed):
|
||||
return item.earliest_time
|
||||
|
||||
def item_end_datetime(self, item):
|
||||
if type(item.latest_time) == datetime.date: # Ical end_datetime is non-inclusive, so add a day
|
||||
if isinstance(item.latest_time, datetime.date): # Ical end_datetime is non-inclusive, so add a day
|
||||
return item.latest_time + datetime.timedelta(days=1)
|
||||
|
||||
return item.latest_time
|
||||
|
||||
24
RIGS/migrations/0048_auto_20201227_1749.py
Normal file
24
RIGS/migrations/0048_auto_20201227_1749.py
Normal file
@@ -0,0 +1,24 @@
|
||||
# Generated by Django 3.1.2 on 2020-12-27 17:49
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('RIGS', '0047_auto_20201213_1642'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='riskassessment',
|
||||
name='event_size',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='riskassessment',
|
||||
name='power_mic',
|
||||
field=models.ForeignKey(blank=True, help_text='Who is the Power MIC? (if yes to the above question, this person <em>must</em> be a Power Technician or Power Supervisor)', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='power_mic', to=settings.AUTH_USER_MODEL, verbose_name='Power MIC'),
|
||||
),
|
||||
]
|
||||
@@ -616,7 +616,7 @@ def validate_url(value):
|
||||
if not value:
|
||||
return # Required error is done the field
|
||||
obj = urlparse(value)
|
||||
if not obj.hostname in ('nottinghamtec.sharepoint.com'):
|
||||
if obj.hostname not in ('nottinghamtec.sharepoint.com'):
|
||||
raise ValidationError('URL must point to a location on the TEC Sharepoint')
|
||||
|
||||
|
||||
@@ -638,7 +638,7 @@ class RiskAssessment(models.Model, RevisionMixin):
|
||||
general_notes = models.TextField(blank=True, null=True, help_text="Did you have to consult a supervisor about any of the above? If so who did you consult and what was the outcome?")
|
||||
|
||||
# Power
|
||||
event_size = models.IntegerField(blank=True, null=True, choices=SIZES)
|
||||
# event_size = models.IntegerField(blank=True, null=True, choices=SIZES)
|
||||
big_power = models.BooleanField(help_text="Does the event require larger power supplies than 13A or 16A single phase wall sockets, or draw more than 20A total current?")
|
||||
# If yes to the above two, you must answer...
|
||||
power_mic = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='power_mic', blank=True, null=True,
|
||||
@@ -704,13 +704,6 @@ class RiskAssessment(models.Model, RevisionMixin):
|
||||
# Check for idiots
|
||||
if not self.outside and self.generators:
|
||||
raise forms.ValidationError("Engage brain, please. <strong>No generators indoors!(!)</strong>")
|
||||
# Confirm event size. Check all except generators, since generators entails outside
|
||||
if self.outside or self.other_companies_power or self.nonstandard_equipment_power or self.multiple_electrical_environments:
|
||||
self.event_size = self.LARGE[0]
|
||||
elif self.big_power:
|
||||
self.event_size = self.MEDIUM[0]
|
||||
else:
|
||||
self.event_size = self.SMALL[0]
|
||||
|
||||
class Meta:
|
||||
ordering = ['event']
|
||||
@@ -718,6 +711,16 @@ class RiskAssessment(models.Model, RevisionMixin):
|
||||
('review_riskassessment', 'Can review Risk Assessments')
|
||||
]
|
||||
|
||||
@property
|
||||
def event_size(self):
|
||||
# Confirm event size. Check all except generators, since generators entails outside
|
||||
if self.outside or self.other_companies_power or self.nonstandard_equipment_power or self.multiple_electrical_environments:
|
||||
return self.LARGE[0]
|
||||
elif self.big_power:
|
||||
return self.MEDIUM[0]
|
||||
else:
|
||||
return self.SMALL[0]
|
||||
|
||||
@property
|
||||
def activity_feed_string(self):
|
||||
return str(self.event)
|
||||
|
||||
@@ -41,6 +41,14 @@
|
||||
$('#{{ form.power_notes.id_for_label }}').prop('required', parseBool(this.value));
|
||||
$('#{{ form.power_plan.id_for_label }}').prop('required', parseBool(this.value));
|
||||
});
|
||||
$('input[type=radio][name=special_structures]').change(function() {
|
||||
$('#{{ form.persons_responsible_structures.id_for_label }}').prop('hidden', !parseBool(this.value)).prop('required', parseBool(this.value));
|
||||
$('label[for={{ form.persons_responsible_structures.id_for_label }}]').prop('hidden', !parseBool(this.value));
|
||||
});
|
||||
$('input[type=radio][name=suspended_structures]').change(function() {
|
||||
$('#{{ form.rigging_plan.id_for_label }}').prop('hidden', !parseBool(this.value)).prop('required', parseBool(this.value));
|
||||
$('label[for={{ form.rigging_plan.id_for_label }}]').prop('hidden', !parseBool(this.value));
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -110,7 +118,7 @@
|
||||
{% endif %}
|
||||
</select>
|
||||
</div>
|
||||
<p class="pt-4"><strong>If the answer is yes to any of the below questions this is a Large Event and you <em>must</em> consult a power supervisor</strong></p>
|
||||
<p class="pt-4"><strong>If the answer is yes to ANY of the below questions this is a Large Event and you <em>must</em> consult a power supervisor</strong></p>
|
||||
{% include 'partials/yes_no_radio.html' with formitem=form.outside %}
|
||||
{% include 'partials/yes_no_radio.html' with formitem=form.generators label="Will generators be used?" %}
|
||||
{% include 'partials/yes_no_radio.html' with formitem=form.other_companies_power %}
|
||||
@@ -159,11 +167,11 @@
|
||||
<div class="card-header">Structures</div>
|
||||
<div class="card-body">
|
||||
{% include 'partials/yes_no_radio.html' with formitem=form.special_structures %}
|
||||
<label for="{{ form.persons_responsible_structures.id_for_label }}" class="mt-3" hidden="true">{{ form.persons_responsible_structures.help_text }}</label>
|
||||
{% render_field form.persons_responsible_structures class+="form-control mb-3" hidden="true" %}
|
||||
{% include 'partials/yes_no_radio.html' with formitem=form.suspended_structures %}
|
||||
<label for="{{ form.persons_responsible_structures.id_for_label }}" class="mt-3">{{ form.persons_responsible_structures.help_text }}</label>
|
||||
{% render_field form.persons_responsible_structures class+="form-control mb-3" %}
|
||||
<label for="{{ form.rigging_plan.id_for_label }}" class="mt-2">{{ form.rigging_plan.help_text|safe }}</label>
|
||||
{% render_field form.rigging_plan class+="form-control" %}
|
||||
<label for="{{ form.rigging_plan.id_for_label }}" class="mt-2" hidden="true">{{ form.rigging_plan.help_text|safe }}</label>
|
||||
{% render_field form.rigging_plan class+="form-control" hidden="true" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -179,11 +179,13 @@ def namewithnotes(obj, url, autoescape=True):
|
||||
|
||||
|
||||
@register.filter(needs_autoescape=True)
|
||||
def linkornone(attr, namespace=None, autoescape=True):
|
||||
if attr is not None:
|
||||
def linkornone(target, namespace=None, autoescape=True):
|
||||
if target is not None:
|
||||
if namespace is not None:
|
||||
attr = namespace + "://" + attr
|
||||
return mark_safe("<a href='{}' target='_blank'><span class='overflow-ellipsis'>{}</span></a>".format(attr, str(attr)))
|
||||
link = namespace + "://" + target
|
||||
else:
|
||||
link = target
|
||||
return mark_safe("<a href='{}' target='_blank'><span class='overflow-ellipsis'>{}</span></a>".format(link, str(target)))
|
||||
else:
|
||||
return "None"
|
||||
|
||||
|
||||
@@ -190,6 +190,7 @@ class CreateRiskAssessment(FormPage):
|
||||
'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')),
|
||||
'outside': (regions.RadioSelect, (By.ID, 'id_outside')),
|
||||
'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')),
|
||||
@@ -207,7 +208,7 @@ class CreateRiskAssessment(FormPage):
|
||||
'persons_responsible_structures': (regions.TextBox, (By.ID, 'id_persons_responsible_structures')),
|
||||
'suspended_structures': (regions.RadioSelect, (By.ID, 'id_suspended_structures')),
|
||||
'supervisor_consulted': (regions.CheckBox, (By.ID, 'id_supervisor_consulted')),
|
||||
'outside': (regions.CheckBox, (By.ID, 'id_outside')),
|
||||
'rigging_plan': (regions.TextBox, (By.ID, 'id_rigging_plan')),
|
||||
}
|
||||
|
||||
@property
|
||||
@@ -248,8 +249,6 @@ class CreateEventChecklist(FormPage):
|
||||
'supply_test': (regions.CheckBox, (By.ID, 'id_supply_test')),
|
||||
'earthing': (regions.CheckBox, (By.ID, 'id_earthing')),
|
||||
'pat': (regions.CheckBox, (By.ID, 'id_pat')),
|
||||
'earthing_m': (regions.CheckBox, (By.XPATH, '(//*[@id="id_earthing"])[2]')),
|
||||
'pat_m': (regions.CheckBox, (By.XPATH, '(//*[@id="id_pat"])[2]')),
|
||||
'source_rcd': (regions.CheckBox, (By.ID, 'id_source_rcd')),
|
||||
'labelling': (regions.CheckBox, (By.ID, 'id_labelling')),
|
||||
'fd_voltage_l1': (regions.TextBox, (By.ID, 'id_fd_voltage_l1')),
|
||||
@@ -264,9 +263,6 @@ class CreateEventChecklist(FormPage):
|
||||
'w1_earth_fault': (regions.TextBox, (By.ID, 'id_w1_earth_fault')),
|
||||
}
|
||||
|
||||
def select_size(self, size):
|
||||
self.find_element(By.XPATH, '//button[.="{}"]'.format(size)).click()
|
||||
|
||||
def add_vehicle(self):
|
||||
self.find_element(*self._add_vehicle_locator).click()
|
||||
|
||||
|
||||
@@ -669,7 +669,14 @@ class TestHealthAndSafety(BaseRigboardTest):
|
||||
start_date=date.today() + timedelta(days=6),
|
||||
description="start future no end",
|
||||
purchase_order='TESTPO',
|
||||
person=self.client)
|
||||
person=self.client,
|
||||
venue=self.venue)
|
||||
self.testEvent3 = models.Event.objects.create(name="TE E3", status=models.Event.PROVISIONAL,
|
||||
start_date=date.today() + timedelta(days=6),
|
||||
description="start future no end",
|
||||
purchase_order='TESTPO',
|
||||
person=self.client,
|
||||
venue=self.venue)
|
||||
self.testRA = models.RiskAssessment.objects.create(event=self.testEvent2, supervisor_consulted=False, nonstandard_equipment=False,
|
||||
nonstandard_use=False,
|
||||
contractors=False,
|
||||
@@ -690,6 +697,26 @@ class TestHealthAndSafety(BaseRigboardTest):
|
||||
special_structures=False,
|
||||
suspended_structures=False,
|
||||
outside=False)
|
||||
self.testRA2 = models.RiskAssessment.objects.create(event=self.testEvent3, supervisor_consulted=False, nonstandard_equipment=False,
|
||||
nonstandard_use=False,
|
||||
contractors=False,
|
||||
other_companies=False,
|
||||
crew_fatigue=False,
|
||||
big_power=True,
|
||||
generators=False,
|
||||
other_companies_power=False,
|
||||
nonstandard_equipment_power=False,
|
||||
multiple_electrical_environments=False,
|
||||
noise_monitoring=False,
|
||||
known_venue=True,
|
||||
safe_loading=True,
|
||||
safe_storage=True,
|
||||
area_outside_of_control=False,
|
||||
barrier_required=False,
|
||||
nonstandard_emergency_procedure=False,
|
||||
special_structures=False,
|
||||
suspended_structures=False,
|
||||
outside=False)
|
||||
self.page = pages.EventDetail(self.driver, self.live_server_url, event_id=self.testEvent.pk).open()
|
||||
|
||||
# TODO Can I loop through all the boolean fields and test them at once?
|
||||
@@ -728,9 +755,11 @@ class TestHealthAndSafety(BaseRigboardTest):
|
||||
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.persons_responsible_structures = "Nobody and her cat, She"
|
||||
|
||||
self.page.suspended_structures = True
|
||||
# TODO Test for this proper
|
||||
self.page.rigging_plan = "https://nottinghamtec.sharepoint.com/test/"
|
||||
self.page.submit()
|
||||
self.assertFalse(self.page.success)
|
||||
|
||||
@@ -757,7 +786,7 @@ class TestHealthAndSafety(BaseRigboardTest):
|
||||
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.testEvent.pk).open()
|
||||
self.page = pages.CreateEventChecklist(self.driver, self.live_server_url, event_id=self.testEvent2.pk).open()
|
||||
|
||||
self.page.safe_parking = True
|
||||
self.page.safe_packing = True
|
||||
@@ -772,10 +801,9 @@ class TestHealthAndSafety(BaseRigboardTest):
|
||||
self.page.power_mic.toggle()
|
||||
self.assertFalse(self.page.power_mic.is_open)
|
||||
|
||||
self.page.select_size('Small')
|
||||
self.wait.until(animation_is_finished())
|
||||
self.assertFalse(self.driver.find_element(By.XPATH, '(//*[@id="id_earthing"])[2]').is_displayed())
|
||||
self.assertTrue(self.driver.find_element(By.XPATH, '(//*[@id="id_earthing"])[1]').is_displayed())
|
||||
# Gotta scroll to make the button clickable
|
||||
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
|
||||
|
||||
self.page.earthing = True
|
||||
self.page.rcds = True
|
||||
self.page.supply_test = True
|
||||
@@ -785,7 +813,7 @@ class TestHealthAndSafety(BaseRigboardTest):
|
||||
self.assertTrue(self.page.success)
|
||||
|
||||
def test_ec_create_medium(self):
|
||||
self.page = pages.CreateEventChecklist(self.driver, self.live_server_url, event_id=self.testEvent.pk).open()
|
||||
self.page = pages.CreateEventChecklist(self.driver, self.live_server_url, event_id=self.testEvent3.pk).open()
|
||||
|
||||
self.page.safe_parking = True
|
||||
self.page.safe_packing = True
|
||||
@@ -800,12 +828,11 @@ class TestHealthAndSafety(BaseRigboardTest):
|
||||
self.page.power_mic.toggle()
|
||||
self.assertFalse(self.page.power_mic.is_open)
|
||||
|
||||
self.page.select_size('Medium')
|
||||
self.wait.until(animation_is_finished())
|
||||
self.assertFalse(self.driver.find_element(By.XPATH, '(//*[@id="id_earthing"])[1]').is_displayed())
|
||||
self.assertTrue(self.driver.find_element(By.XPATH, '(//*[@id="id_earthing"])[2]').is_displayed())
|
||||
self.page.earthing_m = True
|
||||
self.page.pat_m = True
|
||||
# Gotta scroll to make the button clickable
|
||||
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
|
||||
|
||||
self.page.earthing = True
|
||||
self.page.pat = True
|
||||
self.page.source_rcd = True
|
||||
self.page.labelling = True
|
||||
self.page.fd_voltage_l1 = 240
|
||||
@@ -819,13 +846,12 @@ class TestHealthAndSafety(BaseRigboardTest):
|
||||
self.page.w1_voltage = 240
|
||||
self.page.w1_earth_fault = 333
|
||||
|
||||
# Gotta scroll to make the button clickable
|
||||
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
|
||||
self.page.submit()
|
||||
self.assertTrue(self.page.success)
|
||||
|
||||
def test_ec_create_extras(self):
|
||||
self.page = pages.CreateEventChecklist(self.driver, self.live_server_url, event_id=self.testEvent.pk).open()
|
||||
eid = self.testEvent2.pk
|
||||
self.page = pages.CreateEventChecklist(self.driver, self.live_server_url, event_id=eid).open()
|
||||
self.page.add_vehicle()
|
||||
self.page.add_crew()
|
||||
|
||||
@@ -859,10 +885,6 @@ class TestHealthAndSafety(BaseRigboardTest):
|
||||
crew_select.search(crew.name)
|
||||
self.driver.find_element(By.XPATH, '//*[@name="role_-1"]').send_keys(role)
|
||||
|
||||
self.page.select_size('Small')
|
||||
self.wait.until(animation_is_finished())
|
||||
self.assertFalse(self.driver.find_element(By.XPATH, '(//*[@id="id_earthing"])[2]').is_displayed())
|
||||
self.assertTrue(self.driver.find_element(By.XPATH, '(//*[@id="id_earthing"])[1]').is_displayed())
|
||||
self.page.earthing = True
|
||||
self.page.rcds = True
|
||||
self.page.supply_test = True
|
||||
@@ -871,7 +893,7 @@ class TestHealthAndSafety(BaseRigboardTest):
|
||||
self.page.submit()
|
||||
self.assertTrue(self.page.success)
|
||||
|
||||
checklist = models.EventChecklist.objects.get(event=self.testEvent.pk)
|
||||
checklist = models.EventChecklist.objects.get(event=eid)
|
||||
vehicle = models.EventChecklistVehicle.objects.get(checklist=checklist.pk)
|
||||
self.assertEqual(vehicle_name, vehicle.vehicle)
|
||||
crew_obj = models.EventChecklistCrew.objects.get(checklist=checklist.pk)
|
||||
|
||||
@@ -512,7 +512,6 @@ class TestHSLogic(TestCase):
|
||||
extinguishers_location="Somewhere, I forgot",
|
||||
earthing=False,
|
||||
pat=False,
|
||||
event_size=0,
|
||||
date=timezone.now(),
|
||||
venue=cls.venue),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user