diff --git a/rust/signed_doc/tests/brand_parameters.rs b/rust/signed_doc/tests/brand_parameters.rs new file mode 100644 index 00000000000..7771057dba0 --- /dev/null +++ b/rust/signed_doc/tests/brand_parameters.rs @@ -0,0 +1,140 @@ +//! Integration test for brand parameters document validation part. +//! + +use catalyst_signed_doc::{providers::tests::TestCatalystProvider, *}; +use catalyst_types::catalyst_id::role_index::RoleId; +use ed25519_dalek::ed25519::signature::Signer; +use test_case::test_case; + +use crate::common::{ + brand_parameters_doc, brand_parameters_form_template_doc, create_dummy_key_pair, +}; + +mod common; + +#[test_case( + |provider| { + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; + brand_parameters_doc(&template, provider) + } + => true + ; + "valid document" +)] +#[test_case( + |provider| { + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::BRAND_PARAMETERS.clone(), + "template": { + "id": template.doc_id()?, + "ver": template.doc_ver()?, + }, + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "wrong role" +)] +#[test_case( + |provider| { + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::BRAND_PARAMETERS.clone(), + "template": { + "id": template.doc_id()?, + "ver": template.doc_ver()?, + }, + }))? + .empty_content()? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "empty content" +)] +#[test_case( + |provider| { + let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?; + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::BRAND_PARAMETERS.clone(), + "template": { + "id": template.doc_id()?, + "ver": template.doc_ver()?, + }, + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => true + ; + "missing 'content-encoding' (optional)" +)] +#[test_case( + |provider| { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::BRAND_PARAMETERS.clone(), + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "missing 'template'" +)] +#[tokio::test] +#[allow(clippy::unwrap_used)] +async fn test_brand_parameters_doc( + doc_gen: impl FnOnce(&mut TestCatalystProvider) -> anyhow::Result +) -> bool { + let mut provider = TestCatalystProvider::default(); + + let doc = doc_gen(&mut provider).unwrap(); + assert_eq!( + *doc.doc_type().unwrap(), + doc_types::BRAND_PARAMETERS.clone() + ); + + let is_valid = validator::validate(&doc, &provider).await.unwrap(); + assert_eq!(is_valid, !doc.problem_report().is_problematic()); + println!("{:?}", doc.problem_report()); + is_valid +} diff --git a/rust/signed_doc/tests/brand_parameters_form_template.rs b/rust/signed_doc/tests/brand_parameters_form_template.rs new file mode 100644 index 00000000000..14923fc5f6d --- /dev/null +++ b/rust/signed_doc/tests/brand_parameters_form_template.rs @@ -0,0 +1,100 @@ +//! Integration test for brand parameters form template document validation part. +//! + +use catalyst_signed_doc::{providers::tests::TestCatalystProvider, *}; +use catalyst_types::catalyst_id::role_index::RoleId; +use ed25519_dalek::ed25519::signature::Signer; +use test_case::test_case; + +use crate::common::{brand_parameters_form_template_doc, create_dummy_key_pair}; + +mod common; + +#[test_case( + |provider| { + brand_parameters_form_template_doc(provider) + } + => true + ; + "valid document" +)] +#[test_case( + |provider| { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::BRAND_PARAMETERS_FORM_TEMPLATE.clone(), + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "wrong role" +)] +#[test_case( + |provider| { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::BRAND_PARAMETERS_FORM_TEMPLATE.clone(), + }))? + .empty_content()? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "empty content" +)] +#[test_case( + |provider| { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "id": id, + "ver": id, + "type": doc_types::BRAND_PARAMETERS_FORM_TEMPLATE.clone(), + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => true + ; + "missing 'content-encoding' (optional)" +)] +#[tokio::test] +#[allow(clippy::unwrap_used)] +async fn test_brand_parameters_form_template_doc( + doc_gen: impl FnOnce(&mut TestCatalystProvider) -> anyhow::Result +) -> bool { + let mut provider = TestCatalystProvider::default(); + + let doc = doc_gen(&mut provider).unwrap(); + assert_eq!( + *doc.doc_type().unwrap(), + doc_types::BRAND_PARAMETERS_FORM_TEMPLATE.clone() + ); + + let is_valid = validator::validate(&doc, &provider).await.unwrap(); + assert_eq!(is_valid, !doc.problem_report().is_problematic()); + println!("{:?}", doc.problem_report()); + is_valid +} diff --git a/rust/signed_doc/tests/campaign_parameters.rs b/rust/signed_doc/tests/campaign_parameters.rs new file mode 100644 index 00000000000..c0583afb564 --- /dev/null +++ b/rust/signed_doc/tests/campaign_parameters.rs @@ -0,0 +1,194 @@ +//! Integration test for campaign parameters document validation part. +//! + +use catalyst_signed_doc::{providers::tests::TestCatalystProvider, *}; +use catalyst_types::catalyst_id::role_index::RoleId; +use ed25519_dalek::ed25519::signature::Signer; +use test_case::test_case; + +use crate::common::{ + brand_parameters_doc, brand_parameters_form_template_doc, campaign_parameters_doc, + campaign_parameters_form_template_doc, create_dummy_key_pair, +}; + +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())?; + campaign_parameters_doc(&template, ¶meters, provider) + } + => true + ; + "valid document" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "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()?, + } + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "wrong role" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "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()?, + } + }))? + .empty_content()? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "empty content" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + 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()?, + } + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => true + ; + "missing 'content-encoding' (optional)" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::CAMPAIGN_PARAMETERS.clone(), + "parameters": { + "id": parameters.doc_id()?, + "ver": parameters.doc_ver()?, + } + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "missing 'template'" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::CAMPAIGN_PARAMETERS.clone(), + "template": { + "id": template.doc_id()?, + "ver": template.doc_ver()?, + }, + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "missing 'parameters'" +)] +#[tokio::test] +#[allow(clippy::unwrap_used)] +async fn test_campaign_parameters_doc( + doc_gen: impl FnOnce(&mut TestCatalystProvider) -> anyhow::Result +) -> bool { + let mut provider = TestCatalystProvider::default(); + + let doc = doc_gen(&mut provider).unwrap(); + assert_eq!( + *doc.doc_type().unwrap(), + doc_types::CAMPAIGN_PARAMETERS.clone() + ); + + let is_valid = validator::validate(&doc, &provider).await.unwrap(); + assert_eq!(is_valid, !doc.problem_report().is_problematic()); + println!("{:?}", doc.problem_report()); + is_valid +} diff --git a/rust/signed_doc/tests/campaign_parameters_form_template.rs b/rust/signed_doc/tests/campaign_parameters_form_template.rs new file mode 100644 index 00000000000..b1a4636ef19 --- /dev/null +++ b/rust/signed_doc/tests/campaign_parameters_form_template.rs @@ -0,0 +1,144 @@ +//! Integration test for campaign parameters form template document validation part. +//! + +use catalyst_signed_doc::{providers::tests::TestCatalystProvider, *}; +use catalyst_types::catalyst_id::role_index::RoleId; +use ed25519_dalek::ed25519::signature::Signer; +use test_case::test_case; + +use crate::common::{ + brand_parameters_doc, brand_parameters_form_template_doc, + campaign_parameters_form_template_doc, create_dummy_key_pair, +}; + +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())?; + campaign_parameters_form_template_doc(¶meters, provider) + } + => true + ; + "valid document" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone(), + "parameters": { + "id": parameters.doc_id()?, + "ver": parameters.doc_ver()?, + } + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "wrong role" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone(), + "parameters": { + "id": parameters.doc_id()?, + "ver": parameters.doc_ver()?, + } + }))? + .empty_content()? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "empty content" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + 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()?, + } + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => true + ; + "missing 'content-encoding' (optional)" +)] +#[test_case( + |provider| { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone(), + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "missing 'parameters'" +)] +#[tokio::test] +#[allow(clippy::unwrap_used)] +async fn test_campaign_parameters_form_template_doc( + doc_gen: impl FnOnce(&mut TestCatalystProvider) -> anyhow::Result +) -> bool { + let mut provider = TestCatalystProvider::default(); + + let doc = doc_gen(&mut provider).unwrap(); + assert_eq!( + *doc.doc_type().unwrap(), + doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone() + ); + + let is_valid = validator::validate(&doc, &provider).await.unwrap(); + assert_eq!(is_valid, !doc.problem_report().is_problematic()); + println!("{:?}", doc.problem_report()); + is_valid +} diff --git a/rust/signed_doc/tests/category_parameters.rs b/rust/signed_doc/tests/category_parameters.rs new file mode 100644 index 00000000000..634af06f090 --- /dev/null +++ b/rust/signed_doc/tests/category_parameters.rs @@ -0,0 +1,207 @@ +//! Integration test for category parameters document validation part. +//! + +use catalyst_signed_doc::{providers::tests::TestCatalystProvider, *}; +use catalyst_types::catalyst_id::role_index::RoleId; +use ed25519_dalek::ed25519::signature::Signer; +use test_case::test_case; + +use crate::common::{ + brand_parameters_doc, brand_parameters_form_template_doc, campaign_parameters_doc, + campaign_parameters_form_template_doc, category_parameters_doc, + category_parameters_form_template_doc, create_dummy_key_pair, +}; + +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())?; + category_parameters_doc(&template, ¶meters, provider) + } + => true + ; + "valid document" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "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()?, + } + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "wrong role" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "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()?, + } + }))? + .empty_content()? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "empty content" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + 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()?, + } + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => true + ; + "missing 'content-encoding' (optional)" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::CATEGORY_PARAMETERS.clone(), + "parameters": { + "id": parameters.doc_id()?, + "ver": parameters.doc_ver()?, + } + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "missing 'template'" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::CATEGORY_PARAMETERS.clone(), + "template": { + "id": template.doc_id()?, + "ver": template.doc_ver()?, + }, + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "missing 'parameters'" +)] +#[tokio::test] +#[allow(clippy::unwrap_used)] +async fn test_category_parameters_doc( + doc_gen: impl FnOnce(&mut TestCatalystProvider) -> anyhow::Result +) -> bool { + let mut provider = TestCatalystProvider::default(); + + let doc = doc_gen(&mut provider).unwrap(); + assert_eq!( + *doc.doc_type().unwrap(), + doc_types::CATEGORY_PARAMETERS.clone() + ); + + let is_valid = validator::validate(&doc, &provider).await.unwrap(); + assert_eq!(is_valid, !doc.problem_report().is_problematic()); + println!("{:?}", doc.problem_report()); + is_valid +} diff --git a/rust/signed_doc/tests/category_parameters_form_template.rs b/rust/signed_doc/tests/category_parameters_form_template.rs new file mode 100644 index 00000000000..5664d5c82ac --- /dev/null +++ b/rust/signed_doc/tests/category_parameters_form_template.rs @@ -0,0 +1,153 @@ +//! Integration test for category parameters form template document validation part. +//! + +use catalyst_signed_doc::{providers::tests::TestCatalystProvider, *}; +use catalyst_types::catalyst_id::role_index::RoleId; +use ed25519_dalek::ed25519::signature::Signer; +use test_case::test_case; + +use crate::common::{ + brand_parameters_doc, brand_parameters_form_template_doc, campaign_parameters_doc, + campaign_parameters_form_template_doc, category_parameters_form_template_doc, + create_dummy_key_pair, +}; + +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())?; + category_parameters_form_template_doc(¶meters, provider) + } + => true + ; + "valid document" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone(), + "parameters": { + "id": parameters.doc_id()?, + "ver": parameters.doc_ver()?, + } + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "wrong role" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone(), + "parameters": { + "id": parameters.doc_id()?, + "ver": parameters.doc_ver()?, + } + }))? + .empty_content()? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "empty content" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + 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()?, + } + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => true + ; + "missing 'content-encoding' (optional)" +)] +#[test_case( + |provider| { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone(), + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "missing 'parameters'" +)] +#[tokio::test] +#[allow(clippy::unwrap_used)] +async fn test_category_parameters_form_template_doc( + doc_gen: impl FnOnce(&mut TestCatalystProvider) -> anyhow::Result +) -> bool { + let mut provider = TestCatalystProvider::default(); + + let doc = doc_gen(&mut provider).unwrap(); + assert_eq!( + *doc.doc_type().unwrap(), + doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone() + ); + + let is_valid = validator::validate(&doc, &provider).await.unwrap(); + assert_eq!(is_valid, !doc.problem_report().is_problematic()); + println!("{:?}", doc.problem_report()); + is_valid +} diff --git a/rust/signed_doc/tests/common/brand_parameters.rs b/rust/signed_doc/tests/common/brand_parameters.rs index c1354e7ae96..13e749a6bb6 100644 --- a/rust/signed_doc/tests/common/brand_parameters.rs +++ b/rust/signed_doc/tests/common/brand_parameters.rs @@ -1,13 +1,28 @@ +use catalyst_signed_doc::providers::tests::TestCatalystProvider; +use ed25519_dalek::ed25519::signature::Signer; + use super::*; -pub fn brand_parameters_doc() -> anyhow::Result { +pub fn brand_parameters_doc( + template: &CatalystSignedDocument, + provider: &mut TestCatalystProvider, +) -> anyhow::Result { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "id": UuidV7::new(), - "ver": UuidV7::new(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, "type": doc_types::BRAND_PARAMETERS.clone(), + "template": { + "id": template.doc_id()?, + "ver": template.doc_ver()?, + }, }))? - .empty_content()? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? .build() } diff --git a/rust/signed_doc/tests/common/brand_parameters_form_template.rs b/rust/signed_doc/tests/common/brand_parameters_form_template.rs new file mode 100644 index 00000000000..4878dec429f --- /dev/null +++ b/rust/signed_doc/tests/common/brand_parameters_form_template.rs @@ -0,0 +1,23 @@ +use catalyst_signed_doc::providers::tests::TestCatalystProvider; +use ed25519_dalek::ed25519::signature::Signer; + +use super::*; + +pub fn brand_parameters_form_template_doc( + provider: &mut TestCatalystProvider +) -> anyhow::Result { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::BRAND_PARAMETERS_FORM_TEMPLATE.clone(), + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() +} diff --git a/rust/signed_doc/tests/common/campaign_parameters.rs b/rust/signed_doc/tests/common/campaign_parameters.rs index 99ced28e6bd..2298f81473d 100644 --- a/rust/signed_doc/tests/common/campaign_parameters.rs +++ b/rust/signed_doc/tests/common/campaign_parameters.rs @@ -1,13 +1,33 @@ +use catalyst_signed_doc::providers::tests::TestCatalystProvider; +use ed25519_dalek::ed25519::signature::Signer; + use super::*; -pub fn campaign_parameters_doc() -> anyhow::Result { +pub fn campaign_parameters_doc( + template: &CatalystSignedDocument, + parameters: &CatalystSignedDocument, + provider: &mut TestCatalystProvider, +) -> anyhow::Result { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "id": UuidV7::new(), - "ver": UuidV7::new(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "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()?, + } }))? - .empty_content()? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? .build() } diff --git a/rust/signed_doc/tests/common/campaign_parameters_form_template.rs b/rust/signed_doc/tests/common/campaign_parameters_form_template.rs new file mode 100644 index 00000000000..7260d45fb22 --- /dev/null +++ b/rust/signed_doc/tests/common/campaign_parameters_form_template.rs @@ -0,0 +1,28 @@ +use catalyst_signed_doc::providers::tests::TestCatalystProvider; +use ed25519_dalek::ed25519::signature::Signer; + +use super::*; + +pub fn campaign_parameters_form_template_doc( + parameters: &CatalystSignedDocument, + provider: &mut TestCatalystProvider, +) -> anyhow::Result { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone(), + "parameters": { + "id": parameters.doc_id()?, + "ver": parameters.doc_ver()?, + } + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() +} diff --git a/rust/signed_doc/tests/common/category_parameters.rs b/rust/signed_doc/tests/common/category_parameters.rs index cbd0bcb9c8b..654b9ea37bf 100644 --- a/rust/signed_doc/tests/common/category_parameters.rs +++ b/rust/signed_doc/tests/common/category_parameters.rs @@ -1,13 +1,33 @@ +use catalyst_signed_doc::providers::tests::TestCatalystProvider; +use ed25519_dalek::ed25519::signature::Signer; + use super::*; -pub fn category_parameters_doc() -> anyhow::Result { +pub fn category_parameters_doc( + template: &CatalystSignedDocument, + parameters: &CatalystSignedDocument, + provider: &mut TestCatalystProvider, +) -> anyhow::Result { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "id": UuidV7::new(), - "ver": UuidV7::new(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, + "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()?, + } }))? - .empty_content()? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? .build() } diff --git a/rust/signed_doc/tests/common/category_parameters_form_template.rs b/rust/signed_doc/tests/common/category_parameters_form_template.rs new file mode 100644 index 00000000000..4d511595914 --- /dev/null +++ b/rust/signed_doc/tests/common/category_parameters_form_template.rs @@ -0,0 +1,28 @@ +use catalyst_signed_doc::providers::tests::TestCatalystProvider; +use ed25519_dalek::ed25519::signature::Signer; + +use super::*; + +pub fn category_parameters_form_template_doc( + parameters: &CatalystSignedDocument, + provider: &mut TestCatalystProvider, +) -> anyhow::Result { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "id": id, + "ver": id, + "type": doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone(), + "parameters": { + "id": parameters.doc_id()?, + "ver": parameters.doc_ver()?, + } + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() +} diff --git a/rust/signed_doc/tests/common/mod.rs b/rust/signed_doc/tests/common/mod.rs index eeb2959bb4a..5e3b9b73ce7 100644 --- a/rust/signed_doc/tests/common/mod.rs +++ b/rust/signed_doc/tests/common/mod.rs @@ -1,8 +1,11 @@ #![allow(dead_code, unused_imports)] pub mod brand_parameters; +pub mod brand_parameters_form_template; pub mod campaign_parameters; +pub mod campaign_parameters_form_template; pub mod category_parameters; +pub mod category_parameters_form_template; pub mod proposal; pub mod proposal_comment; pub mod proposal_comment_form_template; @@ -12,10 +15,13 @@ pub mod proposal_submission_action; use std::str::FromStr; pub use brand_parameters::brand_parameters_doc; +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::*; use catalyst_types::catalyst_id::role_index::RoleId; pub use category_parameters::category_parameters_doc; +pub use category_parameters_form_template::category_parameters_form_template_doc; pub use proposal::proposal_doc; pub use proposal_comment::proposal_comment_doc; pub use proposal_comment_form_template::proposal_comment_form_template_doc; diff --git a/rust/signed_doc/tests/common/proposal.rs b/rust/signed_doc/tests/common/proposal.rs index edd55ed84df..be73a7d35b5 100644 --- a/rust/signed_doc/tests/common/proposal.rs +++ b/rust/signed_doc/tests/common/proposal.rs @@ -15,8 +15,8 @@ pub fn proposal_doc( .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL.clone(), "id": id, "ver": id, diff --git a/rust/signed_doc/tests/common/proposal_comment.rs b/rust/signed_doc/tests/common/proposal_comment.rs index fdd9cba5e20..4c90d8f8ac0 100644 --- a/rust/signed_doc/tests/common/proposal_comment.rs +++ b/rust/signed_doc/tests/common/proposal_comment.rs @@ -15,8 +15,8 @@ pub fn proposal_comment_doc( .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, 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 694277e7c24..6a39db4db56 100644 --- a/rust/signed_doc/tests/common/proposal_comment_form_template.rs +++ b/rust/signed_doc/tests/common/proposal_comment_form_template.rs @@ -1,20 +1,28 @@ +use catalyst_signed_doc::providers::tests::TestCatalystProvider; +use ed25519_dalek::ed25519::signature::Signer; + use super::*; pub fn proposal_comment_form_template_doc( - parameters_doc: &CatalystSignedDocument + parameters_doc: &CatalystSignedDocument, + provider: &mut TestCatalystProvider, ) -> anyhow::Result { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::SchemaJson.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_COMMENT_FORM_TEMPLATE.clone(), - "id": UuidV7::new(), - "ver": UuidV7::new(), + "id": id, + "ver": id, "parameters": { "id": parameters_doc.doc_id()?, "ver": parameters_doc.doc_ver()?, } }))? .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? .build() } diff --git a/rust/signed_doc/tests/common/proposal_form_template.rs b/rust/signed_doc/tests/common/proposal_form_template.rs index c3c477aa805..2ba2f429a55 100644 --- a/rust/signed_doc/tests/common/proposal_form_template.rs +++ b/rust/signed_doc/tests/common/proposal_form_template.rs @@ -1,13 +1,19 @@ +use catalyst_signed_doc::providers::tests::TestCatalystProvider; +use ed25519_dalek::ed25519::signature::Signer; + use super::*; pub fn proposal_form_template_doc( - parameters_doc: &CatalystSignedDocument + parameters_doc: &CatalystSignedDocument, + provider: &mut TestCatalystProvider, ) -> anyhow::Result { let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::SchemaJson.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_FORM_TEMPLATE.clone(), "id": id, "ver": id, @@ -17,5 +23,6 @@ pub fn proposal_form_template_doc( }, }))? .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? .build() } diff --git a/rust/signed_doc/tests/common/proposal_submission_action.rs b/rust/signed_doc/tests/common/proposal_submission_action.rs index 861ff36197f..3549fbda7d2 100644 --- a/rust/signed_doc/tests/common/proposal_submission_action.rs +++ b/rust/signed_doc/tests/common/proposal_submission_action.rs @@ -13,8 +13,8 @@ pub fn proposal_submission_action_doc( .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, diff --git a/rust/signed_doc/tests/proposal.rs b/rust/signed_doc/tests/proposal.rs index 70a130f500e..4a17127566b 100644 --- a/rust/signed_doc/tests/proposal.rs +++ b/rust/signed_doc/tests/proposal.rs @@ -8,16 +8,19 @@ use ed25519_dalek::ed25519::signature::Signer; use test_case::test_case; use crate::common::{ - brand_parameters_doc, campaign_parameters_doc, category_parameters_doc, create_dummy_key_pair, - proposal_doc, proposal_form_template_doc, + brand_parameters_doc, brand_parameters_form_template_doc, campaign_parameters_doc, + campaign_parameters_form_template_doc, category_parameters_doc, + category_parameters_form_template_doc, create_dummy_key_pair, proposal_doc, + proposal_form_template_doc, }; mod common; #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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())?; proposal_doc(&template, ¶meters, provider) } => true @@ -26,8 +29,11 @@ mod common; )] #[test_case( |provider| { - let parameters = campaign_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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())?; proposal_doc(&template, ¶meters, provider) } => true @@ -36,8 +42,13 @@ mod common; )] #[test_case( |provider| { - let parameters = category_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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())?; proposal_doc(&template, ¶meters, provider) } => true @@ -46,14 +57,15 @@ mod common; )] #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0).inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL.clone(), "id": id, "ver": id, @@ -76,14 +88,15 @@ mod common; )] #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Proposer).inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL.clone(), "id": id, "ver": id, @@ -106,13 +119,14 @@ mod common; )] #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Proposer).inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), + "content-type": ContentType::Json, "type": doc_types::PROPOSAL.clone(), "id": id, "ver": id, @@ -135,13 +149,14 @@ mod common; )] #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; + 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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Proposer).inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL.clone(), "id": id, "ver": id, @@ -160,14 +175,15 @@ mod common; )] #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Proposer).inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL.clone(), "id": id, "ver": id, @@ -192,6 +208,7 @@ async fn test_proposal_doc( let mut provider = TestCatalystProvider::default(); let doc = doc_gen(&mut provider).unwrap(); + assert_eq!(*doc.doc_type().unwrap(), doc_types::PROPOSAL.clone()); let is_valid = validator::validate(&doc, &provider).await.unwrap(); assert_eq!(is_valid, !doc.problem_report().is_problematic()); diff --git a/rust/signed_doc/tests/proposal_comment.rs b/rust/signed_doc/tests/proposal_comment.rs index 73e121837ad..d20994f6ebc 100644 --- a/rust/signed_doc/tests/proposal_comment.rs +++ b/rust/signed_doc/tests/proposal_comment.rs @@ -8,19 +8,21 @@ use ed25519_dalek::ed25519::signature::Signer; use test_case::test_case; use crate::common::{ - brand_parameters_doc, campaign_parameters_doc, category_parameters_doc, create_dummy_key_pair, - proposal_comment_doc, proposal_comment_form_template_doc, proposal_doc, - proposal_form_template_doc, + brand_parameters_doc, brand_parameters_form_template_doc, campaign_parameters_doc, + campaign_parameters_form_template_doc, category_parameters_doc, + category_parameters_form_template_doc, create_dummy_key_pair, proposal_comment_doc, + proposal_comment_form_template_doc, proposal_doc, proposal_form_template_doc, }; mod common; #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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).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())?; proposal_comment_doc(&proposal, &template, ¶meters, provider) } => true @@ -29,10 +31,13 @@ mod common; )] #[test_case( |provider| { - let parameters = campaign_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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).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())?; proposal_comment_doc(&proposal, &template, ¶meters, provider) } => true @@ -41,10 +46,15 @@ mod common; )] #[test_case( |provider| { - let parameters = category_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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).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())?; proposal_comment_doc(&proposal, &template, ¶meters, provider) } => true @@ -53,18 +63,19 @@ mod common; )] #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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).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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, @@ -95,17 +106,18 @@ mod common; )] #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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).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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Proposer) .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, @@ -132,17 +144,18 @@ mod common; )] #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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).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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, @@ -170,16 +183,17 @@ mod common; )] #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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).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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), + "content-type": ContentType::Json, "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, @@ -207,16 +221,17 @@ mod common; )] #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, @@ -240,17 +255,18 @@ mod common; )] #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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).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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, @@ -274,15 +290,16 @@ mod common; )] #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_comment_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_COMMENT.clone(), "id": id, "ver": id, @@ -312,6 +329,10 @@ async fn test_proposal_comment_doc( let mut provider = TestCatalystProvider::default(); let doc = doc_gen(&mut provider).unwrap(); + assert_eq!( + *doc.doc_type().unwrap(), + doc_types::PROPOSAL_COMMENT.clone() + ); let is_valid = validator::validate(&doc, &provider).await.unwrap(); assert_eq!(is_valid, !doc.problem_report().is_problematic()); diff --git a/rust/signed_doc/tests/proposal_comment_form_template.rs b/rust/signed_doc/tests/proposal_comment_form_template.rs new file mode 100644 index 00000000000..4796cd7c92e --- /dev/null +++ b/rust/signed_doc/tests/proposal_comment_form_template.rs @@ -0,0 +1,172 @@ +//! Integration test for proposal comment form template document validation part. +//! + +use catalyst_signed_doc::{providers::tests::TestCatalystProvider, *}; +use catalyst_types::catalyst_id::role_index::RoleId; +use ed25519_dalek::ed25519::signature::Signer; +use test_case::test_case; + +use crate::common::{ + brand_parameters_doc, brand_parameters_form_template_doc, campaign_parameters_doc, + campaign_parameters_form_template_doc, category_parameters_doc, + category_parameters_form_template_doc, create_dummy_key_pair, + proposal_comment_form_template_doc, +}; + +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())?; + proposal_comment_form_template_doc(¶meters, provider) + } + => true + ; + "valid document with brand 'parameters'" +)] +#[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())?; + proposal_comment_form_template_doc(¶meters, provider) + } + => true + ; + "valid document with campaign 'parameters'" +)] +#[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())?; + proposal_comment_form_template_doc(¶meters, provider) + } + => true + ; + "valid document with category 'parameters'" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "type": doc_types::PROPOSAL_COMMENT_FORM_TEMPLATE.clone(), + "id": id, + "ver": id, + "parameters": { + "id": parameters.doc_id()?, + "ver": parameters.doc_ver()?, + }, + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "wrong role" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "type": doc_types::PROPOSAL_COMMENT_FORM_TEMPLATE.clone(), + "id": id, + "ver": id, + "parameters": { + "id": parameters.doc_id()?, + "ver": parameters.doc_ver()?, + }, + }))? + .empty_content()? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "empty content" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + 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()?, + }, + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => true + ; + "missing 'content-encoding' (optional)" +)] +#[test_case( + |provider| { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson, + "content-encoding": ContentEncoding::Brotli, + "type": doc_types::PROPOSAL_COMMENT_FORM_TEMPLATE.clone(), + "id": id, + "ver": id, + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "missing parameters" +)] +#[tokio::test] +#[allow(clippy::unwrap_used)] +async fn test_proposal_comment_form_template_doc( + doc_gen: impl FnOnce(&mut TestCatalystProvider) -> anyhow::Result +) -> bool { + let mut provider = TestCatalystProvider::default(); + + let doc = doc_gen(&mut provider).unwrap(); + assert_eq!( + *doc.doc_type().unwrap(), + doc_types::PROPOSAL_COMMENT_FORM_TEMPLATE.clone() + ); + + let is_valid = validator::validate(&doc, &provider).await.unwrap(); + assert_eq!(is_valid, !doc.problem_report().is_problematic()); + println!("{:?}", doc.problem_report()); + is_valid +} diff --git a/rust/signed_doc/tests/proposal_form_template.rs b/rust/signed_doc/tests/proposal_form_template.rs new file mode 100644 index 00000000000..24277d0fc40 --- /dev/null +++ b/rust/signed_doc/tests/proposal_form_template.rs @@ -0,0 +1,171 @@ +//! Integration test for proposal form template document validation part. +//! + +use catalyst_signed_doc::{providers::tests::TestCatalystProvider, *}; +use catalyst_types::catalyst_id::role_index::RoleId; +use ed25519_dalek::ed25519::signature::Signer; +use test_case::test_case; + +use crate::common::{ + brand_parameters_doc, brand_parameters_form_template_doc, campaign_parameters_doc, + campaign_parameters_form_template_doc, category_parameters_doc, + category_parameters_form_template_doc, create_dummy_key_pair, proposal_form_template_doc, +}; + +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())?; + proposal_form_template_doc(¶meters, provider) + } + => true + ; + "valid document with brand 'parameters'" +)] +#[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())?; + proposal_form_template_doc(¶meters, provider) + } + => true + ; + "valid document with campaign 'parameters'" +)] +#[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())?; + proposal_form_template_doc(¶meters, provider) + } + => true + ; + "valid document with category 'parameters'" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson.to_string(), + "content-encoding": ContentEncoding::Brotli.to_string(), + "type": doc_types::PROPOSAL_FORM_TEMPLATE.clone(), + "id": id, + "ver": id, + "parameters": { + "id": parameters.doc_id()?, + "ver": parameters.doc_ver()?, + }, + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "wrong role" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson.to_string(), + "content-encoding": ContentEncoding::Brotli.to_string(), + "type": doc_types::PROPOSAL_FORM_TEMPLATE.clone(), + "id": id, + "ver": id, + "parameters": { + "id": parameters.doc_id()?, + "ver": parameters.doc_ver()?, + }, + }))? + .empty_content()? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "empty content" +)] +#[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 id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + 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()?, + }, + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => true + ; + "missing 'content-encoding' (optional)" +)] +#[test_case( + |provider| { + let id = UuidV7::new(); + let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0) + .inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; + Builder::new() + .with_json_metadata(serde_json::json!({ + "content-type": ContentType::SchemaJson.to_string(), + "content-encoding": ContentEncoding::Brotli.to_string(), + "type": doc_types::PROPOSAL_FORM_TEMPLATE.clone(), + "id": id, + "ver": id, + }))? + .with_json_content(&serde_json::json!({}))? + .add_signature(|m| sk.sign(&m).to_vec(), kid)? + .build() + } + => false + ; + "missing parameters" +)] +#[tokio::test] +#[allow(clippy::unwrap_used)] +async fn test_proposal_form_template_doc( + doc_gen: impl FnOnce(&mut TestCatalystProvider) -> anyhow::Result +) -> bool { + let mut provider = TestCatalystProvider::default(); + + let doc = doc_gen(&mut provider).unwrap(); + assert_eq!( + *doc.doc_type().unwrap(), + doc_types::PROPOSAL_FORM_TEMPLATE.clone() + ); + + let is_valid = validator::validate(&doc, &provider).await.unwrap(); + assert_eq!(is_valid, !doc.problem_report().is_problematic()); + println!("{:?}", doc.problem_report()); + is_valid +} diff --git a/rust/signed_doc/tests/proposal_submission_action.rs b/rust/signed_doc/tests/proposal_submission_action.rs index 176ee9ee86b..87aa5fc0380 100644 --- a/rust/signed_doc/tests/proposal_submission_action.rs +++ b/rust/signed_doc/tests/proposal_submission_action.rs @@ -8,16 +8,19 @@ use ed25519_dalek::ed25519::signature::Signer; use test_case::test_case; use crate::common::{ - brand_parameters_doc, campaign_parameters_doc, category_parameters_doc, create_dummy_key_pair, - proposal_doc, proposal_form_template_doc, proposal_submission_action_doc, + brand_parameters_doc, brand_parameters_form_template_doc, campaign_parameters_doc, + campaign_parameters_form_template_doc, category_parameters_doc, + category_parameters_form_template_doc, create_dummy_key_pair, proposal_doc, + proposal_form_template_doc, proposal_submission_action_doc, }; mod common; #[test_case( |provider| { - let parameters = brand_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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())?; proposal_submission_action_doc(&proposal, ¶meters, provider) } @@ -27,8 +30,11 @@ mod common; )] #[test_case( |provider| { - let parameters = campaign_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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())?; proposal_submission_action_doc(&proposal, ¶meters, provider) } @@ -38,8 +44,13 @@ mod common; )] #[test_case( |provider| { - let parameters = category_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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())?; proposal_submission_action_doc(&proposal, ¶meters, provider) } @@ -49,15 +60,16 @@ mod common; )] #[test_case( |provider| { - let parameters = category_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0).inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, @@ -82,15 +94,16 @@ mod common; )] #[test_case( |provider| { - let parameters = category_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Proposer).inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, @@ -114,15 +127,16 @@ mod common; )] #[test_case( |provider| { - let parameters = category_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Proposer).inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, @@ -146,14 +160,15 @@ mod common; )] #[test_case( |provider| { - let parameters = category_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Proposer).inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), + "content-type": ContentType::Json, "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, @@ -179,7 +194,8 @@ mod common; )] #[test_case( |provider| { - let parameters = category_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; + 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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Proposer).inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; let doc = Builder::new() @@ -207,15 +223,16 @@ mod common; )] #[test_case( |provider| { - let parameters = category_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?; - let template = proposal_form_template_doc(¶meters).inspect(|v| provider.add_document(None, v).unwrap())?; + 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 id = UuidV7::new(); let (sk, _, kid) = create_dummy_key_pair(RoleId::Proposer).inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?; let doc = Builder::new() .with_json_metadata(serde_json::json!({ - "content-type": ContentType::Json.to_string(), - "content-encoding": ContentEncoding::Brotli.to_string(), + "content-type": ContentType::Json, + "content-encoding": ContentEncoding::Brotli, "type": doc_types::PROPOSAL_SUBMISSION_ACTION.clone(), "id": id, "ver": id, @@ -243,6 +260,10 @@ async fn test_proposal_submission_action_doc( let mut provider = TestCatalystProvider::default(); let doc = doc_gen(&mut provider).unwrap(); + assert_eq!( + *doc.doc_type().unwrap(), + doc_types::PROPOSAL_SUBMISSION_ACTION.clone() + ); let is_valid = validator::validate(&doc, &provider).await.unwrap(); assert_eq!(is_valid, !doc.problem_report().is_problematic());