Skip to content

Commit e9d1f45

Browse files
committed
add category parameters form template tests
1 parent 133efa2 commit e9d1f45

File tree

4 files changed

+184
-1
lines changed

4 files changed

+184
-1
lines changed

rust/signed_doc/tests/campaign_parameters_form_template.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ mod common;
126126
)]
127127
#[tokio::test]
128128
#[allow(clippy::unwrap_used)]
129-
async fn test_brand_parameters_form_template_doc(
129+
async fn test_campaign_parameters_form_template_doc(
130130
doc_gen: impl FnOnce(&mut TestCatalystProvider) -> anyhow::Result<CatalystSignedDocument>
131131
) -> bool {
132132
let mut provider = TestCatalystProvider::default();
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
//! Integration test for category parameters form template document validation part.
2+
//! <https://input-output-hk.github.io/catalyst-libs/architecture/08_concepts/signed_doc/docs/category_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, campaign_parameters_doc,
11+
campaign_parameters_form_template_doc, category_parameters_form_template_doc,
12+
create_dummy_key_pair,
13+
};
14+
15+
mod common;
16+
17+
#[test_case(
18+
|provider| {
19+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
20+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
21+
let template = campaign_parameters_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
22+
let parameters = campaign_parameters_doc(&parameters, &template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
23+
category_parameters_form_template_doc(&parameters, provider)
24+
}
25+
=> true
26+
;
27+
"valid document"
28+
)]
29+
#[test_case(
30+
|provider| {
31+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
32+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
33+
let template = campaign_parameters_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
34+
let parameters = campaign_parameters_doc(&parameters, &template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
35+
let id = UuidV7::new();
36+
let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0)
37+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
38+
Builder::new()
39+
.with_json_metadata(serde_json::json!({
40+
"content-type": ContentType::SchemaJson,
41+
"content-encoding": ContentEncoding::Brotli,
42+
"id": id,
43+
"ver": id,
44+
"type": doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone(),
45+
"parameters": {
46+
"id": parameters.doc_id()?,
47+
"ver": parameters.doc_ver()?,
48+
}
49+
}))?
50+
.with_json_content(&serde_json::json!({}))?
51+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
52+
.build()
53+
}
54+
=> false
55+
;
56+
"wrong role"
57+
)]
58+
#[test_case(
59+
|provider| {
60+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
61+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
62+
let template = campaign_parameters_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
63+
let parameters = campaign_parameters_doc(&parameters, &template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
64+
let id = UuidV7::new();
65+
let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin)
66+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
67+
Builder::new()
68+
.with_json_metadata(serde_json::json!({
69+
"content-type": ContentType::SchemaJson,
70+
"content-encoding": ContentEncoding::Brotli,
71+
"id": id,
72+
"ver": id,
73+
"type": doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone(),
74+
"parameters": {
75+
"id": parameters.doc_id()?,
76+
"ver": parameters.doc_ver()?,
77+
}
78+
}))?
79+
.empty_content()?
80+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
81+
.build()
82+
}
83+
=> false
84+
;
85+
"empty content"
86+
)]
87+
#[test_case(
88+
|provider| {
89+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
90+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
91+
let template = campaign_parameters_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
92+
let parameters = campaign_parameters_doc(&parameters, &template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
93+
let id = UuidV7::new();
94+
let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin)
95+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
96+
Builder::new()
97+
.with_json_metadata(serde_json::json!({
98+
"content-type": ContentType::SchemaJson,
99+
"id": id,
100+
"ver": id,
101+
"type": doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone(),
102+
"parameters": {
103+
"id": parameters.doc_id()?,
104+
"ver": parameters.doc_ver()?,
105+
}
106+
}))?
107+
.with_json_content(&serde_json::json!({}))?
108+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
109+
.build()
110+
}
111+
=> true
112+
;
113+
"missing 'content-encoding' (optional)"
114+
)]
115+
#[test_case(
116+
|provider| {
117+
let id = UuidV7::new();
118+
let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin)
119+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
120+
Builder::new()
121+
.with_json_metadata(serde_json::json!({
122+
"content-type": ContentType::SchemaJson,
123+
"content-encoding": ContentEncoding::Brotli,
124+
"id": id,
125+
"ver": id,
126+
"type": doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone(),
127+
}))?
128+
.with_json_content(&serde_json::json!({}))?
129+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
130+
.build()
131+
}
132+
=> false
133+
;
134+
"missing 'parameters'"
135+
)]
136+
#[tokio::test]
137+
#[allow(clippy::unwrap_used)]
138+
async fn test_category_parameters_form_template_doc(
139+
doc_gen: impl FnOnce(&mut TestCatalystProvider) -> anyhow::Result<CatalystSignedDocument>
140+
) -> bool {
141+
let mut provider = TestCatalystProvider::default();
142+
143+
let doc = doc_gen(&mut provider).unwrap();
144+
assert_eq!(
145+
*doc.doc_type().unwrap(),
146+
doc_types::CATEGORY_PARAMETERS_FORM_TEMPLATE.clone()
147+
);
148+
149+
let is_valid = validator::validate(&doc, &provider).await.unwrap();
150+
assert_eq!(is_valid, !doc.problem_report().is_problematic());
151+
println!("{:?}", doc.problem_report());
152+
is_valid
153+
}
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 category_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::CATEGORY_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
@@ -5,6 +5,7 @@ pub mod brand_parameters_form_template;
55
pub mod campaign_parameters;
66
pub mod campaign_parameters_form_template;
77
pub mod category_parameters;
8+
pub mod category_parameters_form_template;
89
pub mod proposal;
910
pub mod proposal_comment;
1011
pub mod proposal_comment_form_template;
@@ -20,6 +21,7 @@ pub use campaign_parameters_form_template::campaign_parameters_form_template_doc
2021
use catalyst_signed_doc::*;
2122
use catalyst_types::catalyst_id::role_index::RoleId;
2223
pub use category_parameters::category_parameters_doc;
24+
pub use category_parameters_form_template::category_parameters_form_template_doc;
2325
pub use proposal::proposal_doc;
2426
pub use proposal_comment::proposal_comment_doc;
2527
pub use proposal_comment_form_template::proposal_comment_form_template_doc;

0 commit comments

Comments
 (0)