diff --git a/specifyweb/backend/workbench/tests.py b/specifyweb/backend/workbench/tests.py index 92da19098f1..9102960a820 100644 --- a/specifyweb/backend/workbench/tests.py +++ b/specifyweb/backend/workbench/tests.py @@ -2,10 +2,11 @@ from django.test import Client -from specifyweb.specify.models import Recordset +from specifyweb.specify.models import Collectionobject, Recordset from specifyweb.backend.workbench.models import Spdataset from specifyweb.specify.tests.test_api import ApiTests from .upload import upload as uploader +from .upload.upload_result import UploadResult class DataSetTests(ApiTests): @@ -60,6 +61,71 @@ def test_reset_uploadplan_to_null(self) -> None: dataset = Spdataset.objects.get(id=datasetid) self.assertEqual(dataset.uploadplan, None) + def test_validate_dataset_without_uploading(self) -> None: + client = Client() + client.force_login(self.specifyuser) + + response = client.post( + "/api/workbench/dataset/", + data={ + "name": "Validation-only data set", + "columns": ["Catalog Number"], + "rows": [["900000001"]], + "importedfilename": "validation.csv", + }, + content_type="application/json", + ) + self.assertEqual(response.status_code, 201) + dataset_id = json.loads(response.content)["id"] + + response = client.put( + f"/api/workbench/dataset/{dataset_id}/", + data={ + "uploadplan": { + "baseTableName": "collectionobject", + "uploadable": { + "uploadTable": { + "wbcols": { + "catalognumber": "Catalog Number", + }, + "static": {}, + "toOne": {}, + "toMany": {}, + } + }, + }, + }, + content_type="application/json", + ) + self.assertEqual(response.status_code, 204) + + response = client.post( + f"/api/workbench/validate/{dataset_id}/", + data={"background": False}, + content_type="application/json", + ) + self.assertEqual(response.status_code, 200) + self.assertIsNone(json.loads(response.content)) + + dataset = Spdataset.objects.get(id=dataset_id) + self.assertIsNone(dataset.uploaderstatus) + self.assertIsNone(dataset.uploadresult) + self.assertIsNotNone(dataset.rowresults) + + validation_results = [ + UploadResult.from_json(result) + for result in json.loads(dataset.rowresults or "[]") + ] + self.assertEqual(len(validation_results), 1) + self.assertFalse(validation_results[0].contains_failure()) + + self.assertFalse( + Collectionobject.objects.filter( + collection=self.collection, + catalognumber="900000001", + ).exists() + ) + def test_create_record_set(self) -> None: c = Client() c.force_login(self.specifyuser)