1010from domain .core .cpm_product import CpmProduct
1111from domain .core .cpm_system_id import ProductId
1212from domain .core .device import Device
13+ from domain .core .device_key .v1 import DeviceKey , DeviceKeyType
1314from domain .core .product_key import ProductKeyType
1415from domain .core .root import Root
1516from domain .repository .cpm_product_repository import CpmProductRepository
3435PRODUCT_TEAM_NAME = "My Product Team"
3536PRODUCT_NAME = "My Product"
3637VERSION = 1
38+ PARTY_KEY = "ABC1234-987654"
3739
3840QUESTIONNAIRE_DATA = {
3941 "ODS Code" : "FH15R" ,
@@ -68,7 +70,7 @@ def mock_epr_product_with_one_message_set_drd() -> (
6870 product = product_team .create_cpm_product (
6971 name = PRODUCT_NAME , product_id = PRODUCT_ID
7072 )
71- product .add_key (key_type = ProductKeyType .PARTY_KEY , key_value = "ABC1234-987654" )
73+ product .add_key (key_type = ProductKeyType .PARTY_KEY , key_value = PARTY_KEY )
7274 product_repo = CpmProductRepository (
7375 table_name = TABLE_NAME , dynamodb_client = client
7476 )
@@ -78,10 +80,22 @@ def mock_epr_product_with_one_message_set_drd() -> (
7880 QuestionnaireInstance .SPINE_MHS_MESSAGE_SETS
7981 )
8082 questionnaire_response_1 = mhs_message_set_questionnaire .validate (
81- data = {"Interaction ID" : "urn:foo1" , "MHS SN" : "bar" , "MHS IN" : "baz" }
83+ data = {
84+ "Interaction ID" : "bar:baz" ,
85+ "MHS SN" : "bar" ,
86+ "MHS IN" : "baz" ,
87+ "MHS CPA ID" : f"{ PARTY_KEY } :bar:baz" ,
88+ "Unique Identifier" : f"{ PARTY_KEY } :bar:baz" ,
89+ }
8290 )
8391 questionnaire_response_2 = mhs_message_set_questionnaire .validate (
84- data = {"Interaction ID" : "urn:foo2" , "MHS SN" : "bar2" , "MHS IN" : "baz2" }
92+ data = {
93+ "Interaction ID" : "bar2:baz2" ,
94+ "MHS SN" : "bar2" ,
95+ "MHS IN" : "baz2" ,
96+ "MHS CPA ID" : f"{ PARTY_KEY } :bar2:baz2" ,
97+ "Unique Identifier" : f"{ PARTY_KEY } :bar2:baz2" ,
98+ }
8599 )
86100
87101 # Set up DeviceReferenceData in DB
@@ -123,7 +137,7 @@ def mock_epr_product_with_message_sets_drd() -> (
123137 product = product_team .create_cpm_product (
124138 name = PRODUCT_NAME , product_id = PRODUCT_ID
125139 )
126- product .add_key (key_type = ProductKeyType .PARTY_KEY , key_value = "ABC1234-987654" )
140+ product .add_key (key_type = ProductKeyType .PARTY_KEY , key_value = PARTY_KEY )
127141 product_repo = CpmProductRepository (
128142 table_name = TABLE_NAME , dynamodb_client = client
129143 )
@@ -134,10 +148,22 @@ def mock_epr_product_with_message_sets_drd() -> (
134148 )
135149
136150 questionnaire_response_1 = mhs_message_set_questionnaire .validate (
137- data = {"Interaction ID" : "urn:foo1" , "MHS SN" : "bar" , "MHS IN" : "baz" }
151+ data = {
152+ "Interaction ID" : "bar:baz" ,
153+ "MHS SN" : "bar" ,
154+ "MHS IN" : "baz" ,
155+ "MHS CPA ID" : f"{ PARTY_KEY } :bar:baz" ,
156+ "Unique Identifier" : f"{ PARTY_KEY } :bar:baz" ,
157+ }
138158 )
139159 questionnaire_response_2 = mhs_message_set_questionnaire .validate (
140- data = {"Interaction ID" : "urn:foo2" , "MHS SN" : "bar2" , "MHS IN" : "baz2" }
160+ data = {
161+ "Interaction ID" : "bar2:baz2" ,
162+ "MHS SN" : "bar2" ,
163+ "MHS IN" : "baz2" ,
164+ "MHS CPA ID" : f"{ PARTY_KEY } :bar2:baz2" ,
165+ "Unique Identifier" : f"{ PARTY_KEY } :bar2:baz2" ,
166+ }
141167 )
142168 # Set up DeviceReferenceData in DB
143169 device_reference_data_mhs = product .create_device_reference_data (
@@ -196,7 +222,7 @@ def mock_epr_product_with_more_than_two_message_sets_drd() -> (
196222 product = product_team .create_cpm_product (
197223 name = PRODUCT_NAME , product_id = PRODUCT_ID
198224 )
199- product .add_key (key_type = ProductKeyType .PARTY_KEY , key_value = "ABC1234-987654" )
225+ product .add_key (key_type = ProductKeyType .PARTY_KEY , key_value = PARTY_KEY )
200226 product_repo = CpmProductRepository (
201227 table_name = TABLE_NAME , dynamodb_client = client
202228 )
@@ -206,10 +232,22 @@ def mock_epr_product_with_more_than_two_message_sets_drd() -> (
206232 QuestionnaireInstance .SPINE_MHS_MESSAGE_SETS
207233 )
208234 questionnaire_response_1 = mhs_message_set_questionnaire_1 .validate (
209- data = {"Interaction ID" : "urn:foo1" , "MHS SN" : "bar" , "MHS IN" : "baz" }
235+ data = {
236+ "Interaction ID" : "bar:baz" ,
237+ "MHS SN" : "bar" ,
238+ "MHS IN" : "baz" ,
239+ "MHS CPA ID" : f"{ PARTY_KEY } :bar:baz" ,
240+ "Unique Identifier" : f"{ PARTY_KEY } :bar:baz" ,
241+ }
210242 )
211243 questionnaire_response_2 = mhs_message_set_questionnaire_1 .validate (
212- data = {"Interaction ID" : "urn:foo2" , "MHS SN" : "bar2" , "MHS IN" : "baz2" }
244+ data = {
245+ "Interaction ID" : "bar2:baz2" ,
246+ "MHS SN" : "bar2" ,
247+ "MHS IN" : "baz2" ,
248+ "MHS CPA ID" : f"{ PARTY_KEY } :bar2:baz2" ,
249+ "Unique Identifier" : f"{ PARTY_KEY } :bar2:baz2" ,
250+ }
213251 )
214252
215253 # Set up DeviceReferenceData in DB
@@ -223,10 +261,22 @@ def mock_epr_product_with_more_than_two_message_sets_drd() -> (
223261 QuestionnaireInstance .SPINE_MHS_MESSAGE_SETS
224262 )
225263 questionnaire_response_3 = mhs_message_set_questionnaire_2 .validate (
226- data = {"Interaction ID" : "urn:foo3" , "MHS SN" : "bar3" , "MHS IN" : "baz3" }
264+ data = {
265+ "Interaction ID" : "bar3:baz3" ,
266+ "MHS SN" : "bar3" ,
267+ "MHS IN" : "baz3" ,
268+ "MHS CPA ID" : f"{ PARTY_KEY } :bar3:baz3" ,
269+ "Unique Identifier" : f"{ PARTY_KEY } :bar3:baz3" ,
270+ }
227271 )
228272 questionnaire_response_4 = mhs_message_set_questionnaire_2 .validate (
229- data = {"Interaction ID" : "urn:foo4" , "MHS SN" : "bar4" , "MHS IN" : "baz4" }
273+ data = {
274+ "Interaction ID" : "bar4:baz4" ,
275+ "MHS SN" : "bar4" ,
276+ "MHS IN" : "baz4" ,
277+ "MHS CPA ID" : f"{ PARTY_KEY } :bar4:baz4" ,
278+ "Unique Identifier" : f"{ PARTY_KEY } :bar4:baz4" ,
279+ }
230280 )
231281
232282 # Set up DeviceReferenceData in DB
@@ -286,7 +336,7 @@ def mock_epr_product_with_two_message_sets_the_same_drd() -> (
286336 product = product_team .create_cpm_product (
287337 name = PRODUCT_NAME , product_id = PRODUCT_ID
288338 )
289- product .add_key (key_type = ProductKeyType .PARTY_KEY , key_value = "ABC1234-987654" )
339+ product .add_key (key_type = ProductKeyType .PARTY_KEY , key_value = PARTY_KEY )
290340 product_repo = CpmProductRepository (
291341 table_name = TABLE_NAME , dynamodb_client = client
292342 )
@@ -296,10 +346,22 @@ def mock_epr_product_with_two_message_sets_the_same_drd() -> (
296346 QuestionnaireInstance .SPINE_MHS_MESSAGE_SETS
297347 )
298348 questionnaire_response_1 = mhs_message_set_questionnaire_1 .validate (
299- data = {"Interaction ID" : "urn:foo1" , "MHS SN" : "bar" , "MHS IN" : "baz" }
349+ data = {
350+ "Interaction ID" : "bar:baz" ,
351+ "MHS SN" : "bar" ,
352+ "MHS IN" : "baz" ,
353+ "MHS CPA ID" : f"{ PARTY_KEY } :bar:baz" ,
354+ "Unique Identifier" : f"{ PARTY_KEY } :bar:baz" ,
355+ }
300356 )
301357 questionnaire_response_2 = mhs_message_set_questionnaire_1 .validate (
302- data = {"Interaction ID" : "urn:foo2" , "MHS SN" : "bar2" , "MHS IN" : "baz2" }
358+ data = {
359+ "Interaction ID" : "bar2:baz2" ,
360+ "MHS SN" : "ba2r" ,
361+ "MHS IN" : "baz2" ,
362+ "MHS CPA ID" : f"{ PARTY_KEY } :bar2:baz2" ,
363+ "Unique Identifier" : f"{ PARTY_KEY } :bar2:baz2" ,
364+ }
303365 )
304366
305367 # Set up DeviceReferenceData in DB
@@ -313,10 +375,22 @@ def mock_epr_product_with_two_message_sets_the_same_drd() -> (
313375 QuestionnaireInstance .SPINE_MHS_MESSAGE_SETS
314376 )
315377 questionnaire_response_3 = mhs_message_set_questionnaire_2 .validate (
316- data = {"Interaction ID" : "urn:foo3" , "MHS SN" : "bar3" , "MHS IN" : "baz3" }
378+ data = {
379+ "Interaction ID" : "bar3:baz3" ,
380+ "MHS SN" : "bar3" ,
381+ "MHS IN" : "baz3" ,
382+ "MHS CPA ID" : f"{ PARTY_KEY } :bar3:baz3" ,
383+ "Unique Identifier" : f"{ PARTY_KEY } :bar3:baz3" ,
384+ }
317385 )
318386 questionnaire_response_4 = mhs_message_set_questionnaire_2 .validate (
319- data = {"Interaction ID" : "urn:foo4" , "MHS SN" : "bar4" , "MHS IN" : "baz4" }
387+ data = {
388+ "Interaction ID" : "bar4:baz4" ,
389+ "MHS SN" : "bar4" ,
390+ "MHS IN" : "baz4" ,
391+ "MHS CPA ID" : f"{ PARTY_KEY } :bar4:baz4" ,
392+ "Unique Identifier" : f"{ PARTY_KEY } :bar4:baz4" ,
393+ }
320394 )
321395
322396 # Set up DeviceReferenceData in DB
@@ -389,7 +463,7 @@ def mock_epr_product_without_message_set_drd() -> (
389463 product = product_team .create_cpm_product (
390464 name = PRODUCT_NAME , product_id = PRODUCT_ID
391465 )
392- product .add_key (key_type = ProductKeyType .PARTY_KEY , key_value = "ABC1234-987654" )
466+ product .add_key (key_type = ProductKeyType .PARTY_KEY , key_value = PARTY_KEY )
393467 product_repo = CpmProductRepository (
394468 table_name = TABLE_NAME , dynamodb_client = client
395469 )
@@ -425,7 +499,7 @@ def test_index() -> None:
425499 device = Device (** _device )
426500 assert device .product_team_id == product .product_team_id
427501 assert device .product_id == product .id
428- assert device .name == "ABC1234-987654/ - Accredited System"
502+ assert device .name == "ABC1234-987654/200000100000 - Accredited System"
429503 assert device .ods_code == ODS_CODE
430504 assert device .created_on .date () == datetime .today ().date ()
431505 assert device .updated_on .date () == datetime .today ().date ()
@@ -448,9 +522,16 @@ def test_index() -> None:
448522 )
449523
450524 # Check party_key is added to tags in the created device
451- expected_party_key = (str (ProductKeyType .PARTY_KEY ), "abc1234-987654" )
525+ expected_party_key = (str (ProductKeyType .PARTY_KEY ), PARTY_KEY . lower () )
452526 assert any (expected_party_key in tag .__root__ for tag in created_device .tags )
453527
528+ # Check an ASID is generated and added to the keys.
529+ assert isinstance (created_device .keys [0 ], DeviceKey )
530+ assert created_device .keys [0 ].__dict__ == {
531+ "key_type" : DeviceKeyType .ACCREDITED_SYSTEM_ID ,
532+ "key_value" : "200000100000" ,
533+ }
534+
454535
455536@pytest .mark .parametrize (
456537 ["body" , "path_parameters" , "error_code" , "status_code" ],
0 commit comments