Skip to content

Commit 51d3522

Browse files
committed
add campaign_parameters integration test
1 parent c41dbea commit 51d3522

File tree

7 files changed

+250
-16
lines changed

7 files changed

+250
-16
lines changed
Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
//! Integration test for campaign parameters document validation part.
2+
//! <https://input-output-hk.github.io/catalyst-libs/architecture/08_concepts/signed_doc/docs/campaign_parameters>
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+
create_dummy_key_pair, campaign_parameters_form_template_doc
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+
let template = campaign_parameters_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
21+
campaign_parameters_doc(&template, &parameters, provider)
22+
23+
}
24+
=> true
25+
;
26+
"valid document"
27+
)]
28+
#[test_case(
29+
|provider| {
30+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
31+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
32+
let template = campaign_parameters_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
33+
let id = UuidV7::new();
34+
let (sk, _, kid) = create_dummy_key_pair(RoleId::Role0)
35+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
36+
Builder::new()
37+
.with_json_metadata(serde_json::json!({
38+
"content-type": ContentType::Json,
39+
"content-encoding": ContentEncoding::Brotli,
40+
"id": id,
41+
"ver": id,
42+
"type": doc_types::CAMPAIGN_PARAMETERS.clone(),
43+
"template": {
44+
"id": template.doc_id()?,
45+
"ver": template.doc_ver()?,
46+
},
47+
"parameters": {
48+
"id": parameters.doc_id()?,
49+
"ver": parameters.doc_ver()?,
50+
}
51+
}))?
52+
.with_json_content(&serde_json::json!({}))?
53+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
54+
.build()
55+
}
56+
=> false
57+
;
58+
"wrong role"
59+
)]
60+
#[test_case(
61+
|provider| {
62+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
63+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
64+
let template = campaign_parameters_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
65+
let id = UuidV7::new();
66+
let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin)
67+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
68+
Builder::new()
69+
.with_json_metadata(serde_json::json!({
70+
"content-type": ContentType::Json,
71+
"content-encoding": ContentEncoding::Brotli,
72+
"id": id,
73+
"ver": id,
74+
"type": doc_types::CAMPAIGN_PARAMETERS.clone(),
75+
"template": {
76+
"id": template.doc_id()?,
77+
"ver": template.doc_ver()?,
78+
},
79+
"parameters": {
80+
"id": parameters.doc_id()?,
81+
"ver": parameters.doc_ver()?,
82+
}
83+
}))?
84+
.empty_content()?
85+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
86+
.build()
87+
}
88+
=> false
89+
;
90+
"empty content"
91+
)]
92+
#[test_case(
93+
|provider| {
94+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
95+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
96+
let template = campaign_parameters_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
97+
let id = UuidV7::new();
98+
let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin)
99+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
100+
Builder::new()
101+
.with_json_metadata(serde_json::json!({
102+
"content-type": ContentType::Json,
103+
"id": id,
104+
"ver": id,
105+
"type": doc_types::CAMPAIGN_PARAMETERS.clone(),
106+
"template": {
107+
"id": template.doc_id()?,
108+
"ver": template.doc_ver()?,
109+
},
110+
"parameters": {
111+
"id": parameters.doc_id()?,
112+
"ver": parameters.doc_ver()?,
113+
}
114+
}))?
115+
.with_json_content(&serde_json::json!({}))?
116+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
117+
.build()
118+
}
119+
=> true
120+
;
121+
"missing 'content-encoding' (optional)"
122+
)]
123+
#[test_case(
124+
|provider| {
125+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
126+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
127+
let id = UuidV7::new();
128+
let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin)
129+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
130+
Builder::new()
131+
.with_json_metadata(serde_json::json!({
132+
"content-type": ContentType::Json,
133+
"content-encoding": ContentEncoding::Brotli,
134+
"id": id,
135+
"ver": id,
136+
"type": doc_types::CAMPAIGN_PARAMETERS.clone(),
137+
"parameters": {
138+
"id": parameters.doc_id()?,
139+
"ver": parameters.doc_ver()?,
140+
}
141+
}))?
142+
.with_json_content(&serde_json::json!({}))?
143+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
144+
.build()
145+
}
146+
=> false
147+
;
148+
"missing 'template'"
149+
)]
150+
#[test_case(
151+
|provider| {
152+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
153+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
154+
let template = campaign_parameters_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
155+
let id = UuidV7::new();
156+
let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin)
157+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
158+
Builder::new()
159+
.with_json_metadata(serde_json::json!({
160+
"content-type": ContentType::Json,
161+
"content-encoding": ContentEncoding::Brotli,
162+
"id": id,
163+
"ver": id,
164+
"type": doc_types::CAMPAIGN_PARAMETERS.clone(),
165+
"template": {
166+
"id": template.doc_id()?,
167+
"ver": template.doc_ver()?,
168+
},
169+
}))?
170+
.with_json_content(&serde_json::json!({}))?
171+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
172+
.build()
173+
}
174+
=> false
175+
;
176+
"missing 'parameters'"
177+
)]
178+
#[tokio::test]
179+
#[allow(clippy::unwrap_used)]
180+
async fn test_campaign_parameters_doc(
181+
doc_gen: impl FnOnce(&mut TestCatalystProvider) -> anyhow::Result<CatalystSignedDocument>
182+
) -> bool {
183+
let mut provider = TestCatalystProvider::default();
184+
185+
let doc = doc_gen(&mut provider).unwrap();
186+
assert_eq!(
187+
*doc.doc_type().unwrap(),
188+
doc_types::CAMPAIGN_PARAMETERS.clone()
189+
);
190+
191+
let is_valid = validator::validate(&doc, &provider).await.unwrap();
192+
assert_eq!(is_valid, !doc.problem_report().is_problematic());
193+
println!("{:?}", doc.problem_report());
194+
is_valid
195+
}
Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,33 @@
1+
use catalyst_signed_doc::providers::tests::TestCatalystProvider;
2+
use ed25519_dalek::ed25519::signature::Signer;
3+
14
use super::*;
25

3-
pub fn campaign_parameters_doc() -> anyhow::Result<CatalystSignedDocument> {
6+
pub fn campaign_parameters_doc(
7+
template: &CatalystSignedDocument,
8+
parameters: &CatalystSignedDocument,
9+
provider: &mut TestCatalystProvider,
10+
) -> anyhow::Result<CatalystSignedDocument> {
11+
let id = UuidV7::new();
12+
let (sk, _, kid) = create_dummy_key_pair(RoleId::BrandAdmin)
13+
.inspect(|(_, pk, kid)| provider.add_pk(kid.clone(), *pk))?;
414
Builder::new()
515
.with_json_metadata(serde_json::json!({
616
"content-type": ContentType::Json,
7-
"id": UuidV7::new(),
8-
"ver": UuidV7::new(),
17+
"content-encoding": ContentEncoding::Brotli,
18+
"id": id,
19+
"ver": id,
920
"type": doc_types::CAMPAIGN_PARAMETERS.clone(),
21+
"template": {
22+
"id": template.doc_id()?,
23+
"ver": template.doc_ver()?,
24+
},
25+
"parameters": {
26+
"id": parameters.doc_id()?,
27+
"ver": parameters.doc_ver()?,
28+
}
1029
}))?
11-
.empty_content()?
30+
.with_json_content(&serde_json::json!({}))?
31+
.add_signature(|m| sk.sign(&m).to_vec(), kid)?
1232
.build()
1333
}

rust/signed_doc/tests/proposal.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ use test_case::test_case;
99

1010
use crate::common::{
1111
brand_parameters_doc, brand_parameters_form_template_doc, campaign_parameters_doc,
12-
category_parameters_doc, create_dummy_key_pair, proposal_doc, proposal_form_template_doc,
12+
campaign_parameters_form_template_doc, category_parameters_doc, create_dummy_key_pair,
13+
proposal_doc, proposal_form_template_doc,
1314
};
1415

1516
mod common;
@@ -27,7 +28,10 @@ mod common;
2728
)]
2829
#[test_case(
2930
|provider| {
30-
let parameters = campaign_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?;
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(&template, &parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
3135
let template = proposal_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
3236
proposal_doc(&template, &parameters, provider)
3337
}

rust/signed_doc/tests/proposal_comment.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ use test_case::test_case;
99

1010
use crate::common::{
1111
brand_parameters_doc, brand_parameters_form_template_doc, campaign_parameters_doc,
12-
category_parameters_doc, create_dummy_key_pair, proposal_comment_doc,
13-
proposal_comment_form_template_doc, proposal_doc, proposal_form_template_doc,
12+
campaign_parameters_form_template_doc, category_parameters_doc, create_dummy_key_pair,
13+
proposal_comment_doc, proposal_comment_form_template_doc, proposal_doc,
14+
proposal_form_template_doc,
1415
};
1516

1617
mod common;
@@ -30,7 +31,10 @@ mod common;
3031
)]
3132
#[test_case(
3233
|provider| {
33-
let parameters = campaign_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?;
34+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
35+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
36+
let template = campaign_parameters_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
37+
let parameters = campaign_parameters_doc(&template, &parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
3438
let template = proposal_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
3539
let proposal = proposal_doc(&template, &parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
3640
let template = proposal_comment_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;

rust/signed_doc/tests/proposal_comment_form_template.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ use test_case::test_case;
88

99
use crate::common::{
1010
brand_parameters_doc, brand_parameters_form_template_doc, campaign_parameters_doc,
11-
category_parameters_doc, create_dummy_key_pair, proposal_comment_form_template_doc,
11+
campaign_parameters_form_template_doc, category_parameters_doc, create_dummy_key_pair,
12+
proposal_comment_form_template_doc,
1213
};
1314

1415
mod common;
@@ -25,7 +26,10 @@ mod common;
2526
)]
2627
#[test_case(
2728
|provider| {
28-
let parameters = campaign_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?;
29+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
30+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
31+
let template = campaign_parameters_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
32+
let parameters = campaign_parameters_doc(&template, &parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
2933
proposal_comment_form_template_doc(&parameters, provider)
3034
}
3135
=> true

rust/signed_doc/tests/proposal_form_template.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ use test_case::test_case;
88

99
use crate::common::{
1010
brand_parameters_doc, brand_parameters_form_template_doc, campaign_parameters_doc,
11-
category_parameters_doc, create_dummy_key_pair, proposal_form_template_doc,
11+
campaign_parameters_form_template_doc, category_parameters_doc, create_dummy_key_pair,
12+
proposal_form_template_doc,
1213
};
1314

1415
mod common;
@@ -25,7 +26,10 @@ mod common;
2526
)]
2627
#[test_case(
2728
|provider| {
28-
let parameters = campaign_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?;
29+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
30+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
31+
let template = campaign_parameters_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
32+
let parameters = campaign_parameters_doc(&template, &parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
2933
proposal_form_template_doc(&parameters, provider)
3034
}
3135
=> true

rust/signed_doc/tests/proposal_submission_action.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ use test_case::test_case;
99

1010
use crate::common::{
1111
brand_parameters_doc, brand_parameters_form_template_doc, campaign_parameters_doc,
12-
category_parameters_doc, create_dummy_key_pair, proposal_doc, proposal_form_template_doc,
13-
proposal_submission_action_doc,
12+
campaign_parameters_form_template_doc, category_parameters_doc, create_dummy_key_pair,
13+
proposal_doc, proposal_form_template_doc, proposal_submission_action_doc,
1414
};
1515

1616
mod common;
@@ -29,7 +29,10 @@ mod common;
2929
)]
3030
#[test_case(
3131
|provider| {
32-
let parameters = campaign_parameters_doc().inspect(|v| provider.add_document(None, v).unwrap())?;
32+
let template = brand_parameters_form_template_doc(provider).inspect(|v| provider.add_document(None, v).unwrap())?;
33+
let parameters = brand_parameters_doc(&template, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
34+
let template = campaign_parameters_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
35+
let parameters = campaign_parameters_doc(&template, &parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
3336
let template = proposal_form_template_doc(&parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
3437
let proposal = proposal_doc(&template, &parameters, provider).inspect(|v| provider.add_document(None, v).unwrap())?;
3538
proposal_submission_action_doc(&proposal, &parameters, provider)

0 commit comments

Comments
 (0)