@@ -61,6 +61,8 @@ def airports_csv(
6161 'timezone' : 'number' ,
6262 'year built' : 'number' ,
6363 },
64+ 'delimiter' : ',' ,
65+ 'quotechar' : '\" ' ,
6466 },
6567 format = 'json' ,
6668 )
@@ -106,6 +108,8 @@ def test_create_upload_model_invalid_columns(
106108 'edge' : False ,
107109 'table_name' : 'table' ,
108110 'columns' : {'foo' : 'invalid' },
111+ 'delimiter' : ',' ,
112+ 'quotechar' : '\" ' ,
109113 },
110114 format = 'json' ,
111115 )
@@ -114,6 +118,64 @@ def test_create_upload_model_invalid_columns(
114118 assert r .json () == {'columns' : {'foo' : ['"invalid" is not a valid choice.' ]}}
115119
116120
121+ @pytest .mark .django_db
122+ def test_create_upload_model_missing_delimiter (
123+ workspace : Workspace , user : User , authenticated_api_client
124+ ):
125+ workspace .set_user_permission (user , WorkspaceRoleChoice .WRITER )
126+ r : Response = authenticated_api_client .post (
127+ f'/api/workspaces/{ workspace .name } /uploads/csv/' ,
128+ {
129+ # Not an issue to specify invalid field_value, as that's checked after columns,
130+ # so the request will return before that is checked
131+ 'field_value' : 'field_value' ,
132+ 'edge' : False ,
133+ 'table_name' : 'table' ,
134+ 'columns' : {
135+ 'latitude' : 'number' ,
136+ 'longitude' : 'number' ,
137+ 'altitude' : 'number' ,
138+ 'timezone' : 'number' ,
139+ 'year built' : 'number' ,
140+ },
141+ 'quotechar' : '\" ' ,
142+ },
143+ format = 'json' ,
144+ )
145+
146+ assert r .status_code == 400
147+ assert r .json () == {'delimiter' : ['This field is required.' ]}
148+
149+
150+ @pytest .mark .django_db
151+ def test_create_upload_model_missing_quotechar (
152+ workspace : Workspace , user : User , authenticated_api_client
153+ ):
154+ workspace .set_user_permission (user , WorkspaceRoleChoice .WRITER )
155+ r : Response = authenticated_api_client .post (
156+ f'/api/workspaces/{ workspace .name } /uploads/csv/' ,
157+ {
158+ # Not an issue to specify invalid field_value, as that's checked after columns,
159+ # so the request will return before that is checked
160+ 'field_value' : 'field_value' ,
161+ 'edge' : False ,
162+ 'table_name' : 'table' ,
163+ 'columns' : {
164+ 'latitude' : 'number' ,
165+ 'longitude' : 'number' ,
166+ 'altitude' : 'number' ,
167+ 'timezone' : 'number' ,
168+ 'year built' : 'number' ,
169+ },
170+ 'delimiter' : ',' ,
171+ },
172+ format = 'json' ,
173+ )
174+
175+ assert r .status_code == 400
176+ assert r .json () == {'quotechar' : ['This field is required.' ]}
177+
178+
117179@pytest .mark .django_db
118180@pytest .mark .parametrize ('permission,status_code' , [(None , 404 ), (WorkspaceRoleChoice .READER , 403 )])
119181def test_create_upload_model_csv_invalid_permissions (
@@ -164,6 +226,8 @@ def test_create_upload_model_invalid_field_value(
164226 'field_value' : 'field_value' ,
165227 'edge' : False ,
166228 'table_name' : 'table' ,
229+ 'delimiter' : ',' ,
230+ 'quotechar' : '\" ' ,
167231 },
168232 format = 'json' ,
169233 )
0 commit comments