Skip to content

Commit 45be50d

Browse files
author
Lingling Peng
committed
add test for GridCsvImportRequest class
1 parent 7778bc2 commit 45be50d

1 file changed

Lines changed: 74 additions & 1 deletion

File tree

tests/unit/synapseclient/models/async/unit_test_curation_async.py

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from synapseclient import Synapse
88
from synapseclient.core.constants.concrete_types import (
99
FILE_BASED_METADATA_TASK_PROPERTIES,
10+
GRID_CSV_IMPORT_REQUEST,
1011
RECORD_BASED_METADATA_TASK_PROPERTIES,
1112
UPLOAD_TO_TABLE_PREVIEW_REQUEST,
1213
)
@@ -15,6 +16,7 @@
1516
CurationTask,
1617
FileBasedMetadataTaskProperties,
1718
Grid,
19+
GridCsvImportRequest,
1820
GridRecordSetExportRequest,
1921
RecordBasedMetadataTaskProperties,
2022
UploadToTablePreviewRequest,
@@ -902,7 +904,7 @@ def test_fill_from_dict(self) -> None:
902904
name="Diagnosis", column_type="STRING", maximum_size=7
903905
)
904906
assert preview_response.suggested_columns[4] == Column(
905-
name="PatientID", column_type="INTEGER"
907+
name="PatientID", column_type="INTEGER", max_size=None
906908
)
907909
assert preview_response.sample_rows == [
908910
[None, "Female", "test", "Healthy", "1", None, None, None]
@@ -939,6 +941,77 @@ def test_to_synapse_request(self) -> None:
939941
assert result["csvTableDescriptor"]["isFirstLineHeader"] is True
940942

941943

944+
class TestGridCsvImportRequest:
945+
"""Tests for the GridCsvImportRequest helper dataclass."""
946+
947+
def test_fill_from_dict(self) -> None:
948+
# GIVEN a response with grid CSV import data
949+
raw_synapse_response = {
950+
"jobId": "1234",
951+
"concreteType": "org.sagebionetworks.repo.model.grid.GridCsvImportResponse",
952+
"sessionId": SESSION_ID,
953+
"totalCount": 3,
954+
"createdCount": 1,
955+
"updatedCount": 2,
956+
}
957+
958+
# WHEN I fill a GridCsvImportRequest from the response
959+
import_req = GridCsvImportRequest(session_id=SESSION_ID)
960+
result = import_req.fill_from_dict(raw_synapse_response)
961+
962+
# THEN the response fields should be populated correctly
963+
assert result.session_id == SESSION_ID
964+
assert result.total_count == 3
965+
assert result.created_count == 1
966+
assert result.updated_count == 2
967+
968+
def test_to_synapse_request(self) -> None:
969+
# GIVEN a GridCsvImportRequest with all fields set
970+
import_req = GridCsvImportRequest(
971+
session_id=SESSION_ID,
972+
file_handle_id="1234567",
973+
csv_descriptor=CsvTableDescriptor(
974+
separator=",",
975+
quote_character='"',
976+
escape_character="\\",
977+
line_end="\n",
978+
is_first_line_header=True,
979+
),
980+
schema=[
981+
Column(name="ROW_ID", column_type="STRING"),
982+
Column(name="ROW_VERSION", column_type="STRING"),
983+
Column(name="PatientID", column_type="INTEGER"),
984+
Column(name="Diagnosis", column_type="STRING"),
985+
],
986+
)
987+
988+
# WHEN I convert it to a synapse request
989+
result = import_req.to_synapse_request()
990+
991+
# THEN it should contain the correct fields
992+
assert result["concreteType"] == GRID_CSV_IMPORT_REQUEST
993+
assert result["sessionId"] == SESSION_ID
994+
assert result["fileHandleId"] == "1234567"
995+
assert result["csvDescriptor"]["separator"] == ","
996+
assert result["csvDescriptor"]["quoteCharacter"] == '"'
997+
assert result["csvDescriptor"]["escapeCharacter"] == "\\"
998+
assert result["csvDescriptor"]["lineEnd"] == "\n"
999+
assert result["csvDescriptor"]["isFirstLineHeader"] is True
1000+
assert len(result["schema"]) == 4
1001+
assert (
1002+
result["schema"][0]
1003+
== Column(name="ROW_ID", column_type="STRING").to_synapse_request()
1004+
)
1005+
assert (
1006+
result["schema"][2]
1007+
== Column(name="PatientID", column_type="INTEGER").to_synapse_request()
1008+
)
1009+
assert (
1010+
result["schema"][3]
1011+
== Column(name="Diagnosis", column_type="STRING").to_synapse_request()
1012+
)
1013+
1014+
9421015
class TestGridRecordSetExportRequest:
9431016
"""Tests for the GridRecordSetExportRequest helper dataclass."""
9441017

0 commit comments

Comments
 (0)