1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
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, Organisation, RegulatoryCycle
from engagements.utils import duration_formatter, populate_database
pytestmark = pytest.mark.django_db
def test_single_day_string():
"""test date formatting for the summary box on the detail page"""
d1 = datetime.date(2024, 10, 10)
d2 = datetime.date(2024, 10, 10)
duration_str = duration_formatter(d1, d2)
assert duration_str == "10 October 2024 (1 day)"
def test_multi_duration_string():
"""test date formatting for the summary box on the detail page"""
d1 = datetime.date(2024, 10, 10)
d2 = datetime.date(2024, 10, 12)
duration_str = duration_formatter(d1, d2)
assert duration_str == "10-12 October 2024 (3 days)"
def test_multi_duration_string_longer():
"""test date formatting for the summary box on the detail page"""
d1 = datetime.date(2024, 10, 1)
d2 = datetime.date(2024, 10, 12)
duration_str = duration_formatter(d1, d2)
assert duration_str == "01-12 October 2024 (12 days)"
def test_multi_duration_over_month_boundary_string():
"""test date formatting for the summary box on the detail page"""
d1 = datetime.date(2024, 9, 30)
d2 = datetime.date(2024, 10, 1)
duration_str = duration_formatter(d1, d2)
assert duration_str == "30 September - 01 October 2024 (2 days)"
@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
|