From 970d003ddf3e0e6b50686faa5e63c88b900b8886 Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Tue, 29 Jul 2025 17:10:03 +0400 Subject: [PATCH 1/5] fix issue with adding problem report when everything is fine --- .../src/validator/rules/parameters.rs | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/rust/signed_doc/src/validator/rules/parameters.rs b/rust/signed_doc/src/validator/rules/parameters.rs index 80fc9447bd8..970b44da6fa 100644 --- a/rust/signed_doc/src/validator/rules/parameters.rs +++ b/rust/signed_doc/src/validator/rules/parameters.rs @@ -1,6 +1,5 @@ //! `parameters` rule type impl. -use super::doc_ref::referenced_doc_check; use crate::{ providers::CatalystSignedDocumentProvider, validator::utils::validate_doc_refs, CatalystSignedDocument, DocType, @@ -35,10 +34,29 @@ impl ParametersRule { { if let Some(parameters_ref) = doc.doc_meta().parameters() { let parameters_validator = |ref_doc: CatalystSignedDocument| { + let Ok(ref_doc_type) = ref_doc.doc_type() else { + doc.report() + .missing_field("type", "Referenced document must have type field"); + return false; + }; + // Check that the type matches one of the expected ones - exp_parameters_type.iter().any(|exp_type| { - referenced_doc_check(&ref_doc, exp_type, "parameters", doc.report()) - }) + if !exp_parameters_type + .iter() + .any(|exp_type| ref_doc_type != exp_type) + { + doc.report().invalid_value( + "parameters", + &ref_doc_type.to_string(), + &exp_parameters_type + .iter() + .fold(String::new(), |s, v| format!("{s}, {v}")), + "Invalid referenced document type", + ); + + return false; + } + true }; return validate_doc_refs( parameters_ref, From fc5120ec3b5664593e008a48f1f505f38be2b916 Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Tue, 29 Jul 2025 17:37:47 +0400 Subject: [PATCH 2/5] fix --- rust/signed_doc/src/validator/rules/parameters.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rust/signed_doc/src/validator/rules/parameters.rs b/rust/signed_doc/src/validator/rules/parameters.rs index 970b44da6fa..b3d7aaa5747 100644 --- a/rust/signed_doc/src/validator/rules/parameters.rs +++ b/rust/signed_doc/src/validator/rules/parameters.rs @@ -35,8 +35,10 @@ impl ParametersRule { if let Some(parameters_ref) = doc.doc_meta().parameters() { let parameters_validator = |ref_doc: CatalystSignedDocument| { let Ok(ref_doc_type) = ref_doc.doc_type() else { - doc.report() - .missing_field("type", "Referenced document must have type field"); + doc.report().missing_field( + "type", + &format!("{context}, Referenced document must have type field"), + ); return false; }; @@ -51,7 +53,7 @@ impl ParametersRule { &exp_parameters_type .iter() .fold(String::new(), |s, v| format!("{s}, {v}")), - "Invalid referenced document type", + &format!("{context}, Invalid referenced document type"), ); return false; From 0ab4adeb4cd66334621ed384e46892e83b21f5b4 Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Tue, 29 Jul 2025 17:55:00 +0400 Subject: [PATCH 3/5] fix --- rust/signed_doc/src/validator/rules/parameters.rs | 5 ++--- rust/signed_doc/tests/comment.rs | 1 + rust/signed_doc/tests/proposal.rs | 1 + rust/signed_doc/tests/submission.rs | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/rust/signed_doc/src/validator/rules/parameters.rs b/rust/signed_doc/src/validator/rules/parameters.rs index b3d7aaa5747..01aadfdbb5b 100644 --- a/rust/signed_doc/src/validator/rules/parameters.rs +++ b/rust/signed_doc/src/validator/rules/parameters.rs @@ -43,9 +43,9 @@ impl ParametersRule { }; // Check that the type matches one of the expected ones - if !exp_parameters_type + if exp_parameters_type .iter() - .any(|exp_type| ref_doc_type != exp_type) + .all(|exp_type| ref_doc_type != exp_type) { doc.report().invalid_value( "parameters", @@ -55,7 +55,6 @@ impl ParametersRule { .fold(String::new(), |s, v| format!("{s}, {v}")), &format!("{context}, Invalid referenced document type"), ); - return false; } true diff --git a/rust/signed_doc/tests/comment.rs b/rust/signed_doc/tests/comment.rs index c64848b246e..15709dc4ebf 100644 --- a/rust/signed_doc/tests/comment.rs +++ b/rust/signed_doc/tests/comment.rs @@ -167,6 +167,7 @@ async fn test_valid_comment_doc() { .await .unwrap(); assert!(is_valid); + assert!(!doc.problem_report().is_problematic()); } #[tokio::test] diff --git a/rust/signed_doc/tests/proposal.rs b/rust/signed_doc/tests/proposal.rs index 453f0df0e83..4f1da9a0930 100644 --- a/rust/signed_doc/tests/proposal.rs +++ b/rust/signed_doc/tests/proposal.rs @@ -109,6 +109,7 @@ async fn test_valid_proposal_doc() { .await .unwrap(); assert!(is_valid); + assert!(!doc.problem_report().is_problematic()); } #[tokio::test] diff --git a/rust/signed_doc/tests/submission.rs b/rust/signed_doc/tests/submission.rs index 5ba7e924660..6436181064c 100644 --- a/rust/signed_doc/tests/submission.rs +++ b/rust/signed_doc/tests/submission.rs @@ -103,6 +103,7 @@ async fn test_valid_submission_action() { .await .unwrap(); assert!(is_valid); + assert!(!doc.problem_report().is_problematic()); } #[tokio::test] From 99951012ab7de84b7b2d7f5c6dccdfb20234fbd5 Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Tue, 29 Jul 2025 22:41:03 +0400 Subject: [PATCH 4/5] wip --- rust/signed_doc/tests/comment.rs | 30 ++++++++++++++++++++++++++---- rust/signed_doc/tests/proposal.rs | 30 ++++++++++++++++++++++++++---- 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/rust/signed_doc/tests/comment.rs b/rust/signed_doc/tests/comment.rs index 15709dc4ebf..f39230c943d 100644 --- a/rust/signed_doc/tests/comment.rs +++ b/rust/signed_doc/tests/comment.rs @@ -15,6 +15,22 @@ use crate::common::create_dummy_key_pair; mod common; +#[allow(clippy::unwrap_used)] +static DUMMY_CAMPAIGN_DOC: LazyLock = LazyLock::new(|| { + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json.to_string(), + "id": UuidV7::new(), + "ver": UuidV7::new(), + "type": doc_types::CAMPAIGN_PARAMETERS.clone(), + })) + .unwrap() + .empty_content() + .unwrap() + .build() + .unwrap() +}); + #[allow(clippy::unwrap_used)] static DUMMY_PROPOSAL_DOC: LazyLock = LazyLock::new(|| { Builder::new() @@ -56,10 +72,16 @@ static COMMENT_TEMPLATE_DOC: LazyLock = LazyLock::new(|| "type": doc_types::PROPOSAL_COMMENT_FORM_TEMPLATE.clone(), "id": UuidV7::new(), "ver": UuidV7::new(), - "parameters": { - "id": DUMMY_BRAND_DOC.doc_id().unwrap(), - "ver": DUMMY_BRAND_DOC.doc_ver().unwrap(), - } + "parameters": [ + { + "id": DUMMY_BRAND_DOC.doc_id().unwrap(), + "ver": DUMMY_BRAND_DOC.doc_ver().unwrap(), + }, + { + "id": DUMMY_CAMPAIGN_DOC.doc_id().unwrap(), + "ver": DUMMY_CAMPAIGN_DOC.doc_ver().unwrap(), + }, + ] })) .unwrap() .with_json_content(&serde_json::json!({ diff --git a/rust/signed_doc/tests/proposal.rs b/rust/signed_doc/tests/proposal.rs index 4f1da9a0930..00c57c8750e 100644 --- a/rust/signed_doc/tests/proposal.rs +++ b/rust/signed_doc/tests/proposal.rs @@ -15,6 +15,22 @@ use crate::common::create_dummy_key_pair; mod common; +#[allow(clippy::unwrap_used)] +static DUMMY_CAMPAIGN_DOC: LazyLock = LazyLock::new(|| { + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json.to_string(), + "id": UuidV7::new(), + "ver": UuidV7::new(), + "type": doc_types::CAMPAIGN_PARAMETERS.clone(), + })) + .unwrap() + .empty_content() + .unwrap() + .build() + .unwrap() +}); + #[allow(clippy::unwrap_used)] static DUMMY_BRAND_DOC: LazyLock = LazyLock::new(|| { Builder::new() @@ -40,10 +56,16 @@ static PROPOSAL_TEMPLATE_DOC: LazyLock = LazyLock::new(| "type": doc_types::PROPOSAL_FORM_TEMPLATE.clone(), "id": UuidV7::new(), "ver": UuidV7::new(), - "parameters": { - "id": DUMMY_BRAND_DOC.doc_id().unwrap(), - "ver": DUMMY_BRAND_DOC.doc_ver().unwrap(), - } + "parameters": [ + { + "id": DUMMY_BRAND_DOC.doc_id().unwrap(), + "ver": DUMMY_BRAND_DOC.doc_ver().unwrap(), + }, + { + "id": DUMMY_CAMPAIGN_DOC.doc_id().unwrap(), + "ver": DUMMY_CAMPAIGN_DOC.doc_ver().unwrap(), + }, + ] })) .unwrap() .with_json_content(&serde_json::json!({ From 4930ade2fb98fe943413a6bbd7501a87a3c9e0e5 Mon Sep 17 00:00:00 2001 From: Mr-Leshiy Date: Wed, 30 Jul 2025 18:28:03 +0400 Subject: [PATCH 5/5] wip --- rust/signed_doc/tests/comment.rs | 26 ++------------------------ rust/signed_doc/tests/proposal.rs | 24 +----------------------- 2 files changed, 3 insertions(+), 47 deletions(-) diff --git a/rust/signed_doc/tests/comment.rs b/rust/signed_doc/tests/comment.rs index f39230c943d..f96dab12c54 100644 --- a/rust/signed_doc/tests/comment.rs +++ b/rust/signed_doc/tests/comment.rs @@ -15,22 +15,6 @@ use crate::common::create_dummy_key_pair; mod common; -#[allow(clippy::unwrap_used)] -static DUMMY_CAMPAIGN_DOC: LazyLock = LazyLock::new(|| { - Builder::new() - .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "id": UuidV7::new(), - "ver": UuidV7::new(), - "type": doc_types::CAMPAIGN_PARAMETERS.clone(), - })) - .unwrap() - .empty_content() - .unwrap() - .build() - .unwrap() -}); - #[allow(clippy::unwrap_used)] static DUMMY_PROPOSAL_DOC: LazyLock = LazyLock::new(|| { Builder::new() @@ -72,16 +56,10 @@ static COMMENT_TEMPLATE_DOC: LazyLock = LazyLock::new(|| "type": doc_types::PROPOSAL_COMMENT_FORM_TEMPLATE.clone(), "id": UuidV7::new(), "ver": UuidV7::new(), - "parameters": [ - { + "parameters": { "id": DUMMY_BRAND_DOC.doc_id().unwrap(), "ver": DUMMY_BRAND_DOC.doc_ver().unwrap(), - }, - { - "id": DUMMY_CAMPAIGN_DOC.doc_id().unwrap(), - "ver": DUMMY_CAMPAIGN_DOC.doc_ver().unwrap(), - }, - ] + } })) .unwrap() .with_json_content(&serde_json::json!({ diff --git a/rust/signed_doc/tests/proposal.rs b/rust/signed_doc/tests/proposal.rs index 00c57c8750e..03f4d608644 100644 --- a/rust/signed_doc/tests/proposal.rs +++ b/rust/signed_doc/tests/proposal.rs @@ -15,22 +15,6 @@ use crate::common::create_dummy_key_pair; mod common; -#[allow(clippy::unwrap_used)] -static DUMMY_CAMPAIGN_DOC: LazyLock = LazyLock::new(|| { - Builder::new() - .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "id": UuidV7::new(), - "ver": UuidV7::new(), - "type": doc_types::CAMPAIGN_PARAMETERS.clone(), - })) - .unwrap() - .empty_content() - .unwrap() - .build() - .unwrap() -}); - #[allow(clippy::unwrap_used)] static DUMMY_BRAND_DOC: LazyLock = LazyLock::new(|| { Builder::new() @@ -56,16 +40,10 @@ static PROPOSAL_TEMPLATE_DOC: LazyLock = LazyLock::new(| "type": doc_types::PROPOSAL_FORM_TEMPLATE.clone(), "id": UuidV7::new(), "ver": UuidV7::new(), - "parameters": [ - { + "parameters": { "id": DUMMY_BRAND_DOC.doc_id().unwrap(), "ver": DUMMY_BRAND_DOC.doc_ver().unwrap(), }, - { - "id": DUMMY_CAMPAIGN_DOC.doc_id().unwrap(), - "ver": DUMMY_CAMPAIGN_DOC.doc_ver().unwrap(), - }, - ] })) .unwrap() .with_json_content(&serde_json::json!({