summaryrefslogtreecommitdiffstats
path: root/engagements/tests/test_forms.py
blob: b9807dda0abcfb27f6f198aa39294324227cb650 (plain) (blame)
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
import pytest
from django.forms import DateInput, Select, SelectMultiple

from engagements.forms import EngagementCreateForm, EngagementEffortCreateForm
from engagements.models import EngagementType

pytestmark = pytest.mark.django_db

def test_basic_validation(engagement, user):
    form = EngagementEffortCreateForm(
        data={
            "is_planned": True,
            "proposed_start_date": "2022-10-10 10:00",
            "proposed_end_date": "2022-10-10 12:00",
            "engagement": engagement,
            "effort_type": "PLANNING",
            "officers": [user],
        }
    )
    assert not form.errors


def test_basic_validation_on_bad_entry(engagement, user):
    form = EngagementEffortCreateForm(
        data={
            "is_planned": True,
            "proposed_start_date": "20240-10-10 10:00",
            "proposed_end_date": "2022-10-10 12:00",
            "engagement": engagement,
            "effort_type": "bobbins",
            "officers": [user],
            "sub_instruments": [""],
        }
    )
    assert "effort_type" in form.errors
    assert "proposed_start_date" in form.errors


def test_form_fields():
    form = EngagementCreateForm()
    expected_fields = [
        "proposed_start_date",
        "proposed_end_date",
        "engagement_type",
        "external_party",
        "officers",
    ]
    assert list(form.fields.keys()) == expected_fields


def test_form_labels():
    form = EngagementCreateForm()
    assert form.fields["officers"].label == "Inspectors"


def test_form_help_texts():
    form = EngagementCreateForm()
    assert form.fields["proposed_start_date"].help_text == "<small><em>YYYY-MM-DD</em></small>"
    assert form.fields["proposed_end_date"].help_text == "<small><em>YYYY-MM-DD</em></small>"


def test_form_widgets():
    form = EngagementCreateForm()
    assert isinstance(form.fields["proposed_start_date"].widget, DateInput)
    assert isinstance(form.fields["proposed_end_date"].widget, DateInput)
    assert isinstance(form.fields["engagement_type"].widget, Select)
    assert isinstance(form.fields["officers"].widget, SelectMultiple)


def test_form_valid_data(engagement_type, external_party, user1, user2):
    form_data = {
        "proposed_start_date": "2023-01-01",
        "proposed_end_date": "2023-01-31",
        "engagement_type": engagement_type.id,
        "external_party": external_party.id,
        "officers": [user1.id, user2.id],
    }
    form = EngagementCreateForm(data=form_data)
    assert form.is_valid()


def test_form_invalid_dates(engagement_type, external_party, user1):
    form_data = {
        "proposed_start_date": "2023-01-31",
        "proposed_end_date": "2023-01-01",
        "engagement_type": engagement_type.id,
        "external_party": external_party.id,
        "officers": [user1.id],
    }
    form = EngagementCreateForm(data=form_data)
    assert not form.is_valid()


def test_form_missing_required_fields():
    form_data = {
        "proposed_start_date": "2023-01-01",
    }
    form = EngagementCreateForm(data=form_data)
    assert not form.is_valid()
    assert "engagement_type" in form.errors
    assert "external_party" in form.errors


def test_form_engagement_type_queryset(engagement_type):
    initial_data = {"engagement_type": EngagementType.objects.all()}
    form = EngagementCreateForm(initial=initial_data)
    assert form.fields["engagement_type"].queryset.first().name == initial_data["engagement_type"].first().name


def test_form_engagement_type_queryset_without_initial():
    form = EngagementCreateForm()
    assert list(form.fields["engagement_type"].queryset) == list(EngagementType.objects.all())