@@ -165,6 +165,33 @@ def test_v2_optional_attachments_can_be_declared_independently(optional_fields:
165165 assert len (parse_v2_index ({"schema_version" : 2 , "reports" : [v2_entry (), entry ]}).bindings ) == 2
166166
167167
168+ @pytest .mark .parametrize ("field" , ["md" , "manifest" ])
169+ def test_variant_declared_unsuffixed_optional_attachment_is_rejected (field : str ) -> None :
170+ entry = v2_entry (variant = True , digest = DIGEST_B )
171+ entry [field ] = entry [field ].replace (f".variant-{ DIGEST_B } " , "" )
172+
173+ with pytest .raises (IdentityMetadataError , match = "identity_name_mismatch" ):
174+ parse_v2_index ({"schema_version" : 2 , "reports" : [v2_entry (), entry ]})
175+
176+
177+ @pytest .mark .parametrize ("field" , ["md" , "manifest" ])
178+ def test_variant_declared_wrong_digest_optional_attachment_is_rejected (field : str ) -> None :
179+ entry = v2_entry (variant = True , digest = DIGEST_B )
180+ entry [field ] = entry [field ].replace (DIGEST_B , DIGEST_A )
181+
182+ with pytest .raises (IdentityMetadataError , match = "identity_name_mismatch" ):
183+ parse_v2_index ({"schema_version" : 2 , "reports" : [v2_entry (), entry ]})
184+
185+
186+ @pytest .mark .parametrize ("field" , ["md" , "manifest" ])
187+ def test_canonical_declared_suffixed_optional_attachment_is_rejected (field : str ) -> None :
188+ entry = v2_entry ()
189+ entry [field ] = entry [field ].replace (".md" if field == "md" else ".json.manifest.json" , ".variant-" + DIGEST_A + (".md" if field == "md" else ".json.manifest.json" ))
190+
191+ with pytest .raises (IdentityMetadataError , match = "identity_name_mismatch" ):
192+ parse_v2_index ({"schema_version" : 2 , "reports" : [entry ]})
193+
194+
168195def test_v2_duplicate_identity_rejects_any_metadata_or_digest_difference () -> None :
169196 first = v2_entry ()
170197 duplicate = dict (first )
0 commit comments