Create the training database (#463)

Co-authored-by: josephjboyden <josephjboyden@gmail.com>
This commit is contained in:
2022-01-18 15:47:53 +00:00
committed by GitHub
parent eaf891daf7
commit d25381b2de
85 changed files with 12550 additions and 841 deletions

View File

@@ -0,0 +1,37 @@
import pytest
from training import models
from RIGS.models import Profile
@pytest.fixture
def trainee(db):
trainee = Profile.objects.create(username="trainee", first_name="Train", last_name="EE",
initials="TRN",
email="trainee@example.com", is_active=True, is_approved=True)
yield trainee
trainee.delete()
@pytest.fixture
def supervisor(db):
supervisor = Profile.objects.create(username="supervisor", first_name="Super", last_name="Visor",
initials="SV",
email="supervisor@example.com", is_supervisor=True, is_active=True, is_approved=True)
yield supervisor
supervisor.delete()
@pytest.fixture
def training_item(db):
training_category = models.TrainingCategory.objects.create(reference_number=1, name="The Basics")
training_item = models.TrainingItem.objects.create(category=training_category, reference_number=1, name="How Not To Die")
yield training_item
training_category.delete()
training_item.delete()
@pytest.fixture
def level(db):
level = models.TrainingLevel.objects.create(description="There is no description.", level=models.TrainingLevel.TECHNICIAN)
yield level
level.delete()

42
training/tests/pages.py Normal file
View File

@@ -0,0 +1,42 @@
from django.urls import reverse
from pypom import Region
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from PyRIGS.tests import regions
from PyRIGS.tests.pages import BasePage, FormPage
class TraineeDetail(BasePage):
URL_TEMPLATE = 'training/trainee/{pk}'
_name_selector = (By.XPATH, '//h2')
@property
def page_name(self):
return self.find_element(*self._name_selector).text
class AddQualification(FormPage):
URL_TEMPLATE = 'training/trainee/{pk}/add_qualification/'
_item_selector = (By.XPATH, '//div[1]/form/div[1]/div')
_supervisor_selector = (By.XPATH, '//div[1]/form/div[3]/div')
form_items = {
'depth': (regions.SingleSelectPicker, (By.ID, 'id_depth')),
'date': (regions.DatePicker, (By.ID, 'id_date')),
'notes': (regions.TextBox, (By.ID, 'id_notes')),
}
@property
def item_selector(self):
return regions.BootstrapSelectElement(self, self.find_element(*self._item_selector))
@property
def supervisor_selector(self):
return regions.BootstrapSelectElement(self, self.find_element(*self._supervisor_selector))
@property
def success(self):
return 'add' not in self.driver.current_url

View File

@@ -0,0 +1,46 @@
import datetime
import time
from django.utils import timezone
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.ui import WebDriverWait
from PyRIGS.tests.base import AutoLoginTest, screenshot_failure_cls, assert_times_almost_equal
from PyRIGS.tests.pages import animation_is_finished
from training import models
from training.tests import pages
def test_add_qualification(logged_in_browser, live_server, trainee, supervisor, training_item):
page = pages.AddQualification(logged_in_browser.driver, live_server.url, pk=trainee.pk).open()
# assert page.name in str(trainee)
page.depth = "Training Started"
page.date = date = datetime.date(1984, 1, 1)
page.notes = "A note"
time.sleep(2) # Slow down for javascript
page.item_selector.toggle()
assert page.item_selector.is_open
page.item_selector.search(training_item.name)
time.sleep(2) # Slow down for javascript
page.item_selector.set_option(training_item.name, True)
assert page.item_selector.options[0].selected
page.item_selector.toggle()
page.supervisor_selector.toggle()
assert page.supervisor_selector.is_open
page.supervisor_selector.search(supervisor.name[:-6])
time.sleep(2) # Slow down for javascript
assert page.supervisor_selector.options[0].selected
page.supervisor_selector.toggle()
page.submit()
assert page.success
qualification = models.TrainingItemQualification.objects.get(trainee=trainee, item=training_item)
assert qualification.supervisor.pk == supervisor.pk
assert qualification.date == date
assert qualification.notes == "A note"
assert qualification.depth == models.TrainingItemQualification.STARTED

View File

@@ -0,0 +1,38 @@
import datetime
import pytest
from django.utils import timezone
from django.urls import reverse
from pytest_django.asserts import assertFormError, assertRedirects, assertContains, assertNotContains
from training import models
def test_add_qualification(admin_client, trainee, admin_user):
url = reverse('add_qualification', kwargs={'pk': trainee.pk})
date = (timezone.now() + datetime.timedelta(days=3)).strftime("%Y-%m-%d")
response = admin_client.post(url, {'date': date, 'trainee': trainee.pk, 'supervisor': trainee.pk})
assertFormError(response, 'form', 'date', 'Qualification date may not be in the future')
assertFormError(response, 'form', 'supervisor', 'One may not supervise oneself...')
response = admin_client.post(url, {'date': date, 'trainee': trainee.pk, 'supervisor': admin_user.pk})
assertFormError(response, 'form', 'supervisor', 'Selected supervisor must actually *be* a supervisor...')
def test_add_requirement(admin_client, level):
url = reverse('add_requirement', kwargs={'pk': level.pk})
response = admin_client.post(url)
assertContains(response, level.pk)
def test_trainee_detail(admin_client, trainee, admin_user):
url = reverse('trainee_detail', kwargs={'pk': admin_user.pk})
response = admin_client.get(url)
assertContains(response, "Your Training Record")
assertContains(response, "No qualifications in any levels")
url = reverse('trainee_detail', kwargs={'pk': trainee.pk})
response = admin_client.get(url)
assertNotContains(response, "Your")
name = trainee.first_name + " " + trainee.last_name
assertContains(response, f"{name}'s Training Record")