import datetime from http import HTTPStatus import pytest from django.test import RequestFactory from django.urls import reverse from engagements import models, views from engagements.models import EngagementStrategy, RegulatoryCycle, Organisation from engagements.utils import populate_database pytestmark = pytest.mark.django_db @pytest.fixture def test_data(): return populate_database() @pytest.fixture def request_factory(): return RequestFactory() def test_dscs_for_ep(client, test_data, request_factory): org = test_data["orgs"][0] et = models.EngagementType.objects.get(name="INSPECTION") si = test_data["sub_instruments"][0] si2 = test_data["sub_instruments"][2] si3 = test_data["sub_instruments"][3] engagement = models.Engagement.objects.create( proposed_start_date=datetime.date(2022, 10, 10), proposed_end_date=datetime.date(2022, 10, 10), engagement_type=et, external_party=org, ) ef1 = models.EngagementEffort.objects.create( is_planned=True, effort_type="REGULATION", proposed_start_date=datetime.date(2022, 10, 10), proposed_end_date=datetime.date(2022, 10, 10), engagement=engagement, ) ef1.sub_instruments.add(si, si2, si3) url = reverse("engagements:plan_for_org", kwargs={"orgslug": org.slug}) client.force_login(test_data["superuser"]) response = client.get(url) assert response.status_code == HTTPStatus.OK assert response.context["entity"] assert response.context["entity"].name == org.name assert si in response.context["dscs"] assert si2 in response.context["dscs"] assert si3 in response.context["dscs"] def test_get_blank_form(client, test_data, request_factory): url = reverse("engagements:effort_create", kwargs={"eid": 1, "etype": "PLANNING"}) client.force_login(test_data["superuser"]) request = request_factory.get(url) request.user = test_data["superuser"] response = views.engagement_effort_create(request, eid=1, etype="PLANNING") assert response.status_code == HTTPStatus.OK # def test_get_form_to_create_engagement_strategy(client, request_factory): # url = reverse("engagements:es-create") # client.force_login(test_data["superuser"]) # request = request_factory.get(url) # request.user = test_data["superuser"] # response = views.CreateEngagementStrategy() # assert response.status_code == HTTPStatus.OK def test_create_engagement_strategy(client, user, org, regulatory_cycles): # Define the URL for the create view url = reverse("engagements:es-create") client.force_login(user) mod = Organisation.objects.create(name="MOD", is_regulated_entity=False) sy = RegulatoryCycle.objects.get(start_date__year="2022") ey = RegulatoryCycle.objects.get(start_date__year="2024") # Define sample data for the form data = { "organisation": mod.pk, "start_year": sy.pk, # Use the pk of the regulatory cycle instead of the object itself "end_year": ey.pk, "description": "Example description", "inspector_sign_off": "2022-01-10", "owned_by": user.pk, # Same here "reviewed_by": user.pk, "management_sign_off": "2022-02-10", "status": "DRAFT", } # Send a POST request to the view response = client.post(url, data) # Check that the response redirects (status code 302) after successful creation assert response.status_code == 302 assert EngagementStrategy.objects.count() == 1