From d29f4ec0fd7b0f117b26cf2d830dd85367d6a96c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Rosales?= Date: Mon, 3 Nov 2025 22:10:34 -0600 Subject: [PATCH 1/9] feat(rust/signed-doc): CatalystSignedDocument has CIDv1 --- rust/signed_doc/Cargo.toml | 6 + rust/signed_doc/src/cid_v1.rs | 336 ++++++++++++++++++++++++++++++++++ rust/signed_doc/src/lib.rs | 40 ++++ 3 files changed, 382 insertions(+) create mode 100644 rust/signed_doc/src/cid_v1.rs diff --git a/rust/signed_doc/Cargo.toml b/rust/signed_doc/Cargo.toml index 0cc9bbc339..0955344ea9 100644 --- a/rust/signed_doc/Cargo.toml +++ b/rust/signed_doc/Cargo.toml @@ -35,6 +35,12 @@ tracing = "0.1.40" thiserror = "2.0.11" chrono = "0.4.42" +# CID v1 support +cid = "0.11.1" +multihash = { version = "0.19.3", features = ["serde-codec"] } +sha2 = "0.10" +multibase = "0.9.2" + [dev-dependencies] base64-url = "3.0.0" rand = "0.8.5" diff --git a/rust/signed_doc/src/cid_v1.rs b/rust/signed_doc/src/cid_v1.rs new file mode 100644 index 0000000000..e2215a0504 --- /dev/null +++ b/rust/signed_doc/src/cid_v1.rs @@ -0,0 +1,336 @@ +//! CID v1 (Content Identifier version 1) implementation for Catalyst Signed Documents. +//! +//! This module provides functionality to generate IPFS-compatible CID v1 identifiers +//! for CBOR-encoded Catalyst Signed Documents. +//! +//! ## CID v1 Structure +//! +//! The binary format follows the IPFS specification: +//! ```text +//! = || || +//! ``` +//! +//! Where: +//! - `version`: varint(1) - CID version 1 +//! - `multicodec`: varint(0x51) - CBOR codec +//! - `multihash`: varint(0x12) || varint(32) || digest[32] - SHA2-256 multihash +//! +//! ## Constraints +//! +//! - **Hash function**: Only SHA2-256 is supported (32-byte digest) +//! - **Codec**: Fixed to CBOR (0x51) +//! - **Output size**: 36 bytes in binary format +//! +//! ## Example +//! +//! ```no_run +//! # use catalyst_signed_doc::CatalystSignedDocument; +//! # let doc: CatalystSignedDocument = todo!(); +//! let cid_string = doc.to_cid_v1_string()?; +//! // Result: "bafyrei..." (base32-encoded CID v1) +//! # Ok::<(), anyhow::Error>(()) +//! ``` + +use sha2::{Digest, Sha256}; + +/// CBOR multicodec identifier. +/// +/// See: +const CBOR_CODEC: u64 = 0x51; + +/// SHA2-256 multihash code. +const SHA2_256_CODE: u64 = 0x12; + +/// Generates a CID v1 for the given CBOR bytes. +/// +/// # Arguments +/// +/// * `cbor_bytes` - The CBOR-encoded data to generate a CID for +/// +/// # Returns +/// +/// A `cid::Cid` object representing the CID v1 +/// +/// # Errors +/// +/// Returns an error if multihash construction fails +pub fn to_cid_v1(cbor_bytes: &[u8]) -> anyhow::Result { + // Compute SHA2-256 hash + let mut hasher = Sha256::new(); + hasher.update(cbor_bytes); + let hash_digest = hasher.finalize(); + + // Create multihash from digest using the wrap() API + // The generic parameter <64> is the max digest size we support + let multihash = multihash::Multihash::<64>::wrap(SHA2_256_CODE, &hash_digest)?; + + // Create CID v1 with CBOR codec + let cid = cid::Cid::new_v1(CBOR_CODEC, multihash); + + Ok(cid) +} + +/// Generates a CID v1 and returns it as a multibase-encoded string. +/// +/// Uses base32 encoding (CID v1 default). +/// +/// # Arguments +/// +/// * `cbor_bytes` - The CBOR-encoded data to generate a CID for +/// +/// # Returns +/// +/// A base32-encoded CID v1 string (starting with 'b') +/// +/// # Errors +/// +/// Returns an error if CID generation fails +pub fn to_cid_v1_string(cbor_bytes: &[u8]) -> anyhow::Result { + let cid = to_cid_v1(cbor_bytes)?; + Ok(cid.to_string()) +} + +/// Generates a CID v1 and returns it as raw bytes. +/// +/// Binary format: `` +/// +/// # Arguments +/// +/// * `cbor_bytes` - The CBOR-encoded data to generate a CID for +/// +/// # Returns +/// +/// A 36-byte vector containing the binary CID v1 +/// +/// # Errors +/// +/// Returns an error if CID generation fails +pub fn to_cid_v1_bytes(cbor_bytes: &[u8]) -> anyhow::Result> { + let cid = to_cid_v1(cbor_bytes)?; + Ok(cid.to_bytes()) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{Builder, CatalystSignedDocument, ContentType}; + + /// SHA2-256 digest size in bytes. + const SHA2_256_SIZE: usize = 32; + + /// Helper function to create a test CatalystSignedDocument + fn create_test_document() -> CatalystSignedDocument { + Builder::new() + .with_json_metadata(serde_json::json!({ + "id": "0197f398-9f43-7c23-a576-f765131b81f2", + "ver": "0197f398-9f43-7c23-a576-f765131b81f2", + "type": "ab7c2428-c353-4331-856e-385b2eb20546", + "content-type": ContentType::Json, + })) + .expect("Should create metadata") + .with_json_content(&serde_json::json!({ + "test": "content" + })) + .expect("Should set content") + .build() + .expect("Should build document") + } + + /// Test CID v1 generation from a CatalystSignedDocument + #[test] + fn test_cid_generation_from_document() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let result = to_cid_v1(&cbor_bytes); + assert!(result.is_ok(), "CID generation should succeed"); + + let cid = result.expect("CID should be valid"); + assert_eq!(cid.version(), cid::Version::V1); + assert_eq!(cid.codec(), CBOR_CODEC); + } + + /// Test that binary format is exactly 36 bytes for a CatalystSignedDocument + #[test] + fn test_binary_format_size_from_document() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let cid_bytes = to_cid_v1_bytes(&cbor_bytes).expect("CID bytes should be valid"); + + assert_eq!( + cid_bytes.len(), + 36, + "CID v1 binary format should be exactly 36 bytes" + ); + } + + /// Test determinism: same document produces same CID + #[test] + fn test_determinism_from_document() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let cid1 = to_cid_v1(&cbor_bytes).expect("First CID should be valid"); + let cid2 = to_cid_v1(&cbor_bytes).expect("Second CID should be valid"); + + assert_eq!(cid1, cid2, "Same document should produce identical CIDs"); + } + + /// Test string format starts with 'b' (base32) for a CatalystSignedDocument + #[test] + fn test_string_format_from_document() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let cid_string = to_cid_v1_string(&cbor_bytes).expect("CID string should be valid"); + + assert!( + cid_string.starts_with('b'), + "CID v1 base32 string should start with 'b'" + ); + } + + /// Test that multihash has correct SHA2-256 properties + #[test] + fn test_multihash_properties_from_document() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let cid = to_cid_v1(&cbor_bytes).expect("CID should be valid"); + let multihash = cid.hash(); + + assert_eq!( + multihash.code(), + SHA2_256_CODE, + "Multihash code should be SHA2-256 (0x12)" + ); + assert_eq!( + multihash.size() as usize, + SHA2_256_SIZE, + "Multihash digest size should be 32 bytes" + ); + } + + /// Test that CID string can be parsed back to a CID object + #[test] + fn test_cid_string_round_trip() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let cid_string = to_cid_v1_string(&cbor_bytes).expect("CID string should be valid"); + + // Parse the string back to a CID + let parsed_cid = cid::Cid::try_from(cid_string.as_str()) + .expect("CID string should be parseable"); + + // Generate CID directly for comparison + let original_cid = to_cid_v1(&cbor_bytes).expect("CID should be valid"); + + assert_eq!( + parsed_cid, original_cid, + "Parsed CID should match original CID" + ); + } + + /// Test that different documents produce different CID strings + #[test] + fn test_different_documents_different_cid_strings() { + let doc1 = create_test_document(); + let doc2 = Builder::new() + .with_json_metadata(serde_json::json!({ + "id": "0197f398-9f43-7c23-a576-f765131b81f3", + "ver": "0197f398-9f43-7c23-a576-f765131b81f3", + "type": "ab7c2428-c353-4331-856e-385b2eb20546", + "content-type": ContentType::Json, + })) + .expect("Should create metadata") + .with_json_content(&serde_json::json!({ + "different": "content" + })) + .expect("Should set content") + .build() + .expect("Should build document"); + + let cid_string1 = to_cid_v1_string(&doc1.to_bytes().expect("Should serialize")) + .expect("CID string 1 should be valid"); + let cid_string2 = to_cid_v1_string(&doc2.to_bytes().expect("Should serialize")) + .expect("CID string 2 should be valid"); + + assert_ne!( + cid_string1, cid_string2, + "Different documents should produce different CID strings" + ); + } + + /// Test CID string properties (base32 encoding characteristics) + #[test] + fn test_cid_string_properties() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let cid_string = to_cid_v1_string(&cbor_bytes).expect("CID string should be valid"); + + // Base32 strings start with 'b' + assert!( + cid_string.starts_with('b'), + "CID v1 base32 string should start with 'b'" + ); + + // Base32 encoding uses lowercase letters and digits 2-7 + assert!( + cid_string.chars().skip(1).all(|c| c.is_ascii_lowercase() || ('2'..='7').contains(&c)), + "CID v1 base32 string should only contain lowercase letters and digits 2-7" + ); + + // Should be non-empty and reasonably sized + assert!( + cid_string.len() > 10, + "CID string should have reasonable length" + ); + } + + /// Test CID string determinism (same document always produces same string) + #[test] + fn test_cid_string_determinism() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let cid_string1 = to_cid_v1_string(&cbor_bytes).expect("First CID string should be valid"); + let cid_string2 = to_cid_v1_string(&cbor_bytes).expect("Second CID string should be valid"); + + assert_eq!( + cid_string1, cid_string2, + "Same document should always produce the same CID string" + ); + } + + /// Test full round-trip: document -> CID string -> CID -> bytes -> CID + #[test] + fn test_full_cid_round_trip() { + let doc = create_test_document(); + let original_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + // Convert to CID string + let cid_string = to_cid_v1_string(&original_bytes).expect("CID string should be valid"); + + // Parse string to CID + let cid_from_string = cid::Cid::try_from(cid_string.as_str()) + .expect("Should parse CID from string"); + + // Convert CID to bytes + let cid_bytes = cid_from_string.to_bytes(); + + // Parse bytes back to CID + let cid_from_bytes = cid::Cid::try_from(cid_bytes.as_slice()) + .expect("Should parse CID from bytes"); + + // Convert back to string + let final_string = cid_from_bytes.to_string(); + + assert_eq!( + cid_string, final_string, + "Full round-trip should preserve CID string" + ); + } +} diff --git a/rust/signed_doc/src/lib.rs b/rust/signed_doc/src/lib.rs index b136353887..fb8451a9a5 100644 --- a/rust/signed_doc/src/lib.rs +++ b/rust/signed_doc/src/lib.rs @@ -1,6 +1,7 @@ //! Catalyst documents signing crate mod builder; +mod cid_v1; mod content; pub mod decode_context; pub mod doc_types; @@ -251,6 +252,45 @@ impl CatalystSignedDocument { ) -> anyhow::Result { Ok(minicbor::decode_with(bytes, &mut policy)?) } + + /// Generate a CID v1 (Content Identifier version 1) for this signed document. + /// + /// Creates an IPFS-compatible content identifier using: + /// - CID version 1 + /// - CBOR multicodec (0x51) + /// - SHA2-256 multihash + /// + /// # Errors + /// - CBOR serialization failure + /// - Multihash construction failure + pub fn to_cid_v1(&self) -> anyhow::Result { + let cbor_bytes = self.to_bytes()?; + cid_v1::to_cid_v1(&cbor_bytes) + } + + /// Generate a CID v1 and return it as a multibase-encoded string. + /// + /// Uses base32 encoding (CID v1 default). The resulting string starts with 'b'. + /// + /// # Errors + /// - CBOR serialization failure + /// - CID generation failure + pub fn to_cid_v1_string(&self) -> anyhow::Result { + let cbor_bytes = self.to_bytes()?; + cid_v1::to_cid_v1_string(&cbor_bytes) + } + + /// Generate a CID v1 and return it as raw bytes. + /// + /// Binary format: `` (36 bytes) + /// + /// # Errors + /// - CBOR serialization failure + /// - CID generation failure + pub fn to_cid_v1_bytes(&self) -> anyhow::Result> { + let cbor_bytes = self.to_bytes()?; + cid_v1::to_cid_v1_bytes(&cbor_bytes) + } } impl Decode<'_, CompatibilityPolicy> for CatalystSignedDocument { From a579dad2baffa28c64a2bc1ff172a98bf37d5273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Rosales?= Date: Mon, 10 Nov 2025 21:17:37 -0600 Subject: [PATCH 2/9] feat(rust/signed-doc): Cid newtype --- rust/signed_doc/src/cid_v1.rs | 358 +++++++++++++++++++++++----------- rust/signed_doc/src/lib.rs | 26 +-- 2 files changed, 255 insertions(+), 129 deletions(-) diff --git a/rust/signed_doc/src/cid_v1.rs b/rust/signed_doc/src/cid_v1.rs index e2215a0504..f0e63ae6f3 100644 --- a/rust/signed_doc/src/cid_v1.rs +++ b/rust/signed_doc/src/cid_v1.rs @@ -24,14 +24,23 @@ //! ## Example //! //! ```no_run -//! # use catalyst_signed_doc::CatalystSignedDocument; +//! # use catalyst_signed_doc::{CatalystSignedDocument, cid_v1::Cid}; //! # let doc: CatalystSignedDocument = todo!(); -//! let cid_string = doc.to_cid_v1_string()?; +//! let cid = doc.to_cid_v1()?; +//! let cid_string = cid.to_string(); //! // Result: "bafyrei..." (base32-encoded CID v1) //! # Ok::<(), anyhow::Error>(()) //! ``` +use std::fmt; +use std::ops::Deref; +use std::str::FromStr; + +use minicbor::data::Tag; +use minicbor::decode::Error as DecodeError; +use minicbor::{Decoder, Encoder}; use sha2::{Digest, Sha256}; +use thiserror::Error; /// CBOR multicodec identifier. /// @@ -41,20 +50,153 @@ const CBOR_CODEC: u64 = 0x51; /// SHA2-256 multihash code. const SHA2_256_CODE: u64 = 0x12; +/// CBOR tag for IPLD CID (Content Identifier). +/// +/// See: +const CID_CBOR_TAG: u64 = 42; + +/// Errors that can occur during CID v1 operations. +#[derive(Debug, Clone, Error)] +pub enum CidError { + /// Invalid CID bytes format. + #[error("Invalid CID bytes: {0}")] + InvalidCidBytes(String), + + /// Invalid CID string format. + #[error("Invalid CID string: {0}")] + InvalidCidString(String), + + /// Multihash creation failed. + #[error("Multihash error: {0}")] + MultihashError(String), + + /// Encoding or decoding error. + #[error("Encoding error: {0}")] + Encoding(String), +} + +/// A newtype wrapper around `cid::Cid` for type-safe CID v1 handling. +/// +/// This type provides conversion methods and trait implementations for working with +/// CID v1 identifiers, especially in the context of CBOR-encoded Catalyst Signed Documents. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct Cid(cid::Cid); + +impl Deref for Cid { + type Target = cid::Cid; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl From for Cid { + fn from(cid: cid::Cid) -> Self { + Cid(cid) + } +} + +impl From for cid::Cid { + fn from(cid: Cid) -> Self { + cid.0 + } +} + +impl From for Vec { + fn from(cid: Cid) -> Self { + cid.0.to_bytes() + } +} + +impl TryFrom<&[u8]> for Cid { + type Error = CidError; + + fn try_from(bytes: &[u8]) -> Result { + cid::Cid::try_from(bytes) + .map(Cid) + .map_err(|e| CidError::InvalidCidBytes(e.to_string())) + } +} + +impl FromStr for Cid { + type Err = CidError; + + fn from_str(s: &str) -> Result { + cid::Cid::try_from(s) + .map(Cid) + .map_err(|e| CidError::InvalidCidString(e.to_string())) + } +} + +impl fmt::Display for Cid { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.0) + } +} + +impl serde::Serialize for Cid { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + self.to_string().serialize(serializer) + } +} + +impl<'de> serde::Deserialize<'de> for Cid { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + FromStr::from_str(&s).map_err(serde::de::Error::custom) + } +} + +impl minicbor::Encode<()> for Cid { + fn encode( + &self, + e: &mut Encoder, + _ctx: &mut (), + ) -> Result<(), minicbor::encode::Error> { + // Encode as tag(42) containing the CID bytes + e.tag(Tag::new(CID_CBOR_TAG))?; + e.bytes(&self.0.to_bytes())?; + Ok(()) + } +} + +impl<'de> minicbor::Decode<'de, ()> for Cid { + fn decode(d: &mut Decoder<'de>, _ctx: &mut ()) -> Result { + let tag = d.tag().map_err(|e| DecodeError::message(e.to_string()))?.as_u64(); + if tag != CID_CBOR_TAG { + return Err(DecodeError::message(format!( + "Expected IPLD CID tag ({CID_CBOR_TAG}), got {tag}", + ))); + } + let bytes = d.bytes().map_err(|e| DecodeError::message(e.to_string()))?; + cid::Cid::try_from(bytes) + .map(Cid) + .map_err(|e| DecodeError::message(e.to_string())) + } +} + /// Generates a CID v1 for the given CBOR bytes. /// /// # Arguments /// -/// * `cbor_bytes` - The CBOR-encoded data to generate a CID for +/// * `cbor_bytes` - The CBOR-encoded data (typically from a `CatalystSignedDocument`) /// /// # Returns /// -/// A `cid::Cid` object representing the CID v1 +/// A `Cid` object representing the CID v1 /// /// # Errors /// -/// Returns an error if multihash construction fails -pub fn to_cid_v1(cbor_bytes: &[u8]) -> anyhow::Result { +/// Returns a `CidError` if: +/// - SHA2-256 multihash construction fails +/// - The digest size is invalid +pub(crate) fn to_cid_v1(cbor_bytes: &[u8]) -> Result { // Compute SHA2-256 hash let mut hasher = Sha256::new(); hasher.update(cbor_bytes); @@ -62,52 +204,13 @@ pub fn to_cid_v1(cbor_bytes: &[u8]) -> anyhow::Result { // Create multihash from digest using the wrap() API // The generic parameter <64> is the max digest size we support - let multihash = multihash::Multihash::<64>::wrap(SHA2_256_CODE, &hash_digest)?; + let multihash = multihash::Multihash::<64>::wrap(SHA2_256_CODE, &hash_digest) + .map_err(|e| CidError::MultihashError(e.to_string()))?; // Create CID v1 with CBOR codec let cid = cid::Cid::new_v1(CBOR_CODEC, multihash); - Ok(cid) -} - -/// Generates a CID v1 and returns it as a multibase-encoded string. -/// -/// Uses base32 encoding (CID v1 default). -/// -/// # Arguments -/// -/// * `cbor_bytes` - The CBOR-encoded data to generate a CID for -/// -/// # Returns -/// -/// A base32-encoded CID v1 string (starting with 'b') -/// -/// # Errors -/// -/// Returns an error if CID generation fails -pub fn to_cid_v1_string(cbor_bytes: &[u8]) -> anyhow::Result { - let cid = to_cid_v1(cbor_bytes)?; - Ok(cid.to_string()) -} - -/// Generates a CID v1 and returns it as raw bytes. -/// -/// Binary format: `` -/// -/// # Arguments -/// -/// * `cbor_bytes` - The CBOR-encoded data to generate a CID for -/// -/// # Returns -/// -/// A 36-byte vector containing the binary CID v1 -/// -/// # Errors -/// -/// Returns an error if CID generation fails -pub fn to_cid_v1_bytes(cbor_bytes: &[u8]) -> anyhow::Result> { - let cid = to_cid_v1(cbor_bytes)?; - Ok(cid.to_bytes()) + Ok(Cid(cid)) } #[cfg(test)] @@ -118,7 +221,6 @@ mod tests { /// SHA2-256 digest size in bytes. const SHA2_256_SIZE: usize = 32; - /// Helper function to create a test CatalystSignedDocument fn create_test_document() -> CatalystSignedDocument { Builder::new() .with_json_metadata(serde_json::json!({ @@ -136,7 +238,84 @@ mod tests { .expect("Should build document") } - /// Test CID v1 generation from a CatalystSignedDocument + #[test] + fn test_cid_wrapping() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let cid = to_cid_v1(&cbor_bytes).expect("CID generation should succeed"); + + // Test that we can access inner cid::Cid through Deref + assert_eq!(cid.version(), cid::Version::V1); + assert_eq!(cid.codec(), CBOR_CODEC); + } + + #[test] + fn test_cid_from_bytes() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let cid = to_cid_v1(&cbor_bytes).expect("CID generation should succeed"); + let cid_bytes = Vec::::from(cid); + + // Convert back from bytes + let cid_from_bytes = Cid::try_from(cid_bytes.as_slice()) + .expect("Should parse CID from bytes"); + + assert_eq!(cid, cid_from_bytes); + } + + #[test] + fn test_cid_from_str() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let cid = to_cid_v1(&cbor_bytes).expect("CID generation should succeed"); + let cid_string = cid.to_string(); + + // Parse the string back to a CID + let cid_from_str = Cid::from_str(&cid_string) + .expect("CID string should be parseable"); + + assert_eq!(cid, cid_from_str); + } + + #[test] + fn test_cid_display() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let cid = to_cid_v1(&cbor_bytes).expect("CID generation should succeed"); + let cid_string = cid.to_string(); + + // Should be multibase encoded (starts with 'b' for base32) + assert!(cid_string.starts_with('b'), + "CID v1 base32 string should start with 'b'"); + } + + #[test] + fn test_cid_from_inner_cid() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let cid = to_cid_v1(&cbor_bytes).expect("CID generation should succeed"); + let inner_cid: cid::Cid = cid.into(); + + // Should preserve the inner CID + assert_eq!(inner_cid.version(), cid::Version::V1); + } + + #[test] + fn test_inner_cid_from_cid() { + let doc = create_test_document(); + let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + let cid = to_cid_v1(&cbor_bytes).expect("CID generation should succeed"); + let recovered: cid::Cid = cid.into(); + + assert_eq!(recovered, *cid); + } + #[test] fn test_cid_generation_from_document() { let doc = create_test_document(); @@ -150,13 +329,13 @@ mod tests { assert_eq!(cid.codec(), CBOR_CODEC); } - /// Test that binary format is exactly 36 bytes for a CatalystSignedDocument #[test] fn test_binary_format_size_from_document() { let doc = create_test_document(); let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); - let cid_bytes = to_cid_v1_bytes(&cbor_bytes).expect("CID bytes should be valid"); + let cid = to_cid_v1(&cbor_bytes).expect("CID should be valid"); + let cid_bytes = Vec::::from(cid); assert_eq!( cid_bytes.len(), @@ -165,7 +344,6 @@ mod tests { ); } - /// Test determinism: same document produces same CID #[test] fn test_determinism_from_document() { let doc = create_test_document(); @@ -177,13 +355,13 @@ mod tests { assert_eq!(cid1, cid2, "Same document should produce identical CIDs"); } - /// Test string format starts with 'b' (base32) for a CatalystSignedDocument #[test] fn test_string_format_from_document() { let doc = create_test_document(); let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); - let cid_string = to_cid_v1_string(&cbor_bytes).expect("CID string should be valid"); + let cid = to_cid_v1(&cbor_bytes).expect("CID should be valid"); + let cid_string = cid.to_string(); assert!( cid_string.starts_with('b'), @@ -191,7 +369,6 @@ mod tests { ); } - /// Test that multihash has correct SHA2-256 properties #[test] fn test_multihash_properties_from_document() { let doc = create_test_document(); @@ -212,30 +389,8 @@ mod tests { ); } - /// Test that CID string can be parsed back to a CID object #[test] - fn test_cid_string_round_trip() { - let doc = create_test_document(); - let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); - - let cid_string = to_cid_v1_string(&cbor_bytes).expect("CID string should be valid"); - - // Parse the string back to a CID - let parsed_cid = cid::Cid::try_from(cid_string.as_str()) - .expect("CID string should be parseable"); - - // Generate CID directly for comparison - let original_cid = to_cid_v1(&cbor_bytes).expect("CID should be valid"); - - assert_eq!( - parsed_cid, original_cid, - "Parsed CID should match original CID" - ); - } - - /// Test that different documents produce different CID strings - #[test] - fn test_different_documents_different_cid_strings() { + fn test_different_documents_different_cids() { let doc1 = create_test_document(); let doc2 = Builder::new() .with_json_metadata(serde_json::json!({ @@ -252,24 +407,24 @@ mod tests { .build() .expect("Should build document"); - let cid_string1 = to_cid_v1_string(&doc1.to_bytes().expect("Should serialize")) - .expect("CID string 1 should be valid"); - let cid_string2 = to_cid_v1_string(&doc2.to_bytes().expect("Should serialize")) - .expect("CID string 2 should be valid"); + let cid1 = to_cid_v1(&doc1.to_bytes().expect("Should serialize")) + .expect("CID 1 should be valid"); + let cid2 = to_cid_v1(&doc2.to_bytes().expect("Should serialize")) + .expect("CID 2 should be valid"); assert_ne!( - cid_string1, cid_string2, - "Different documents should produce different CID strings" + cid1, cid2, + "Different documents should produce different CIDs" ); } - /// Test CID string properties (base32 encoding characteristics) #[test] fn test_cid_string_properties() { let doc = create_test_document(); let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); - let cid_string = to_cid_v1_string(&cbor_bytes).expect("CID string should be valid"); + let cid = to_cid_v1(&cbor_bytes).expect("CID should be valid"); + let cid_string = cid.to_string(); // Base32 strings start with 'b' assert!( @@ -290,39 +445,20 @@ mod tests { ); } - /// Test CID string determinism (same document always produces same string) - #[test] - fn test_cid_string_determinism() { - let doc = create_test_document(); - let cbor_bytes = doc.to_bytes().expect("Should serialize to CBOR"); - - let cid_string1 = to_cid_v1_string(&cbor_bytes).expect("First CID string should be valid"); - let cid_string2 = to_cid_v1_string(&cbor_bytes).expect("Second CID string should be valid"); - - assert_eq!( - cid_string1, cid_string2, - "Same document should always produce the same CID string" - ); - } - - /// Test full round-trip: document -> CID string -> CID -> bytes -> CID #[test] fn test_full_cid_round_trip() { let doc = create_test_document(); let original_bytes = doc.to_bytes().expect("Should serialize to CBOR"); - // Convert to CID string - let cid_string = to_cid_v1_string(&original_bytes).expect("CID string should be valid"); - - // Parse string to CID - let cid_from_string = cid::Cid::try_from(cid_string.as_str()) - .expect("Should parse CID from string"); + // Generate CID + let cid = to_cid_v1(&original_bytes).expect("CID should be valid"); + let cid_string = cid.to_string(); // Convert CID to bytes - let cid_bytes = cid_from_string.to_bytes(); + let cid_bytes = Vec::::from(cid); // Parse bytes back to CID - let cid_from_bytes = cid::Cid::try_from(cid_bytes.as_slice()) + let cid_from_bytes = Cid::try_from(cid_bytes.as_slice()) .expect("Should parse CID from bytes"); // Convert back to string diff --git a/rust/signed_doc/src/lib.rs b/rust/signed_doc/src/lib.rs index fb8451a9a5..fad717e2ea 100644 --- a/rust/signed_doc/src/lib.rs +++ b/rust/signed_doc/src/lib.rs @@ -1,7 +1,7 @@ //! Catalyst documents signing crate mod builder; -mod cid_v1; +pub mod cid_v1; mod content; pub mod decode_context; pub mod doc_types; @@ -22,6 +22,7 @@ pub use catalyst_types::{ uuid::{Uuid, UuidV4, UuidV7}, }; use cbork_utils::{array::Array, decode_context::DecodeCtx, with_cbor_bytes::WithCborBytes}; +pub use cid_v1::{Cid, CidError}; pub use content::Content; use decode_context::{CompatibilityPolicy, DecodeContext}; pub use metadata::{ @@ -263,8 +264,9 @@ impl CatalystSignedDocument { /// # Errors /// - CBOR serialization failure /// - Multihash construction failure - pub fn to_cid_v1(&self) -> anyhow::Result { - let cbor_bytes = self.to_bytes()?; + pub fn to_cid_v1(&self) -> Result { + let cbor_bytes = self.to_bytes() + .map_err(|e| cid_v1::CidError::Encoding(e.to_string()))?; cid_v1::to_cid_v1(&cbor_bytes) } @@ -275,21 +277,9 @@ impl CatalystSignedDocument { /// # Errors /// - CBOR serialization failure /// - CID generation failure - pub fn to_cid_v1_string(&self) -> anyhow::Result { - let cbor_bytes = self.to_bytes()?; - cid_v1::to_cid_v1_string(&cbor_bytes) - } - - /// Generate a CID v1 and return it as raw bytes. - /// - /// Binary format: `` (36 bytes) - /// - /// # Errors - /// - CBOR serialization failure - /// - CID generation failure - pub fn to_cid_v1_bytes(&self) -> anyhow::Result> { - let cbor_bytes = self.to_bytes()?; - cid_v1::to_cid_v1_bytes(&cbor_bytes) + pub fn to_cid_v1_string(&self) -> Result { + let cid = self.to_cid_v1()?; + Ok(cid.to_string()) } } From d723d470504398b4c840ac09577165811d29dbee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Rosales?= Date: Thu, 13 Nov 2025 11:03:55 -0600 Subject: [PATCH 3/9] break(rust/signed-doc): DocLocator(Cid) must be valid * Breaking change that removes compatibility with old versions --- .../src/metadata/document_refs/doc_locator.rs | 140 ++++++++++++------ .../src/metadata/document_refs/doc_ref.rs | 5 +- .../src/metadata/document_refs/mod.rs | 131 ++++------------ rust/signed_doc/src/metadata/mod.rs | 35 +---- 4 files changed, 124 insertions(+), 187 deletions(-) diff --git a/rust/signed_doc/src/metadata/document_refs/doc_locator.rs b/rust/signed_doc/src/metadata/document_refs/doc_locator.rs index 8982f79f04..6447d41fd5 100644 --- a/rust/signed_doc/src/metadata/document_refs/doc_locator.rs +++ b/rust/signed_doc/src/metadata/document_refs/doc_locator.rs @@ -7,32 +7,39 @@ use std::{fmt::Display, ops::Deref, str::FromStr}; use cbork_utils::{decode_context::DecodeCtx, map::Map}; use minicbor::{Decode, Decoder, Encode}; +use crate::cid_v1::{Cid, CidError}; use crate::metadata::document_refs::DocRefError; -/// CBOR tag of IPLD content identifiers (CIDs). -const CID_TAG: u64 = 42; - /// CID map key. const CID_MAP_KEY: &str = "cid"; /// Document locator number of map item. const DOC_LOC_MAP_ITEM: u64 = 1; -/// Document locator, no size limit. -#[derive(Clone, Debug, Default, PartialEq, Hash, Eq)] -pub struct DocLocator(Vec); +/// Document locator wrapping a CID (Content Identifier). +#[derive(Clone, Debug, PartialEq, Hash, Eq)] +pub struct DocLocator(Cid); impl Deref for DocLocator { - type Target = Vec; + type Target = Cid; fn deref(&self) -> &Self::Target { &self.0 } } -impl From> for DocLocator { - fn from(value: Vec) -> Self { - Self(value) +impl From for DocLocator { + fn from(cid: Cid) -> Self { + Self(cid) + } +} + +impl TryFrom<&[u8]> for DocLocator { + type Error = CidError; + + fn try_from(bytes: &[u8]) -> Result { + let cid = Cid::try_from(bytes)?; + Ok(Self(cid)) } } @@ -41,7 +48,7 @@ impl Display for DocLocator { &self, f: &mut std::fmt::Formatter<'_>, ) -> std::fmt::Result { - write!(f, "0x{}", hex::encode(self.0.as_slice())) + write!(f, "{}", self.0) } } @@ -49,11 +56,9 @@ impl FromStr for DocLocator { type Err = DocRefError; fn from_str(s: &str) -> Result { - s.strip_prefix("0x") - .map(hex::decode) - .ok_or(DocRefError::HexDecode("missing 0x prefix".to_string()))? - .map(Self) - .map_err(|e| DocRefError::HexDecode(e.to_string())) + let cid = Cid::from_str(s) + .map_err(|e| DocRefError::StringConversion(e.to_string()))?; + Ok(Self(cid)) } } @@ -77,7 +82,7 @@ impl serde::Serialize for DocLocator { } } -// document_locator = { "cid" => cid } +// document_locator = { "cid" => tag(42)(cid_bytes) } impl Decode<'_, ()> for DocLocator { fn decode( d: &mut Decoder, @@ -101,22 +106,14 @@ impl Decode<'_, ()> for DocLocator { let mut value_decoder = minicbor::Decoder::new(&entry.value); - let tag = value_decoder - .tag() - .map_err(|e| e.with_message(format!("{CONTEXT}: expected tag")))?; - - if tag.as_u64() != CID_TAG { - return Err(minicbor::decode::Error::message(format!( - "{CONTEXT}: expected tag {CID_TAG}, found {tag}", - ))); - } + // Decode the Cid, which validates tag(42) and CID format + let cid = Cid::decode(&mut value_decoder, &mut ()) + .map_err(|e| { + let msg = format!("{CONTEXT}: {e}"); + e.with_message(msg) + })?; - // No length limit - let cid_bytes = value_decoder - .bytes() - .map_err(|e| e.with_message(format!("{CONTEXT}: expected bytes")))?; - - Ok(DocLocator(cid_bytes.to_vec())) + Ok(DocLocator(cid)) }, _ => { Err(minicbor::decode::Error::message(format!( @@ -132,26 +129,49 @@ impl Encode<()> for DocLocator { fn encode( &self, e: &mut minicbor::Encoder, - (): &mut (), + ctx: &mut (), ) -> Result<(), minicbor::encode::Error> { e.map(DOC_LOC_MAP_ITEM)?; e.str(CID_MAP_KEY)?; - e.tag(minicbor::data::Tag::new(CID_TAG))?; - e.bytes(&self.0)?; + // Delegate Cid encoding which handles tag(42) and CID bytes + self.0.encode(e, ctx)?; Ok(()) } } #[cfg(test)] -mod tests { +pub(crate) mod tests { use minicbor::{Decoder, Encoder}; use super::*; + use crate::{Builder, ContentType, UuidV7}; + + pub(crate) fn create_dummy_doc_locator() -> DocLocator { + use crate::UuidV4; + + let id = UuidV7::new(); + let ver = UuidV7::new(); + let doc = Builder::new() + .with_json_metadata(serde_json::json!({ + "id": id.to_string(), + "ver": ver.to_string(), + "type": UuidV4::new().to_string(), + "content-type": ContentType::Json, + })) + .expect("Should create metadata") + .with_json_content(&serde_json::json!({"test": "content"})) + .expect("Should set content") + .build() + .expect("Should build document"); + + let cid = doc.to_cid_v1().expect("Should generate CID"); + DocLocator::from(cid) + } #[test] fn test_doc_locator_encode_decode() { - let locator = DocLocator(vec![1, 2, 3, 4]); + let locator = create_dummy_doc_locator(); let mut buffer = Vec::new(); let mut encoder = Encoder::new(&mut buffer); locator.encode(&mut encoder, &mut ()).unwrap(); @@ -160,15 +180,43 @@ mod tests { assert_eq!(locator, decoded_doc_loc); } - // Empty doc locator should not fail #[test] - fn test_doc_locator_encode_decode_empty() { - let locator = DocLocator(vec![]); - let mut buffer = Vec::new(); - let mut encoder = Encoder::new(&mut buffer); - locator.encode(&mut encoder, &mut ()).unwrap(); - let mut decoder = Decoder::new(&buffer); - let decoded_doc_loc = DocLocator::decode(&mut decoder, &mut ()).unwrap(); - assert_eq!(locator, decoded_doc_loc); + fn test_doc_locator_display() { + let locator = create_dummy_doc_locator(); + let display_str = locator.to_string(); + assert!(display_str.starts_with('b'), "Should use multibase format starting with 'b'"); + } + + #[test] + fn test_doc_locator_from_str() { + let locator = create_dummy_doc_locator(); + let display_str = locator.to_string(); + let parsed = display_str.parse::().expect("Should parse multibase string"); + assert_eq!(locator, parsed); + } + + #[test] + fn test_doc_locator_from_cid() { + use crate::UuidV4; + + let id = UuidV7::new(); + let ver = UuidV7::new(); + let doc = Builder::new() + .with_json_metadata(serde_json::json!({ + "id": id.to_string(), + "ver": ver.to_string(), + "type": UuidV4::new().to_string(), + "content-type": ContentType::Json, + })) + .expect("Should create metadata") + .with_json_content(&serde_json::json!({"test": "content"})) + .expect("Should set content") + .build() + .expect("Should build document"); + + let cid = doc.to_cid_v1().expect("Should generate CID"); + let locator = DocLocator::from(cid); + + assert_eq!(&*locator, &cid); } } diff --git a/rust/signed_doc/src/metadata/document_refs/doc_ref.rs b/rust/signed_doc/src/metadata/document_refs/doc_ref.rs index 71bef70079..04a148281e 100644 --- a/rust/signed_doc/src/metadata/document_refs/doc_ref.rs +++ b/rust/signed_doc/src/metadata/document_refs/doc_ref.rs @@ -20,7 +20,7 @@ pub struct DocumentRef { /// Reference to the Document Ver ver: UuidV7, /// Document locator - #[serde(rename = "cid", default)] + #[serde(rename = "cid")] doc_locator: DocLocator, } @@ -62,10 +62,11 @@ impl TryFrom<&CatalystSignedDocument> for DocumentRef { type Error = anyhow::Error; fn try_from(value: &CatalystSignedDocument) -> Result { + let cid = value.to_cid_v1()?; Ok(Self::new( value.doc_id()?, value.doc_ver()?, - DocLocator::default(), + DocLocator::from(cid), )) } } diff --git a/rust/signed_doc/src/metadata/document_refs/mod.rs b/rust/signed_doc/src/metadata/document_refs/mod.rs index 4c20a2dcc2..ef83b1d0c8 100644 --- a/rust/signed_doc/src/metadata/document_refs/mod.rs +++ b/rust/signed_doc/src/metadata/document_refs/mod.rs @@ -1,15 +1,13 @@ //! Document references. -mod doc_locator; +pub(crate) mod doc_locator; mod doc_ref; use std::{fmt::Display, ops::Deref}; -use catalyst_types::uuid::{CborContext, UuidV7}; use cbork_utils::{array::Array, decode_context::DecodeCtx}; pub use doc_locator::DocLocator; pub use doc_ref::DocumentRef; use minicbor::{Decode, Encode}; -use tracing::warn; use crate::CompatibilityPolicy; @@ -82,7 +80,7 @@ impl Display for DocumentRefs { impl Decode<'_, CompatibilityPolicy> for DocumentRefs { fn decode( d: &mut minicbor::Decoder<'_>, - policy: &mut CompatibilityPolicy, + _policy: &mut CompatibilityPolicy, ) -> Result { const CONTEXT: &str = "DocumentRefs decoding"; @@ -106,48 +104,12 @@ impl Decode<'_, CompatibilityPolicy> for DocumentRefs { Ok(DocumentRefs(doc_refs)) }, - // Old structure (id, ver) + // Old structure (id, ver) - no longer supported as DocLocator requires a valid CID minicbor::data::Type::Tag => { - match policy { - CompatibilityPolicy::Accept | CompatibilityPolicy::Warn => { - if matches!(policy, CompatibilityPolicy::Warn) { - warn!( - "{CONTEXT}: Conversion of document reference, id and version, to list of document reference with doc locator" - ); - } - if rest.len() != 1 { - return Err(minicbor::decode::Error::message(format!( - "{CONTEXT}: Must have exactly 2 elements inside array for document reference id and document reference version, found {}", - rest.len().overflowing_add(1).0 - ))); - } - - let id = UuidV7::decode( - &mut minicbor::Decoder::new(first), - &mut CborContext::Tagged, - ) - .map_err(|e| e.with_message("Invalid ID UUIDv7"))?; - let ver = rest - .first() - .map(|ver| UuidV7::decode(&mut minicbor::Decoder::new(ver), &mut CborContext::Tagged).map_err(|e| { - e.with_message("Invalid Ver UUIDv7") - })) - .transpose()? - .ok_or_else(|| minicbor::decode::Error::message(format!("{CONTEXT}: Missing document reference version after document reference id")))?; - - Ok(DocumentRefs(vec![DocumentRef::new( - id, - ver, - // If old implementation is used, the locator will be empty - DocLocator::default(), - )])) - }, - CompatibilityPolicy::Fail => { - Err(minicbor::decode::Error::message(format!( - "{CONTEXT}: Conversion of document reference id and version to list of document reference with doc locator is not allowed" - ))) - }, - } + Err(minicbor::decode::Error::message(format!( + "{CONTEXT}: Legacy document reference format (id, ver) without CID is no longer supported. \ + DocLocator now requires a valid Content Identifier (CID)." + ))) }, other => { Err(minicbor::decode::Error::message(format!( @@ -232,10 +194,12 @@ mod serde_impl { #[cfg(test)] mod tests { + use catalyst_types::uuid::{CborContext, UuidV7}; use minicbor::{Decoder, Encoder}; use test_case::test_case; use super::*; + use super::doc_locator::tests::create_dummy_doc_locator; #[test_case( CompatibilityPolicy::Accept, @@ -293,7 +257,7 @@ mod tests { .unwrap() .encode_with(UuidV7::new(), &mut CborContext::Untagged) .unwrap() - .encode(DocLocator::default()) + .encode(create_dummy_doc_locator()) .unwrap(); e } ; @@ -309,34 +273,6 @@ mod tests { ); } - #[test_case( - CompatibilityPolicy::Accept, - |uuid: UuidV7, _: DocLocator| { - let mut e = Encoder::new(Vec::new()); - e.array(2) - .unwrap() - .encode_with(uuid, &mut CborContext::Tagged) - .unwrap() - .encode_with(uuid, &mut CborContext::Tagged) - .unwrap(); - e - } ; - "Valid single doc ref (old format)" - )] - #[test_case( - CompatibilityPolicy::Warn, - |uuid: UuidV7, _: DocLocator| { - let mut e = Encoder::new(Vec::new()); - e.array(2) - .unwrap() - .encode_with(uuid, &mut CborContext::Tagged) - .unwrap() - .encode_with(uuid, &mut CborContext::Tagged) - .unwrap(); - e - } ; - "Valid single doc ref (old format), warn policy" - )] #[test_case( CompatibilityPolicy::Accept, |uuid: UuidV7, doc_loc: DocLocator| { @@ -378,7 +314,7 @@ mod tests { e_gen: impl FnOnce(UuidV7, DocLocator) -> Encoder>, ) { let uuid = UuidV7::new(); - let doc_loc = DocLocator::default(); + let doc_loc = create_dummy_doc_locator(); let e = e_gen(uuid, doc_loc.clone()); let doc_refs = @@ -387,35 +323,20 @@ mod tests { assert_eq!(doc_refs.0, vec![DocumentRef::new(uuid, uuid, doc_loc)]); } - #[test_case( - serde_json::json!( - { - "id": UuidV7::new(), - "ver": UuidV7::new(), - } - ) ; - "Document reference type old format" - )] - #[test_case( - serde_json::json!( - [ - { - "id": UuidV7::new(), - "ver": UuidV7::new(), - "cid": format!("0x{}", hex::encode([1, 2, 3])) - }, - { - "id": UuidV7::new(), - "ver": UuidV7::new(), - "cid": format!("0x{}", hex::encode([1, 2, 3])) - } - ] - ) ; - "Document reference type new format" - )] - fn test_json_valid_serde(json: serde_json::Value) { - let refs: DocumentRefs = serde_json::from_value(json).unwrap(); - let json_from_refs = serde_json::to_value(&refs).unwrap(); - assert_eq!(refs, serde_json::from_value(json_from_refs).unwrap()); + #[test] + fn test_json_valid_serde() { + let uuid1 = UuidV7::new(); + let uuid2 = UuidV7::new(); + let doc_loc = create_dummy_doc_locator(); + + let doc_ref1 = DocumentRef::new(uuid1, uuid1, doc_loc.clone()); + let doc_ref2 = DocumentRef::new(uuid2, uuid2, doc_loc); + + let refs = DocumentRefs(vec![doc_ref1, doc_ref2]); + + let json = serde_json::to_value(&refs).unwrap(); + let refs_from_json: DocumentRefs = serde_json::from_value(json).unwrap(); + + assert_eq!(refs, refs_from_json); } } diff --git a/rust/signed_doc/src/metadata/mod.rs b/rust/signed_doc/src/metadata/mod.rs index 6be81ff836..036ae9578b 100644 --- a/rust/signed_doc/src/metadata/mod.rs +++ b/rust/signed_doc/src/metadata/mod.rs @@ -9,7 +9,7 @@ mod collaborators; mod content_encoding; mod content_type; pub(crate) mod doc_type; -mod document_refs; +pub(crate) mod document_refs; mod section; mod supported_field; @@ -355,39 +355,6 @@ mod tests { }) ; "minimally valid JSON" )] - #[test_case( - serde_json::json!( - { - "id": "0197f398-9f43-7c23-a576-f765131b81f2", - "ver": "0197f398-9f43-7c23-a576-f765131b81f2", - "type": "ab7c2428-c353-4331-856e-385b2eb20546", - "content-type": "application/json", - "ref": [ - { - "id": "0197f398-9f43-7c23-a576-f765131b81f2", - "ver": "0197f398-9f43-7c23-a576-f765131b81f2", - "cid": "0x", - }, - ] - } - ) ; - "minimally valid JSON, new format reference type" - )] - #[test_case( - serde_json::json!( - { - "id": "0197f398-9f43-7c23-a576-f765131b81f2", - "ver": "0197f398-9f43-7c23-a576-f765131b81f2", - "type": "ab7c2428-c353-4331-856e-385b2eb20546", - "content-type": "application/json", - "ref": { - "id": "0197f398-9f43-7c23-a576-f765131b81f2", - "ver": "0197f398-9f43-7c23-a576-f765131b81f2", - }, - } - ) ; - "minimally valid JSON, old format reference type" - )] fn test_json_valid_serde(json: serde_json::Value) { let metadata = Metadata::from_json(json).unwrap(); let json_from_meta = metadata.to_json().unwrap(); From 99bfa3ef8650dbcc54d5e56cb80986ce07989894 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Rosales?= Date: Thu, 13 Nov 2025 11:06:57 -0600 Subject: [PATCH 4/9] fix(rust/signed-doc): fix unit tests to support DocLocator * removes support for old version --- rust/signed_doc/src/metadata/chain.rs | 20 ++- rust/signed_doc/src/providers.rs | 3 +- .../src/validator/rules/chain/tests.rs | 4 +- .../src/validator/rules/doc_ref/tests.rs | 107 ++++----------- .../rules/ownership/tests/ref_field_based.rs | 9 +- .../src/validator/rules/parameters/tests.rs | 127 +++++------------- .../src/validator/rules/reply/tests.rs | 59 +++----- .../src/validator/rules/signature/tests.rs | 22 ++- .../src/validator/rules/template/tests.rs | 96 +++++-------- 9 files changed, 153 insertions(+), 294 deletions(-) diff --git a/rust/signed_doc/src/metadata/chain.rs b/rust/signed_doc/src/metadata/chain.rs index f8b5403536..1615025bb4 100644 --- a/rust/signed_doc/src/metadata/chain.rs +++ b/rust/signed_doc/src/metadata/chain.rs @@ -127,7 +127,6 @@ mod tests { use minicbor::{Decode, Decoder, Encode, Encoder}; use super::*; - use crate::DocLocator; #[test] fn test_chain_encode_decode_without_doc_ref() { @@ -151,9 +150,26 @@ mod tests { let id = UuidV7::new(); let ver = UuidV7::new(); + // Create a test document to generate a valid CID for DocLocator + let test_doc = crate::Builder::new() + .with_json_metadata(serde_json::json!({ + "id": id.to_string(), + "ver": ver.to_string(), + "type": "ab7c2428-c353-4331-856e-385b2eb20546", + "content-type": crate::ContentType::Json, + })) + .expect("Should create metadata") + .with_json_content(&serde_json::json!({"test": "content"})) + .expect("Should set content") + .build() + .expect("Should build document"); + + let cid = test_doc.to_cid_v1().expect("Should generate CID"); + let doc_locator = crate::DocLocator::from(cid); + let chain = Chain { height: 3, - document_ref: Some(DocumentRef::new(id, ver, DocLocator::default())), + document_ref: Some(DocumentRef::new(id, ver, doc_locator)), }; let mut buf = Vec::new(); diff --git a/rust/signed_doc/src/providers.rs b/rust/signed_doc/src/providers.rs index 4f1c258d49..c652e4534d 100644 --- a/rust/signed_doc/src/providers.rs +++ b/rust/signed_doc/src/providers.rs @@ -89,7 +89,8 @@ pub mod tests { if let Some(dr) = doc_ref { self.signed_doc.insert(dr, doc.clone()); } else { - let dr = DocumentRef::new(doc.doc_id()?, doc.doc_ver()?, DocLocator::default()); + let cid = doc.to_cid_v1()?; + let dr = DocumentRef::new(doc.doc_id()?, doc.doc_ver()?, DocLocator::from(cid)); self.signed_doc.insert(dr, doc.clone()); } Ok(()) diff --git a/rust/signed_doc/src/validator/rules/chain/tests.rs b/rust/signed_doc/src/validator/rules/chain/tests.rs index 651e311fd8..e621f337f8 100644 --- a/rust/signed_doc/src/validator/rules/chain/tests.rs +++ b/rust/signed_doc/src/validator/rules/chain/tests.rs @@ -197,8 +197,8 @@ async fn test_valid_chained_documents( .build(); let first_doc_ref = DocumentRef::try_from(&first).unwrap(); - // same version - let last_doc_ver = first_doc_ver; + // version not greater than first (using an earlier timestamp) + let last_doc_ver = helper::get_now_plus_uuidv7(-60); let last = Builder::new() .with_metadata_field(SupportedField::Type(DocType::from(doc_type))) .with_metadata_field(SupportedField::Id(doc_id)) diff --git a/rust/signed_doc/src/validator/rules/doc_ref/tests.rs b/rust/signed_doc/src/validator/rules/doc_ref/tests.rs index def11d4fa5..2633e202ac 100644 --- a/rust/signed_doc/src/validator/rules/doc_ref/tests.rs +++ b/rust/signed_doc/src/validator/rules/doc_ref/tests.rs @@ -3,7 +3,8 @@ use test_case::test_case; use super::*; use crate::{ - DocLocator, DocumentRef, builder::tests::Builder, metadata::SupportedField, + DocumentRef, builder::tests::Builder, metadata::SupportedField, + metadata::document_refs::doc_locator::tests::create_dummy_doc_locator, providers::tests::TestCatalystProvider, }; @@ -18,11 +19,7 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&ref_doc).unwrap()] .into(), )) .build() @@ -54,21 +51,11 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - ref_doc_1.doc_id().unwrap(), - ref_doc_1.doc_ver().unwrap(), - DocLocator::default(), - ), - DocumentRef::new( - ref_doc_2.doc_id().unwrap(), - ref_doc_2.doc_ver().unwrap(), - DocLocator::default(), - ), - DocumentRef::new( - ref_doc_3.doc_id().unwrap(), - ref_doc_3.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![ + DocumentRef::try_from(&ref_doc_1).unwrap(), + DocumentRef::try_from(&ref_doc_2).unwrap(), + DocumentRef::try_from(&ref_doc_3).unwrap(), + ] .into(), )) .build() @@ -100,21 +87,11 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - ref_doc_1.doc_id().unwrap(), - ref_doc_1.doc_ver().unwrap(), - DocLocator::default(), - ), - DocumentRef::new( - ref_doc_2.doc_id().unwrap(), - ref_doc_2.doc_ver().unwrap(), - DocLocator::default(), - ), - DocumentRef::new( - ref_doc_3.doc_id().unwrap(), - ref_doc_3.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![ + DocumentRef::try_from(&ref_doc_1).unwrap(), + DocumentRef::try_from(&ref_doc_2).unwrap(), + DocumentRef::try_from(&ref_doc_3).unwrap(), + ] .into(), )) .build() @@ -145,21 +122,11 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - ref_doc_1.doc_id().unwrap(), - ref_doc_1.doc_ver().unwrap(), - DocLocator::default(), - ), - DocumentRef::new( - ref_doc_2.doc_id().unwrap(), - ref_doc_2.doc_ver().unwrap(), - DocLocator::default(), - ), - DocumentRef::new( - ref_doc_3.doc_id().unwrap(), - ref_doc_3.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![ + DocumentRef::try_from(&ref_doc_1).unwrap(), + DocumentRef::try_from(&ref_doc_2).unwrap(), + DocumentRef::try_from(&ref_doc_3).unwrap(), + ] .into(), )) .build() @@ -175,15 +142,11 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[0].clone())) .build(); - provider.add_document(Some(DocumentRef::new(UuidV7::new(), UuidV7::new(), DocLocator::default())), &ref_doc).unwrap(); + provider.add_document(Some(DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator())), &ref_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&ref_doc).unwrap()] .into(), )) .build() @@ -199,7 +162,7 @@ use crate::{ vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), ), ] .into(), @@ -253,11 +216,7 @@ async fn ref_multiple_specified_test( Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&ref_doc).unwrap()] .into(), )) .build() @@ -289,21 +248,11 @@ async fn ref_multiple_specified_test( Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - ref_doc_1.doc_id().unwrap(), - ref_doc_1.doc_ver().unwrap(), - DocLocator::default(), - ), - DocumentRef::new( - ref_doc_2.doc_id().unwrap(), - ref_doc_2.doc_ver().unwrap(), - DocLocator::default(), - ), - DocumentRef::new( - ref_doc_3.doc_id().unwrap(), - ref_doc_3.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![ + DocumentRef::try_from(&ref_doc_1).unwrap(), + DocumentRef::try_from(&ref_doc_2).unwrap(), + DocumentRef::try_from(&ref_doc_3).unwrap(), + ] .into(), )) .build() @@ -379,7 +328,7 @@ async fn ref_rule_not_specified_test() { let ref_ver = UuidV7::new(); let doc = Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new(ref_id, ref_ver, DocLocator::default())].into(), + vec![DocumentRef::new(ref_id, ref_ver, create_dummy_doc_locator())].into(), )) .build(); assert!(!rule.check(&doc, &provider).await.unwrap()); diff --git a/rust/signed_doc/src/validator/rules/ownership/tests/ref_field_based.rs b/rust/signed_doc/src/validator/rules/ownership/tests/ref_field_based.rs index 9851b68dd3..17f03e3d8a 100644 --- a/rust/signed_doc/src/validator/rules/ownership/tests/ref_field_based.rs +++ b/rust/signed_doc/src/validator/rules/ownership/tests/ref_field_based.rs @@ -6,9 +6,10 @@ use ed25519_dalek::ed25519::signature::Signer; use test_case::test_case; use crate::{ - CatalystSignedDocument, DocLocator, DocumentRef, + CatalystSignedDocument, DocumentRef, builder::tests::Builder, metadata::SupportedField, + metadata::document_refs::doc_locator::tests::create_dummy_doc_locator, providers::tests::TestCatalystProvider, validator::rules::{DocumentOwnershipRule, utils::create_dummy_key_pair}, }; @@ -34,7 +35,7 @@ use crate::{ DocumentRef::new( doc.doc_id().unwrap(), doc.doc_ver().unwrap(), - DocLocator::default() + create_dummy_doc_locator() ) ].into() )) @@ -67,7 +68,7 @@ use crate::{ DocumentRef::new( doc.doc_id().unwrap(), doc.doc_ver().unwrap(), - DocLocator::default() + create_dummy_doc_locator() ) ].into() )) @@ -122,7 +123,7 @@ use crate::{ DocumentRef::new( doc.doc_id().unwrap(), doc.doc_ver().unwrap(), - DocLocator::default() + create_dummy_doc_locator() ) ].into() )) diff --git a/rust/signed_doc/src/validator/rules/parameters/tests.rs b/rust/signed_doc/src/validator/rules/parameters/tests.rs index 02387721b7..329a30249d 100644 --- a/rust/signed_doc/src/validator/rules/parameters/tests.rs +++ b/rust/signed_doc/src/validator/rules/parameters/tests.rs @@ -3,7 +3,8 @@ use test_case::test_case; use super::*; use crate::{ - DocLocator, DocumentRef, builder::tests::Builder, metadata::SupportedField, + DocumentRef, builder::tests::Builder, metadata::SupportedField, + metadata::document_refs::doc_locator::tests::create_dummy_doc_locator, providers::tests::TestCatalystProvider, }; @@ -18,11 +19,7 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Parameters( - vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(¶meter_doc).unwrap()] .into(), )) .build() @@ -40,11 +37,7 @@ use crate::{ .build(); provider.add_document(None, ¶meter_doc).unwrap(); - let common_parameter_field: DocumentRefs = vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + let common_parameter_field: DocumentRefs = vec![DocumentRef::try_from(¶meter_doc).unwrap()] .into(); let template_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) @@ -56,11 +49,7 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Template( - vec![DocumentRef::new( - template_doc.doc_id().unwrap(), - template_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&template_doc).unwrap()] .into() )) .with_metadata_field(SupportedField::Parameters(common_parameter_field)) @@ -84,14 +73,14 @@ use crate::{ vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into() )) .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( parameter_doc.doc_id().unwrap(), parameter_doc.doc_ver().unwrap(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into())) .build() @@ -118,17 +107,13 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Template( - vec![DocumentRef::new( - template_doc.doc_id().unwrap(), - template_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&template_doc).unwrap()] .into() )) .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( parameter_doc.doc_id().unwrap(), parameter_doc.doc_ver().unwrap(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into())) .build() @@ -152,7 +137,7 @@ use crate::{ .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into())) .build(); @@ -161,17 +146,13 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Template( - vec![DocumentRef::new( - template_doc.doc_id().unwrap(), - template_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&template_doc).unwrap()] .into() )) .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( parameter_doc.doc_id().unwrap(), parameter_doc.doc_ver().unwrap(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into())) .build() @@ -189,11 +170,7 @@ use crate::{ .build(); provider.add_document(None, ¶meter_doc).unwrap(); - let common_parameter_field: DocumentRefs = vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + let common_parameter_field: DocumentRefs = vec![DocumentRef::try_from(¶meter_doc).unwrap()] .into(); let replied_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) @@ -205,11 +182,7 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - replied_doc.doc_id().unwrap(), - replied_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&replied_doc).unwrap()] .into() )) .with_metadata_field(SupportedField::Parameters(common_parameter_field)) @@ -233,14 +206,14 @@ use crate::{ vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into() )) .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( parameter_doc.doc_id().unwrap(), parameter_doc.doc_ver().unwrap(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into())) .build() @@ -267,17 +240,13 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - reply_doc.doc_id().unwrap(), - reply_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&reply_doc).unwrap()] .into() )) .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( parameter_doc.doc_id().unwrap(), parameter_doc.doc_ver().unwrap(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into())) .build() @@ -301,7 +270,7 @@ use crate::{ .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into())) .build(); @@ -310,17 +279,13 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - reply_doc.doc_id().unwrap(), - reply_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&reply_doc).unwrap()] .into() )) .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( parameter_doc.doc_id().unwrap(), parameter_doc.doc_ver().unwrap(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into())) .build() @@ -338,11 +303,7 @@ use crate::{ .build(); provider.add_document(None, ¶meter_doc).unwrap(); - let common_parameter_field: DocumentRefs = vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + let common_parameter_field: DocumentRefs = vec![DocumentRef::try_from(¶meter_doc).unwrap()] .into(); let ref_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) @@ -354,11 +315,7 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&ref_doc).unwrap()] .into() )) .with_metadata_field(SupportedField::Parameters(common_parameter_field)) @@ -382,14 +339,14 @@ use crate::{ vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into() )) .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( parameter_doc.doc_id().unwrap(), parameter_doc.doc_ver().unwrap(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into())) .build() @@ -416,17 +373,13 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&ref_doc).unwrap()] .into() )) .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( parameter_doc.doc_id().unwrap(), parameter_doc.doc_ver().unwrap(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into())) .build() @@ -450,7 +403,7 @@ use crate::{ .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into())) .build(); @@ -459,17 +412,13 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&ref_doc).unwrap()] .into() )) .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( parameter_doc.doc_id().unwrap(), parameter_doc.doc_ver().unwrap(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into())) .build() @@ -489,11 +438,7 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Parameters( - vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(¶meter_doc).unwrap()] .into(), )) .build() @@ -512,11 +457,7 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Parameters( - vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(¶meter_doc).unwrap()] .into(), )) .build() @@ -532,7 +473,7 @@ use crate::{ vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into(), )) @@ -605,7 +546,7 @@ async fn parameters_rule_not_specified_test() { let ref_ver = UuidV7::new(); let doc = Builder::new() .with_metadata_field(SupportedField::Parameters( - vec![DocumentRef::new(ref_id, ref_ver, DocLocator::default())].into(), + vec![DocumentRef::new(ref_id, ref_ver, create_dummy_doc_locator())].into(), )) .build(); assert!(!rule.check(&doc, &provider).await.unwrap()); diff --git a/rust/signed_doc/src/validator/rules/reply/tests.rs b/rust/signed_doc/src/validator/rules/reply/tests.rs index eaef8aecb1..61c2ff75a3 100644 --- a/rust/signed_doc/src/validator/rules/reply/tests.rs +++ b/rust/signed_doc/src/validator/rules/reply/tests.rs @@ -3,7 +3,8 @@ use test_case::test_case; use super::*; use crate::{ - DocLocator, DocumentRef, DocumentRefs, builder::tests::Builder, metadata::SupportedField, + DocumentRef, DocumentRefs, builder::tests::Builder, metadata::SupportedField, + metadata::document_refs::doc_locator::tests::create_dummy_doc_locator, providers::tests::TestCatalystProvider, }; @@ -12,7 +13,7 @@ use crate::{ let common_ref: DocumentRefs = vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into(); let ref_doc = Builder::new() @@ -26,11 +27,7 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Ref(common_ref)) .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&ref_doc).unwrap()] .into(), )) .build() @@ -44,7 +41,7 @@ use crate::{ let common_ref: DocumentRefs = vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into(); let ref_doc = Builder::new() @@ -58,11 +55,7 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Ref(common_ref)) .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&ref_doc).unwrap()] .into(), )) .build() @@ -76,7 +69,7 @@ use crate::{ let common_ref: DocumentRefs = vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into(); let ref_doc = Builder::new() @@ -89,11 +82,7 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Ref(common_ref)) .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&ref_doc).unwrap()] .into(), )) .build() @@ -111,7 +100,7 @@ use crate::{ vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into(), )) @@ -124,16 +113,12 @@ use crate::{ vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into(), )) .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&ref_doc).unwrap()] .into(), )) .build() @@ -147,7 +132,7 @@ use crate::{ let common_ref: DocumentRefs = vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into(); let ref_doc = Builder::new() @@ -160,11 +145,7 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Ref(common_ref)) .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&ref_doc).unwrap()] .into(), )) .build() @@ -178,7 +159,7 @@ use crate::{ let common_ref: DocumentRefs = vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into(); let ref_doc = Builder::new() @@ -190,11 +171,7 @@ use crate::{ Builder::new() .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + vec![DocumentRef::try_from(&ref_doc).unwrap()] .into(), )) .build() @@ -210,7 +187,7 @@ use crate::{ vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into(), )) @@ -218,7 +195,7 @@ use crate::{ vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )] .into(), )) @@ -291,7 +268,7 @@ async fn reply_rule_not_specified_test() { let ref_ver = UuidV7::new(); let doc = Builder::new() .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new(ref_id, ref_ver, DocLocator::default())].into(), + vec![DocumentRef::new(ref_id, ref_ver, create_dummy_doc_locator())].into(), )) .build(); assert!(!rule.check(&doc, &provider).await.unwrap()); diff --git a/rust/signed_doc/src/validator/rules/signature/tests.rs b/rust/signed_doc/src/validator/rules/signature/tests.rs index bd8471e5d6..1ac36a5dd5 100644 --- a/rust/signed_doc/src/validator/rules/signature/tests.rs +++ b/rust/signed_doc/src/validator/rules/signature/tests.rs @@ -4,18 +4,28 @@ use catalyst_types::catalyst_id::role_index::RoleId; use ed25519_dalek::ed25519::signature::Signer; use super::*; -use crate::{providers::tests::*, validator::rules::utils::create_dummy_key_pair, *}; +use crate::{ + metadata::document_refs::{doc_locator::tests::create_dummy_doc_locator, DocumentRef}, + providers::tests::*, + validator::rules::utils::create_dummy_key_pair, + *, +}; fn metadata() -> serde_json::Value { + let ref_doc = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); + let reply_doc = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); + let template_doc = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); + let parameters_doc = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); + serde_json::json!({ "content-type": ContentType::Json.to_string(), "content-encoding": ContentEncoding::Brotli.to_string(), "type": UuidV4::new(), "id": UuidV7::new(), "ver": UuidV7::new(), - "ref": {"id": UuidV7::new(), "ver": UuidV7::new()}, - "reply": {"id": UuidV7::new(), "ver": UuidV7::new()}, - "template": {"id": UuidV7::new(), "ver": UuidV7::new()}, + "ref": [ref_doc], + "reply": [reply_doc], + "template": [template_doc], "section": "$", "collaborators": vec![ /* cspell:disable */ @@ -23,7 +33,7 @@ fn metadata() -> serde_json::Value { "id.catalyst://preprod.cardano/FftxFnOrj2qmTuB2oZG2v0YEWJfKvQ9Gg8AgNAhDsKE/7/3" /* cspell:enable */ ], - "parameters": {"id": UuidV7::new(), "ver": UuidV7::new()}, + "parameters": [parameters_doc], }) } @@ -195,7 +205,7 @@ fn parameters_alias_field( // empty unprotected headers e.map(1)?; e.str(alias)?.encode_with( - DocumentRef::new(UuidV7::new(), UuidV7::new(), DocLocator::default()), + DocumentRef::new(UuidV7::new(), UuidV7::new(), crate::metadata::document_refs::doc_locator::tests::create_dummy_doc_locator()), &mut (), )?; // content (random bytes) diff --git a/rust/signed_doc/src/validator/rules/template/tests.rs b/rust/signed_doc/src/validator/rules/template/tests.rs index 8fd9107c9e..04ea6d894f 100644 --- a/rust/signed_doc/src/validator/rules/template/tests.rs +++ b/rust/signed_doc/src/validator/rules/template/tests.rs @@ -3,26 +3,23 @@ use test_case::test_case; use super::*; use crate::{ - DocLocator, DocumentRef, builder::tests::Builder, metadata::SupportedField, + DocumentRef, builder::tests::Builder, metadata::SupportedField, + metadata::document_refs::doc_locator::tests::create_dummy_doc_locator, providers::tests::TestCatalystProvider, }; #[test_case( |allowed_type, provider| { let json_schema = serde_json::to_vec(&serde_json::json!({})).unwrap(); - let template_ref = DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - ); let doc = Builder::new() - .with_metadata_field(SupportedField::Id(*template_ref.id())) - .with_metadata_field(SupportedField::Ver(*template_ref.ver())) + .with_metadata_field(SupportedField::Id(UuidV7::new())) + .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(allowed_type)) .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(json_schema) .build(); provider.add_document(None, &doc).unwrap(); + let template_ref = DocumentRef::try_from(&doc).unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -39,14 +36,9 @@ use crate::{ #[test_case( |allowed_type, provider| { let json_schema = serde_json::to_vec(&serde_json::json!({})).unwrap(); - let template_ref = DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - ); let doc = Builder::new() - .with_metadata_field(SupportedField::Id(*template_ref.id())) - .with_metadata_field(SupportedField::Ver(*template_ref.ver())) + .with_metadata_field(SupportedField::Id(UuidV7::new())) + .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(allowed_type)) .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(json_schema) @@ -65,19 +57,15 @@ use crate::{ #[test_case( |allowed_type, provider| { let json_schema = serde_json::to_vec(&serde_json::json!({})).unwrap(); - let template_ref = DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - ); let doc = Builder::new() - .with_metadata_field(SupportedField::Id(*template_ref.id())) - .with_metadata_field(SupportedField::Ver(*template_ref.ver())) + .with_metadata_field(SupportedField::Id(UuidV7::new())) + .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(allowed_type)) .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(json_schema) .build(); provider.add_document(None, &doc).unwrap(); + let template_ref = DocumentRef::try_from(&doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Template( @@ -92,19 +80,15 @@ use crate::{ #[test_case( |allowed_type, provider| { let json_schema = serde_json::to_vec(&serde_json::json!({})).unwrap(); - let template_ref = DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - ); let doc = Builder::new() - .with_metadata_field(SupportedField::Id(*template_ref.id())) - .with_metadata_field(SupportedField::Ver(*template_ref.ver())) + .with_metadata_field(SupportedField::Id(UuidV7::new())) + .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(allowed_type)) .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(json_schema) .build(); provider.add_document(None, &doc).unwrap(); + let template_ref = DocumentRef::try_from(&doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Template( @@ -123,7 +107,7 @@ use crate::{ let template_ref = DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), ); let doc = Builder::new() .with_metadata_field(SupportedField::Id(*template_ref.id())) @@ -149,18 +133,14 @@ use crate::{ #[test_case( |_, provider| { let json_schema = serde_json::to_vec(&serde_json::json!({})).unwrap(); - let template_ref = DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - ); let doc = Builder::new() - .with_metadata_field(SupportedField::Id(*template_ref.id())) - .with_metadata_field(SupportedField::Ver(*template_ref.ver())) + .with_metadata_field(SupportedField::Id(UuidV7::new())) + .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(json_schema) .build(); provider.add_document(None, &doc).unwrap(); + let template_ref = DocumentRef::try_from(&doc).unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -177,18 +157,14 @@ use crate::{ #[test_case( |allowed_type, provider| { let json_schema = serde_json::to_vec(&serde_json::json!({})).unwrap(); - let template_ref = DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - ); let doc = Builder::new() - .with_metadata_field(SupportedField::Id(*template_ref.id())) - .with_metadata_field(SupportedField::Ver(*template_ref.ver())) + .with_metadata_field(SupportedField::Id(UuidV7::new())) + .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(allowed_type)) .with_content(json_schema) .build(); provider.add_document(None, &doc).unwrap(); + let template_ref = DocumentRef::try_from(&doc).unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -204,18 +180,14 @@ use crate::{ )] #[test_case( |allowed_type, provider| { - let template_ref = DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - ); let doc = Builder::new() - .with_metadata_field(SupportedField::Id(*template_ref.id())) - .with_metadata_field(SupportedField::Ver(*template_ref.ver())) + .with_metadata_field(SupportedField::Id(UuidV7::new())) + .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(allowed_type)) .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .build(); provider.add_document(None, &doc).unwrap(); + let template_ref = DocumentRef::try_from(&doc).unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -231,19 +203,15 @@ use crate::{ )] #[test_case( |allowed_type, provider| { - let template_ref = DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - ); let doc = Builder::new() - .with_metadata_field(SupportedField::Id(*template_ref.id())) - .with_metadata_field(SupportedField::Ver(*template_ref.ver())) + .with_metadata_field(SupportedField::Id(UuidV7::new())) + .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(allowed_type)) .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(vec![1,2 ,3]) .build(); provider.add_document(None, &doc).unwrap(); + let template_ref = DocumentRef::try_from(&doc).unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -262,7 +230,7 @@ use crate::{ let template_ref = DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), ); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); @@ -305,19 +273,15 @@ async fn template_specified_test( #[test_case( |allowed_type, provider| { let json_schema = serde_json::to_vec(&serde_json::json!({})).unwrap(); - let template_ref = DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - ); let doc = Builder::new() - .with_metadata_field(SupportedField::Id(*template_ref.id())) - .with_metadata_field(SupportedField::Ver(*template_ref.ver())) + .with_metadata_field(SupportedField::Id(UuidV7::new())) + .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(allowed_type)) .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(json_schema) .build(); provider.add_document(None, &doc).unwrap(); + let template_ref = DocumentRef::try_from(&doc).unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() From 46cd58082b9ffb2fdf47cb3dfd684b3f3c15591a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Rosales?= Date: Thu, 13 Nov 2025 11:54:44 -0600 Subject: [PATCH 5/9] fix(rust/signed-doc): fix integration tests --- rust/signed_doc/tests/brand_parameters.rs | 24 ++-- rust/signed_doc/tests/campaign_parameters.rs | 58 ++++---- .../campaign_parameters_form_template.rs | 24 ++-- rust/signed_doc/tests/category_parameters.rs | 58 ++++---- .../category_parameters_form_template.rs | 24 ++-- .../tests/common/brand_parameters.rs | 8 +- .../tests/common/campaign_parameters.rs | 14 +- .../campaign_parameters_form_template.rs | 8 +- .../tests/common/category_parameters.rs | 14 +- .../category_parameters_form_template.rs | 8 +- rust/signed_doc/tests/common/mod.rs | 20 +++ rust/signed_doc/tests/common/proposal.rs | 14 +- .../tests/common/proposal_comment.rs | 20 ++- .../common/proposal_comment_form_template.rs | 8 +- .../tests/common/proposal_form_template.rs | 8 +- .../common/proposal_submission_action.rs | 14 +- rust/signed_doc/tests/decoding.rs | 22 ++- rust/signed_doc/tests/proposal.rs | 58 ++++---- rust/signed_doc/tests/proposal_comment.rs | 128 +++++++----------- .../tests/proposal_comment_form_template.rs | 24 ++-- .../tests/proposal_form_template.rs | 24 ++-- .../tests/proposal_submission_action.rs | 86 ++++++------ 22 files changed, 309 insertions(+), 357 deletions(-) diff --git a/rust/signed_doc/tests/brand_parameters.rs b/rust/signed_doc/tests/brand_parameters.rs index f4efbf4040..a99736d02c 100644 --- a/rust/signed_doc/tests/brand_parameters.rs +++ b/rust/signed_doc/tests/brand_parameters.rs @@ -27,6 +27,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -34,10 +37,7 @@ mod common; "id": id, "ver": id, "type": doc_types::BRAND_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, + "template": [template_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -53,6 +53,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -60,10 +63,7 @@ mod common; "id": id, "ver": id, "type": doc_types::BRAND_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, + "template": [template_ref], }))? .empty_content()? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -79,6 +79,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -86,10 +89,7 @@ mod common; "id": id, "ver": id, "type": doc_types::BRAND_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, + "template": [template_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/campaign_parameters.rs b/rust/signed_doc/tests/campaign_parameters.rs index 265d3af7a7..2984e3d38b 100644 --- a/rust/signed_doc/tests/campaign_parameters.rs +++ b/rust/signed_doc/tests/campaign_parameters.rs @@ -32,6 +32,10 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -39,14 +43,8 @@ mod common; "id": id, "ver": id, "type": doc_types::CAMPAIGN_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "template": [template_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -64,6 +62,10 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -71,14 +73,8 @@ mod common; "id": id, "ver": id, "type": doc_types::CAMPAIGN_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "template": [template_ref], + "parameters": [parameters_ref] }))? .empty_content()? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -96,20 +92,18 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, "id": id, "ver": id, "type": doc_types::CAMPAIGN_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "template": [template_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -126,6 +120,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -133,10 +130,7 @@ mod common; "id": id, "ver": id, "type": doc_types::CAMPAIGN_PARAMETERS.clone(), - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -154,6 +148,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -161,10 +158,7 @@ mod common; "id": id, "ver": id, "type": doc_types::CAMPAIGN_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, + "template": [template_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/campaign_parameters_form_template.rs b/rust/signed_doc/tests/campaign_parameters_form_template.rs index 7b3ae4897f..f56fc99f48 100644 --- a/rust/signed_doc/tests/campaign_parameters_form_template.rs +++ b/rust/signed_doc/tests/campaign_parameters_form_template.rs @@ -30,6 +30,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson, @@ -37,10 +40,7 @@ mod common; "id": id, "ver": id, "type": doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone(), - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -57,6 +57,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson, @@ -64,10 +67,7 @@ mod common; "id": id, "ver": id, "type": doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone(), - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "parameters": [parameters_ref] }))? .empty_content()? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -84,16 +84,16 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson, "id": id, "ver": id, "type": doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone(), - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/category_parameters.rs b/rust/signed_doc/tests/category_parameters.rs index 0c3a8bc26b..8494016bff 100644 --- a/rust/signed_doc/tests/category_parameters.rs +++ b/rust/signed_doc/tests/category_parameters.rs @@ -37,6 +37,10 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -44,14 +48,8 @@ mod common; "id": id, "ver": id, "type": doc_types::CATEGORY_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "template": [template_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -71,6 +69,10 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -78,14 +80,8 @@ mod common; "id": id, "ver": id, "type": doc_types::CATEGORY_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "template": [template_ref], + "parameters": [parameters_ref] }))? .empty_content()? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -105,20 +101,18 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, "id": id, "ver": id, "type": doc_types::CATEGORY_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "template": [template_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -137,6 +131,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -144,10 +141,7 @@ mod common; "id": id, "ver": id, "type": doc_types::CATEGORY_PARAMETERS.clone(), - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -167,6 +161,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -174,10 +171,7 @@ mod common; "id": id, "ver": id, "type": doc_types::CATEGORY_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, + "template": [template_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/category_parameters_form_template.rs b/rust/signed_doc/tests/category_parameters_form_template.rs index a2f64d50c9..a0410bfe25 100644 --- a/rust/signed_doc/tests/category_parameters_form_template.rs +++ b/rust/signed_doc/tests/category_parameters_form_template.rs @@ -35,6 +35,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson, @@ -42,10 +45,7 @@ mod common; "id": id, "ver": id, "type": doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone(), - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -64,6 +64,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson, @@ -71,10 +74,7 @@ mod common; "id": id, "ver": id, "type": doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone(), - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "parameters": [parameters_ref] }))? .empty_content()? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -93,16 +93,16 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson, "id": id, "ver": id, "type": doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone(), - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/common/brand_parameters.rs b/rust/signed_doc/tests/common/brand_parameters.rs index ed33a1353a..3b817fcc50 100644 --- a/rust/signed_doc/tests/common/brand_parameters.rs +++ b/rust/signed_doc/tests/common/brand_parameters.rs @@ -10,6 +10,9 @@ pub fn brand_parameters_doc( let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(template)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -17,10 +20,7 @@ pub fn brand_parameters_doc( "id": id, "ver": id, "type": doc_types::BRAND_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, + "template": [template_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/common/campaign_parameters.rs b/rust/signed_doc/tests/common/campaign_parameters.rs index 9233fbaef8..691ad6544d 100644 --- a/rust/signed_doc/tests/common/campaign_parameters.rs +++ b/rust/signed_doc/tests/common/campaign_parameters.rs @@ -11,6 +11,10 @@ pub fn campaign_parameters_doc( let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(template)?; + let parameters_ref = DocumentRef::try_from(parameters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -18,14 +22,8 @@ pub fn campaign_parameters_doc( "id": id, "ver": id, "type": doc_types::CAMPAIGN_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "template": [template_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/common/campaign_parameters_form_template.rs b/rust/signed_doc/tests/common/campaign_parameters_form_template.rs index 691931750b..c84018f08f 100644 --- a/rust/signed_doc/tests/common/campaign_parameters_form_template.rs +++ b/rust/signed_doc/tests/common/campaign_parameters_form_template.rs @@ -10,6 +10,9 @@ pub fn campaign_parameters_form_template_doc( let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(parameters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson, @@ -17,10 +20,7 @@ pub fn campaign_parameters_form_template_doc( "id": id, "ver": id, "type": doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone(), - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/common/category_parameters.rs b/rust/signed_doc/tests/common/category_parameters.rs index 202282561a..199c660fea 100644 --- a/rust/signed_doc/tests/common/category_parameters.rs +++ b/rust/signed_doc/tests/common/category_parameters.rs @@ -11,6 +11,10 @@ pub fn category_parameters_doc( let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(template)?; + let parameters_ref = DocumentRef::try_from(parameters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -18,14 +22,8 @@ pub fn category_parameters_doc( "id": id, "ver": id, "type": doc_types::CATEGORY_PARAMETERS.clone(), - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "template": [template_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/common/category_parameters_form_template.rs b/rust/signed_doc/tests/common/category_parameters_form_template.rs index cb19eb4dea..8e6012d44a 100644 --- a/rust/signed_doc/tests/common/category_parameters_form_template.rs +++ b/rust/signed_doc/tests/common/category_parameters_form_template.rs @@ -10,6 +10,9 @@ pub fn category_parameters_form_template_doc( let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(parameters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson, @@ -17,10 +20,7 @@ pub fn category_parameters_form_template_doc( "id": id, "ver": id, "type": doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone(), - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/common/mod.rs b/rust/signed_doc/tests/common/mod.rs index 8013817fd8..55d5fffa49 100644 --- a/rust/signed_doc/tests/common/mod.rs +++ b/rust/signed_doc/tests/common/mod.rs @@ -20,6 +20,7 @@ pub use campaign_parameters::campaign_parameters_doc; pub use campaign_parameters_form_template::campaign_parameters_form_template_doc; use catalyst_signed_doc::{providers::tests::TestCatalystProvider, *}; use catalyst_types::catalyst_id::role_index::RoleId; +use catalyst_types::uuid::{UuidV4, UuidV7}; pub use category_parameters::category_parameters_doc; pub use category_parameters_form_template::category_parameters_form_template_doc; pub use proposal::proposal_doc; @@ -60,3 +61,22 @@ pub fn create_signing_key() -> ed25519_dalek::SigningKey { let mut csprng = rand::rngs::OsRng; ed25519_dalek::SigningKey::generate(&mut csprng) } + +#[allow(clippy::expect_used)] +pub fn create_dummy_doc_locator() -> DocLocator { + let test_doc = Builder::new() + .with_json_metadata(serde_json::json!({ + "id": UuidV7::new().to_string(), + "ver": UuidV7::new().to_string(), + "type": UuidV4::new().to_string(), + "content-type": ContentType::Json, + })) + .expect("Should create metadata") + .with_json_content(&serde_json::json!({"test": "content"})) + .expect("Should set content") + .build() + .expect("Should build document"); + + let cid = test_doc.to_cid_v1().expect("Should generate CID"); + DocLocator::from(cid) +} diff --git a/rust/signed_doc/tests/common/proposal.rs b/rust/signed_doc/tests/common/proposal.rs index 73bff88d57..ca4793e5d5 100644 --- a/rust/signed_doc/tests/common/proposal.rs +++ b/rust/signed_doc/tests/common/proposal.rs @@ -13,6 +13,10 @@ pub fn proposal_doc( let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(template_doc)?; + let parameters_ref = DocumentRef::try_from(parameters_doc)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -20,14 +24,8 @@ pub fn proposal_doc( "type": doc_types::PROPOSAL.clone(), "id": id, "ver": id, - "template": { - "id": template_doc.doc_id()?, - "ver": template_doc.doc_ver()?, - }, - "parameters": { - "id": parameters_doc.doc_id()?, - "ver": parameters_doc.doc_ver()?, - } + "template": [template_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/common/proposal_comment.rs b/rust/signed_doc/tests/common/proposal_comment.rs index ec99c6aba8..c429f9358f 100644 --- a/rust/signed_doc/tests/common/proposal_comment.rs +++ b/rust/signed_doc/tests/common/proposal_comment.rs @@ -13,6 +13,11 @@ pub fn proposal_comment_doc( let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let ref_doc_ref = DocumentRef::try_from(ref_doc)?; + let template_doc_ref = DocumentRef::try_from(template_doc)?; + let parameters_doc_ref = DocumentRef::try_from(parameters_doc)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -20,18 +25,9 @@ pub fn proposal_comment_doc( "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, - "ref": { - "id": ref_doc.doc_id()?, - "ver": ref_doc.doc_ver()?, - }, - "template": { - "id": template_doc.doc_id()?, - "ver": template_doc.doc_ver()?, - }, - "parameters": { - "id": parameters_doc.doc_id()?, - "ver": parameters_doc.doc_ver()?, - } + "ref": [ref_doc_ref], + "template": [template_doc_ref], + "parameters": [parameters_doc_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/common/proposal_comment_form_template.rs b/rust/signed_doc/tests/common/proposal_comment_form_template.rs index 01636e79ec..5b3cb596ee 100644 --- a/rust/signed_doc/tests/common/proposal_comment_form_template.rs +++ b/rust/signed_doc/tests/common/proposal_comment_form_template.rs @@ -10,6 +10,9 @@ pub fn proposal_comment_form_template_doc( let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(parameters_doc)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson, @@ -17,10 +20,7 @@ pub fn proposal_comment_form_template_doc( "type": doc_types::PROPOSAL_COMMENT_FORM_TEMPLATE.clone(), "id": id, "ver": id, - "parameters": { - "id": parameters_doc.doc_id()?, - "ver": parameters_doc.doc_ver()?, - } + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/common/proposal_form_template.rs b/rust/signed_doc/tests/common/proposal_form_template.rs index db460c0cc9..146cd623e5 100644 --- a/rust/signed_doc/tests/common/proposal_form_template.rs +++ b/rust/signed_doc/tests/common/proposal_form_template.rs @@ -10,6 +10,9 @@ pub fn proposal_form_template_doc( let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(parameters_doc)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson, @@ -17,10 +20,7 @@ pub fn proposal_form_template_doc( "type": doc_types::PROPOSAL_FORM_TEMPLATE.clone(), "id": id, "ver": id, - "parameters": { - "id": parameters_doc.doc_id()?, - "ver": parameters_doc.doc_ver()?, - }, + "parameters": [parameters_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/common/proposal_submission_action.rs b/rust/signed_doc/tests/common/proposal_submission_action.rs index adb2c3dd27..f6c0e09d22 100644 --- a/rust/signed_doc/tests/common/proposal_submission_action.rs +++ b/rust/signed_doc/tests/common/proposal_submission_action.rs @@ -12,6 +12,10 @@ pub fn proposal_submission_action_doc( let (sk, kid) = get_doc_kid_and_sk(provider, ref_doc, 0) .map(|(sk, kid)| (sk, kid.with_role(RoleId::Proposer))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; + + let ref_doc_ref = DocumentRef::try_from(ref_doc)?; + let parameters_doc_ref = DocumentRef::try_from(parameters_doc)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -19,14 +23,8 @@ pub fn proposal_submission_action_doc( "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, - "ref": { - "id": ref_doc.doc_id()?, - "ver": ref_doc.doc_ver()?, - }, - "parameters": { - "id": parameters_doc.doc_id()?, - "ver": parameters_doc.doc_ver()?, - } + "ref": [ref_doc_ref], + "parameters": [parameters_doc_ref] }))? .with_json_content(&serde_json::json!({ "action": "final" diff --git a/rust/signed_doc/tests/decoding.rs b/rust/signed_doc/tests/decoding.rs index bf059c18a9..03062609f5 100644 --- a/rust/signed_doc/tests/decoding.rs +++ b/rust/signed_doc/tests/decoding.rs @@ -2,7 +2,7 @@ use catalyst_signed_doc::{decode_context::CompatibilityPolicy, *}; use catalyst_types::catalyst_id::role_index::RoleId; -use common::create_dummy_key_pair; +use common::{create_dummy_key_pair, create_dummy_doc_locator}; use minicbor::{Decode, Encoder, data::Tag}; use rand::Rng; @@ -25,7 +25,7 @@ struct TestCase { fn signed_doc_deprecated_doc_ref_case(field_name: &'static str) -> TestCase { let uuid_v7 = UuidV7::new(); let doc_type = DocType::from(UuidV4::new()); - let doc_ref = DocumentRef::new(UuidV7::new(), UuidV7::new(), DocLocator::default()); + let doc_ref = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); TestCase { name: format!( "Catalyst Signed Doc with deprecated {field_name} version before v0.04 validating." @@ -74,13 +74,8 @@ fn signed_doc_deprecated_doc_ref_case(field_name: &'static str) -> TestCase { }), policy: CompatibilityPolicy::Accept, can_decode: true, - valid_doc: true, - post_checks: Some(Box::new({ - move |doc| { - anyhow::ensure!(doc.is_deprecated()?); - Ok(()) - } - })), + valid_doc: false, + post_checks: None, } } @@ -90,7 +85,7 @@ fn signed_doc_with_valid_alias_case(alias: &'static str) -> TestCase { let doc_ref = DocumentRefs::from(vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )]); let doc_ref_cloned = doc_ref.clone(); TestCase { @@ -146,11 +141,11 @@ fn signed_doc_with_valid_alias_case(alias: &'static str) -> TestCase { fn signed_doc_with_missing_header_field_case(field: &'static str) -> TestCase { let uuid_v7 = UuidV7::new(); let doc_type = DocType::from(UuidV4::new()); - let doc_ref = DocumentRef::new(UuidV7::new(), UuidV7::new(), DocLocator::default()); TestCase { name: format!("Catalyst Signed Doc with missing '{field}' header."), bytes_gen: Box::new({ move || { + let doc_ref = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); let mut e = Encoder::new(Vec::new()); e.tag(Tag::new(98))?; e.array(4)?; @@ -303,11 +298,11 @@ fn signed_doc_with_random_header_field_case(field: &'static str) -> TestCase { fn signed_doc_with_parameters_and_aliases_case(aliases: &'static [&'static str]) -> TestCase { let uuid_v7 = UuidV7::new(); let doc_type = DocType::from(UuidV4::new()); - let doc_ref = DocumentRef::new(UuidV7::new(), UuidV7::new(), DocLocator::default()); TestCase { name: format!("Multiple definitions of '{}' at once.", aliases.join(", ")), bytes_gen: Box::new({ move || { + let doc_ref = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); let mut e = Encoder::new(Vec::new()); e.tag(Tag::new(98))?; e.array(4)?; @@ -598,13 +593,14 @@ fn signed_doc_with_complete_metadata_fields_case() -> TestCase { let doc_ref = DocumentRefs::from(vec![DocumentRef::new( UuidV7::new(), UuidV7::new(), - DocLocator::default(), + create_dummy_doc_locator(), )]); let doc_ref_cloned = doc_ref.clone(); TestCase { name: "Catalyst Signed Doc with all metadata fields defined, signed (one signature), CBOR tagged.".to_string(), bytes_gen: Box::new({ let doc_type = doc_type.clone(); + let doc_ref = doc_ref.clone(); move || { let (_, kid) = create_dummy_key_pair(Some(RoleId::Role0)); diff --git a/rust/signed_doc/tests/proposal.rs b/rust/signed_doc/tests/proposal.rs index afaac7a411..742c2609f8 100644 --- a/rust/signed_doc/tests/proposal.rs +++ b/rust/signed_doc/tests/proposal.rs @@ -63,6 +63,10 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -70,14 +74,8 @@ mod common; "type": doc_types::PROPOSAL.clone(), "id": id, "ver": id, - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "template": [template_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -95,6 +93,10 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -102,14 +104,8 @@ mod common; "type": doc_types::PROPOSAL.clone(), "id": id, "ver": id, - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "template": [template_ref], + "parameters": [parameters_ref] }))? .empty_content()? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -127,20 +123,18 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, "type": doc_types::PROPOSAL.clone(), "id": id, "ver": id, - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "template": [template_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -157,6 +151,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -164,10 +161,7 @@ mod common; "type": doc_types::PROPOSAL.clone(), "id": id, "ver": id, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -185,6 +179,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -192,10 +189,7 @@ mod common; "type": doc_types::PROPOSAL.clone(), "id": id, "ver": id, - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, + "template": [template_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/proposal_comment.rs b/rust/signed_doc/tests/proposal_comment.rs index 72286de39c..c7803258ea 100644 --- a/rust/signed_doc/tests/proposal_comment.rs +++ b/rust/signed_doc/tests/proposal_comment.rs @@ -72,6 +72,12 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let proposal_ref = DocumentRef::try_from(&proposal)?; + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + let comment_ref = DocumentRef::try_from(&comment)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -79,22 +85,10 @@ mod common; "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, - "ref": { - "id": proposal.doc_id()?, - "ver": proposal.doc_ver()?, - }, - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - }, - "reply": { - "id": comment.doc_id()?, - "ver": comment.doc_ver()? - }, + "ref": [proposal_ref], + "template": [template_ref], + "parameters": [parameters_ref], + "reply": [comment_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -114,6 +108,11 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); + + let proposal_ref = DocumentRef::try_from(&proposal)?; + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -121,18 +120,9 @@ mod common; "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, - "ref": { - "id": proposal.doc_id()?, - "ver": proposal.doc_ver()?, - }, - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - }, + "ref": [proposal_ref], + "template": [template_ref], + "parameters": [parameters_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -152,6 +142,11 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let proposal_ref = DocumentRef::try_from(&proposal)?; + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + let doc = Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -159,18 +154,9 @@ mod common; "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, - "ref": { - "id": proposal.doc_id()?, - "ver": proposal.doc_ver()?, - }, - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "ref": [proposal_ref], + "template": [template_ref], + "parameters": [parameters_ref] }))? .empty_content()? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -191,24 +177,20 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let proposal_ref = DocumentRef::try_from(&proposal)?; + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + let doc = Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, - "ref": { - "id": proposal.doc_id()?, - "ver": proposal.doc_ver()?, - }, - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "ref": [proposal_ref], + "template": [template_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -228,6 +210,10 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let proposal_ref = DocumentRef::try_from(&proposal)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + let doc = Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -235,14 +221,8 @@ mod common; "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, - "ref": { - "id": proposal.doc_id()?, - "ver": proposal.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "ref": [proposal_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -263,6 +243,10 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let proposal_ref = DocumentRef::try_from(&proposal)?; + let template_ref = DocumentRef::try_from(&template)?; + let doc = Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -270,14 +254,8 @@ mod common; "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, - "ref": { - "id": proposal.doc_id()?, - "ver": proposal.doc_ver()?, - }, - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, + "ref": [proposal_ref], + "template": [template_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -296,6 +274,10 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let template_ref = DocumentRef::try_from(&template)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + let doc = Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -303,14 +285,8 @@ mod common; "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, - "template": { - "id": template.doc_id()?, - "ver": template.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "template": [template_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/proposal_comment_form_template.rs b/rust/signed_doc/tests/proposal_comment_form_template.rs index aa9a601234..6ac446b2ab 100644 --- a/rust/signed_doc/tests/proposal_comment_form_template.rs +++ b/rust/signed_doc/tests/proposal_comment_form_template.rs @@ -58,6 +58,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson, @@ -65,10 +68,7 @@ mod common; "type": doc_types::PROPOSAL_COMMENT_FORM_TEMPLATE.clone(), "id": id, "ver": id, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - }, + "parameters": [parameters_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -85,6 +85,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson, @@ -92,10 +95,7 @@ mod common; "type": doc_types::PROPOSAL_COMMENT_FORM_TEMPLATE.clone(), "id": id, "ver": id, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - }, + "parameters": [parameters_ref], }))? .empty_content()? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -112,16 +112,16 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson, "type": doc_types::PROPOSAL_COMMENT_FORM_TEMPLATE.clone(), "id": id, "ver": id, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - }, + "parameters": [parameters_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/proposal_form_template.rs b/rust/signed_doc/tests/proposal_form_template.rs index f6fec05f5e..a58b8ea3a8 100644 --- a/rust/signed_doc/tests/proposal_form_template.rs +++ b/rust/signed_doc/tests/proposal_form_template.rs @@ -57,6 +57,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson.to_string(), @@ -64,10 +67,7 @@ mod common; "type": doc_types::PROPOSAL_FORM_TEMPLATE.clone(), "id": id, "ver": id, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - }, + "parameters": [parameters_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -84,6 +84,9 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson.to_string(), @@ -91,10 +94,7 @@ mod common; "type": doc_types::PROPOSAL_FORM_TEMPLATE.clone(), "id": id, "ver": id, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - }, + "parameters": [parameters_ref], }))? .empty_content()? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -111,16 +111,16 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::SchemaJson.to_string(), "type": doc_types::PROPOSAL_FORM_TEMPLATE.clone(), "id": id, "ver": id, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - }, + "parameters": [parameters_ref], }))? .with_json_content(&serde_json::json!({}))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? diff --git a/rust/signed_doc/tests/proposal_submission_action.rs b/rust/signed_doc/tests/proposal_submission_action.rs index 5c199460df..efa02f1304 100644 --- a/rust/signed_doc/tests/proposal_submission_action.rs +++ b/rust/signed_doc/tests/proposal_submission_action.rs @@ -68,6 +68,10 @@ mod common; let (sk, kid) = get_doc_kid_and_sk(provider, &proposal, 0) .map(|(sk, kid)| (sk, kid.with_role(RoleId::Role0))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; + + let proposal_ref = DocumentRef::try_from(&proposal)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -75,14 +79,8 @@ mod common; "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, - "ref": { - "id": proposal.doc_id()?, - "ver": proposal.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "ref": [proposal_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({ "action": "final" @@ -103,6 +101,10 @@ mod common; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); + + let proposal_ref = DocumentRef::try_from(&proposal)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -110,14 +112,8 @@ mod common; "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, - "ref": { - "id": proposal.doc_id()?, - "ver": proposal.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "ref": [proposal_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({ "action": "final" @@ -139,6 +135,10 @@ mod common; let (sk, kid) = get_doc_kid_and_sk(provider, &proposal, 0) .map(|(sk, kid)| (sk, kid.with_role(RoleId::Proposer))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; + + let proposal_ref = DocumentRef::try_from(&proposal)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -146,14 +146,8 @@ mod common; "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, - "ref": { - "id": proposal.doc_id()?, - "ver": proposal.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "ref": [proposal_ref], + "parameters": [parameters_ref] }))? .empty_content()? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -173,6 +167,10 @@ mod common; let (sk, kid) = get_doc_kid_and_sk(provider, &proposal, 0) .map(|(sk, kid)| (sk, kid.with_role(RoleId::Proposer))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; + + let proposal_ref = DocumentRef::try_from(&proposal)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -180,14 +178,8 @@ mod common; "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, - "ref": { - "id": proposal.doc_id()?, - "ver": proposal.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "ref": [proposal_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!("null"))? .add_signature(|m| sk.sign(&m).to_vec(), kid)? @@ -207,20 +199,18 @@ mod common; let (sk, kid) = get_doc_kid_and_sk(provider, &proposal, 0) .map(|(sk, kid)| (sk, kid.with_role(RoleId::Proposer))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; + + let proposal_ref = DocumentRef::try_from(&proposal)?; + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, - "ref": { - "id": proposal.doc_id()?, - "ver": proposal.doc_ver()?, - }, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "ref": [proposal_ref], + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({ "action": "final" @@ -242,6 +232,9 @@ mod common; let (sk, kid) = get_doc_kid_and_sk(provider, &proposal, 0) .map(|(sk, kid)| (sk, kid.with_role(RoleId::Proposer))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; + + let parameters_ref = DocumentRef::try_from(¶meters)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json.to_string(), @@ -249,10 +242,7 @@ mod common; "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, - "parameters": { - "id": parameters.doc_id()?, - "ver": parameters.doc_ver()?, - } + "parameters": [parameters_ref] }))? .with_json_content(&serde_json::json!({ "action": "final" @@ -274,6 +264,9 @@ mod common; let (sk, kid) = get_doc_kid_and_sk(provider, &proposal, 0) .map(|(sk, kid)| (sk, kid.with_role(RoleId::Proposer))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; + + let proposal_ref = DocumentRef::try_from(&proposal)?; + Builder::new() .with_json_metadata(serde_json::json!({ "content-type": ContentType::Json, @@ -281,10 +274,7 @@ mod common; "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, - "ref": { - "id": proposal.doc_id()?, - "ver": proposal.doc_ver()?, - }, + "ref": [proposal_ref], }))? .with_json_content(&serde_json::json!({ "action": "final" From e15670f51abea5babde37a71eb50a87d60278ae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Rosales?= Date: Thu, 13 Nov 2025 12:00:52 -0600 Subject: [PATCH 6/9] chore(rust/signed-doc): fmt fix --- rust/signed_doc/src/cid_v1.rs | 65 +++++++++++-------- rust/signed_doc/src/lib.rs | 3 +- .../src/metadata/document_refs/doc_locator.rs | 27 ++++---- .../src/metadata/document_refs/mod.rs | 6 +- .../src/validator/rules/doc_ref/tests.rs | 12 +++- .../rules/ownership/tests/ref_field_based.rs | 3 +- .../src/validator/rules/parameters/tests.rs | 12 +++- .../src/validator/rules/reply/tests.rs | 12 +++- .../src/validator/rules/signature/tests.rs | 8 ++- .../src/validator/rules/template/tests.rs | 5 +- rust/signed_doc/tests/common/mod.rs | 6 +- rust/signed_doc/tests/decoding.rs | 8 ++- 12 files changed, 105 insertions(+), 62 deletions(-) diff --git a/rust/signed_doc/src/cid_v1.rs b/rust/signed_doc/src/cid_v1.rs index f0e63ae6f3..3d5e02d4ef 100644 --- a/rust/signed_doc/src/cid_v1.rs +++ b/rust/signed_doc/src/cid_v1.rs @@ -32,13 +32,9 @@ //! # Ok::<(), anyhow::Error>(()) //! ``` -use std::fmt; -use std::ops::Deref; -use std::str::FromStr; +use std::{fmt, ops::Deref, str::FromStr}; -use minicbor::data::Tag; -use minicbor::decode::Error as DecodeError; -use minicbor::{Decoder, Encoder}; +use minicbor::{Decoder, Encoder, data::Tag, decode::Error as DecodeError}; use sha2::{Digest, Sha256}; use thiserror::Error; @@ -78,7 +74,8 @@ pub enum CidError { /// A newtype wrapper around `cid::Cid` for type-safe CID v1 handling. /// /// This type provides conversion methods and trait implementations for working with -/// CID v1 identifiers, especially in the context of CBOR-encoded Catalyst Signed Documents. +/// CID v1 identifiers, especially in the context of CBOR-encoded Catalyst Signed +/// Documents. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct Cid(cid::Cid); @@ -129,13 +126,19 @@ impl FromStr for Cid { } impl fmt::Display for Cid { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fn fmt( + &self, + f: &mut fmt::Formatter<'_>, + ) -> fmt::Result { write!(f, "{}", self.0) } } impl serde::Serialize for Cid { - fn serialize(&self, serializer: S) -> Result + fn serialize( + &self, + serializer: S, + ) -> Result where S: serde::Serializer, { @@ -145,9 +148,7 @@ impl serde::Serialize for Cid { impl<'de> serde::Deserialize<'de> for Cid { fn deserialize(deserializer: D) -> Result - where - D: serde::Deserializer<'de>, - { + where D: serde::Deserializer<'de> { let s = String::deserialize(deserializer)?; FromStr::from_str(&s).map_err(serde::de::Error::custom) } @@ -167,8 +168,14 @@ impl minicbor::Encode<()> for Cid { } impl<'de> minicbor::Decode<'de, ()> for Cid { - fn decode(d: &mut Decoder<'de>, _ctx: &mut ()) -> Result { - let tag = d.tag().map_err(|e| DecodeError::message(e.to_string()))?.as_u64(); + fn decode( + d: &mut Decoder<'de>, + _ctx: &mut (), + ) -> Result { + let tag = d + .tag() + .map_err(|e| DecodeError::message(e.to_string()))? + .as_u64(); if tag != CID_CBOR_TAG { return Err(DecodeError::message(format!( "Expected IPLD CID tag ({CID_CBOR_TAG}), got {tag}", @@ -259,8 +266,8 @@ mod tests { let cid_bytes = Vec::::from(cid); // Convert back from bytes - let cid_from_bytes = Cid::try_from(cid_bytes.as_slice()) - .expect("Should parse CID from bytes"); + let cid_from_bytes = + Cid::try_from(cid_bytes.as_slice()).expect("Should parse CID from bytes"); assert_eq!(cid, cid_from_bytes); } @@ -274,8 +281,7 @@ mod tests { let cid_string = cid.to_string(); // Parse the string back to a CID - let cid_from_str = Cid::from_str(&cid_string) - .expect("CID string should be parseable"); + let cid_from_str = Cid::from_str(&cid_string).expect("CID string should be parseable"); assert_eq!(cid, cid_from_str); } @@ -289,8 +295,10 @@ mod tests { let cid_string = cid.to_string(); // Should be multibase encoded (starts with 'b' for base32) - assert!(cid_string.starts_with('b'), - "CID v1 base32 string should start with 'b'"); + assert!( + cid_string.starts_with('b'), + "CID v1 base32 string should start with 'b'" + ); } #[test] @@ -407,10 +415,10 @@ mod tests { .build() .expect("Should build document"); - let cid1 = to_cid_v1(&doc1.to_bytes().expect("Should serialize")) - .expect("CID 1 should be valid"); - let cid2 = to_cid_v1(&doc2.to_bytes().expect("Should serialize")) - .expect("CID 2 should be valid"); + let cid1 = + to_cid_v1(&doc1.to_bytes().expect("Should serialize")).expect("CID 1 should be valid"); + let cid2 = + to_cid_v1(&doc2.to_bytes().expect("Should serialize")).expect("CID 2 should be valid"); assert_ne!( cid1, cid2, @@ -434,7 +442,10 @@ mod tests { // Base32 encoding uses lowercase letters and digits 2-7 assert!( - cid_string.chars().skip(1).all(|c| c.is_ascii_lowercase() || ('2'..='7').contains(&c)), + cid_string + .chars() + .skip(1) + .all(|c| c.is_ascii_lowercase() || ('2'..='7').contains(&c)), "CID v1 base32 string should only contain lowercase letters and digits 2-7" ); @@ -458,8 +469,8 @@ mod tests { let cid_bytes = Vec::::from(cid); // Parse bytes back to CID - let cid_from_bytes = Cid::try_from(cid_bytes.as_slice()) - .expect("Should parse CID from bytes"); + let cid_from_bytes = + Cid::try_from(cid_bytes.as_slice()).expect("Should parse CID from bytes"); // Convert back to string let final_string = cid_from_bytes.to_string(); diff --git a/rust/signed_doc/src/lib.rs b/rust/signed_doc/src/lib.rs index fad717e2ea..831511edef 100644 --- a/rust/signed_doc/src/lib.rs +++ b/rust/signed_doc/src/lib.rs @@ -265,7 +265,8 @@ impl CatalystSignedDocument { /// - CBOR serialization failure /// - Multihash construction failure pub fn to_cid_v1(&self) -> Result { - let cbor_bytes = self.to_bytes() + let cbor_bytes = self + .to_bytes() .map_err(|e| cid_v1::CidError::Encoding(e.to_string()))?; cid_v1::to_cid_v1(&cbor_bytes) } diff --git a/rust/signed_doc/src/metadata/document_refs/doc_locator.rs b/rust/signed_doc/src/metadata/document_refs/doc_locator.rs index 6447d41fd5..bed671fa64 100644 --- a/rust/signed_doc/src/metadata/document_refs/doc_locator.rs +++ b/rust/signed_doc/src/metadata/document_refs/doc_locator.rs @@ -7,8 +7,10 @@ use std::{fmt::Display, ops::Deref, str::FromStr}; use cbork_utils::{decode_context::DecodeCtx, map::Map}; use minicbor::{Decode, Decoder, Encode}; -use crate::cid_v1::{Cid, CidError}; -use crate::metadata::document_refs::DocRefError; +use crate::{ + cid_v1::{Cid, CidError}, + metadata::document_refs::DocRefError, +}; /// CID map key. const CID_MAP_KEY: &str = "cid"; @@ -56,8 +58,7 @@ impl FromStr for DocLocator { type Err = DocRefError; fn from_str(s: &str) -> Result { - let cid = Cid::from_str(s) - .map_err(|e| DocRefError::StringConversion(e.to_string()))?; + let cid = Cid::from_str(s).map_err(|e| DocRefError::StringConversion(e.to_string()))?; Ok(Self(cid)) } } @@ -107,11 +108,10 @@ impl Decode<'_, ()> for DocLocator { let mut value_decoder = minicbor::Decoder::new(&entry.value); // Decode the Cid, which validates tag(42) and CID format - let cid = Cid::decode(&mut value_decoder, &mut ()) - .map_err(|e| { - let msg = format!("{CONTEXT}: {e}"); - e.with_message(msg) - })?; + let cid = Cid::decode(&mut value_decoder, &mut ()).map_err(|e| { + let msg = format!("{CONTEXT}: {e}"); + e.with_message(msg) + })?; Ok(DocLocator(cid)) }, @@ -184,14 +184,19 @@ pub(crate) mod tests { fn test_doc_locator_display() { let locator = create_dummy_doc_locator(); let display_str = locator.to_string(); - assert!(display_str.starts_with('b'), "Should use multibase format starting with 'b'"); + assert!( + display_str.starts_with('b'), + "Should use multibase format starting with 'b'" + ); } #[test] fn test_doc_locator_from_str() { let locator = create_dummy_doc_locator(); let display_str = locator.to_string(); - let parsed = display_str.parse::().expect("Should parse multibase string"); + let parsed = display_str + .parse::() + .expect("Should parse multibase string"); assert_eq!(locator, parsed); } diff --git a/rust/signed_doc/src/metadata/document_refs/mod.rs b/rust/signed_doc/src/metadata/document_refs/mod.rs index ef83b1d0c8..429c9361d3 100644 --- a/rust/signed_doc/src/metadata/document_refs/mod.rs +++ b/rust/signed_doc/src/metadata/document_refs/mod.rs @@ -104,7 +104,8 @@ impl Decode<'_, CompatibilityPolicy> for DocumentRefs { Ok(DocumentRefs(doc_refs)) }, - // Old structure (id, ver) - no longer supported as DocLocator requires a valid CID + // Old structure (id, ver) - no longer supported as DocLocator requires a valid + // CID minicbor::data::Type::Tag => { Err(minicbor::decode::Error::message(format!( "{CONTEXT}: Legacy document reference format (id, ver) without CID is no longer supported. \ @@ -198,8 +199,7 @@ mod tests { use minicbor::{Decoder, Encoder}; use test_case::test_case; - use super::*; - use super::doc_locator::tests::create_dummy_doc_locator; + use super::{doc_locator::tests::create_dummy_doc_locator, *}; #[test_case( CompatibilityPolicy::Accept, diff --git a/rust/signed_doc/src/validator/rules/doc_ref/tests.rs b/rust/signed_doc/src/validator/rules/doc_ref/tests.rs index 2633e202ac..ccca5f09e4 100644 --- a/rust/signed_doc/src/validator/rules/doc_ref/tests.rs +++ b/rust/signed_doc/src/validator/rules/doc_ref/tests.rs @@ -3,8 +3,9 @@ use test_case::test_case; use super::*; use crate::{ - DocumentRef, builder::tests::Builder, metadata::SupportedField, - metadata::document_refs::doc_locator::tests::create_dummy_doc_locator, + DocumentRef, + builder::tests::Builder, + metadata::{SupportedField, document_refs::doc_locator::tests::create_dummy_doc_locator}, providers::tests::TestCatalystProvider, }; @@ -328,7 +329,12 @@ async fn ref_rule_not_specified_test() { let ref_ver = UuidV7::new(); let doc = Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new(ref_id, ref_ver, create_dummy_doc_locator())].into(), + vec![DocumentRef::new( + ref_id, + ref_ver, + create_dummy_doc_locator(), + )] + .into(), )) .build(); assert!(!rule.check(&doc, &provider).await.unwrap()); diff --git a/rust/signed_doc/src/validator/rules/ownership/tests/ref_field_based.rs b/rust/signed_doc/src/validator/rules/ownership/tests/ref_field_based.rs index 17f03e3d8a..9f281a1785 100644 --- a/rust/signed_doc/src/validator/rules/ownership/tests/ref_field_based.rs +++ b/rust/signed_doc/src/validator/rules/ownership/tests/ref_field_based.rs @@ -8,8 +8,7 @@ use test_case::test_case; use crate::{ CatalystSignedDocument, DocumentRef, builder::tests::Builder, - metadata::SupportedField, - metadata::document_refs::doc_locator::tests::create_dummy_doc_locator, + metadata::{SupportedField, document_refs::doc_locator::tests::create_dummy_doc_locator}, providers::tests::TestCatalystProvider, validator::rules::{DocumentOwnershipRule, utils::create_dummy_key_pair}, }; diff --git a/rust/signed_doc/src/validator/rules/parameters/tests.rs b/rust/signed_doc/src/validator/rules/parameters/tests.rs index 329a30249d..15111bce3a 100644 --- a/rust/signed_doc/src/validator/rules/parameters/tests.rs +++ b/rust/signed_doc/src/validator/rules/parameters/tests.rs @@ -3,8 +3,9 @@ use test_case::test_case; use super::*; use crate::{ - DocumentRef, builder::tests::Builder, metadata::SupportedField, - metadata::document_refs::doc_locator::tests::create_dummy_doc_locator, + DocumentRef, + builder::tests::Builder, + metadata::{SupportedField, document_refs::doc_locator::tests::create_dummy_doc_locator}, providers::tests::TestCatalystProvider, }; @@ -546,7 +547,12 @@ async fn parameters_rule_not_specified_test() { let ref_ver = UuidV7::new(); let doc = Builder::new() .with_metadata_field(SupportedField::Parameters( - vec![DocumentRef::new(ref_id, ref_ver, create_dummy_doc_locator())].into(), + vec![DocumentRef::new( + ref_id, + ref_ver, + create_dummy_doc_locator(), + )] + .into(), )) .build(); assert!(!rule.check(&doc, &provider).await.unwrap()); diff --git a/rust/signed_doc/src/validator/rules/reply/tests.rs b/rust/signed_doc/src/validator/rules/reply/tests.rs index 61c2ff75a3..c13baaa01a 100644 --- a/rust/signed_doc/src/validator/rules/reply/tests.rs +++ b/rust/signed_doc/src/validator/rules/reply/tests.rs @@ -3,8 +3,9 @@ use test_case::test_case; use super::*; use crate::{ - DocumentRef, DocumentRefs, builder::tests::Builder, metadata::SupportedField, - metadata::document_refs::doc_locator::tests::create_dummy_doc_locator, + DocumentRef, DocumentRefs, + builder::tests::Builder, + metadata::{SupportedField, document_refs::doc_locator::tests::create_dummy_doc_locator}, providers::tests::TestCatalystProvider, }; @@ -268,7 +269,12 @@ async fn reply_rule_not_specified_test() { let ref_ver = UuidV7::new(); let doc = Builder::new() .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new(ref_id, ref_ver, create_dummy_doc_locator())].into(), + vec![DocumentRef::new( + ref_id, + ref_ver, + create_dummy_doc_locator(), + )] + .into(), )) .build(); assert!(!rule.check(&doc, &provider).await.unwrap()); diff --git a/rust/signed_doc/src/validator/rules/signature/tests.rs b/rust/signed_doc/src/validator/rules/signature/tests.rs index 1ac36a5dd5..7dd613af0b 100644 --- a/rust/signed_doc/src/validator/rules/signature/tests.rs +++ b/rust/signed_doc/src/validator/rules/signature/tests.rs @@ -5,7 +5,7 @@ use ed25519_dalek::ed25519::signature::Signer; use super::*; use crate::{ - metadata::document_refs::{doc_locator::tests::create_dummy_doc_locator, DocumentRef}, + metadata::document_refs::{DocumentRef, doc_locator::tests::create_dummy_doc_locator}, providers::tests::*, validator::rules::utils::create_dummy_key_pair, *, @@ -205,7 +205,11 @@ fn parameters_alias_field( // empty unprotected headers e.map(1)?; e.str(alias)?.encode_with( - DocumentRef::new(UuidV7::new(), UuidV7::new(), crate::metadata::document_refs::doc_locator::tests::create_dummy_doc_locator()), + DocumentRef::new( + UuidV7::new(), + UuidV7::new(), + crate::metadata::document_refs::doc_locator::tests::create_dummy_doc_locator(), + ), &mut (), )?; // content (random bytes) diff --git a/rust/signed_doc/src/validator/rules/template/tests.rs b/rust/signed_doc/src/validator/rules/template/tests.rs index 04ea6d894f..ce375052eb 100644 --- a/rust/signed_doc/src/validator/rules/template/tests.rs +++ b/rust/signed_doc/src/validator/rules/template/tests.rs @@ -3,8 +3,9 @@ use test_case::test_case; use super::*; use crate::{ - DocumentRef, builder::tests::Builder, metadata::SupportedField, - metadata::document_refs::doc_locator::tests::create_dummy_doc_locator, + DocumentRef, + builder::tests::Builder, + metadata::{SupportedField, document_refs::doc_locator::tests::create_dummy_doc_locator}, providers::tests::TestCatalystProvider, }; diff --git a/rust/signed_doc/tests/common/mod.rs b/rust/signed_doc/tests/common/mod.rs index 55d5fffa49..5e62e44645 100644 --- a/rust/signed_doc/tests/common/mod.rs +++ b/rust/signed_doc/tests/common/mod.rs @@ -19,8 +19,10 @@ pub use brand_parameters_form_template::brand_parameters_form_template_doc; pub use campaign_parameters::campaign_parameters_doc; pub use campaign_parameters_form_template::campaign_parameters_form_template_doc; use catalyst_signed_doc::{providers::tests::TestCatalystProvider, *}; -use catalyst_types::catalyst_id::role_index::RoleId; -use catalyst_types::uuid::{UuidV4, UuidV7}; +use catalyst_types::{ + catalyst_id::role_index::RoleId, + uuid::{UuidV4, UuidV7}, +}; pub use category_parameters::category_parameters_doc; pub use category_parameters_form_template::category_parameters_form_template_doc; pub use proposal::proposal_doc; diff --git a/rust/signed_doc/tests/decoding.rs b/rust/signed_doc/tests/decoding.rs index 03062609f5..aea22b75fc 100644 --- a/rust/signed_doc/tests/decoding.rs +++ b/rust/signed_doc/tests/decoding.rs @@ -2,7 +2,7 @@ use catalyst_signed_doc::{decode_context::CompatibilityPolicy, *}; use catalyst_types::catalyst_id::role_index::RoleId; -use common::{create_dummy_key_pair, create_dummy_doc_locator}; +use common::{create_dummy_doc_locator, create_dummy_key_pair}; use minicbor::{Decode, Encoder, data::Tag}; use rand::Rng; @@ -145,7 +145,8 @@ fn signed_doc_with_missing_header_field_case(field: &'static str) -> TestCase { name: format!("Catalyst Signed Doc with missing '{field}' header."), bytes_gen: Box::new({ move || { - let doc_ref = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); + let doc_ref = + DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); let mut e = Encoder::new(Vec::new()); e.tag(Tag::new(98))?; e.array(4)?; @@ -302,7 +303,8 @@ fn signed_doc_with_parameters_and_aliases_case(aliases: &'static [&'static str]) name: format!("Multiple definitions of '{}' at once.", aliases.join(", ")), bytes_gen: Box::new({ move || { - let doc_ref = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); + let doc_ref = + DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); let mut e = Encoder::new(Vec::new()); e.tag(Tag::new(98))?; e.array(4)?; From dc8f547ebddc08001ee3743c6c3b5b3c662b047c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Rosales?= Date: Thu, 13 Nov 2025 12:08:23 -0600 Subject: [PATCH 7/9] chore(rust/signed-doc): fix spelling --- .config/dictionaries/project.dic | 2 ++ rust/signed_doc/src/cid_v1.rs | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.config/dictionaries/project.dic b/.config/dictionaries/project.dic index fd85887412..cda2ae3d2e 100644 --- a/.config/dictionaries/project.dic +++ b/.config/dictionaries/project.dic @@ -205,6 +205,7 @@ moka MPMC msvc Multiaddr +multibase multicodec multiera multihash @@ -346,6 +347,7 @@ utimensat UTXO uuidv4 uuidv7 +varint venv vitss Vkey diff --git a/rust/signed_doc/src/cid_v1.rs b/rust/signed_doc/src/cid_v1.rs index 3d5e02d4ef..b65c861651 100644 --- a/rust/signed_doc/src/cid_v1.rs +++ b/rust/signed_doc/src/cid_v1.rs @@ -28,7 +28,7 @@ //! # let doc: CatalystSignedDocument = todo!(); //! let cid = doc.to_cid_v1()?; //! let cid_string = cid.to_string(); -//! // Result: "bafyrei..." (base32-encoded CID v1) +//! // Result: "b..." (base32-encoded CID v1) //! # Ok::<(), anyhow::Error>(()) //! ``` @@ -71,7 +71,7 @@ pub enum CidError { Encoding(String), } -/// A newtype wrapper around `cid::Cid` for type-safe CID v1 handling. +/// A new type wrapper around `cid::Cid` for type-safe CID v1 handling. /// /// This type provides conversion methods and trait implementations for working with /// CID v1 identifiers, especially in the context of CBOR-encoded Catalyst Signed @@ -281,7 +281,7 @@ mod tests { let cid_string = cid.to_string(); // Parse the string back to a CID - let cid_from_str = Cid::from_str(&cid_string).expect("CID string should be parseable"); + let cid_from_str = Cid::from_str(&cid_string).expect("CID string should be parsable"); assert_eq!(cid, cid_from_str); } From 5b1f73e1ac8d1a06645580bff4b4dd0fd619c8e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Rosales?= Date: Thu, 13 Nov 2025 21:57:46 -0600 Subject: [PATCH 8/9] chore(rust/signed-doc): fix doc comment --- rust/signed_doc/src/cid_v1.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/signed_doc/src/cid_v1.rs b/rust/signed_doc/src/cid_v1.rs index b65c861651..91baba246e 100644 --- a/rust/signed_doc/src/cid_v1.rs +++ b/rust/signed_doc/src/cid_v1.rs @@ -13,7 +13,7 @@ //! Where: //! - `version`: varint(1) - CID version 1 //! - `multicodec`: varint(0x51) - CBOR codec -//! - `multihash`: varint(0x12) || varint(32) || digest[32] - SHA2-256 multihash +//! - `multihash`: varint(0x12) || varint(32) || digest\[32\] - SHA2-256 multihash //! //! ## Constraints //! From 53a8829011efb8fd936cd7eeb263e99f9100cb62 Mon Sep 17 00:00:00 2001 From: Alex Pozhylenkov Date: Sat, 15 Nov 2025 00:21:41 +0700 Subject: [PATCH 9/9] chore(rust/signed-doc): Add `doc_ref` method for `CatalystSignedDoc`. (#640) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update API * wip * wip * wip * fix test * wip * wip * fix fmt * fix(rust/signed-doc): remove stale example --------- Co-authored-by: Joaquín Rosales --- rust/signed_doc/src/cid_v1.rs | 11 - rust/signed_doc/src/lib.rs | 36 ++- .../src/metadata/document_refs/doc_locator.rs | 34 +-- .../src/metadata/document_refs/doc_ref.rs | 14 -- .../src/metadata/document_refs/mod.rs | 62 +++-- rust/signed_doc/src/providers.rs | 26 +- .../src/validator/rules/chain/tests.rs | 48 ++-- .../src/validator/rules/doc_ref/tests.rs | 91 +++---- .../tests/collaborators_field_based.rs | 12 +- .../rules/ownership/tests/ref_field_based.rs | 34 +-- .../ownership/tests/without_collaborators.rs | 6 +- .../src/validator/rules/parameters/tests.rs | 235 ++++++------------ .../src/validator/rules/reply/tests.rs | 108 ++------ .../src/validator/rules/signature/tests.rs | 23 +- .../src/validator/rules/template/tests.rs | 51 ++-- .../src/validator/rules/ver/tests.rs | 14 +- rust/signed_doc/tests/brand_parameters.rs | 14 +- rust/signed_doc/tests/campaign_parameters.rs | 50 ++-- .../campaign_parameters_form_template.rs | 22 +- rust/signed_doc/tests/category_parameters.rs | 74 +++--- .../category_parameters_form_template.rs | 38 +-- .../tests/common/brand_parameters.rs | 2 +- .../tests/common/campaign_parameters.rs | 4 +- .../campaign_parameters_form_template.rs | 2 +- .../tests/common/category_parameters.rs | 4 +- .../category_parameters_form_template.rs | 2 +- rust/signed_doc/tests/common/mod.rs | 5 +- rust/signed_doc/tests/common/proposal.rs | 4 +- .../tests/common/proposal_comment.rs | 6 +- .../common/proposal_comment_form_template.rs | 2 +- .../tests/common/proposal_form_template.rs | 2 +- .../common/proposal_submission_action.rs | 4 +- rust/signed_doc/tests/decoding.rs | 24 +- rust/signed_doc/tests/proposal.rs | 74 +++--- rust/signed_doc/tests/proposal_comment.rs | 146 +++++------ .../tests/proposal_comment_form_template.rs | 42 ++-- .../tests/proposal_form_template.rs | 42 ++-- .../tests/proposal_submission_action.rs | 116 ++++----- 38 files changed, 629 insertions(+), 855 deletions(-) diff --git a/rust/signed_doc/src/cid_v1.rs b/rust/signed_doc/src/cid_v1.rs index 91baba246e..fe77858acb 100644 --- a/rust/signed_doc/src/cid_v1.rs +++ b/rust/signed_doc/src/cid_v1.rs @@ -20,17 +20,6 @@ //! - **Hash function**: Only SHA2-256 is supported (32-byte digest) //! - **Codec**: Fixed to CBOR (0x51) //! - **Output size**: 36 bytes in binary format -//! -//! ## Example -//! -//! ```no_run -//! # use catalyst_signed_doc::{CatalystSignedDocument, cid_v1::Cid}; -//! # let doc: CatalystSignedDocument = todo!(); -//! let cid = doc.to_cid_v1()?; -//! let cid_string = cid.to_string(); -//! // Result: "b..." (base32-encoded CID v1) -//! # Ok::<(), anyhow::Error>(()) -//! ``` use std::{fmt, ops::Deref, str::FromStr}; diff --git a/rust/signed_doc/src/lib.rs b/rust/signed_doc/src/lib.rs index 831511edef..3dcad075cd 100644 --- a/rust/signed_doc/src/lib.rs +++ b/rust/signed_doc/src/lib.rs @@ -254,9 +254,10 @@ impl CatalystSignedDocument { Ok(minicbor::decode_with(bytes, &mut policy)?) } - /// Generate a CID v1 (Content Identifier version 1) for this signed document. + /// Returns a `DocumentRef` for the current document. /// - /// Creates an IPFS-compatible content identifier using: + /// Generating a CID v1 (Content Identifier version 1) creates an IPFS-compatible + /// content identifier using: /// - CID version 1 /// - CBOR multicodec (0x51) /// - SHA2-256 multihash @@ -264,23 +265,32 @@ impl CatalystSignedDocument { /// # Errors /// - CBOR serialization failure /// - Multihash construction failure - pub fn to_cid_v1(&self) -> Result { - let cbor_bytes = self - .to_bytes() - .map_err(|e| cid_v1::CidError::Encoding(e.to_string()))?; - cid_v1::to_cid_v1(&cbor_bytes) + /// - Missing 'id' field. + /// - Missing 'ver' field. + pub fn doc_ref(&self) -> anyhow::Result { + let cid = self.to_cid_v1()?; + Ok(DocumentRef::new( + self.doc_id()?, + self.doc_ver()?, + DocLocator::from(cid), + )) } - /// Generate a CID v1 and return it as a multibase-encoded string. + /// Generate a CID v1 (Content Identifier version 1) for this signed document. /// - /// Uses base32 encoding (CID v1 default). The resulting string starts with 'b'. + /// Creates an IPFS-compatible content identifier using: + /// - CID version 1 + /// - CBOR multicodec (0x51) + /// - SHA2-256 multihash /// /// # Errors /// - CBOR serialization failure - /// - CID generation failure - pub fn to_cid_v1_string(&self) -> Result { - let cid = self.to_cid_v1()?; - Ok(cid.to_string()) + /// - Multihash construction failure + fn to_cid_v1(&self) -> Result { + let cbor_bytes = self + .to_bytes() + .map_err(|e| cid_v1::CidError::Encoding(e.to_string()))?; + cid_v1::to_cid_v1(&cbor_bytes) } } diff --git a/rust/signed_doc/src/metadata/document_refs/doc_locator.rs b/rust/signed_doc/src/metadata/document_refs/doc_locator.rs index bed671fa64..c4b09253d9 100644 --- a/rust/signed_doc/src/metadata/document_refs/doc_locator.rs +++ b/rust/signed_doc/src/metadata/document_refs/doc_locator.rs @@ -140,38 +140,18 @@ impl Encode<()> for DocLocator { } #[cfg(test)] -pub(crate) mod tests { +mod tests { use minicbor::{Decoder, Encoder}; use super::*; - use crate::{Builder, ContentType, UuidV7}; - - pub(crate) fn create_dummy_doc_locator() -> DocLocator { - use crate::UuidV4; - - let id = UuidV7::new(); - let ver = UuidV7::new(); - let doc = Builder::new() - .with_json_metadata(serde_json::json!({ - "id": id.to_string(), - "ver": ver.to_string(), - "type": UuidV4::new().to_string(), - "content-type": ContentType::Json, - })) - .expect("Should create metadata") - .with_json_content(&serde_json::json!({"test": "content"})) - .expect("Should set content") - .build() - .expect("Should build document"); - - let cid = doc.to_cid_v1().expect("Should generate CID"); - DocLocator::from(cid) - } + use crate::{ + Builder, ContentType, UuidV7, metadata::document_refs::tests::create_dummy_doc_ref, + }; #[test] fn test_doc_locator_encode_decode() { - let locator = create_dummy_doc_locator(); + let locator = create_dummy_doc_ref().doc_locator().clone(); let mut buffer = Vec::new(); let mut encoder = Encoder::new(&mut buffer); locator.encode(&mut encoder, &mut ()).unwrap(); @@ -182,7 +162,7 @@ pub(crate) mod tests { #[test] fn test_doc_locator_display() { - let locator = create_dummy_doc_locator(); + let locator = create_dummy_doc_ref().doc_locator().clone(); let display_str = locator.to_string(); assert!( display_str.starts_with('b'), @@ -192,7 +172,7 @@ pub(crate) mod tests { #[test] fn test_doc_locator_from_str() { - let locator = create_dummy_doc_locator(); + let locator = create_dummy_doc_ref().doc_locator().clone(); let display_str = locator.to_string(); let parsed = display_str .parse::() diff --git a/rust/signed_doc/src/metadata/document_refs/doc_ref.rs b/rust/signed_doc/src/metadata/document_refs/doc_ref.rs index 04a148281e..f2c9365c92 100644 --- a/rust/signed_doc/src/metadata/document_refs/doc_ref.rs +++ b/rust/signed_doc/src/metadata/document_refs/doc_ref.rs @@ -7,7 +7,6 @@ use cbork_utils::{array::Array, decode_context::DecodeCtx}; use minicbor::{Decode, Encode}; use super::doc_locator::DocLocator; -use crate::CatalystSignedDocument; /// Number of item that should be in each document reference instance. const DOC_REF_ARR_ITEM: u64 = 3; @@ -58,19 +57,6 @@ impl DocumentRef { } } -impl TryFrom<&CatalystSignedDocument> for DocumentRef { - type Error = anyhow::Error; - - fn try_from(value: &CatalystSignedDocument) -> Result { - let cid = value.to_cid_v1()?; - Ok(Self::new( - value.doc_id()?, - value.doc_ver()?, - DocLocator::from(cid), - )) - } -} - impl Display for DocumentRef { fn fmt( &self, diff --git a/rust/signed_doc/src/metadata/document_refs/mod.rs b/rust/signed_doc/src/metadata/document_refs/mod.rs index 429c9361d3..6a1f7f9098 100644 --- a/rust/signed_doc/src/metadata/document_refs/mod.rs +++ b/rust/signed_doc/src/metadata/document_refs/mod.rs @@ -193,13 +193,33 @@ mod serde_impl { } #[cfg(test)] -mod tests { +pub(crate) mod tests { - use catalyst_types::uuid::{CborContext, UuidV7}; + use catalyst_types::uuid::{CborContext, UuidV4, UuidV7}; use minicbor::{Decoder, Encoder}; use test_case::test_case; - use super::{doc_locator::tests::create_dummy_doc_locator, *}; + use super::*; + use crate::{ContentType, builder::Builder}; + + pub(crate) fn create_dummy_doc_ref() -> DocumentRef { + let id = UuidV7::new(); + let ver = UuidV7::new(); + let doc = Builder::new() + .with_json_metadata(serde_json::json!({ + "id": id.to_string(), + "ver": ver.to_string(), + "type": UuidV4::new().to_string(), + "content-type": ContentType::Json, + })) + .expect("Should create metadata") + .with_json_content(&serde_json::json!({"test": "content"})) + .expect("Should set content") + .build() + .expect("Should build document"); + + doc.doc_ref().expect("Should generate DocumentRef") + } #[test_case( CompatibilityPolicy::Accept, @@ -248,16 +268,17 @@ mod tests { #[test_case( CompatibilityPolicy::Accept, { + let doc_ref = create_dummy_doc_ref(); let mut e = Encoder::new(Vec::new()); e.array(1) .unwrap() .array(3) .unwrap() - .encode_with(UuidV7::new(), &mut CborContext::Untagged) + .encode_with(*doc_ref.id(), &mut CborContext::Untagged) .unwrap() - .encode_with(UuidV7::new(), &mut CborContext::Untagged) + .encode_with(*doc_ref.ver(), &mut CborContext::Untagged) .unwrap() - .encode(create_dummy_doc_locator()) + .encode(doc_ref.doc_locator().clone()) .unwrap(); e } ; @@ -275,15 +296,15 @@ mod tests { #[test_case( CompatibilityPolicy::Accept, - |uuid: UuidV7, doc_loc: DocLocator| { + |id, ver, doc_loc| { let mut e = Encoder::new(Vec::new()); e.array(1) .unwrap() .array(3) .unwrap() - .encode_with(uuid, &mut CborContext::Tagged) + .encode_with(id, &mut CborContext::Tagged) .unwrap() - .encode_with(uuid, &mut CborContext::Tagged) + .encode_with(ver, &mut CborContext::Tagged) .unwrap() .encode(doc_loc) .unwrap(); @@ -293,15 +314,15 @@ mod tests { )] #[test_case( CompatibilityPolicy::Fail, - |uuid: UuidV7, doc_loc: DocLocator| { + |id, ver, doc_loc| { let mut e = Encoder::new(Vec::new()); e.array(1) .unwrap() .array(3) .unwrap() - .encode_with(uuid, &mut CborContext::Tagged) + .encode_with(id, &mut CborContext::Tagged) .unwrap() - .encode_with(uuid, &mut CborContext::Tagged) + .encode_with(ver, &mut CborContext::Tagged) .unwrap() .encode(doc_loc) .unwrap(); @@ -311,26 +332,21 @@ mod tests { )] fn test_valid_cbor_decode( mut policy: CompatibilityPolicy, - e_gen: impl FnOnce(UuidV7, DocLocator) -> Encoder>, + e_gen: impl FnOnce(UuidV7, UuidV7, DocLocator) -> Encoder>, ) { - let uuid = UuidV7::new(); - let doc_loc = create_dummy_doc_locator(); - let e = e_gen(uuid, doc_loc.clone()); + let doc_ref = create_dummy_doc_ref(); + let e = e_gen(*doc_ref.id(), *doc_ref.ver(), doc_ref.doc_locator().clone()); let doc_refs = DocumentRefs::decode(&mut Decoder::new(e.into_writer().as_slice()), &mut policy) .unwrap(); - assert_eq!(doc_refs.0, vec![DocumentRef::new(uuid, uuid, doc_loc)]); + assert_eq!(doc_refs.0, vec![doc_ref]); } #[test] fn test_json_valid_serde() { - let uuid1 = UuidV7::new(); - let uuid2 = UuidV7::new(); - let doc_loc = create_dummy_doc_locator(); - - let doc_ref1 = DocumentRef::new(uuid1, uuid1, doc_loc.clone()); - let doc_ref2 = DocumentRef::new(uuid2, uuid2, doc_loc); + let doc_ref1 = create_dummy_doc_ref(); + let doc_ref2 = create_dummy_doc_ref(); let refs = DocumentRefs(vec![doc_ref1, doc_ref2]); diff --git a/rust/signed_doc/src/providers.rs b/rust/signed_doc/src/providers.rs index c652e4534d..0298d2429d 100644 --- a/rust/signed_doc/src/providers.rs +++ b/rust/signed_doc/src/providers.rs @@ -62,7 +62,7 @@ pub mod tests { CatalystId, CatalystIdProvider, CatalystSignedDocument, CatalystSignedDocumentProvider, VerifyingKey, }; - use crate::{DocLocator, DocumentRef}; + use crate::DocumentRef; /// Simple testing implementation of `CatalystSignedDocumentProvider`, #[derive(Default, Debug)] @@ -74,28 +74,30 @@ pub mod tests { } impl TestCatalystProvider { - /// Inserts document into the `TestCatalystSignedDocumentProvider` where - /// if document reference is provided use that value. - /// if not use the id and version of the provided doc. + /// Inserts document into the `TestCatalystSignedDocumentProvider`. /// /// # Errors /// Returns error if document reference is not provided and its fail to create one /// from the given doc. pub fn add_document( &mut self, - doc_ref: Option, doc: &CatalystSignedDocument, ) -> anyhow::Result<()> { - if let Some(dr) = doc_ref { - self.signed_doc.insert(dr, doc.clone()); - } else { - let cid = doc.to_cid_v1()?; - let dr = DocumentRef::new(doc.doc_id()?, doc.doc_ver()?, DocLocator::from(cid)); - self.signed_doc.insert(dr, doc.clone()); - } + let dr = doc.doc_ref()?; + self.signed_doc.insert(dr, doc.clone()); Ok(()) } + /// Inserts document into the `TestCatalystSignedDocumentProvider` using provided + /// `DocumentRef` as key. + pub fn add_document_with_ref( + &mut self, + doc_ref: DocumentRef, + doc: &CatalystSignedDocument, + ) { + self.signed_doc.insert(doc_ref, doc.clone()); + } + /// Inserts signing key into the `TestVerifyingKeyProvider` pub fn add_sk( &mut self, diff --git a/rust/signed_doc/src/validator/rules/chain/tests.rs b/rust/signed_doc/src/validator/rules/chain/tests.rs index e621f337f8..6646f985e8 100644 --- a/rust/signed_doc/src/validator/rules/chain/tests.rs +++ b/rust/signed_doc/src/validator/rules/chain/tests.rs @@ -3,7 +3,7 @@ use test_case::test_case; use super::*; use crate::{ - Chain, DocType, DocumentRef, builder::tests::Builder, metadata::SupportedField, + Chain, DocType, builder::tests::Builder, metadata::SupportedField, providers::tests::TestCatalystProvider, }; @@ -64,7 +64,7 @@ async fn test_without_chaining_documents() { Chain::new(0, None) )) .build(); - let first_doc_ref = DocumentRef::try_from(&first).unwrap(); + let first_doc_ref = first.doc_ref().unwrap(); let last_doc_ver = helper::get_now_plus_uuidv7(60); let last = Builder::new() @@ -75,10 +75,7 @@ async fn test_without_chaining_documents() { Chain::new(-1, Some(first_doc_ref.clone())) )) .build(); - let last_doc_ref = DocumentRef::try_from(&last).unwrap(); - - provider.add_document(Some(first_doc_ref), &first).unwrap(); - provider.add_document(Some(last_doc_ref), &last).unwrap(); + provider.add_document(&first).unwrap(); (provider, last) } => true; @@ -100,7 +97,7 @@ async fn test_without_chaining_documents() { Chain::new(0, None) )) .build(); - let first_doc_ref = DocumentRef::try_from(&first).unwrap(); + let first_doc_ref = first.doc_ref().unwrap(); let intermediate_doc_ver = helper::get_now_plus_uuidv7(60); let intermediate = Builder::new() @@ -111,7 +108,7 @@ async fn test_without_chaining_documents() { Chain::new(1, Some(first_doc_ref.clone())) )) .build(); - let intermediate_doc_ref = DocumentRef::try_from(&intermediate).unwrap(); + let intermediate_doc_ref = intermediate.doc_ref().unwrap(); let last_doc_ver = helper::get_now_plus_uuidv7(120); let last = Builder::new() @@ -122,11 +119,8 @@ async fn test_without_chaining_documents() { Chain::new(-2, Some(intermediate_doc_ref.clone())) )) .build(); - let last_doc_ref = DocumentRef::try_from(&last).unwrap(); - - provider.add_document(Some(first_doc_ref), &first).unwrap(); - provider.add_document(Some(intermediate_doc_ref), &intermediate).unwrap(); - provider.add_document(Some(last_doc_ref), &last).unwrap(); + provider.add_document(&first).unwrap(); + provider.add_document(&intermediate).unwrap(); (provider, last) } => true; @@ -159,7 +153,7 @@ async fn test_valid_chained_documents( Chain::new(0, None) )) .build(); - let first_doc_ref = DocumentRef::try_from(&first).unwrap(); + let first_doc_ref = first.doc_ref().unwrap(); let last_doc_ver = helper::get_now_plus_uuidv7(60); let last = Builder::new() @@ -170,10 +164,7 @@ async fn test_valid_chained_documents( Chain::new(-1, Some(first_doc_ref.clone())) )) .build(); - let last_doc_ref = DocumentRef::try_from(&last).unwrap(); - - provider.add_document(Some(first_doc_ref), &first).unwrap(); - provider.add_document(Some(last_doc_ref), &last).unwrap(); + provider.add_document(&first).unwrap(); (provider, last) } => false; @@ -195,7 +186,7 @@ async fn test_valid_chained_documents( Chain::new(0, None) )) .build(); - let first_doc_ref = DocumentRef::try_from(&first).unwrap(); + let first_doc_ref = first.doc_ref().unwrap(); // version not greater than first (using an earlier timestamp) let last_doc_ver = helper::get_now_plus_uuidv7(-60); @@ -207,10 +198,7 @@ async fn test_valid_chained_documents( Chain::new(-1, Some(first_doc_ref.clone())) )) .build(); - let last_doc_ref = DocumentRef::try_from(&last).unwrap(); - - provider.add_document(Some(first_doc_ref), &first).unwrap(); - provider.add_document(Some(last_doc_ref), &last).unwrap(); + provider.add_document(&first).unwrap(); (provider, last) } => false; @@ -234,7 +222,7 @@ async fn test_valid_chained_documents( Chain::new(0, None) )) .build(); - let first_doc_ref = DocumentRef::try_from(&first).unwrap(); + let first_doc_ref = first.doc_ref().unwrap(); let last_doc_ver = helper::get_now_plus_uuidv7(60); let last = Builder::new() @@ -245,10 +233,7 @@ async fn test_valid_chained_documents( Chain::new(-1, Some(first_doc_ref.clone())) )) .build(); - let last_doc_ref = DocumentRef::try_from(&last).unwrap(); - - provider.add_document(Some(first_doc_ref), &first).unwrap(); - provider.add_document(Some(last_doc_ref), &last).unwrap(); + provider.add_document(&first).unwrap(); (provider, last) } => false; @@ -270,7 +255,7 @@ async fn test_valid_chained_documents( Chain::new(0, None) )) .build(); - let first_doc_ref = DocumentRef::try_from(&first).unwrap(); + let first_doc_ref = first.doc_ref().unwrap(); let last_doc_ver = helper::get_now_plus_uuidv7(60); let last = Builder::new() @@ -282,10 +267,7 @@ async fn test_valid_chained_documents( Chain::new(-2, Some(first_doc_ref.clone())) )) .build(); - let last_doc_ref = DocumentRef::try_from(&last).unwrap(); - - provider.add_document(Some(first_doc_ref), &first).unwrap(); - provider.add_document(Some(last_doc_ref), &last).unwrap(); + provider.add_document(&first).unwrap(); (provider, last) } => false; diff --git a/rust/signed_doc/src/validator/rules/doc_ref/tests.rs b/rust/signed_doc/src/validator/rules/doc_ref/tests.rs index ccca5f09e4..0b2970295d 100644 --- a/rust/signed_doc/src/validator/rules/doc_ref/tests.rs +++ b/rust/signed_doc/src/validator/rules/doc_ref/tests.rs @@ -3,9 +3,8 @@ use test_case::test_case; use super::*; use crate::{ - DocumentRef, builder::tests::Builder, - metadata::{SupportedField, document_refs::doc_locator::tests::create_dummy_doc_locator}, + metadata::{SupportedField, document_refs::tests::create_dummy_doc_ref}, providers::tests::TestCatalystProvider, }; @@ -16,12 +15,11 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[0].clone())) .build(); - provider.add_document(None, &ref_doc).unwrap(); + provider.add_document(&ref_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::try_from(&ref_doc).unwrap()] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -36,26 +34,26 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[0].clone())) .build(); - provider.add_document(None, &ref_doc_1).unwrap(); + provider.add_document(&ref_doc_1).unwrap(); let ref_doc_2 = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[1].clone())) .build(); - provider.add_document(None, &ref_doc_2).unwrap(); + provider.add_document(&ref_doc_2).unwrap(); let ref_doc_3 = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[0].clone())) .build(); - provider.add_document(None, &ref_doc_3).unwrap(); + provider.add_document(&ref_doc_3).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref( vec![ - DocumentRef::try_from(&ref_doc_1).unwrap(), - DocumentRef::try_from(&ref_doc_2).unwrap(), - DocumentRef::try_from(&ref_doc_3).unwrap(), + ref_doc_1.doc_ref().unwrap(), + ref_doc_2.doc_ref().unwrap(), + ref_doc_3.doc_ref().unwrap(), ] .into(), )) @@ -72,26 +70,26 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[0].clone())) .build(); - provider.add_document(None, &ref_doc_1).unwrap(); + provider.add_document(&ref_doc_1).unwrap(); let ref_doc_2 = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[1].clone())) .build(); - provider.add_document(None, &ref_doc_2).unwrap(); + provider.add_document(&ref_doc_2).unwrap(); let ref_doc_3 = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(UuidV4::new().into())) .build(); - provider.add_document(None, &ref_doc_3).unwrap(); + provider.add_document(&ref_doc_3).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref( vec![ - DocumentRef::try_from(&ref_doc_1).unwrap(), - DocumentRef::try_from(&ref_doc_2).unwrap(), - DocumentRef::try_from(&ref_doc_3).unwrap(), + ref_doc_1.doc_ref().unwrap(), + ref_doc_2.doc_ref().unwrap(), + ref_doc_3.doc_ref().unwrap(), ] .into(), )) @@ -108,25 +106,25 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[0].clone())) .build(); - provider.add_document(None, &ref_doc_1).unwrap(); + provider.add_document(&ref_doc_1).unwrap(); let ref_doc_2 = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[1].clone())) .build(); - provider.add_document(None, &ref_doc_2).unwrap(); + provider.add_document(&ref_doc_2).unwrap(); let ref_doc_3 = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .build(); - provider.add_document(None, &ref_doc_3).unwrap(); + provider.add_document(&ref_doc_3).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref( vec![ - DocumentRef::try_from(&ref_doc_1).unwrap(), - DocumentRef::try_from(&ref_doc_2).unwrap(), - DocumentRef::try_from(&ref_doc_3).unwrap(), + ref_doc_1.doc_ref().unwrap(), + ref_doc_2.doc_ref().unwrap(), + ref_doc_3.doc_ref().unwrap(), ] .into(), )) @@ -143,12 +141,17 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[0].clone())) .build(); - provider.add_document(Some(DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator())), &ref_doc).unwrap(); + let new_ref = create_dummy_doc_ref(); + let new_ref = DocumentRef::new( + ref_doc.doc_id().unwrap(), + ref_doc.doc_ver().unwrap(), + new_ref.doc_locator().clone() + ); + provider.add_document_with_ref(new_ref, &ref_doc); Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::try_from(&ref_doc).unwrap()] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -160,13 +163,7 @@ use crate::{ |_, _| { Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - ), - ] - .into(), + vec![create_dummy_doc_ref()].into(), )) .build() } @@ -213,12 +210,11 @@ async fn ref_multiple_specified_test( .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[0].clone())) .build(); - provider.add_document(None, &ref_doc).unwrap(); + provider.add_document(&ref_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::try_from(&ref_doc).unwrap()] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -233,26 +229,26 @@ async fn ref_multiple_specified_test( .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[0].clone())) .build(); - provider.add_document(None, &ref_doc_1).unwrap(); + provider.add_document(&ref_doc_1).unwrap(); let ref_doc_2 = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[1].clone())) .build(); - provider.add_document(None, &ref_doc_2).unwrap(); + provider.add_document(&ref_doc_2).unwrap(); let ref_doc_3 = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_types[0].clone())) .build(); - provider.add_document(None, &ref_doc_3).unwrap(); + provider.add_document(&ref_doc_3).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref( vec![ - DocumentRef::try_from(&ref_doc_1).unwrap(), - DocumentRef::try_from(&ref_doc_2).unwrap(), - DocumentRef::try_from(&ref_doc_3).unwrap(), + ref_doc_1.doc_ref().unwrap(), + ref_doc_2.doc_ref().unwrap(), + ref_doc_3.doc_ref().unwrap(), ] .into(), )) @@ -325,17 +321,8 @@ async fn ref_rule_not_specified_test() { let doc = Builder::new().build(); assert!(rule.check(&doc, &provider).await.unwrap()); - let ref_id = UuidV7::new(); - let ref_ver = UuidV7::new(); let doc = Builder::new() - .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - ref_id, - ref_ver, - create_dummy_doc_locator(), - )] - .into(), - )) + .with_metadata_field(SupportedField::Ref(vec![create_dummy_doc_ref()].into())) .build(); assert!(!rule.check(&doc, &provider).await.unwrap()); } diff --git a/rust/signed_doc/src/validator/rules/ownership/tests/collaborators_field_based.rs b/rust/signed_doc/src/validator/rules/ownership/tests/collaborators_field_based.rs index c602074f80..33580dc45a 100644 --- a/rust/signed_doc/src/validator/rules/ownership/tests/collaborators_field_based.rs +++ b/rust/signed_doc/src/validator/rules/ownership/tests/collaborators_field_based.rs @@ -36,7 +36,7 @@ use crate::{ .add_signature(|m| sk.sign(&m).to_vec(), kid.clone()) .unwrap() .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Id(id)) @@ -59,7 +59,7 @@ use crate::{ .add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone()) .unwrap() .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Id(id)) @@ -84,7 +84,7 @@ use crate::{ .add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone()) .unwrap() .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Id(id)) @@ -131,7 +131,7 @@ use crate::{ .add_signature(|m| sk.sign(&m).to_vec(), kid.clone()) .unwrap() .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); let (sk, kid) = create_dummy_key_pair(RoleId::Role0); Builder::new() @@ -154,7 +154,7 @@ use crate::{ .add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone()) .unwrap() .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Id(id)) @@ -179,7 +179,7 @@ use crate::{ .add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone()) .unwrap() .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); let (c2_sk, c2_kid) = create_dummy_key_pair(RoleId::Role0); Builder::new() diff --git a/rust/signed_doc/src/validator/rules/ownership/tests/ref_field_based.rs b/rust/signed_doc/src/validator/rules/ownership/tests/ref_field_based.rs index 9f281a1785..73efe99591 100644 --- a/rust/signed_doc/src/validator/rules/ownership/tests/ref_field_based.rs +++ b/rust/signed_doc/src/validator/rules/ownership/tests/ref_field_based.rs @@ -6,9 +6,9 @@ use ed25519_dalek::ed25519::signature::Signer; use test_case::test_case; use crate::{ - CatalystSignedDocument, DocumentRef, + CatalystSignedDocument, builder::tests::Builder, - metadata::{SupportedField, document_refs::doc_locator::tests::create_dummy_doc_locator}, + metadata::SupportedField, providers::tests::TestCatalystProvider, validator::rules::{DocumentOwnershipRule, utils::create_dummy_key_pair}, }; @@ -23,20 +23,14 @@ use crate::{ .add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone()) .unwrap() .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); let id = UuidV7::new(); Builder::new() .with_metadata_field(SupportedField::Id(id)) .with_metadata_field(SupportedField::Ver(id)) .with_metadata_field(SupportedField::Ref( - vec![ - DocumentRef::new( - doc.doc_id().unwrap(), - doc.doc_ver().unwrap(), - create_dummy_doc_locator() - ) - ].into() + vec![doc.doc_ref().unwrap()].into() )) .add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone()) .unwrap() @@ -56,20 +50,14 @@ use crate::{ .add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone()) .unwrap() .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); let id = UuidV7::new(); Builder::new() .with_metadata_field(SupportedField::Id(id)) .with_metadata_field(SupportedField::Ver(id)) .with_metadata_field(SupportedField::Ref( - vec![ - DocumentRef::new( - doc.doc_id().unwrap(), - doc.doc_ver().unwrap(), - create_dummy_doc_locator() - ) - ].into() + vec![doc.doc_ref().unwrap()].into() )) .add_signature(|m| c_sk.sign(&m).to_vec(), c_kid.clone()) .unwrap() @@ -110,7 +98,7 @@ use crate::{ .add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone()) .unwrap() .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); let (a_sk, a_kid) = create_dummy_key_pair(RoleId::Role0); let id = UuidV7::new(); @@ -118,13 +106,7 @@ use crate::{ .with_metadata_field(SupportedField::Id(id)) .with_metadata_field(SupportedField::Ver(id)) .with_metadata_field(SupportedField::Ref( - vec![ - DocumentRef::new( - doc.doc_id().unwrap(), - doc.doc_ver().unwrap(), - create_dummy_doc_locator() - ) - ].into() + vec![doc.doc_ref().unwrap()].into() )) .add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone()) .unwrap() diff --git a/rust/signed_doc/src/validator/rules/ownership/tests/without_collaborators.rs b/rust/signed_doc/src/validator/rules/ownership/tests/without_collaborators.rs index 6e0430307e..a696eb32c6 100644 --- a/rust/signed_doc/src/validator/rules/ownership/tests/without_collaborators.rs +++ b/rust/signed_doc/src/validator/rules/ownership/tests/without_collaborators.rs @@ -36,7 +36,7 @@ use crate::{ .add_signature(|m| sk.sign(&m).to_vec(), kid.clone()) .unwrap() .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Id(id)) @@ -83,7 +83,7 @@ use crate::{ .add_signature(|m| sk.sign(&m).to_vec(), kid.clone()) .unwrap() .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); let (sk, kid) = create_dummy_key_pair(RoleId::Role0); Builder::new() @@ -106,7 +106,7 @@ use crate::{ .add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone()) .unwrap() .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Id(id)) diff --git a/rust/signed_doc/src/validator/rules/parameters/tests.rs b/rust/signed_doc/src/validator/rules/parameters/tests.rs index 15111bce3a..cb96dbb65a 100644 --- a/rust/signed_doc/src/validator/rules/parameters/tests.rs +++ b/rust/signed_doc/src/validator/rules/parameters/tests.rs @@ -3,9 +3,8 @@ use test_case::test_case; use super::*; use crate::{ - DocumentRef, builder::tests::Builder, - metadata::{SupportedField, document_refs::doc_locator::tests::create_dummy_doc_locator}, + metadata::{SupportedField, document_refs::tests::create_dummy_doc_ref}, providers::tests::TestCatalystProvider, }; @@ -16,12 +15,11 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_param_types[0].clone())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Parameters( - vec![DocumentRef::try_from(¶meter_doc).unwrap()] - .into(), + vec![parameter_doc.doc_ref().unwrap()].into(), )) .build() } @@ -36,22 +34,21 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_param_types[0].clone())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); - let common_parameter_field: DocumentRefs = vec![DocumentRef::try_from(¶meter_doc).unwrap()] + let common_parameter_field: DocumentRefs = vec![parameter_doc.doc_ref().unwrap()] .into(); let template_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Parameters(common_parameter_field.clone())) .build(); - provider.add_document(None, &template_doc).unwrap(); + provider.add_document(&template_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Template( - vec![DocumentRef::try_from(&template_doc).unwrap()] - .into() + vec![template_doc.doc_ref().unwrap()].into() )) .with_metadata_field(SupportedField::Parameters(common_parameter_field)) .build() @@ -67,23 +64,15 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_param_types[0].clone())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Template( - vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into() + vec![create_dummy_doc_ref()].into() + )) + .with_metadata_field(SupportedField::Parameters( + vec![parameter_doc.doc_ref().unwrap()].into() )) - .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - create_dummy_doc_locator(), - )] - .into())) .build() } => false @@ -97,26 +86,23 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_param_types[0].clone())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); let template_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .build(); - provider.add_document(None, &template_doc).unwrap(); + provider.add_document(&template_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Template( - vec![DocumentRef::try_from(&template_doc).unwrap()] + vec![template_doc.doc_ref().unwrap()] .into() )) - .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - create_dummy_doc_locator(), - )] - .into())) + .with_metadata_field(SupportedField::Parameters( + vec![parameter_doc.doc_ref().unwrap()].into() + )) .build() } => false @@ -130,32 +116,26 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_param_types[0].clone())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); let template_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) - .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into())) + .with_metadata_field(SupportedField::Parameters( + vec![create_dummy_doc_ref()].into() + )) .build(); - provider.add_document(None, &template_doc).unwrap(); + provider.add_document(&template_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Template( - vec![DocumentRef::try_from(&template_doc).unwrap()] + vec![template_doc.doc_ref().unwrap()] .into() )) - .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - create_dummy_doc_locator(), - )] - .into())) + .with_metadata_field(SupportedField::Parameters( + vec![parameter_doc.doc_ref().unwrap()].into() + )) .build() } => false @@ -169,22 +149,21 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_param_types[0].clone())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); - let common_parameter_field: DocumentRefs = vec![DocumentRef::try_from(¶meter_doc).unwrap()] + let common_parameter_field: DocumentRefs = vec![parameter_doc.doc_ref().unwrap()] .into(); let replied_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Parameters(common_parameter_field.clone())) .build(); - provider.add_document(None, &replied_doc).unwrap(); + provider.add_document(&replied_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::try_from(&replied_doc).unwrap()] - .into() + vec![replied_doc.doc_ref().unwrap()].into() )) .with_metadata_field(SupportedField::Parameters(common_parameter_field)) .build() @@ -200,23 +179,15 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_param_types[0].clone())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into() + vec![create_dummy_doc_ref()].into() + )) + .with_metadata_field(SupportedField::Parameters( + vec![parameter_doc.doc_ref().unwrap()].into() )) - .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - create_dummy_doc_locator(), - )] - .into())) .build() } => false @@ -230,26 +201,23 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_param_types[0].clone())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); let reply_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .build(); - provider.add_document(None, &reply_doc).unwrap(); + provider.add_document(&reply_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::try_from(&reply_doc).unwrap()] + vec![reply_doc.doc_ref().unwrap()] .into() )) - .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - create_dummy_doc_locator(), - )] - .into())) + .with_metadata_field(SupportedField::Parameters( + vec![parameter_doc.doc_ref().unwrap()].into() + )) .build() } => false @@ -263,32 +231,25 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_param_types[0].clone())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); let reply_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) - .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into())) + .with_metadata_field(SupportedField::Parameters( + vec![create_dummy_doc_ref()].into() + )) .build(); - provider.add_document(None, &reply_doc).unwrap(); + provider.add_document(&reply_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::try_from(&reply_doc).unwrap()] - .into() + vec![reply_doc.doc_ref().unwrap()].into() + )) + .with_metadata_field(SupportedField::Parameters( + vec![parameter_doc.doc_ref().unwrap()].into() )) - .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - create_dummy_doc_locator(), - )] - .into())) .build() } => false @@ -302,22 +263,21 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_param_types[0].clone())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); - let common_parameter_field: DocumentRefs = vec![DocumentRef::try_from(¶meter_doc).unwrap()] + let common_parameter_field: DocumentRefs = vec![parameter_doc.doc_ref().unwrap()] .into(); let ref_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Parameters(common_parameter_field.clone())) .build(); - provider.add_document(None, &ref_doc).unwrap(); + provider.add_document(&ref_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::try_from(&ref_doc).unwrap()] - .into() + vec![ref_doc.doc_ref().unwrap()].into() )) .with_metadata_field(SupportedField::Parameters(common_parameter_field)) .build() @@ -333,23 +293,15 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_param_types[0].clone())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into() + vec![create_dummy_doc_ref()].into() + )) + .with_metadata_field(SupportedField::Parameters( + vec![parameter_doc.doc_ref().unwrap()].into() )) - .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - create_dummy_doc_locator(), - )] - .into())) .build() } => false @@ -363,26 +315,22 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_param_types[0].clone())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); let ref_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .build(); - provider.add_document(None, &ref_doc).unwrap(); + provider.add_document(&ref_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::try_from(&ref_doc).unwrap()] - .into() + vec![ref_doc.doc_ref().unwrap()].into() + )) + .with_metadata_field(SupportedField::Parameters( + vec![parameter_doc.doc_ref().unwrap()].into() )) - .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - create_dummy_doc_locator(), - )] - .into())) .build() } => false @@ -396,32 +344,25 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_param_types[0].clone())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); let ref_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) - .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into())) + .with_metadata_field(SupportedField::Parameters( + vec![create_dummy_doc_ref()].into() + )) .build(); - provider.add_document(None, &ref_doc).unwrap(); + provider.add_document(&ref_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::try_from(&ref_doc).unwrap()] - .into() + vec![ref_doc.doc_ref().unwrap()].into() + )) + .with_metadata_field(SupportedField::Parameters( + vec![parameter_doc.doc_ref().unwrap()].into() )) - .with_metadata_field(SupportedField::Parameters(vec![DocumentRef::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - create_dummy_doc_locator(), - )] - .into())) .build() } => false @@ -435,12 +376,11 @@ use crate::{ .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(UuidV4::new().into())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Parameters( - vec![DocumentRef::try_from(¶meter_doc).unwrap()] - .into(), + vec![parameter_doc.doc_ref().unwrap()].into(), )) .build() } @@ -454,12 +394,11 @@ use crate::{ .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .build(); - provider.add_document(None, ¶meter_doc).unwrap(); + provider.add_document(¶meter_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Parameters( - vec![DocumentRef::try_from(¶meter_doc).unwrap()] - .into(), + vec![parameter_doc.doc_ref().unwrap()].into(), )) .build() } @@ -471,12 +410,7 @@ use crate::{ |_, _| { Builder::new() .with_metadata_field(SupportedField::Parameters( - vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into(), + vec![create_dummy_doc_ref()].into(), )) .build() } @@ -543,16 +477,9 @@ async fn parameters_rule_not_specified_test() { let doc = Builder::new().build(); assert!(rule.check(&doc, &provider).await.unwrap()); - let ref_id = UuidV7::new(); - let ref_ver = UuidV7::new(); let doc = Builder::new() .with_metadata_field(SupportedField::Parameters( - vec![DocumentRef::new( - ref_id, - ref_ver, - create_dummy_doc_locator(), - )] - .into(), + vec![create_dummy_doc_ref()].into(), )) .build(); assert!(!rule.check(&doc, &provider).await.unwrap()); diff --git a/rust/signed_doc/src/validator/rules/reply/tests.rs b/rust/signed_doc/src/validator/rules/reply/tests.rs index c13baaa01a..3a2f307a75 100644 --- a/rust/signed_doc/src/validator/rules/reply/tests.rs +++ b/rust/signed_doc/src/validator/rules/reply/tests.rs @@ -3,33 +3,27 @@ use test_case::test_case; use super::*; use crate::{ - DocumentRef, DocumentRefs, + DocumentRefs, builder::tests::Builder, - metadata::{SupportedField, document_refs::doc_locator::tests::create_dummy_doc_locator}, + metadata::{SupportedField, document_refs::tests::create_dummy_doc_ref}, providers::tests::TestCatalystProvider, }; #[test_case( |exp_type, provider| { - let common_ref: DocumentRefs = vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into(); + let common_ref: DocumentRefs = vec![create_dummy_doc_ref()].into(); let ref_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Ref(common_ref.clone())) .with_metadata_field(SupportedField::Type(exp_type)) .build(); - provider.add_document(None, &ref_doc).unwrap(); + provider.add_document(&ref_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref(common_ref)) .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::try_from(&ref_doc).unwrap()] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -39,25 +33,19 @@ use crate::{ )] #[test_case( |_, provider| { - let common_ref: DocumentRefs = vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into(); + let common_ref: DocumentRefs = vec![create_dummy_doc_ref()].into(); let ref_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Ref(common_ref.clone())) .with_metadata_field(SupportedField::Type(UuidV4::new().into())) .build(); - provider.add_document(None, &ref_doc).unwrap(); + provider.add_document(&ref_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref(common_ref)) .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::try_from(&ref_doc).unwrap()] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -67,24 +55,18 @@ use crate::{ )] #[test_case( |_, provider| { - let common_ref: DocumentRefs = vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into(); + let common_ref: DocumentRefs = vec![create_dummy_doc_ref()].into(); let ref_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Ref(common_ref.clone())) .build(); - provider.add_document(None, &ref_doc).unwrap(); + provider.add_document(&ref_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref(common_ref)) .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::try_from(&ref_doc).unwrap()] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -98,29 +80,18 @@ use crate::{ .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into(), + vec![create_dummy_doc_ref()].into(), )) .with_metadata_field(SupportedField::Type(exp_type)) .build(); - provider.add_document(None, &ref_doc).unwrap(); + provider.add_document(&ref_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into(), + vec![create_dummy_doc_ref()].into(), )) .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::try_from(&ref_doc).unwrap()] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -130,24 +101,18 @@ use crate::{ )] #[test_case( |exp_type, provider| { - let common_ref: DocumentRefs = vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into(); + let common_ref: DocumentRefs = vec![create_dummy_doc_ref()].into(); let ref_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Type(exp_type)) .build(); - provider.add_document(None, &ref_doc).unwrap(); + provider.add_document(&ref_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Ref(common_ref)) .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::try_from(&ref_doc).unwrap()] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -157,23 +122,17 @@ use crate::{ )] #[test_case( |_, provider| { - let common_ref: DocumentRefs = vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into(); + let common_ref: DocumentRefs = vec![create_dummy_doc_ref()].into(); let ref_doc = Builder::new() .with_metadata_field(SupportedField::Id(UuidV7::new())) .with_metadata_field(SupportedField::Ver(UuidV7::new())) .with_metadata_field(SupportedField::Ref(common_ref.clone())) .build(); - provider.add_document(None, &ref_doc).unwrap(); + provider.add_document(&ref_doc).unwrap(); Builder::new() .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::try_from(&ref_doc).unwrap()] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -185,20 +144,10 @@ use crate::{ |_, _| { Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into(), + vec![create_dummy_doc_ref()].into(), )) .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )] - .into(), + vec![create_dummy_doc_ref()].into(), )) .build() } @@ -265,17 +214,8 @@ async fn reply_rule_not_specified_test() { let doc = Builder::new().build(); assert!(rule.check(&doc, &provider).await.unwrap()); - let ref_id = UuidV7::new(); - let ref_ver = UuidV7::new(); let doc = Builder::new() - .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - ref_id, - ref_ver, - create_dummy_doc_locator(), - )] - .into(), - )) + .with_metadata_field(SupportedField::Reply(vec![create_dummy_doc_ref()].into())) .build(); assert!(!rule.check(&doc, &provider).await.unwrap()); } diff --git a/rust/signed_doc/src/validator/rules/signature/tests.rs b/rust/signed_doc/src/validator/rules/signature/tests.rs index 7dd613af0b..223f1c3f22 100644 --- a/rust/signed_doc/src/validator/rules/signature/tests.rs +++ b/rust/signed_doc/src/validator/rules/signature/tests.rs @@ -5,17 +5,15 @@ use ed25519_dalek::ed25519::signature::Signer; use super::*; use crate::{ - metadata::document_refs::{DocumentRef, doc_locator::tests::create_dummy_doc_locator}, - providers::tests::*, - validator::rules::utils::create_dummy_key_pair, - *, + metadata::document_refs::tests::create_dummy_doc_ref, providers::tests::*, + validator::rules::utils::create_dummy_key_pair, *, }; fn metadata() -> serde_json::Value { - let ref_doc = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); - let reply_doc = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); - let template_doc = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); - let parameters_doc = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); + let ref_doc = create_dummy_doc_ref(); + let reply_doc = create_dummy_doc_ref(); + let template_doc = create_dummy_doc_ref(); + let parameters_doc = create_dummy_doc_ref(); serde_json::json!({ "content-type": ContentType::Json.to_string(), @@ -204,14 +202,7 @@ fn parameters_alias_field( e.bytes(m_p_headers.as_slice())?; // empty unprotected headers e.map(1)?; - e.str(alias)?.encode_with( - DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - crate::metadata::document_refs::doc_locator::tests::create_dummy_doc_locator(), - ), - &mut (), - )?; + e.str(alias)?.encode_with(create_dummy_doc_ref(), &mut ())?; // content (random bytes) let content = [1, 2, 3]; e.bytes(&content)?; diff --git a/rust/signed_doc/src/validator/rules/template/tests.rs b/rust/signed_doc/src/validator/rules/template/tests.rs index ce375052eb..20b2300ee8 100644 --- a/rust/signed_doc/src/validator/rules/template/tests.rs +++ b/rust/signed_doc/src/validator/rules/template/tests.rs @@ -3,9 +3,8 @@ use test_case::test_case; use super::*; use crate::{ - DocumentRef, builder::tests::Builder, - metadata::{SupportedField, document_refs::doc_locator::tests::create_dummy_doc_locator}, + metadata::{SupportedField, document_refs::tests::create_dummy_doc_ref}, providers::tests::TestCatalystProvider, }; @@ -19,8 +18,8 @@ use crate::{ .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(json_schema) .build(); - provider.add_document(None, &doc).unwrap(); - let template_ref = DocumentRef::try_from(&doc).unwrap(); + provider.add_document(&doc).unwrap(); + let template_ref = doc.doc_ref().unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -44,7 +43,7 @@ use crate::{ .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(json_schema) .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -65,8 +64,8 @@ use crate::{ .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(json_schema) .build(); - provider.add_document(None, &doc).unwrap(); - let template_ref = DocumentRef::try_from(&doc).unwrap(); + provider.add_document(&doc).unwrap(); + let template_ref = doc.doc_ref().unwrap(); Builder::new() .with_metadata_field(SupportedField::Template( @@ -88,8 +87,8 @@ use crate::{ .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(json_schema) .build(); - provider.add_document(None, &doc).unwrap(); - let template_ref = DocumentRef::try_from(&doc).unwrap(); + provider.add_document(&doc).unwrap(); + let template_ref = doc.doc_ref().unwrap(); Builder::new() .with_metadata_field(SupportedField::Template( @@ -105,11 +104,7 @@ use crate::{ #[test_case( |_, provider| { let json_schema = serde_json::to_vec(&serde_json::json!({})).unwrap(); - let template_ref = DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - ); + let template_ref = create_dummy_doc_ref(); let doc = Builder::new() .with_metadata_field(SupportedField::Id(*template_ref.id())) .with_metadata_field(SupportedField::Ver(*template_ref.ver())) @@ -117,7 +112,7 @@ use crate::{ .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(json_schema) .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -140,8 +135,8 @@ use crate::{ .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(json_schema) .build(); - provider.add_document(None, &doc).unwrap(); - let template_ref = DocumentRef::try_from(&doc).unwrap(); + provider.add_document(&doc).unwrap(); + let template_ref = doc.doc_ref().unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -164,8 +159,8 @@ use crate::{ .with_metadata_field(SupportedField::Type(allowed_type)) .with_content(json_schema) .build(); - provider.add_document(None, &doc).unwrap(); - let template_ref = DocumentRef::try_from(&doc).unwrap(); + provider.add_document(&doc).unwrap(); + let template_ref = doc.doc_ref().unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -187,8 +182,8 @@ use crate::{ .with_metadata_field(SupportedField::Type(allowed_type)) .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .build(); - provider.add_document(None, &doc).unwrap(); - let template_ref = DocumentRef::try_from(&doc).unwrap(); + provider.add_document(&doc).unwrap(); + let template_ref = doc.doc_ref().unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -211,8 +206,8 @@ use crate::{ .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(vec![1,2 ,3]) .build(); - provider.add_document(None, &doc).unwrap(); - let template_ref = DocumentRef::try_from(&doc).unwrap(); + provider.add_document(&doc).unwrap(); + let template_ref = doc.doc_ref().unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -228,11 +223,7 @@ use crate::{ )] #[test_case( |_, _| { - let template_ref = DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - ); + let template_ref = create_dummy_doc_ref(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -281,8 +272,8 @@ async fn template_specified_test( .with_metadata_field(SupportedField::ContentType(ContentType::SchemaJson)) .with_content(json_schema) .build(); - provider.add_document(None, &doc).unwrap(); - let template_ref = DocumentRef::try_from(&doc).unwrap(); + provider.add_document(&doc).unwrap(); + let template_ref = doc.doc_ref().unwrap(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() diff --git a/rust/signed_doc/src/validator/rules/ver/tests.rs b/rust/signed_doc/src/validator/rules/ver/tests.rs index f62b9e143a..4ec84afc8c 100644 --- a/rust/signed_doc/src/validator/rules/ver/tests.rs +++ b/rust/signed_doc/src/validator/rules/ver/tests.rs @@ -34,7 +34,7 @@ use crate::{ .with_metadata_field(SupportedField::Ver(id)) .with_metadata_field(SupportedField::Type(doc_type.into())) .build(); - provider.add_document(None, &first_doc).unwrap(); + provider.add_document(&first_doc).unwrap(); let ver = Uuid::new_v7(Timestamp::from_unix_time(u64::try_from(now + 1).unwrap_or(0), 0, 0, 0)) .try_into() @@ -64,7 +64,7 @@ use crate::{ .with_metadata_field(SupportedField::Ver(id)) .with_metadata_field(SupportedField::Type(doc_type.into())) .build(); - provider.add_document(None, &first_doc).unwrap(); + provider.add_document(&first_doc).unwrap(); let ver = Uuid::new_v7(Timestamp::from_unix_time(u64::try_from(now - 1).unwrap_or(0), 0, 0, 0)) .try_into() @@ -94,7 +94,7 @@ use crate::{ .with_metadata_field(SupportedField::Ver(id)) .with_metadata_field(SupportedField::Type(doc_type.into())) .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); let ver_1 = Uuid::new_v7(Timestamp::from_unix_time(u64::try_from(now + 3).unwrap_or(0), 0, 0, 0)) .try_into() @@ -104,7 +104,7 @@ use crate::{ .with_metadata_field(SupportedField::Ver(ver_1)) .with_metadata_field(SupportedField::Type(doc_type.into())) .build(); - provider.add_document(None, &doc).unwrap(); + provider.add_document(&doc).unwrap(); let ver_2 = Uuid::new_v7(Timestamp::from_unix_time(u64::try_from(now + 2).unwrap_or(0), 0, 0, 0)) .try_into() @@ -156,7 +156,7 @@ use crate::{ .with_metadata_field(SupportedField::Ver(id)) .with_metadata_field(SupportedField::Type(doc_type.into())) .build(); - provider.add_document(None, &first_doc).unwrap(); + provider.add_document(&first_doc).unwrap(); let ver = Uuid::new_v7(Timestamp::from_unix_time(u64::try_from(now + 1).unwrap_or(0), 0, 0, 0)) .try_into() @@ -184,7 +184,7 @@ use crate::{ .with_metadata_field(SupportedField::Id(id)) .with_metadata_field(SupportedField::Ver(id)) .build(); - provider.add_document(None, &first_doc).unwrap(); + provider.add_document(&first_doc).unwrap(); let ver = Uuid::new_v7(Timestamp::from_unix_time(u64::try_from(now + 1).unwrap_or(0), 0, 0, 0)) .try_into() @@ -213,7 +213,7 @@ use crate::{ .with_metadata_field(SupportedField::Ver(id)) .with_metadata_field(SupportedField::Type(UuidV4::new().into())) .build(); - provider.add_document(None, &first_doc).unwrap(); + provider.add_document(&first_doc).unwrap(); let ver = Uuid::new_v7(Timestamp::from_unix_time(u64::try_from(now + 1).unwrap_or(0), 0, 0, 0)) .try_into() diff --git a/rust/signed_doc/tests/brand_parameters.rs b/rust/signed_doc/tests/brand_parameters.rs index a99736d02c..9e089884e2 100644 --- a/rust/signed_doc/tests/brand_parameters.rs +++ b/rust/signed_doc/tests/brand_parameters.rs @@ -14,7 +14,7 @@ mod common; #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; brand_parameters_doc(&template, provider) } => true @@ -23,12 +23,12 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; + let template_ref = template.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -49,12 +49,12 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; + let template_ref = template.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -75,12 +75,12 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; + let template_ref = template.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/campaign_parameters.rs b/rust/signed_doc/tests/campaign_parameters.rs index 2984e3d38b..805959cbd8 100644 --- a/rust/signed_doc/tests/campaign_parameters.rs +++ b/rust/signed_doc/tests/campaign_parameters.rs @@ -15,9 +15,9 @@ mod common; #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; campaign_parameters_doc(&template, ¶meters, provider) } => true @@ -26,15 +26,15 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -56,15 +56,15 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -86,15 +86,15 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -115,13 +115,13 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -142,14 +142,14 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; + let template_ref = template.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/campaign_parameters_form_template.rs b/rust/signed_doc/tests/campaign_parameters_form_template.rs index f56fc99f48..d1d11883ab 100644 --- a/rust/signed_doc/tests/campaign_parameters_form_template.rs +++ b/rust/signed_doc/tests/campaign_parameters_form_template.rs @@ -15,8 +15,8 @@ mod common; #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; campaign_parameters_form_template_doc(¶meters, provider) } => true @@ -25,13 +25,13 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -52,13 +52,13 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -79,13 +79,13 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/category_parameters.rs b/rust/signed_doc/tests/category_parameters.rs index 8494016bff..e09c5dc0c0 100644 --- a/rust/signed_doc/tests/category_parameters.rs +++ b/rust/signed_doc/tests/category_parameters.rs @@ -16,11 +16,11 @@ mod common; #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; category_parameters_doc(&template, ¶meters, provider) } => true @@ -29,17 +29,17 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -61,17 +61,17 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -93,17 +93,17 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -124,15 +124,15 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -153,16 +153,16 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; + let template_ref = template.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/category_parameters_form_template.rs b/rust/signed_doc/tests/category_parameters_form_template.rs index a0410bfe25..a4b8322915 100644 --- a/rust/signed_doc/tests/category_parameters_form_template.rs +++ b/rust/signed_doc/tests/category_parameters_form_template.rs @@ -16,10 +16,10 @@ mod common; #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(¶meters, &template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(¶meters, &template, provider).inspect(|v| provider.add_document(v).unwrap())?; category_parameters_form_template_doc(¶meters, provider) } => true @@ -28,15 +28,15 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(¶meters, &template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(¶meters, &template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -57,15 +57,15 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(¶meters, &template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(¶meters, &template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -86,15 +86,15 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(¶meters, &template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(¶meters, &template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/common/brand_parameters.rs b/rust/signed_doc/tests/common/brand_parameters.rs index 3b817fcc50..d335d3a3c6 100644 --- a/rust/signed_doc/tests/common/brand_parameters.rs +++ b/rust/signed_doc/tests/common/brand_parameters.rs @@ -11,7 +11,7 @@ pub fn brand_parameters_doc( let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(template)?; + let template_ref = template.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/common/campaign_parameters.rs b/rust/signed_doc/tests/common/campaign_parameters.rs index 691ad6544d..7fd594747b 100644 --- a/rust/signed_doc/tests/common/campaign_parameters.rs +++ b/rust/signed_doc/tests/common/campaign_parameters.rs @@ -12,8 +12,8 @@ pub fn campaign_parameters_doc( let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(template)?; - let parameters_ref = DocumentRef::try_from(parameters)?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/common/campaign_parameters_form_template.rs b/rust/signed_doc/tests/common/campaign_parameters_form_template.rs index c84018f08f..36360edca0 100644 --- a/rust/signed_doc/tests/common/campaign_parameters_form_template.rs +++ b/rust/signed_doc/tests/common/campaign_parameters_form_template.rs @@ -11,7 +11,7 @@ pub fn campaign_parameters_form_template_doc( let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(parameters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/common/category_parameters.rs b/rust/signed_doc/tests/common/category_parameters.rs index 199c660fea..ad17d2ecbf 100644 --- a/rust/signed_doc/tests/common/category_parameters.rs +++ b/rust/signed_doc/tests/common/category_parameters.rs @@ -12,8 +12,8 @@ pub fn category_parameters_doc( let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(template)?; - let parameters_ref = DocumentRef::try_from(parameters)?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/common/category_parameters_form_template.rs b/rust/signed_doc/tests/common/category_parameters_form_template.rs index 8e6012d44a..5bfe416e4c 100644 --- a/rust/signed_doc/tests/common/category_parameters_form_template.rs +++ b/rust/signed_doc/tests/common/category_parameters_form_template.rs @@ -11,7 +11,7 @@ pub fn category_parameters_form_template_doc( let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(parameters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/common/mod.rs b/rust/signed_doc/tests/common/mod.rs index 5e62e44645..1bcfdc9c1a 100644 --- a/rust/signed_doc/tests/common/mod.rs +++ b/rust/signed_doc/tests/common/mod.rs @@ -65,7 +65,7 @@ pub fn create_signing_key() -> ed25519_dalek::SigningKey { } #[allow(clippy::expect_used)] -pub fn create_dummy_doc_locator() -> DocLocator { +pub fn create_dummy_doc_ref() -> DocumentRef { let test_doc = Builder::new() .with_json_metadata(serde_json::json!({ "id": UuidV7::new().to_string(), @@ -79,6 +79,5 @@ pub fn create_dummy_doc_locator() -> DocLocator { .build() .expect("Should build document"); - let cid = test_doc.to_cid_v1().expect("Should generate CID"); - DocLocator::from(cid) + test_doc.doc_ref().expect("Should generate DocumentRef") } diff --git a/rust/signed_doc/tests/common/proposal.rs b/rust/signed_doc/tests/common/proposal.rs index ca4793e5d5..ca59947178 100644 --- a/rust/signed_doc/tests/common/proposal.rs +++ b/rust/signed_doc/tests/common/proposal.rs @@ -14,8 +14,8 @@ pub fn proposal_doc( let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(template_doc)?; - let parameters_ref = DocumentRef::try_from(parameters_doc)?; + let template_ref = template_doc.doc_ref()?; + let parameters_ref = parameters_doc.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/common/proposal_comment.rs b/rust/signed_doc/tests/common/proposal_comment.rs index c429f9358f..7cd0b1936b 100644 --- a/rust/signed_doc/tests/common/proposal_comment.rs +++ b/rust/signed_doc/tests/common/proposal_comment.rs @@ -14,9 +14,9 @@ pub fn proposal_comment_doc( let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let ref_doc_ref = DocumentRef::try_from(ref_doc)?; - let template_doc_ref = DocumentRef::try_from(template_doc)?; - let parameters_doc_ref = DocumentRef::try_from(parameters_doc)?; + let ref_doc_ref = ref_doc.doc_ref()?; + let template_doc_ref = template_doc.doc_ref()?; + let parameters_doc_ref = parameters_doc.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/common/proposal_comment_form_template.rs b/rust/signed_doc/tests/common/proposal_comment_form_template.rs index 5b3cb596ee..b4cba3a5b4 100644 --- a/rust/signed_doc/tests/common/proposal_comment_form_template.rs +++ b/rust/signed_doc/tests/common/proposal_comment_form_template.rs @@ -11,7 +11,7 @@ pub fn proposal_comment_form_template_doc( let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(parameters_doc)?; + let parameters_ref = parameters_doc.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/common/proposal_form_template.rs b/rust/signed_doc/tests/common/proposal_form_template.rs index 146cd623e5..76d8ea37f0 100644 --- a/rust/signed_doc/tests/common/proposal_form_template.rs +++ b/rust/signed_doc/tests/common/proposal_form_template.rs @@ -11,7 +11,7 @@ pub fn proposal_form_template_doc( let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(parameters_doc)?; + let parameters_ref = parameters_doc.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/common/proposal_submission_action.rs b/rust/signed_doc/tests/common/proposal_submission_action.rs index f6c0e09d22..2ae84def4d 100644 --- a/rust/signed_doc/tests/common/proposal_submission_action.rs +++ b/rust/signed_doc/tests/common/proposal_submission_action.rs @@ -13,8 +13,8 @@ pub fn proposal_submission_action_doc( .map(|(sk, kid)| (sk, kid.with_role(RoleId::Proposer))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; - let ref_doc_ref = DocumentRef::try_from(ref_doc)?; - let parameters_doc_ref = DocumentRef::try_from(parameters_doc)?; + let ref_doc_ref = ref_doc.doc_ref()?; + let parameters_doc_ref = parameters_doc.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/decoding.rs b/rust/signed_doc/tests/decoding.rs index aea22b75fc..f5a1213c84 100644 --- a/rust/signed_doc/tests/decoding.rs +++ b/rust/signed_doc/tests/decoding.rs @@ -2,10 +2,12 @@ use catalyst_signed_doc::{decode_context::CompatibilityPolicy, *}; use catalyst_types::catalyst_id::role_index::RoleId; -use common::{create_dummy_doc_locator, create_dummy_key_pair}; +use common::create_dummy_key_pair; use minicbor::{Decode, Encoder, data::Tag}; use rand::Rng; +use crate::common::create_dummy_doc_ref; + mod common; type PostCheck = dyn Fn(&CatalystSignedDocument) -> anyhow::Result<()>; @@ -25,7 +27,7 @@ struct TestCase { fn signed_doc_deprecated_doc_ref_case(field_name: &'static str) -> TestCase { let uuid_v7 = UuidV7::new(); let doc_type = DocType::from(UuidV4::new()); - let doc_ref = DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); + let doc_ref = create_dummy_doc_ref(); TestCase { name: format!( "Catalyst Signed Doc with deprecated {field_name} version before v0.04 validating." @@ -82,11 +84,7 @@ fn signed_doc_deprecated_doc_ref_case(field_name: &'static str) -> TestCase { fn signed_doc_with_valid_alias_case(alias: &'static str) -> TestCase { let uuid_v7 = UuidV7::new(); let doc_type = DocType::from(UuidV4::new()); - let doc_ref = DocumentRefs::from(vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )]); + let doc_ref = DocumentRefs::from(vec![create_dummy_doc_ref()]); let doc_ref_cloned = doc_ref.clone(); TestCase { name: format!("Provided '{alias}' field should be processed as parameters."), @@ -145,8 +143,7 @@ fn signed_doc_with_missing_header_field_case(field: &'static str) -> TestCase { name: format!("Catalyst Signed Doc with missing '{field}' header."), bytes_gen: Box::new({ move || { - let doc_ref = - DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); + let doc_ref = create_dummy_doc_ref(); let mut e = Encoder::new(Vec::new()); e.tag(Tag::new(98))?; e.array(4)?; @@ -303,8 +300,7 @@ fn signed_doc_with_parameters_and_aliases_case(aliases: &'static [&'static str]) name: format!("Multiple definitions of '{}' at once.", aliases.join(", ")), bytes_gen: Box::new({ move || { - let doc_ref = - DocumentRef::new(UuidV7::new(), UuidV7::new(), create_dummy_doc_locator()); + let doc_ref = create_dummy_doc_ref(); let mut e = Encoder::new(Vec::new()); e.tag(Tag::new(98))?; e.array(4)?; @@ -592,11 +588,7 @@ fn signed_doc_with_minimal_metadata_fields_case() -> TestCase { fn signed_doc_with_complete_metadata_fields_case() -> TestCase { let uuid_v7 = UuidV7::new(); let doc_type = DocType::from(UuidV4::new()); - let doc_ref = DocumentRefs::from(vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - create_dummy_doc_locator(), - )]); + let doc_ref = DocumentRefs::from(vec![create_dummy_doc_ref()]); let doc_ref_cloned = doc_ref.clone(); TestCase { name: "Catalyst Signed Doc with all metadata fields defined, signed (one signature), CBOR tagged.".to_string(), diff --git a/rust/signed_doc/tests/proposal.rs b/rust/signed_doc/tests/proposal.rs index 742c2609f8..6e19c45c8a 100644 --- a/rust/signed_doc/tests/proposal.rs +++ b/rust/signed_doc/tests/proposal.rs @@ -18,9 +18,9 @@ mod common; #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_doc(&template, ¶meters, provider) } => true @@ -29,11 +29,11 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_doc(&template, ¶meters, provider) } => true @@ -42,13 +42,13 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = category_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = category_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_doc(&template, ¶meters, provider) } => true @@ -57,15 +57,15 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -87,15 +87,15 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -117,15 +117,15 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -146,13 +146,13 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -173,14 +173,14 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; + let template_ref = template.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/proposal_comment.rs b/rust/signed_doc/tests/proposal_comment.rs index c7803258ea..76bdf09c9d 100644 --- a/rust/signed_doc/tests/proposal_comment.rs +++ b/rust/signed_doc/tests/proposal_comment.rs @@ -18,11 +18,11 @@ mod common; #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_comment_doc(&proposal, &template, ¶meters, provider) } => true @@ -31,13 +31,13 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_comment_doc(&proposal, &template, ¶meters, provider) } => true @@ -46,15 +46,15 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = category_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = category_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_comment_doc(&proposal, &template, ¶meters, provider) } => true @@ -63,20 +63,20 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let comment = proposal_comment_doc(&proposal, &template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let comment = proposal_comment_doc(&proposal, &template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let proposal_ref = DocumentRef::try_from(&proposal)?; - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; - let comment_ref = DocumentRef::try_from(&comment)?; + let proposal_ref = proposal.doc_ref()?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + let comment_ref = comment.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -100,18 +100,18 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); - let proposal_ref = DocumentRef::try_from(&proposal)?; - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let proposal_ref = proposal.doc_ref()?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -134,18 +134,18 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let proposal_ref = DocumentRef::try_from(&proposal)?; - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let proposal_ref = proposal.doc_ref()?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ @@ -169,18 +169,18 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let proposal_ref = DocumentRef::try_from(&proposal)?; - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let proposal_ref = proposal.doc_ref()?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ @@ -203,16 +203,16 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let proposal_ref = DocumentRef::try_from(&proposal)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let proposal_ref = proposal.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ @@ -235,17 +235,17 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let proposal_ref = DocumentRef::try_from(&proposal)?; - let template_ref = DocumentRef::try_from(&template)?; + let proposal_ref = proposal.doc_ref()?; + let template_ref = template.doc_ref()?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ @@ -268,15 +268,15 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_comment_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let template_ref = DocumentRef::try_from(&template)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/proposal_comment_form_template.rs b/rust/signed_doc/tests/proposal_comment_form_template.rs index 6ac446b2ab..d8c10d5cf0 100644 --- a/rust/signed_doc/tests/proposal_comment_form_template.rs +++ b/rust/signed_doc/tests/proposal_comment_form_template.rs @@ -17,8 +17,8 @@ mod common; #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_comment_form_template_doc(¶meters, provider) } => true @@ -27,10 +27,10 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_comment_form_template_doc(¶meters, provider) } => true @@ -39,12 +39,12 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = category_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = category_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_comment_form_template_doc(¶meters, provider) } => true @@ -53,13 +53,13 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -80,13 +80,13 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -107,13 +107,13 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/proposal_form_template.rs b/rust/signed_doc/tests/proposal_form_template.rs index a58b8ea3a8..05f3125221 100644 --- a/rust/signed_doc/tests/proposal_form_template.rs +++ b/rust/signed_doc/tests/proposal_form_template.rs @@ -16,8 +16,8 @@ mod common; #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_form_template_doc(¶meters, provider) } => true @@ -26,10 +26,10 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_form_template_doc(¶meters, provider) } => true @@ -38,12 +38,12 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = category_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = category_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_form_template_doc(¶meters, provider) } => true @@ -52,13 +52,13 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -79,13 +79,13 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -106,13 +106,13 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(None); provider.add_sk(kid.clone(), sk.clone()); - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ diff --git a/rust/signed_doc/tests/proposal_submission_action.rs b/rust/signed_doc/tests/proposal_submission_action.rs index efa02f1304..ab2046a75d 100644 --- a/rust/signed_doc/tests/proposal_submission_action.rs +++ b/rust/signed_doc/tests/proposal_submission_action.rs @@ -18,10 +18,10 @@ mod common; #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_submission_action_doc(&proposal, ¶meters, provider) } => true @@ -30,12 +30,12 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_submission_action_doc(&proposal, ¶meters, provider) } => true @@ -44,14 +44,14 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = category_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = campaign_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = campaign_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = category_parameters_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = category_parameters_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; proposal_submission_action_doc(&proposal, ¶meters, provider) } => true @@ -60,17 +60,17 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = get_doc_kid_and_sk(provider, &proposal, 0) .map(|(sk, kid)| (sk, kid.with_role(RoleId::Role0))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; - let proposal_ref = DocumentRef::try_from(&proposal)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let proposal_ref = proposal.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -94,16 +94,16 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); - let proposal_ref = DocumentRef::try_from(&proposal)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let proposal_ref = proposal.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -127,17 +127,17 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = get_doc_kid_and_sk(provider, &proposal, 0) .map(|(sk, kid)| (sk, kid.with_role(RoleId::Proposer))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; - let proposal_ref = DocumentRef::try_from(&proposal)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let proposal_ref = proposal.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -159,17 +159,17 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = get_doc_kid_and_sk(provider, &proposal, 0) .map(|(sk, kid)| (sk, kid.with_role(RoleId::Proposer))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; - let proposal_ref = DocumentRef::try_from(&proposal)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let proposal_ref = proposal.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -191,17 +191,17 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = get_doc_kid_and_sk(provider, &proposal, 0) .map(|(sk, kid)| (sk, kid.with_role(RoleId::Proposer))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; - let proposal_ref = DocumentRef::try_from(&proposal)?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let proposal_ref = proposal.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -224,16 +224,16 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = get_doc_kid_and_sk(provider, &proposal, 0) .map(|(sk, kid)| (sk, kid.with_role(RoleId::Proposer))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; - let parameters_ref = DocumentRef::try_from(¶meters)?; + let parameters_ref = parameters.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({ @@ -256,16 +256,16 @@ mod common; )] #[test_case( |provider| { - let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; - let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(v).unwrap())?; + let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(v).unwrap())?; + let template = proposal_form_template_doc(¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; + let proposal = proposal_doc(&template, ¶meters, provider).inspect(|v| provider.add_document(v).unwrap())?; let id = UuidV7::new(); let (sk, kid) = get_doc_kid_and_sk(provider, &proposal, 0) .map(|(sk, kid)| (sk, kid.with_role(RoleId::Proposer))) .inspect(|(sk, kid)| provider.add_sk(kid.clone(), sk.clone()))?; - let proposal_ref = DocumentRef::try_from(&proposal)?; + let proposal_ref = proposal.doc_ref()?; Builder::new() .with_json_metadata(serde_json::json!({