use auths_verifier::core::Attestation;
pub fn determine_commit_message(
attestation: &Attestation,
previous: Option<&Attestation>,
) -> &'static str {
if attestation.is_revoked() && !previous.as_ref().is_some_and(|pa| pa.is_revoked()) {
"Revoked device attestation"
} else if let Some(prev) = previous {
if *attestation != *prev {
"Updated device attestation"
} else {
"Updated device attestation record (no change detected)"
}
} else {
"Linked device attestation"
}
}
#[cfg(test)]
#[allow(clippy::disallowed_methods)]
mod tests {
use super::*;
use auths_verifier::AttestationBuilder;
use auths_verifier::core::ResourceId;
use chrono::Utc;
fn make_attestation(subject: &str, revoked: bool) -> Attestation {
AttestationBuilder::default()
.rid("test-rid")
.issuer("did:keri:EIssuer")
.subject(subject)
.revoked_at(if revoked { Some(Utc::now()) } else { None })
.build()
}
#[test]
fn first_attestation_returns_linked() {
let att = make_attestation("did:key:z1", false);
assert_eq!(
determine_commit_message(&att, None),
"Linked device attestation"
);
}
#[test]
fn revocation_returns_revoked() {
let att = make_attestation("did:key:z1", true);
let prev = make_attestation("did:key:z1", false);
assert_eq!(
determine_commit_message(&att, Some(&prev)),
"Revoked device attestation"
);
}
#[test]
fn changed_attestation_returns_updated() {
let att = make_attestation("did:key:z1", false);
let mut prev = make_attestation("did:key:z1", false);
prev.rid = ResourceId::new("different-rid");
assert_eq!(
determine_commit_message(&att, Some(&prev)),
"Updated device attestation"
);
}
#[test]
fn identical_attestation_returns_no_change() {
let att = make_attestation("did:key:z1", false);
let prev = att.clone();
assert_eq!(
determine_commit_message(&att, Some(&prev)),
"Updated device attestation record (no change detected)"
);
}
#[test]
fn already_revoked_stays_revoked_message() {
let att = make_attestation("did:key:z1", true);
let prev = att.clone();
assert_eq!(
determine_commit_message(&att, Some(&prev)),
"Updated device attestation record (no change detected)"
);
}
}