mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-10-09 22:15:25 +00:00
Add smoke tests to load a bunch of pages for better test coverage (#663)
This commit is contained in:
222
RIGS/tests/test_smoke.py
Normal file
222
RIGS/tests/test_smoke.py
Normal file
@@ -0,0 +1,222 @@
|
||||
"""Broad GET smoke tests: render every main page once so view/template/form code paths are exercised."""
|
||||
|
||||
import datetime
|
||||
|
||||
import pytest
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
|
||||
from RIGS import models
|
||||
from assets import models as asset_models
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def world(admin_user, basic_event, ra, checklist, power_test, venue):
|
||||
person = models.Person.objects.create(name="Pat Person", email="pat@example.com")
|
||||
org = models.Organisation.objects.create(name="Org Ltd")
|
||||
basic_event.person = person
|
||||
basic_event.organisation = org
|
||||
basic_event.venue = venue
|
||||
basic_event.mic = admin_user
|
||||
basic_event.status = models.Event.CONFIRMED
|
||||
basic_event.end_date = basic_event.start_date + datetime.timedelta(days=1)
|
||||
basic_event.save()
|
||||
models.EventItem.objects.create(event=basic_event, name="Item", cost=10, quantity=2, order=1)
|
||||
invoice = models.Invoice.objects.create(event=basic_event)
|
||||
payment = models.Payment.objects.create(invoice=invoice, date=timezone.now(), amount=5, method=models.Payment.CASH)
|
||||
|
||||
status = asset_models.AssetStatus.objects.create(name="OK", should_show=True)
|
||||
category = asset_models.AssetCategory.objects.create(name="Cat")
|
||||
asset = asset_models.Asset.objects.create(
|
||||
asset_id="X1",
|
||||
description="Thing",
|
||||
status=status,
|
||||
category=category,
|
||||
date_acquired=datetime.date(2020, 1, 1),
|
||||
replacement_cost=10,
|
||||
)
|
||||
supplier = asset_models.Supplier.objects.create(name="Sup")
|
||||
connector = asset_models.Connector.objects.create(
|
||||
description="IEC", current_rating=16, voltage_rating=240, num_pins=3
|
||||
)
|
||||
cable_type = asset_models.CableType.objects.create(circuits=1, cores=3, plug=connector, socket=connector)
|
||||
return dict(
|
||||
event=basic_event,
|
||||
person=person,
|
||||
org=org,
|
||||
venue=venue,
|
||||
invoice=invoice,
|
||||
payment=payment,
|
||||
ra=ra,
|
||||
ec=checklist,
|
||||
pt=power_test,
|
||||
asset=asset,
|
||||
supplier=supplier,
|
||||
cable_type=cable_type,
|
||||
user=admin_user,
|
||||
)
|
||||
|
||||
|
||||
# (url name, kwargs as {kwarg: world key attribute})
|
||||
PAGES = [
|
||||
("rigboard", {}),
|
||||
("web_calendar", {}),
|
||||
("event_archive", {}),
|
||||
("hs_list", {}),
|
||||
("person_list", {}),
|
||||
("person_create", {}),
|
||||
("person_detail", {"pk": "person"}),
|
||||
("person_update", {"pk": "person"}),
|
||||
("organisation_list", {}),
|
||||
("organisation_create", {}),
|
||||
("organisation_detail", {"pk": "org"}),
|
||||
("organisation_update", {"pk": "org"}),
|
||||
("venue_list", {}),
|
||||
("venue_create", {}),
|
||||
("venue_detail", {"pk": "venue"}),
|
||||
("venue_update", {"pk": "venue"}),
|
||||
("event_detail", {"pk": "event"}),
|
||||
("event_create", {}),
|
||||
("event_embed", {"pk": "event"}),
|
||||
("event_print", {"pk": "event"}),
|
||||
("event_update", {"pk": "event"}),
|
||||
("event_duplicate", {"pk": "event"}),
|
||||
("event_ra", {"pk": "event"}),
|
||||
("ra_detail", {"pk": "ra"}),
|
||||
("ra_edit", {"pk": "ra"}),
|
||||
("ra_print", {"pk": "ra"}),
|
||||
("event_ec", {"pk": "event"}),
|
||||
("ec_detail", {"pk": "ec"}),
|
||||
("ec_edit", {"pk": "ec"}),
|
||||
("event_pt", {"pk": "event"}),
|
||||
("pt_detail", {"pk": "pt"}),
|
||||
("pt_edit", {"pk": "pt"}),
|
||||
("event_checkin", {"pk": "event"}),
|
||||
("event_checkout", {}),
|
||||
("event_checkin_override", {"pk": "event"}),
|
||||
("event_authorise_request", {"pk": "event"}),
|
||||
("event_authorise_preview", {"pk": "event"}),
|
||||
("invoice_dashboard", {}),
|
||||
("invoice_list", {}),
|
||||
("invoice_archive", {}),
|
||||
("invoice_waiting", {}),
|
||||
("invoice_event", {"pk": "event"}),
|
||||
("invoice_detail", {"pk": "invoice"}),
|
||||
("invoice_print", {"pk": "invoice"}),
|
||||
("invoice_void", {"pk": "invoice"}),
|
||||
("invoice_delete", {"pk": "invoice"}),
|
||||
("payment_delete", {"pk": "payment"}),
|
||||
("activity_feed", {}),
|
||||
("event_history", {"pk": "event"}),
|
||||
("asset_index", {}),
|
||||
("asset_list", {}),
|
||||
("asset_detail", {"pk": "asset"}),
|
||||
("asset_create", {}),
|
||||
("asset_update", {"pk": "asset"}),
|
||||
("asset_duplicate", {"pk": "asset"}),
|
||||
("generate_label", {"pk": "asset"}),
|
||||
("cable_list", {}),
|
||||
("cable_type_list", {}),
|
||||
("cable_type_create", {}),
|
||||
("cable_type_update", {"pk": "cable_type"}),
|
||||
("cable_type_detail", {"pk": "cable_type"}),
|
||||
("asset_embed", {"pk": "asset"}),
|
||||
("asset_audit_list", {}),
|
||||
("asset_audit", {"pk": "asset"}),
|
||||
("supplier_list", {}),
|
||||
("supplier_detail", {"pk": "supplier"}),
|
||||
("supplier_create", {}),
|
||||
("supplier_update", {"pk": "supplier"}),
|
||||
("profile_detail", {}),
|
||||
("profile_update_self", {}),
|
||||
("search_help", {}),
|
||||
("item_list", {}),
|
||||
("trainee_list", {}),
|
||||
("level_list", {}),
|
||||
]
|
||||
|
||||
|
||||
@pytest.mark.parametrize("name,kw", PAGES, ids=[p[0] for p in PAGES])
|
||||
def test_page_renders(admin_client, world, name, kw):
|
||||
world["assetlist"] = "X1"
|
||||
kwargs = {k: (world[v].pk if hasattr(world[v], "pk") else world[v]) for k, v in kw.items()}
|
||||
if name in ("asset_detail", "asset_update", "asset_duplicate", "generate_label", "asset_embed", "asset_audit"):
|
||||
kwargs["pk"] = "X1"
|
||||
response = admin_client.get(reverse(name, kwargs=kwargs), follow=True)
|
||||
assert response.status_code == 200
|
||||
|
||||
|
||||
def test_ical(client, world):
|
||||
user = world["user"]
|
||||
user.api_key = "abc123"
|
||||
user.save()
|
||||
response = client.get(reverse("ics_calendar", kwargs={"api_pk": user.pk, "api_key": "abc123"}))
|
||||
assert response.status_code == 200
|
||||
assert b"VEVENT" in response.content
|
||||
|
||||
|
||||
def test_invoice_payment_flow(admin_client, world):
|
||||
inv = world["invoice"]
|
||||
response = admin_client.post(
|
||||
reverse("payment_create"),
|
||||
{"invoice": inv.pk, "date": "2020-01-01", "amount": "3.00", "method": models.Payment.CASH},
|
||||
)
|
||||
assert response.status_code in (200, 302)
|
||||
assert admin_client.post(reverse("payment_delete", kwargs={"pk": world["payment"].pk})).status_code in (200, 302)
|
||||
|
||||
|
||||
def test_event_create_and_update_post(admin_client, world):
|
||||
event = world["event"]
|
||||
data = {
|
||||
"name": "Posted",
|
||||
"start_date": "2030-01-01",
|
||||
"status": models.Event.BOOKED,
|
||||
"items-TOTAL_FORMS": 0,
|
||||
"items-INITIAL_FORMS": 0,
|
||||
"items-MIN_NUM_FORMS": 0,
|
||||
"items-MAX_NUM_FORMS": 1000,
|
||||
}
|
||||
assert admin_client.post(reverse("event_create"), data).status_code in (200, 302)
|
||||
assert admin_client.post(reverse("event_update", kwargs={"pk": event.pk}), data).status_code in (200, 302)
|
||||
|
||||
|
||||
def test_api_secure(admin_client, world):
|
||||
assert admin_client.get(reverse("api_secure", kwargs={"model": "person"}), {"term": "Pat"}).status_code == 200
|
||||
assert (
|
||||
admin_client.get(reverse("api_secure", kwargs={"model": "venue", "pk": world["venue"].pk})).status_code == 200
|
||||
)
|
||||
|
||||
|
||||
def test_authorisation_request_and_authorise(admin_client, client, world):
|
||||
from django.core import signing
|
||||
|
||||
event = world["event"]
|
||||
response = admin_client.post(reverse("event_authorise_request", kwargs={"pk": event.pk}), {"email": "a@b.com"})
|
||||
assert response.status_code in (200, 302)
|
||||
hmac = signing.dumps({"pk": event.pk, "email": "a@b.com", "sent_by": world["user"].pk})
|
||||
url = reverse("event_authorise", kwargs={"pk": event.pk, "hmac": hmac})
|
||||
assert client.get(url).status_code == 200
|
||||
assert client.get(reverse("event_authorise_form_preview", kwargs={"pk": event.pk, "hmac": hmac})).status_code == 200
|
||||
|
||||
|
||||
def test_event_thread_redirect(admin_client, world):
|
||||
assert admin_client.get(reverse("event_thread", kwargs={"pk": world["event"].pk})).status_code in (200, 302)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"url",
|
||||
[
|
||||
"/rigboard/calendar/month/",
|
||||
"/rigboard/calendar/week/2020-01-01/",
|
||||
"/rigboard/calendar/day/2020-01-01/",
|
||||
"/event/archive/?start=2030-01-01&end=2020-01-01",
|
||||
"/event/archive/?q=TE&status=1",
|
||||
"/event/hs/?q=TE",
|
||||
"/rigboard/activity/",
|
||||
"/search/?q=Pat",
|
||||
],
|
||||
)
|
||||
def test_filtered_pages(admin_client, world, url):
|
||||
assert admin_client.get(url, follow=True).status_code == 200
|
||||
@@ -49,7 +49,7 @@ class CalendarICS(ICalFeed):
|
||||
+ ("Rig, " if params["rig"] else "")
|
||||
+ ("Non-rig, " if params["non-rig"] else "")
|
||||
+ ("Dry Hire " if params["dry-hire"] else "")
|
||||
+ "\n"
|
||||
+ " "
|
||||
)
|
||||
desc = (
|
||||
desc
|
||||
|
||||
28
training/tests/test_smoke.py
Normal file
28
training/tests/test_smoke.py
Normal file
@@ -0,0 +1,28 @@
|
||||
import pytest
|
||||
from django.urls import reverse
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"name,kw",
|
||||
[
|
||||
("item_list", {}),
|
||||
("item_list_export", {}),
|
||||
("trainee_list", {}),
|
||||
("trainee_detail", {"pk": "trainee"}),
|
||||
("trainee_item_detail", {"pk": "trainee"}),
|
||||
("level_list", {}),
|
||||
("level_detail", {"pk": "level"}),
|
||||
("level_detail", {"pk": "level", "u": "trainee"}),
|
||||
("item_qualification", {"pk": "item"}),
|
||||
("session_log", {}),
|
||||
],
|
||||
)
|
||||
def test_training_pages(admin_client, trainee, level, training_item, name, kw):
|
||||
objs = {"trainee": trainee, "level": level, "item": training_item}
|
||||
kwargs = {k: objs[v].pk for k, v in kw.items()}
|
||||
response = admin_client.get(
|
||||
reverse(name, kwargs=kwargs), {"item": training_item.pk} if name == "trainee_item_detail" else {}
|
||||
)
|
||||
assert response.status_code in (200, 302)
|
||||
Reference in New Issue
Block a user