Skip to content

Commit 1cda7bd

Browse files
chore(cawg_identity): Add test case with multiple manifests each with their own identity assertion (#923)
1 parent dbb245b commit 1cda7bd

File tree

4 files changed

+29
-7
lines changed

4 files changed

+29
-7
lines changed

cawg_identity/src/identity_assertion/assertion.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// each license.
1313

1414
use std::{
15-
collections::HashMap,
15+
collections::BTreeMap,
1616
fmt::{Debug, Formatter},
1717
};
1818

@@ -167,12 +167,12 @@ impl IdentityAssertion {
167167
) -> impl Serialize {
168168
// NOTE: We can't write this using .map(...).collect() because there are async
169169
// calls.
170-
let mut reports: HashMap<
170+
let mut reports: BTreeMap<
171171
String,
172172
IdentityAssertionsForManifest<
173173
<<SV as SignatureVerifier>::Output as ToCredentialSummary>::CredentialSummary,
174174
>,
175-
> = HashMap::new();
175+
> = BTreeMap::new();
176176

177177
for (id, manifest) in store.manifests() {
178178
let report = Self::summarize_all_impl(manifest, verifier).await;
@@ -193,12 +193,12 @@ impl IdentityAssertion {
193193
) -> impl Serialize {
194194
// NOTE: We can't write this using .map(...).collect() because there are async
195195
// calls.
196-
let mut reports: HashMap<
196+
let mut reports: BTreeMap<
197197
String,
198198
IdentityAssertionsForManifest<
199199
<<SV as SignatureVerifier>::Output as ToCredentialSummary>::CredentialSummary,
200200
>,
201-
> = HashMap::new();
201+
> = BTreeMap::new();
202202

203203
for manifest in reader.iter_manifests() {
204204
let report = Self::summarize_all_impl(manifest, verifier).await;

cawg_identity/src/identity_assertion/report.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
// specific language governing permissions and limitations under
1212
// each license.
1313

14-
use std::collections::HashMap;
14+
use std::collections::BTreeMap;
1515

1616
use serde::{
1717
ser::{SerializeMap, SerializeSeq},
@@ -22,7 +22,7 @@ use crate::identity_assertion::signer_payload::SignerPayload;
2222

2323
#[doc(hidden)]
2424
pub struct IdentityAssertionsForManifestStore<IAR: Serialize> {
25-
pub(crate) assertions_for_manifest: HashMap<String, IdentityAssertionsForManifest<IAR>>,
25+
pub(crate) assertions_for_manifest: BTreeMap<String, IdentityAssertionsForManifest<IAR>>,
2626
}
2727

2828
impl<IAR: Serialize> Serialize for IdentityAssertionsForManifestStore<IAR> {

cawg_identity/src/tests/claim_aggregation/interop.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,25 @@ async fn adobe_connected_identities() {
100100
r#"[{"sig_type":"cawg.identity_claims_aggregation","referenced_assertions":["c2pa.hash.data"],"named_actor":{"@context":["https://www.w3.org/ns/credentials/v2","https://creator-assertions.github.io/tbd/tbd"],"type":["VerifiableCredential","IdentityClaimsAggregationCredential"],"issuer":"did:web:connected-identities.identity-stage.adobe.com","validFrom":"2024-10-03T21:47:02Z","verifiedIdentities":[{"type":"cawg.social_media","username":"Robert Tiles","uri":"https://net.s2stagehance.com/roberttiles","verifiedAt":"2024-09-24T18:15:11Z","provider":{"id":"https://behance.net","name":"behance"}}],"credentialSchema":[{"id":"https://creator-assertions.github.io/schemas/v1/creator-identity-assertion.json","type":"JSONSchema"}]}}]"#
101101
);
102102
}
103+
104+
#[cfg_attr(not(target_arch = "wasm32"), tokio::test)]
105+
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
106+
async fn ims_multiple_manifests() {
107+
let format = "image/jpeg";
108+
let test_image = include_bytes!("../fixtures/claim_aggregation/ims_multiple_manifests.jpg");
109+
110+
let mut test_image = Cursor::new(test_image);
111+
112+
let reader = Reader::from_stream(format, &mut test_image).unwrap();
113+
assert_eq!(reader.validation_status(), None);
114+
115+
// Check the summary report for the entire manifest store.
116+
let isv = IcaSignatureVerifier {};
117+
let ia_summary = IdentityAssertion::summarize_from_reader(&reader, &isv).await;
118+
let ia_json = serde_json::to_string(&ia_summary).unwrap();
119+
120+
assert_eq!(
121+
ia_json,
122+
r#"{"urn:uuid:7256ca36-2a90-44ec-914d-f17c8d70c31f":[{"sig_type":"cawg.identity_claims_aggregation","referenced_assertions":["c2pa.hash.data"],"named_actor":{"@context":["https://www.w3.org/ns/credentials/v2","https://creator-assertions.github.io/tbd/tbd"],"type":["VerifiableCredential","IdentityClaimsAggregationCredential"],"issuer":"did:web:connected-identities.identity-stage.adobe.com","validFrom":"2025-02-13T00:40:47Z","verifiedIdentities":[{"type":"cawg.social_media","username":"firstlast555","uri":"https://net.s2stagehance.com/firstlast555","verifiedAt":"2025-01-10T19:53:59Z","provider":{"id":"https://behance.net","name":"behance"}}],"credentialSchema":[{"id":"https://cawg.io/schemas/v1/creator-identity-assertion.json","type":"JSONSchema"}]}}],"urn:uuid:b55062ef-96b6-4f6e-bb7d-9c415f130471":[{"sig_type":"cawg.identity_claims_aggregation","referenced_assertions":["c2pa.hash.data"],"named_actor":{"@context":["https://www.w3.org/ns/credentials/v2","https://creator-assertions.github.io/tbd/tbd"],"type":["VerifiableCredential","IdentityClaimsAggregationCredential"],"issuer":"did:web:connected-identities.identity-stage.adobe.com","validFrom":"2024-10-03T21:47:02Z","verifiedIdentities":[{"type":"cawg.social_media","username":"Robert Tiles","uri":"https://net.s2stagehance.com/roberttiles","verifiedAt":"2024-09-24T18:15:11Z","provider":{"id":"https://behance.net","name":"behance"}}],"credentialSchema":[{"id":"https://creator-assertions.github.io/schemas/v1/creator-identity-assertion.json","type":"JSONSchema"}]}}]}"#
123+
);
124+
}
Loading

0 commit comments

Comments
 (0)