Skip to content

Commit c41dbea

Browse files
committed
add campaign_parameters_form_template integration tests
1 parent 936ce39 commit c41dbea

File tree

4 files changed

+175
-1
lines changed

4 files changed

+175
-1
lines changed

rust/signed_doc/src/validator/rules/content_type.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ impl ContentTypeRule {
9999

100100
/// Validates the provided `content` bytes to be a defined `ContentType`.
101101
fn validate(
102-
content_type: &ContentType,
102+
content_type: ContentType,
103103
content: &[u8],
104104
) -> bool {
105105
match content_type {
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
//! Integration test for campaign parameters form template document validation part.
2+
//! <https://input-output-hk.github.io/catalyst-libs/architecture/08_concepts/signed_doc/docs/campaign_parameters_form_template>
3+
4+
use catalyst_signed_doc::{providers::tests::TestCatalystProvider, *};
5+
use catalyst_types::catalyst_id::role_index::RoleId;
6+
use ed25519_dalek::ed25519::signature::Signer;
7+
use test_case::test_case;
8+
9+
use crate::common::{
10+
brand_parameters_doc, brand_parameters_form_template_doc,
11+
campaign_parameters_form_template_doc, create_dummy_key_pair,
12+
};
13+
14+
mod common;
15+
16+
#[test_case(
17+
|provider| {
18+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
19+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
20+
campaign_parameters_form_template_doc(&parameters, provider)
21+
}
22+
=> true
23+
;
24+
"valid document"
25+
)]
26+
#[test_case(
27+
|provider| {
28+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
29+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
30+
let id = UuidV7::new();
31+
let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0)
32+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
33+
Builder::new()
34+
.with_json_metadata(serde_json::json!({
35+
"content-type": ContentType::SchemaJson,
36+
"content-encoding": ContentEncoding::Brotli,
37+
"id": id,
38+
"ver": id,
39+
"type": doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone(),
40+
"parameters": {
41+
"id": parameters.doc_id()?,
42+
"ver": parameters.doc_ver()?,
43+
}
44+
}))?
45+
.with_json_content(&serde_json::json!({}))?
46+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
47+
.build()
48+
}
49+
=> false
50+
;
51+
"wrong role"
52+
)]
53+
#[test_case(
54+
|provider| {
55+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
56+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
57+
let id = UuidV7::new();
58+
let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin)
59+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
60+
Builder::new()
61+
.with_json_metadata(serde_json::json!({
62+
"content-type": ContentType::SchemaJson,
63+
"content-encoding": ContentEncoding::Brotli,
64+
"id": id,
65+
"ver": id,
66+
"type": doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone(),
67+
"parameters": {
68+
"id": parameters.doc_id()?,
69+
"ver": parameters.doc_ver()?,
70+
}
71+
}))?
72+
.empty_content()?
73+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
74+
.build()
75+
}
76+
=> false
77+
;
78+
"empty content"
79+
)]
80+
#[test_case(
81+
|provider| {
82+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
83+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
84+
let id = UuidV7::new();
85+
let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin)
86+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
87+
Builder::new()
88+
.with_json_metadata(serde_json::json!({
89+
"content-type": ContentType::SchemaJson,
90+
"id": id,
91+
"ver": id,
92+
"type": doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone(),
93+
"parameters": {
94+
"id": parameters.doc_id()?,
95+
"ver": parameters.doc_ver()?,
96+
}
97+
}))?
98+
.with_json_content(&serde_json::json!({}))?
99+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
100+
.build()
101+
}
102+
=> true
103+
;
104+
"missing 'content-encoding' (optional)"
105+
)]
106+
#[test_case(
107+
|provider| {
108+
let id = UuidV7::new();
109+
let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin)
110+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
111+
Builder::new()
112+
.with_json_metadata(serde_json::json!({
113+
"content-type": ContentType::SchemaJson,
114+
"content-encoding": ContentEncoding::Brotli,
115+
"id": id,
116+
"ver": id,
117+
"type": doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone(),
118+
}))?
119+
.with_json_content(&serde_json::json!({}))?
120+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
121+
.build()
122+
}
123+
=> false
124+
;
125+
"missing 'parameters'"
126+
)]
127+
#[tokio::test]
128+
#[allow(clippy::unwrap_used)]
129+
async fn test_brand_parameters_form_template_doc(
130+
doc_gen: impl FnOnce(&mut TestCatalystProvider) -> anyhow::Result<CatalystSignedDocument>
131+
) -> bool {
132+
let mut provider = TestCatalystProvider::default();
133+
134+
let doc = doc_gen(&mut provider).unwrap();
135+
assert_eq!(
136+
*doc.doc_type().unwrap(),
137+
doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone()
138+
);
139+
140+
let is_valid = validator::validate(&doc, &provider).await.unwrap();
141+
assert_eq!(is_valid, !doc.problem_report().is_problematic());
142+
println!("{:?}", doc.problem_report());
143+
is_valid
144+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
use catalyst_signed_doc::providers::tests::TestCatalystProvider;
2+
use ed25519_dalek::ed25519::signature::Signer;
3+
4+
use super::*;
5+
6+
pub fn campaign_parameters_form_template_doc(
7+
parameters: &CatalystSignedDocument,
8+
provider: &mut TestCatalystProvider,
9+
) -> anyhow::Result<CatalystSignedDocument> {
10+
let id = UuidV7::new();
11+
let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin)
12+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
13+
Builder::new()
14+
.with_json_metadata(serde_json::json!({
15+
"content-type": ContentType::SchemaJson,
16+
"content-encoding": ContentEncoding::Brotli,
17+
"id": id,
18+
"ver": id,
19+
"type": doc_types::CAMPAIGN_PARAMETERS_FORM_TEMPLATE.clone(),
20+
"parameters": {
21+
"id": parameters.doc_id()?,
22+
"ver": parameters.doc_ver()?,
23+
}
24+
}))?
25+
.with_json_content(&serde_json::json!({}))?
26+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
27+
.build()
28+
}

rust/signed_doc/tests/common/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
pub mod brand_parameters;
44
pub mod brand_parameters_form_template;
55
pub mod campaign_parameters;
6+
pub mod campaign_parameters_form_template;
67
pub mod category_parameters;
78
pub mod proposal;
89
pub mod proposal_comment;
@@ -15,6 +16,7 @@ use std::str::FromStr;
1516
pub use brand_parameters::brand_parameters_doc;
1617
pub use brand_parameters_form_template::brand_parameters_form_template_doc;
1718
pub use campaign_parameters::campaign_parameters_doc;
19+
pub use campaign_parameters_form_template::campaign_parameters_form_template_doc;
1820
use catalyst_signed_doc::*;
1921
use catalyst_types::catalyst_id::role_index::RoleId;
2022
pub use category_parameters::category_parameters_doc;

0 commit comments

Comments
 (0)