1+ import json
12from unittest import mock
23
34from mat3ra .api_client .endpoints .properties import PropertiesEndpoints
45from tests .py .unit .entity import EntityEndpointsUnitTest
56
67ENDPOINT_NAME = "properties"
78
9+ JOB_ID = "ukmnfWw9Q5ryXHK4X"
10+ PROPERTY_NAME_0 = "total_energy"
11+ PROPERTY_NAME_1 = "band_gaps"
12+ UNIT_ID_0 = "pw-relax"
13+ UNIT_ID_1 = "pw-nscf"
14+
15+ MOCK_PROPERTY_0 = {
16+ "data" : {"name" : PROPERTY_NAME_0 , "value" : - 260.698 , "units" : "eV" },
17+ "source" : {"info" : {"jobId" : JOB_ID , "unitId" : UNIT_ID_0 }},
18+ }
19+ MOCK_PROPERTY_1 = {
20+ "data" : {"name" : PROPERTY_NAME_1 , "values" : [{"type" : "direct" , "value" : 0.5 , "units" : "eV" }]},
21+ "source" : {"info" : {"jobId" : JOB_ID , "unitId" : UNIT_ID_1 }},
22+ }
23+
24+ MOCK_PROPERTIES_RESPONSE = json .dumps ({"status" : "success" , "data" : [MOCK_PROPERTY_0 , MOCK_PROPERTY_1 ]})
25+ MOCK_SINGLE_PROPERTY_RESPONSE = json .dumps ({"status" : "success" , "data" : [MOCK_PROPERTY_1 ]})
26+
827
928class EndpointCharacteristicUnitTest (EntityEndpointsUnitTest ):
1029 """
@@ -23,3 +42,45 @@ def test_list(self, mock_request):
2342 @mock .patch ("requests.sessions.Session.request" )
2443 def test_get (self , mock_request ):
2544 self .get (mock_request )
45+
46+ @mock .patch ("requests.sessions.Session.request" )
47+ def test_list_for_job (self , mock_request ):
48+ mock_request .return_value = self .mock_response (MOCK_PROPERTIES_RESPONSE )
49+ result = self .endpoints .list_for_job (JOB_ID )
50+ print (result )
51+ self .assertEqual (result , [
52+ {"unit_id" : UNIT_ID_0 , "properties" : [PROPERTY_NAME_0 ]},
53+ {"unit_id" : UNIT_ID_1 , "properties" : [PROPERTY_NAME_1 ]},
54+ ])
55+ sent_query = json .loads (mock_request .call_args [1 ]["params" ]["query" ])
56+ self .assertEqual (sent_query ["source.info.jobId" ], JOB_ID )
57+
58+ @mock .patch ("requests.sessions.Session.request" )
59+ def test_get_for_job (self , mock_request ):
60+ mock_request .return_value = self .mock_response (MOCK_PROPERTIES_RESPONSE )
61+ result = self .endpoints .get_for_job (JOB_ID )
62+ self .assertEqual (len (result ), 2 )
63+ sent_query = json .loads (mock_request .call_args [1 ]["params" ]["query" ])
64+ self .assertEqual (sent_query ["source.info.jobId" ], JOB_ID )
65+ self .assertNotIn ("data.name" , sent_query )
66+ self .assertNotIn ("source.info.unitId" , sent_query )
67+
68+ @mock .patch ("requests.sessions.Session.request" )
69+ def test_get_for_job_filtered_by_name (self , mock_request ):
70+ mock_request .return_value = self .mock_response (MOCK_SINGLE_PROPERTY_RESPONSE )
71+ result = self .endpoints .get_for_job (JOB_ID , PROPERTY_NAME_1 )
72+ self .assertEqual (len (result ), 1 )
73+ self .assertEqual (result [0 ]["name" ], PROPERTY_NAME_1 )
74+ sent_query = json .loads (mock_request .call_args [1 ]["params" ]["query" ])
75+ self .assertEqual (sent_query ["data.name" ], PROPERTY_NAME_1 )
76+
77+
78+ @mock .patch ("requests.sessions.Session.request" )
79+ def test_get_for_job_filtered_by_unit_id_and_name (self , mock_request ):
80+ mock_request .return_value = self .mock_response (MOCK_SINGLE_PROPERTY_RESPONSE )
81+ result = self .endpoints .get_for_job (JOB_ID , PROPERTY_NAME_1 , unit_id = UNIT_ID_1 )
82+ self .assertEqual (len (result ), 1 )
83+ self .assertEqual (result [0 ]["name" ], PROPERTY_NAME_1 )
84+ sent_query = json .loads (mock_request .call_args [1 ]["params" ]["query" ])
85+ self .assertEqual (sent_query ["source.info.unitId" ], UNIT_ID_1 )
86+ self .assertEqual (sent_query ["data.name" ], PROPERTY_NAME_1 )
0 commit comments