Potentially fix tests

This commit is contained in:
2022-01-04 19:43:19 +00:00
parent 6c484b984c
commit e6af66a964
7 changed files with 597 additions and 323 deletions

13
Pipfile
View File

@@ -33,7 +33,6 @@ envparse = "~=0.2.0"
gunicorn = "~=20.0.4" gunicorn = "~=20.0.4"
icalendar = "~=4.0.7" icalendar = "~=4.0.7"
idna = "~=2.10" idna = "~=2.10"
importlib-metadata = "~=3.4.0"
lxml = "~=4.6.3" lxml = "~=4.6.3"
Markdown = "~=3.3.3" Markdown = "~=3.3.3"
msgpack = "~=1.0.2" msgpack = "~=1.0.2"
@@ -78,6 +77,7 @@ sentry-sdk = "*"
diff-match-patch = "*" diff-match-patch = "*"
python-barcode = "*" python-barcode = "*"
django-hCaptcha = "*" django-hCaptcha = "*"
importlib-metadata = "*"
[dev-packages] [dev-packages]
selenium = "~=3.141.0" selenium = "~=3.141.0"
@@ -89,8 +89,15 @@ pytest-django = "*"
pluggy = "*" pluggy = "*"
pytest-splinter = "*" pytest-splinter = "*"
pytest = "*" pytest = "*"
pytest-xdist = {extras = [ "psutil",], version = "*"} pytest-reverse = "*"
PyPOM = {extras = [ "splinter",], version = "*"}
[requires] [requires]
python_version = "3.9" python_version = "3.9"
[dev-packages.pytest-xdist]
extras = [ "psutil",]
version = "*"
[dev-packages.PyPOM]
extras = [ "splinter",]
version = "*"

776
Pipfile.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -19,7 +19,7 @@ from django.urls.exceptions import NoReverseMatch
from RIGS.models import Event from RIGS.models import Event
from assets.models import Asset from assets.models import Asset
from django.db import connection from django.db import connection
from django.test import TestCase from django.test import TestCase, TransactionTestCase
from django.test.utils import override_settings from django.test.utils import override_settings
@@ -67,11 +67,18 @@ class TestSampleDataGenerator(TestCase):
assert Event.objects.all().count() == 0 assert Event.objects.all().count() == 0
class TestSampleDataGenerator(TestCase): @override_settings(DEBUG=True)
@override_settings(DEBUG=True) class TestsWithSampleDataGenerator(TransactionTestCase):
def setUp(self): @classmethod
def setUpClass(cls):
super().setUpClass()
call_command('generateSampleData') call_command('generateSampleData')
@classmethod
def tearDownClass(cls):
call_command('deleteSampleData')
super().tearDownClass()
def test_unauthenticated(self): # Nothing should be available to the unauthenticated def test_unauthenticated(self): # Nothing should be available to the unauthenticated
for url in find_urls_recursive(urls.urlpatterns): for url in find_urls_recursive(urls.urlpatterns):
request_url = get_request_url(url) request_url = get_request_url(url)

View File

@@ -35,6 +35,8 @@ class Command(BaseCommand):
self.delete_objects(tmodels.TrainingCategory) self.delete_objects(tmodels.TrainingCategory)
self.delete_objects(tmodels.TrainingItem) self.delete_objects(tmodels.TrainingItem)
self.delete_objects(tmodels.TrainingLevel) self.delete_objects(tmodels.TrainingLevel)
self.delete_objects(tmodels.TrainingItemQualification)
self.delete_objects(tmodels.TrainingLevelRequirement)
def delete_objects(self, model): def delete_objects(self, model):
for obj in model.objects.all(): for obj in model.objects.all():

View File

@@ -0,0 +1,59 @@
# Generated by Django 3.2.11 on 2022-01-04 19:40
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('training', '0012_auto_20220102_2051'),
]
operations = [
migrations.AlterField(
model_name='trainingitem',
name='category',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='training.trainingcategory'),
),
migrations.AlterField(
model_name='trainingitemqualification',
name='item',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='training.trainingitem'),
),
migrations.AlterField(
model_name='trainingitemqualification',
name='supervisor',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='qualifications_granted', to='training.trainee'),
),
migrations.AlterField(
model_name='trainingitemqualification',
name='trainee',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='qualifications_obtained', to='training.trainee'),
),
migrations.AlterField(
model_name='traininglevelqualification',
name='confirmed_by',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='confirmer', to='training.trainee'),
),
migrations.AlterField(
model_name='traininglevelqualification',
name='level',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='training.traininglevel'),
),
migrations.AlterField(
model_name='traininglevelqualification',
name='trainee',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='level_qualifications', to='training.trainee'),
),
migrations.AlterField(
model_name='traininglevelrequirement',
name='item',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='training.trainingitem'),
),
migrations.AlterField(
model_name='traininglevelrequirement',
name='level',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='requirements', to='training.traininglevel'),
),
]

View File

@@ -57,7 +57,7 @@ class TrainingCategory(models.Model):
class TrainingItem(models.Model): class TrainingItem(models.Model):
reference_number = models.IntegerField() reference_number = models.IntegerField()
category = models.ForeignKey('TrainingCategory', related_name='items', on_delete=models.RESTRICT) category = models.ForeignKey('TrainingCategory', related_name='items', on_delete=models.CASCADE)
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
active = models.BooleanField(default=True) active = models.BooleanField(default=True)
@@ -90,12 +90,12 @@ class TrainingItemQualification(models.Model):
(COMPLETE, 'Training Complete'), (COMPLETE, 'Training Complete'),
(PASSED_OUT, 'Passed Out'), (PASSED_OUT, 'Passed Out'),
) )
item = models.ForeignKey('TrainingItem', on_delete=models.RESTRICT) item = models.ForeignKey('TrainingItem', on_delete=models.CASCADE)
depth = models.IntegerField(choices=CHOICES) depth = models.IntegerField(choices=CHOICES)
trainee = models.ForeignKey('Trainee', related_name='qualifications_obtained', on_delete=models.RESTRICT) trainee = models.ForeignKey('Trainee', related_name='qualifications_obtained', on_delete=models.CASCADE)
date = models.DateField() date = models.DateField()
# TODO Remember that some training is external. Support for making an organisation the trainer? # TODO Remember that some training is external. Support for making an organisation the trainer?
supervisor = models.ForeignKey('Trainee', related_name='qualifications_granted', on_delete=models.RESTRICT) supervisor = models.ForeignKey('Trainee', related_name='qualifications_granted', on_delete=models.CASCADE)
notes = models.TextField(blank=True) notes = models.TextField(blank=True)
# TODO Maximum depth - some things stop at Complete and you can't be passed out in them # TODO Maximum depth - some things stop at Complete and you can't be passed out in them
@@ -232,8 +232,8 @@ class TrainingLevel(models.Model, RevisionMixin):
@reversion.register @reversion.register
class TrainingLevelRequirement(models.Model, RevisionMixin): class TrainingLevelRequirement(models.Model, RevisionMixin):
level = models.ForeignKey('TrainingLevel', related_name='requirements', on_delete=models.RESTRICT) level = models.ForeignKey('TrainingLevel', related_name='requirements', on_delete=models.CASCADE)
item = models.ForeignKey('TrainingItem', on_delete=models.RESTRICT) item = models.ForeignKey('TrainingItem', on_delete=models.CASCADE)
depth = models.IntegerField(choices=TrainingItemQualification.CHOICES) depth = models.IntegerField(choices=TrainingItemQualification.CHOICES)
reversion_hide = True reversion_hide = True
@@ -247,10 +247,10 @@ class TrainingLevelRequirement(models.Model, RevisionMixin):
@reversion.register(follow=['trainee']) @reversion.register(follow=['trainee'])
class TrainingLevelQualification(models.Model, RevisionMixin): class TrainingLevelQualification(models.Model, RevisionMixin):
trainee = models.ForeignKey('Trainee', related_name='level_qualifications', on_delete=models.RESTRICT) trainee = models.ForeignKey('Trainee', related_name='level_qualifications', on_delete=models.CASCADE)
level = models.ForeignKey('TrainingLevel', on_delete=models.RESTRICT) level = models.ForeignKey('TrainingLevel', on_delete=models.CASCADE)
confirmed_on = models.DateTimeField(null=True) confirmed_on = models.DateTimeField(null=True)
confirmed_by = models.ForeignKey('Trainee', related_name='confirmer', on_delete=models.RESTRICT, null=True) confirmed_by = models.ForeignKey('Trainee', related_name='confirmer', on_delete=models.CASCADE, null=True)
reversion_hide = True reversion_hide = True

View File

@@ -85,39 +85,32 @@ class Command(BaseCommand):
self.profiles.append(new_profile) self.profiles.append(new_profile)
def setup_useful_profiles(self): def setup_useful_profiles(self):
super_user = models.Profile.objects.create(username="superuser", first_name="Super", last_name="User", super_user = models.Profile.objects.create_superuser(username="superuser",
initials="SU", email="superuser@example.com", password="superuser", first_name="Super", last_name="User",
email="superuser@example.com", is_superuser=True, is_active=True, initials="SU", is_active=True)
is_staff=True)
super_user.set_password('superuser')
super_user.save() super_user.save()
finance_user = models.Profile.objects.create(username="finance", first_name="Finance", last_name="User", finance_user = models.Profile.objects.create_user(username="finance",
initials="FU", email="financeuser@example.com", password="finance", first_name="Finance", last_name="User",
email="financeuser@example.com", is_active=True, is_approved=True) initials="FU", is_active=True, is_approved=True)
finance_user.groups.add(self.finance_group) finance_user.groups.add(self.finance_group)
finance_user.groups.add(self.keyholder_group) finance_user.groups.add(self.keyholder_group)
finance_user.set_password('finance')
finance_user.save() finance_user.save()
hs_user = models.Profile.objects.create(username="hs", first_name="HS", last_name="User", hs_user = models.Profile.objects.create_user(username="hs",
initials="HSU", email="hsuser@example.com", password="hs", first_name="HS", last_name="User",
email="hsuser@example.com", is_active=True, is_approved=True) initials="HSU", is_active=True, is_approved=True)
hs_user.groups.add(self.hs_group) hs_user.groups.add(self.hs_group)
hs_user.groups.add(self.keyholder_group) hs_user.groups.add(self.keyholder_group)
hs_user.set_password('hs')
hs_user.save() hs_user.save()
keyholder_user = models.Profile.objects.create(username="keyholder", first_name="Keyholder", last_name="User", keyholder_user = models.Profile.objects.create_user(username="keyholder",
initials="KU", email="keyholderuser@example.com", password="keyholder", first_name="Keyholder", last_name="User",
email="keyholderuser@example.com", is_active=True, initials="KU", is_active=True,
is_approved=True) is_approved=True)
keyholder_user.groups.add(self.keyholder_group) keyholder_user.groups.add(self.keyholder_group)
keyholder_user.set_password('keyholder')
keyholder_user.save() keyholder_user.save()
basic_user = models.Profile.objects.create(username="basic", first_name="Basic", last_name="User", basic_user = models.Profile.objects.create_user(username="basic",
initials="BU", email="basicuser@example.com", password="basic", first_name="Basic", last_name="User",
email="basicuser@example.com", is_active=True, is_approved=True) initials="BU", is_active=True, is_approved=True)
basic_user.set_password('basic')
basic_user.save()