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 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) sy = RegulatoryCycle.objects.get(start_date__year="2022") ey = RegulatoryCycle.objects.get(start_date__year="2024") # Define sample data for the form data = { "organisation": org, "start_year": sy, "end_year": ey, "description": "Example description", "inspector_sign_off": "2022-01-10", "owned_by": user, "reviewed_by": user, "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 == 200 # Check that a new EngagementStrategy object was created in the database assert EngagementStrategy.objects.filter(organisation__name="MOD").exists() # def test_create_view_uses_correct_form(self): # # Define the URL for the create view # url = reverse("engagement_strategy_create") # # # Send a GET request to the view # response = self.client.get(url) # # # Check that the response uses the correct form class # self.assertIsInstance(response.context["form"], EngagementStrategyCreateForm)