11from typing import TYPE_CHECKING
22
33import pytest
4+ from django import forms
45from django .urls import reverse
6+ from strategy_field .utils import fqn
7+ from testutils .factories import DataCheckerFactory
58from testutils .perms import user_grant_permissions
69from testutils .utils import select_office
710
811from country_workspace .state import state
912
1013if TYPE_CHECKING :
1114 from django_webtest .pytest_plugin import MixinWithInstanceVariables
15+ from hope_flex_fields .models import DataChecker
1216 from responses import RequestsMock
1317 from testutils .types import CWTestApp
1418
@@ -100,16 +104,6 @@ def test_hh_validate_single(app: "CWTestApp", household: "CountryHousehold") ->
100104 assert res .status_code == 200
101105
102106
103- def test_hh_validate_program (app : "CWTestApp" , household : "CountryHousehold" ) -> None :
104- with select_office (app , household .country_office , household .program ):
105- with user_grant_permissions (app ._user , ["workspaces.change_countryhousehold" ], household .program ):
106- url = reverse ("workspace:workspaces_countryhousehold_changelist" )
107- res = app .get (url )
108- res .click ("Validate Programme" ).follow ()
109- household .refresh_from_db ()
110- assert household .last_checked
111-
112-
113107def test_hh_update_single (app : "CWTestApp" , household : "CountryHousehold" ) -> None :
114108 with select_office (app , household .country_office , household .program ):
115109 with user_grant_permissions (app ._user , ["workspaces.change_countryhousehold" ], household .program ):
@@ -118,7 +112,7 @@ def test_hh_update_single(app: "CWTestApp", household: "CountryHousehold") -> No
118112 assert res .status_code == 200
119113
120114
121- def test_validate_program (app : "CWTestApp" , individual : "CountryIndividual" ):
115+ def test_hh_validate_program (app : "CWTestApp" , individual : "CountryIndividual" ):
122116 program : "CountryProgram" = individual .program
123117 assert not individual .last_checked
124118
@@ -130,3 +124,28 @@ def test_validate_program(app: "CWTestApp", individual: "CountryIndividual"):
130124 individual .refresh_from_db ()
131125 assert individual .household .last_checked
132126 assert individual .last_checked
127+
128+
129+ @pytest .fixture
130+ def hh (household ) -> "CountryHousehold" :
131+ dc : DataChecker = DataCheckerFactory (fields = [("address" , fqn (forms .CharField ))])
132+ fld = dc .fieldsets .first ().fields .get (name = "address" )
133+ fld .attrs ["required" ] = True
134+ fld .save ()
135+ household .flex_fields ["address" ] = None
136+ household .save ()
137+
138+ household .program .household_checker = dc
139+ household .program .save ()
140+
141+ return household
142+
143+
144+ def test_hh_validate (app : "CWTestApp" , hh : "CountryHousehold" ):
145+ assert not hh .validate_with_checker ()
146+ assert hh .errors == {"address" : ["This field is required." ]}
147+
148+ hh .flex_fields ["address" ] = "abc"
149+ hh .save ()
150+ assert hh .validate_with_checker ()
151+ assert hh .errors == {}
0 commit comments