@@ -39,9 +39,11 @@ def test_create_with_multiple_parameters(self) -> None:
3939 params = Parameters .create (parameter = [param_a , param_b ])
4040
4141 assert len (params .parameter ) == 2 , "parameter list should contain two entries"
42+ assert isinstance (params .parameter [0 ], Parameters .Parameter )
4243 assert params .parameter [0 ].valueIdentifier .value == "9000000009" , (
4344 "first parameter NHS number should be '9000000009'"
4445 )
46+ assert isinstance (params .parameter [1 ], Parameters .Parameter )
4547 assert params .parameter [1 ].valueIdentifier .value == "9000000017" , (
4648 "second parameter NHS number should be '9000000017'"
4749 )
@@ -66,6 +68,7 @@ def test_model_validate_valid(self) -> None:
6668 "resourceType should be 'Parameters'"
6769 )
6870 assert len (params .parameter ) == 1 , "parameter list should contain one entry"
71+ assert isinstance (params .parameter [0 ], Parameters .Parameter )
6972 assert params .parameter [0 ].valueIdentifier .value == "9000000009" , (
7073 "valueIdentifier value should be '9000000009'"
7174 )
@@ -207,6 +210,100 @@ def test_is_frozen(self) -> None:
207210 )
208211
209212
213+ class TestIdentityParameter :
214+ def test_create (self ) -> None :
215+ """Test creating an IdentityParameter with part elements."""
216+ part = [
217+ {"name" : "issuer" , "valueString" : "https://example.nhs.uk" },
218+ {"name" : "requestingOrgName" , "valueString" : "Example Org" },
219+ ]
220+ param = Parameters .IdentityParameter (name = "identity" , part = part )
221+
222+ assert param .name == "identity" , "name should be 'identity'"
223+ assert len (param .part ) == 2 , "part list should contain two entries"
224+ assert param .part [0 ]["name" ] == "issuer" , "first part name should be 'issuer'"
225+
226+ def test_model_validate_identity_parameter_in_parameters (self ) -> None :
227+ """Test that a Parameters body with an identity part parameter validates."""
228+ params = Parameters .model_validate (
229+ {
230+ "resourceType" : "Parameters" ,
231+ "parameter" : [
232+ {
233+ "valueIdentifier" : {
234+ "system" : "https://fhir.nhs.uk/Id/nhs-number" ,
235+ "value" : "9000000009" ,
236+ },
237+ },
238+ {
239+ "name" : "identity" ,
240+ "part" : [
241+ {
242+ "name" : "issuer" ,
243+ "valueString" : "https://example.nhs.uk" ,
244+ },
245+ {
246+ "name" : "requestingOrgName" ,
247+ "valueString" : "Example Org" ,
248+ },
249+ ],
250+ },
251+ ],
252+ }
253+ )
254+
255+ assert len (params .parameter ) == 2 , "parameter list should contain two entries"
256+ assert isinstance (params .parameter [1 ], Parameters .IdentityParameter ), (
257+ "second parameter should be an IdentityParameter"
258+ )
259+ assert params .parameter [1 ].name == "identity" , (
260+ "second parameter name should be 'identity'"
261+ )
262+
263+ def test_identity_parameter_serialises_name_and_part (self ) -> None :
264+ """Test that IdentityParameter serialises name and part into the JSON output."""
265+ params = Parameters .model_validate (
266+ {
267+ "resourceType" : "Parameters" ,
268+ "parameter" : [
269+ {
270+ "valueIdentifier" : {
271+ "system" : "https://fhir.nhs.uk/Id/nhs-number" ,
272+ "value" : "9000000009" ,
273+ },
274+ },
275+ {
276+ "name" : "identity" ,
277+ "part" : [
278+ {"name" : "issuer" , "valueString" : "https://example.nhs.uk" },
279+ ],
280+ },
281+ ],
282+ }
283+ )
284+
285+ json_str = params .model_dump_json ()
286+ assert '"name":"identity"' in json_str .replace (" " , "" ), (
287+ "JSON output should contain the identity parameter name"
288+ )
289+ assert '"part"' in json_str , "JSON output should contain the part array"
290+ assert "https://example.nhs.uk" in json_str , (
291+ "JSON output should contain the issuer value"
292+ )
293+
294+ def test_is_frozen (self ) -> None :
295+ """Test that IdentityParameter fields are frozen (immutable)."""
296+ from pydantic import ValidationError
297+
298+ param = Parameters .IdentityParameter (
299+ name = "identity" ,
300+ part = [{"name" : "issuer" , "valueString" : "https://example.nhs.uk" }],
301+ )
302+
303+ with pytest .raises (ValidationError ):
304+ param .name = "other"
305+
306+
210307class TestIssue :
211308 def test_diagnostics_defaults_to_none (self ) -> None :
212309 class _ConcreteIssue (Issue ):
0 commit comments