1313from country_workspace .state import state
1414from country_workspace .workspaces .admin .cleaners .bulk_update import TYPES , create_xls_importer
1515from tests .workspace .actions import stub
16+ from webtest import Upload
17+
1618
1719if TYPE_CHECKING :
1820 from django_webtest import DjangoTestApp
@@ -157,12 +159,12 @@ def test_bulk_update_export(
157159 force_migrated_records ,
158160 settings : "SettingsWrapper" ,
159161 household : "CountryHousehold" ,
160- mock_media_storage ,
162+ mock_storage ,
161163) -> None :
162- with mock . patch ( "country_workspace.workspaces.admin.cleaners.bulk_update.MEDIA_STORAGE" , mock_media_storage ):
163- url = reverse ( "workspace:workspaces_countryindividual_changelist" )
164- settings . CELERY_TASK_ALWAYS_EAGER = True
165- selected_fields = stub . header_add [ "ind" ]
164+ url = reverse ( "workspace:workspaces_countryindividual_changelist" )
165+ settings . CELERY_TASK_ALWAYS_EAGER = True
166+ selected_fields = stub . header_add [ "ind" ]
167+ with mock . patch ( "country_workspace.workspaces.admin.cleaners.bulk_update.MEDIA_STORAGE" , mock_storage ):
166168 with select_office (app , household .country_office , household .program ):
167169 res = app .get (url )
168170 form = res .forms ["changelist-form" ]
@@ -180,3 +182,35 @@ def test_bulk_update_export(
180182 assert res .status_code == 302
181183 job : AsyncJob = household .program .jobs .first ()
182184 job .queue ()
185+
186+
187+ def test_bulk_update_import (
188+ app : "DjangoTestApp" ,
189+ force_migrated_records ,
190+ settings : "SettingsWrapper" ,
191+ household : "CountryHousehold" ,
192+ data : tuple [io .BytesIO , "CountryHousehold" , str ],
193+ ) -> None :
194+ buff , household , target = data
195+ url = reverse ("workspace:workspaces_countryprogram_change" , args = [household .program .pk ])
196+ settings .CELERY_TASK_ALWAYS_EAGER = True
197+
198+ with select_office (app , household .country_office , household .program ):
199+ res = app .get (url )
200+ res = res .click ("Update Records" )
201+ res .forms ["bulk-update-form" ]["description" ] = f"Bulk update from { target } "
202+ res .forms ["bulk-update-form" ]["target" ] = target
203+ res .forms ["bulk-update-form" ]["file" ] = Upload (f"{ target } .xlsx" , buff .read ())
204+ res = res .forms ["bulk-update-form" ].submit ("_import" )
205+ household .refresh_from_db ()
206+ job : AsyncJob = household .program .jobs .first ()
207+
208+ assert res .status_code == 302
209+ assert job
210+
211+ if target == "hh" :
212+ admin1_v = f"admin1_{ stub .header_add ['hh' ].index ('admin1' ) + 2 } "
213+ assert household .flex_fields .get ("admin1" ) == admin1_v
214+ elif target == "ind" :
215+ given_name = f"given_name_{ stub .header_add ['ind' ].index ('given_name' ) + 2 } "
216+ assert household .members .filter (flex_fields__given_name = given_name ).exists ()
0 commit comments