diff --git a/.config/dictionaries/project.dic b/.config/dictionaries/project.dic index fd85887412d..cda2ae3d2e8 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/Cargo.toml b/rust/signed_doc/Cargo.toml index 0cc9bbc3396..0955344ea92 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 00000000000..fe77858acb0 --- /dev/null +++ b/rust/signed_doc/src/cid_v1.rs @@ -0,0 +1,472 @@ +//! 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 + +use std::{fmt, ops::Deref, str::FromStr}; + +use minicbor::{Decoder, Encoder, data::Tag, decode::Error as DecodeError}; +use sha2::{Digest, Sha256}; +use thiserror::Error; + +/// CBOR multicodec identifier. +/// +/// See: +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 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 +/// 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 (typically from a `CatalystSignedDocument`) +/// +/// # Returns +/// +/// A `Cid` object representing the CID v1 +/// +/// # Errors +/// +/// 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); + 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) + .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(cid)) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{Builder, CatalystSignedDocument, ContentType}; + + /// SHA2-256 digest size in bytes. + const SHA2_256_SIZE: usize = 32; + + 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] + 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 parsable"); + + 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(); + 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] + 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 = to_cid_v1(&cbor_bytes).expect("CID should be valid"); + let cid_bytes = Vec::::from(cid); + + assert_eq!( + cid_bytes.len(), + 36, + "CID v1 binary format should be exactly 36 bytes" + ); + } + + #[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] + fn test_string_format_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 cid_string = cid.to_string(); + + assert!( + cid_string.starts_with('b'), + "CID v1 base32 string should start with 'b'" + ); + } + + #[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] + fn test_different_documents_different_cids() { + 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 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, + "Different documents should produce different CIDs" + ); + } + + #[test] + fn test_cid_string_properties() { + 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 cid_string = cid.to_string(); + + // 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] + fn test_full_cid_round_trip() { + let doc = create_test_document(); + let original_bytes = doc.to_bytes().expect("Should serialize to CBOR"); + + // 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 = 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"); + + // 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 b1363538873..3dcad075cdc 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; +pub mod cid_v1; mod content; pub mod decode_context; pub mod doc_types; @@ -21,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::{ @@ -251,6 +253,45 @@ impl CatalystSignedDocument { ) -> anyhow::Result { Ok(minicbor::decode_with(bytes, &mut policy)?) } + + /// Returns a `DocumentRef` for the current document. + /// + /// Generating a CID v1 (Content Identifier version 1) creates an IPFS-compatible + /// content identifier using: + /// - CID version 1 + /// - CBOR multicodec (0x51) + /// - SHA2-256 multihash + /// + /// # Errors + /// - CBOR serialization failure + /// - Multihash construction failure + /// - 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 (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 + 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) + } } impl Decode<'_, CompatibilityPolicy> for CatalystSignedDocument { diff --git a/rust/signed_doc/src/metadata/chain.rs b/rust/signed_doc/src/metadata/chain.rs index f8b5403536f..1615025bb4e 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/metadata/document_refs/doc_locator.rs b/rust/signed_doc/src/metadata/document_refs/doc_locator.rs index 8982f79f04f..c4b09253d9b 100644 --- a/rust/signed_doc/src/metadata/document_refs/doc_locator.rs +++ b/rust/signed_doc/src/metadata/document_refs/doc_locator.rs @@ -7,10 +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::metadata::document_refs::DocRefError; - -/// CBOR tag of IPLD content identifiers (CIDs). -const CID_TAG: u64 = 42; +use crate::{ + cid_v1::{Cid, CidError}, + metadata::document_refs::DocRefError, +}; /// CID map key. const CID_MAP_KEY: &str = "cid"; @@ -18,21 +18,30 @@ 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 +50,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 +58,8 @@ 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 +83,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 +107,13 @@ 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")))?; + // 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) + })?; - if tag.as_u64() != CID_TAG { - return Err(minicbor::decode::Error::message(format!( - "{CONTEXT}: expected tag {CID_TAG}, found {tag}", - ))); - } - - // 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,12 +129,12 @@ 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(()) } } @@ -148,10 +145,13 @@ mod tests { use minicbor::{Decoder, Encoder}; use super::*; + use crate::{ + Builder, ContentType, UuidV7, metadata::document_refs::tests::create_dummy_doc_ref, + }; #[test] fn test_doc_locator_encode_decode() { - let locator = DocLocator(vec![1, 2, 3, 4]); + 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(); @@ -160,15 +160,48 @@ 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_ref().doc_locator().clone(); + 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_ref().doc_locator().clone(); + 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 71bef70079a..f2c9365c92a 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; @@ -20,7 +19,7 @@ pub struct DocumentRef { /// Reference to the Document Ver ver: UuidV7, /// Document locator - #[serde(rename = "cid", default)] + #[serde(rename = "cid")] doc_locator: DocLocator, } @@ -58,18 +57,6 @@ impl DocumentRef { } } -impl TryFrom<&CatalystSignedDocument> for DocumentRef { - type Error = anyhow::Error; - - fn try_from(value: &CatalystSignedDocument) -> Result { - Ok(Self::new( - value.doc_id()?, - value.doc_ver()?, - DocLocator::default(), - )) - } -} - 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 4c20a2dcc21..6a1f7f9098d 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,13 @@ 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!( @@ -230,12 +193,33 @@ mod serde_impl { } #[cfg(test)] -mod tests { +pub(crate) mod tests { + use catalyst_types::uuid::{CborContext, UuidV4, UuidV7}; use minicbor::{Decoder, Encoder}; use test_case::test_case; 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, @@ -284,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(DocLocator::default()) + .encode(doc_ref.doc_locator().clone()) .unwrap(); e } ; @@ -311,43 +296,15 @@ 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| { + |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(); @@ -357,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(); @@ -375,47 +332,27 @@ 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 = DocLocator::default(); - 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_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 doc_ref1 = create_dummy_doc_ref(); + let doc_ref2 = create_dummy_doc_ref(); + + 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 6be81ff8366..036ae9578b9 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(); diff --git a/rust/signed_doc/src/providers.rs b/rust/signed_doc/src/providers.rs index 4f1c258d498..0298d2429db 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,27 +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 dr = DocumentRef::new(doc.doc_id()?, doc.doc_ver()?, DocLocator::default()); - 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 651e311fd8c..6646f985e82 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,10 +186,10 @@ 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(); - // 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)) @@ -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 def11d4fa5f..0b2970295dc 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, + builder::tests::Builder, + metadata::{SupportedField, document_refs::tests::create_dummy_doc_ref}, providers::tests::TestCatalystProvider, }; @@ -14,16 +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::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -38,37 +34,27 @@ 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::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![ + ref_doc_1.doc_ref().unwrap(), + ref_doc_2.doc_ref().unwrap(), + ref_doc_3.doc_ref().unwrap(), + ] .into(), )) .build() @@ -84,37 +70,27 @@ 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::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![ + ref_doc_1.doc_ref().unwrap(), + ref_doc_2.doc_ref().unwrap(), + ref_doc_3.doc_ref().unwrap(), + ] .into(), )) .build() @@ -130,36 +106,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())) .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::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![ + ref_doc_1.doc_ref().unwrap(), + ref_doc_2.doc_ref().unwrap(), + ref_doc_3.doc_ref().unwrap(), + ] .into(), )) .build() @@ -175,16 +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(), DocLocator::default())), &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::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -196,13 +163,7 @@ use crate::{ |_, _| { Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - ), - ] - .into(), + vec![create_dummy_doc_ref()].into(), )) .build() } @@ -249,16 +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::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -273,37 +229,27 @@ 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::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![ + ref_doc_1.doc_ref().unwrap(), + ref_doc_2.doc_ref().unwrap(), + ref_doc_3.doc_ref().unwrap(), + ] .into(), )) .build() @@ -375,12 +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, DocLocator::default())].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 c602074f805..33580dc45a2 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 9851b68dd3e..73efe995919 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,7 +6,7 @@ use ed25519_dalek::ed25519::signature::Signer; use test_case::test_case; use crate::{ - CatalystSignedDocument, DocLocator, DocumentRef, + CatalystSignedDocument, builder::tests::Builder, metadata::SupportedField, providers::tests::TestCatalystProvider, @@ -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(), - DocLocator::default() - ) - ].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(), - DocLocator::default() - ) - ].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(), - DocLocator::default() - ) - ].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 6e0430307ed..a696eb32c6a 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 02387721b7f..cb96dbb65ab 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, + builder::tests::Builder, + metadata::{SupportedField, document_refs::tests::create_dummy_doc_ref}, providers::tests::TestCatalystProvider, }; @@ -14,16 +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::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into(), + vec![parameter_doc.doc_ref().unwrap()].into(), )) .build() } @@ -38,30 +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::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + 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::new( - template_doc.doc_id().unwrap(), - template_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into() + vec![template_doc.doc_ref().unwrap()].into() )) .with_metadata_field(SupportedField::Parameters(common_parameter_field)) .build() @@ -77,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(), - DocLocator::default(), - )] - .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(), - DocLocator::default(), - )] - .into())) .build() } => false @@ -107,30 +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::new( - template_doc.doc_id().unwrap(), - template_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + 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(), - DocLocator::default(), - )] - .into())) + .with_metadata_field(SupportedField::Parameters( + vec![parameter_doc.doc_ref().unwrap()].into() + )) .build() } => false @@ -144,36 +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(), - DocLocator::default(), - )] - .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::new( - template_doc.doc_id().unwrap(), - template_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + 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(), - DocLocator::default(), - )] - .into())) + .with_metadata_field(SupportedField::Parameters( + vec![parameter_doc.doc_ref().unwrap()].into() + )) .build() } => false @@ -187,30 +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::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + 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::new( - replied_doc.doc_id().unwrap(), - replied_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into() + vec![replied_doc.doc_ref().unwrap()].into() )) .with_metadata_field(SupportedField::Parameters(common_parameter_field)) .build() @@ -226,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(), - DocLocator::default(), - )] - .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(), - DocLocator::default(), - )] - .into())) .build() } => false @@ -256,30 +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::new( - reply_doc.doc_id().unwrap(), - reply_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + 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(), - DocLocator::default(), - )] - .into())) + .with_metadata_field(SupportedField::Parameters( + vec![parameter_doc.doc_ref().unwrap()].into() + )) .build() } => false @@ -293,36 +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(), - DocLocator::default(), - )] - .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::new( - reply_doc.doc_id().unwrap(), - reply_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .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(), - DocLocator::default(), - )] - .into())) .build() } => false @@ -336,30 +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::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - DocLocator::default(), - )] + 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::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into() + vec![ref_doc.doc_ref().unwrap()].into() )) .with_metadata_field(SupportedField::Parameters(common_parameter_field)) .build() @@ -375,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(), - DocLocator::default(), - )] - .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(), - DocLocator::default(), - )] - .into())) .build() } => false @@ -405,30 +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::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .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(), - DocLocator::default(), - )] - .into())) .build() } => false @@ -442,36 +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(), - DocLocator::default(), - )] - .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::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .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(), - DocLocator::default(), - )] - .into())) .build() } => false @@ -485,16 +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::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into(), + vec![parameter_doc.doc_ref().unwrap()].into(), )) .build() } @@ -508,16 +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::new( - parameter_doc.doc_id().unwrap(), - parameter_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into(), + vec![parameter_doc.doc_ref().unwrap()].into(), )) .build() } @@ -529,12 +410,7 @@ use crate::{ |_, _| { Builder::new() .with_metadata_field(SupportedField::Parameters( - vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - )] - .into(), + vec![create_dummy_doc_ref()].into(), )) .build() } @@ -601,11 +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, DocLocator::default())].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 eaef8aecb1c..3a2f307a75c 100644 --- a/rust/signed_doc/src/validator/rules/reply/tests.rs +++ b/rust/signed_doc/src/validator/rules/reply/tests.rs @@ -3,35 +3,27 @@ use test_case::test_case; use super::*; use crate::{ - DocLocator, DocumentRef, DocumentRefs, builder::tests::Builder, metadata::SupportedField, + DocumentRefs, + builder::tests::Builder, + 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(), - DocLocator::default(), - )] - .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::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -41,29 +33,19 @@ use crate::{ )] #[test_case( |_, provider| { - let common_ref: DocumentRefs = vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - )] - .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::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -73,28 +55,18 @@ use crate::{ )] #[test_case( |_, provider| { - let common_ref: DocumentRefs = vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - )] - .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::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -108,33 +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(), - DocLocator::default(), - )] - .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(), - DocLocator::default(), - )] - .into(), + vec![create_dummy_doc_ref()].into(), )) .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -144,28 +101,18 @@ use crate::{ )] #[test_case( |exp_type, provider| { - let common_ref: DocumentRefs = vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - )] - .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::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -175,27 +122,17 @@ use crate::{ )] #[test_case( |_, provider| { - let common_ref: DocumentRefs = vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - )] - .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::new( - ref_doc.doc_id().unwrap(), - ref_doc.doc_ver().unwrap(), - DocLocator::default(), - )] - .into(), + vec![ref_doc.doc_ref().unwrap()].into(), )) .build() } @@ -207,20 +144,10 @@ use crate::{ |_, _| { Builder::new() .with_metadata_field(SupportedField::Ref( - vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - )] - .into(), + vec![create_dummy_doc_ref()].into(), )) .with_metadata_field(SupportedField::Reply( - vec![DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - )] - .into(), + vec![create_dummy_doc_ref()].into(), )) .build() } @@ -287,12 +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, DocLocator::default())].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 bd8471e5d62..223f1c3f22c 100644 --- a/rust/signed_doc/src/validator/rules/signature/tests.rs +++ b/rust/signed_doc/src/validator/rules/signature/tests.rs @@ -4,18 +4,26 @@ 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::tests::create_dummy_doc_ref, providers::tests::*, + validator::rules::utils::create_dummy_key_pair, *, +}; fn metadata() -> serde_json::Value { + 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(), "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 +31,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], }) } @@ -194,10 +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(), DocLocator::default()), - &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 8fd9107c9ed..20b2300ee8e 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, + builder::tests::Builder, + metadata::{SupportedField, document_refs::tests::create_dummy_doc_ref}, 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(); + 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() @@ -39,19 +36,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_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,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(); + provider.add_document(&doc).unwrap(); + let template_ref = doc.doc_ref().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(); + provider.add_document(&doc).unwrap(); + let template_ref = doc.doc_ref().unwrap(); Builder::new() .with_metadata_field(SupportedField::Template( @@ -120,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(), - DocLocator::default(), - ); + 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())) @@ -132,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() @@ -149,18 +129,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(); + 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() @@ -177,18 +153,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(); + 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() @@ -204,18 +176,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(); + 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() @@ -231,19 +199,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(); + 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() @@ -259,11 +223,7 @@ use crate::{ )] #[test_case( |_, _| { - let template_ref = DocumentRef::new( - UuidV7::new(), - UuidV7::new(), - DocLocator::default(), - ); + let template_ref = create_dummy_doc_ref(); let json_content = serde_json::to_vec(&serde_json::json!({})).unwrap(); Builder::new() @@ -305,19 +265,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(); + 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 f62b9e143a9..4ec84afc8c6 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 f4efbf4040f..9e089884e2c 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,10 +23,13 @@ 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 = template.doc_ref()?; + 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)? @@ -49,10 +49,13 @@ 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 = template.doc_ref()?; + 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)? @@ -75,10 +75,13 @@ 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 = template.doc_ref()?; + 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 265d3af7a76..805959cbd85 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,12 +26,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 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 = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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)? @@ -58,12 +56,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 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 = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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)? @@ -90,26 +86,24 @@ 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 = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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)? @@ -121,11 +115,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 = 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 = parameters.doc_ref()?; + 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)? @@ -148,12 +142,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 = template.doc_ref()?; + 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 7b3ae4897fd..d1d11883abf 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,11 +25,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 = 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 = parameters.doc_ref()?; + 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)? @@ -52,11 +52,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 = 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 = parameters.doc_ref()?; + 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)? @@ -79,21 +79,21 @@ 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 = parameters.doc_ref()?; + 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 0c3a8bc26bf..e09c5dc0c07 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,14 +29,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 = 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 = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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)? @@ -63,14 +61,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 = 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 = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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)? @@ -97,28 +93,26 @@ 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 = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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)? @@ -130,13 +124,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 = 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 = parameters.doc_ref()?; + 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)? @@ -159,14 +153,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 = template.doc_ref()?; + 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 a2f64d50c96..a4b83229153 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,13 +28,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(¶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 = parameters.doc_ref()?; + 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)? @@ -57,13 +57,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(¶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 = parameters.doc_ref()?; + 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)? @@ -86,23 +86,23 @@ 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 = parameters.doc_ref()?; + 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 ed33a1353a6..d335d3a3c69 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 = template.doc_ref()?; + 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 9233fbaef8d..7fd594747b7 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 = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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 691931750b4..36360edca07 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 = parameters.doc_ref()?; + 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 202282561a2..ad17d2ecbf5 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 = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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 cb19eb4deac..5bfe416e4c8 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 = parameters.doc_ref()?; + 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 8013817fd82..1bcfdc9c1a0 100644 --- a/rust/signed_doc/tests/common/mod.rs +++ b/rust/signed_doc/tests/common/mod.rs @@ -19,7 +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::{ + 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; @@ -60,3 +63,21 @@ 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_ref() -> DocumentRef { + 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"); + + 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 73bff88d570..ca599471782 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 = template_doc.doc_ref()?; + let parameters_ref = parameters_doc.doc_ref()?; + 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 ec99c6aba8f..7cd0b1936bf 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 = 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!({ "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 01636e79ec4..b4cba3a5b4e 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 = parameters_doc.doc_ref()?; + 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 db460c0cc91..76d8ea37f03 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 = parameters_doc.doc_ref()?; + 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 adb2c3dd271..2ae84def4d2 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 = ref_doc.doc_ref()?; + let parameters_doc_ref = parameters_doc.doc_ref()?; + 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 bf059c18a9c..f5a1213c848 100644 --- a/rust/signed_doc/tests/decoding.rs +++ b/rust/signed_doc/tests/decoding.rs @@ -6,6 +6,8 @@ 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(), DocLocator::default()); + let doc_ref = create_dummy_doc_ref(); TestCase { name: format!( "Catalyst Signed Doc with deprecated {field_name} version before v0.04 validating." @@ -74,24 +76,15 @@ 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, } } 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(), - DocLocator::default(), - )]); + 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."), @@ -146,11 +139,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 = create_dummy_doc_ref(); let mut e = Encoder::new(Vec::new()); e.tag(Tag::new(98))?; e.array(4)?; @@ -303,11 +296,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 = create_dummy_doc_ref(); let mut e = Encoder::new(Vec::new()); e.tag(Tag::new(98))?; e.array(4)?; @@ -595,16 +588,13 @@ 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(), - DocLocator::default(), - )]); + 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(), 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 afaac7a4118..6e19c45c8a2 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,12 +57,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 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 = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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)? @@ -89,12 +87,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 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 = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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)? @@ -121,26 +117,24 @@ 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 = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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)? @@ -152,11 +146,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 = 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 = parameters.doc_ref()?; + 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)? @@ -179,12 +173,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 = template.doc_ref()?; + 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 72286de39c9..76bdf09c9d9 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,15 +63,21 @@ 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 = 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!({ "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)? @@ -106,14 +100,19 @@ 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 = proposal.doc_ref()?; + let template_ref = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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)? @@ -144,14 +134,19 @@ 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 = 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!({ "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)? @@ -183,32 +169,28 @@ 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 = 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!({ "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)? @@ -221,13 +203,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) = create_dummy_key_pair(Some(RoleId::Role0)); provider.add_sk(kid.clone(), sk.clone()); + + let proposal_ref = proposal.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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)? @@ -255,14 +235,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 = proposal.doc_ref()?; + let template_ref = template.doc_ref()?; + 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)? @@ -290,12 +268,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_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 = template.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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 aa9a6012347..d8c10d5cf01 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,11 +53,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 = 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 = parameters.doc_ref()?; + 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)? @@ -80,11 +80,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 = 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 = parameters.doc_ref()?; + 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)? @@ -107,21 +107,21 @@ 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 = parameters.doc_ref()?; + 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 f6fec05f5ed..05f31252217 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,11 +52,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 = 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 = parameters.doc_ref()?; + 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)? @@ -79,11 +79,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 = 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 = parameters.doc_ref()?; + 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)? @@ -106,21 +106,21 @@ 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 = parameters.doc_ref()?; + 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 5c199460dfa..ab2046a75db 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,14 +60,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 = 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 = proposal.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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" @@ -96,13 +94,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) = create_dummy_key_pair(Some(RoleId::Proposer)); provider.add_sk(kid.clone(), sk.clone()); + + let proposal_ref = proposal.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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" @@ -131,14 +127,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 = 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 = proposal.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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)? @@ -165,14 +159,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 = 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 = proposal.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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)? @@ -199,28 +191,26 @@ 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 = proposal.doc_ref()?; + let parameters_ref = parameters.doc_ref()?; + 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" @@ -234,14 +224,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 parameters_ref = parameters.doc_ref()?; + 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" @@ -266,14 +256,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 = proposal.doc_ref()?; + 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"