22//! Require fields: type, id, ver, ref, parameters
33//! <https://input-output-hk.github.io/catalyst-libs/architecture/08_concepts/signed_doc/docs/proposal_submission_action/>
44
5- use std:: sync:: LazyLock ;
6-
75use catalyst_signed_doc:: { providers:: tests:: TestCatalystProvider , * } ;
86use catalyst_types:: catalyst_id:: role_index:: RoleId ;
97use ed25519_dalek:: ed25519:: signature:: Signer ;
108use test_case:: test_case;
119
12- use crate :: common:: create_dummy_key_pair;
10+ use crate :: common:: {
11+ create_dummy_key_pair,
12+ dummies:: {
13+ BRAND_PARAMETERS_DOC , CAMPAIGN_PARAMETERS_DOC , CATEGORY_PARAMETERS_DOC ,
14+ PROPOSAL_FOR_BRAND_DOC , PROPOSAL_FOR_CAMPAIGN_DOC , PROPOSAL_FOR_CATEGORY_DOC ,
15+ } ,
16+ } ;
1317
1418mod common;
1519
16- #[ allow( clippy:: unwrap_used) ]
17- static DUMMY_PROPOSAL_DOC : LazyLock < CatalystSignedDocument > = LazyLock :: new ( || {
18- Builder :: new ( )
19- . with_json_metadata ( serde_json:: json!( {
20- "content-type" : ContentType :: Json . to_string( ) ,
21- "id" : UuidV7 :: new( ) ,
22- "ver" : UuidV7 :: new( ) ,
23- "type" : doc_types:: PROPOSAL . clone( ) ,
24- "parameters" : {
25- "id" : DUMMY_BRAND_DOC . doc_id( ) . unwrap( ) ,
26- "ver" : DUMMY_BRAND_DOC . doc_ver( ) . unwrap( ) ,
27- }
28- } ) )
29- . unwrap ( )
30- . empty_content ( )
31- . unwrap ( )
32- . build ( )
33- . unwrap ( )
34- } ) ;
35-
36- #[ allow( clippy:: unwrap_used) ]
37- static DUMMY_BRAND_DOC : LazyLock < CatalystSignedDocument > = LazyLock :: new ( || {
38- Builder :: new ( )
39- . with_json_metadata ( serde_json:: json!( {
40- "content-type" : ContentType :: Json . to_string( ) ,
41- "id" : UuidV7 :: new( ) ,
42- "ver" : UuidV7 :: new( ) ,
43- "type" : doc_types:: BRAND_PARAMETERS . clone( ) ,
44- } ) )
45- . unwrap ( )
46- . empty_content ( )
47- . unwrap ( )
48- . build ( )
49- . unwrap ( )
50- } ) ;
51-
5220#[ test_case(
5321 |provider| {
5422 let id = UuidV7 :: new( ) ;
@@ -63,12 +31,78 @@ static DUMMY_BRAND_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|| {
6331 "id" : id,
6432 "ver" : id,
6533 "ref" : {
66- "id" : DUMMY_PROPOSAL_DOC . doc_id( ) ?,
67- "ver" : DUMMY_PROPOSAL_DOC . doc_ver( ) ?,
34+ "id" : PROPOSAL_FOR_BRAND_DOC . doc_id( ) ?,
35+ "ver" : PROPOSAL_FOR_BRAND_DOC . doc_ver( ) ?,
36+ } ,
37+ "parameters" : {
38+ "id" : BRAND_PARAMETERS_DOC . doc_id( ) ?,
39+ "ver" : BRAND_PARAMETERS_DOC . doc_ver( ) ?,
40+ }
41+ } ) ) ?
42+ . with_json_content( & serde_json:: json!( {
43+ "action" : "final"
44+ } ) ) ?
45+ . add_signature( |m| sk. sign( & m) . to_vec( ) , kid) ?
46+ . build( ) ?;
47+ Ok ( doc)
48+ }
49+ => true
50+ ;
51+ "valid document with brand 'parameters'"
52+ ) ]
53+ #[ test_case(
54+ |provider| {
55+ let id = UuidV7 :: new( ) ;
56+ let ( sk, pk, kid) = create_dummy_key_pair( RoleId :: Proposer ) ?;
57+ provider. add_pk( kid. clone( ) , pk) ;
58+ // Create a main proposal submission doc, contain all fields mention in the document
59+ let doc = Builder :: new( )
60+ . with_json_metadata( serde_json:: json!( {
61+ "content-type" : ContentType :: Json . to_string( ) ,
62+ "content-encoding" : ContentEncoding :: Brotli . to_string( ) ,
63+ "type" : doc_types:: PROPOSAL_SUBMISSION_ACTION . clone( ) ,
64+ "id" : id,
65+ "ver" : id,
66+ "ref" : {
67+ "id" : PROPOSAL_FOR_CAMPAIGN_DOC . doc_id( ) ?,
68+ "ver" : PROPOSAL_FOR_CAMPAIGN_DOC . doc_ver( ) ?,
69+ } ,
70+ "parameters" : {
71+ "id" : CAMPAIGN_PARAMETERS_DOC . doc_id( ) ?,
72+ "ver" : CAMPAIGN_PARAMETERS_DOC . doc_ver( ) ?,
73+ }
74+ } ) ) ?
75+ . with_json_content( & serde_json:: json!( {
76+ "action" : "final"
77+ } ) ) ?
78+ . add_signature( |m| sk. sign( & m) . to_vec( ) , kid) ?
79+ . build( ) ?;
80+ Ok ( doc)
81+ }
82+ => true
83+ ;
84+ "valid document with campaign 'parameters'"
85+ ) ]
86+ #[ test_case(
87+ |provider| {
88+ let id = UuidV7 :: new( ) ;
89+ let ( sk, pk, kid) = create_dummy_key_pair( RoleId :: Proposer ) ?;
90+ provider. add_pk( kid. clone( ) , pk) ;
91+ // Create a main proposal submission doc, contain all fields mention in the document
92+ let doc = Builder :: new( )
93+ . with_json_metadata( serde_json:: json!( {
94+ "content-type" : ContentType :: Json . to_string( ) ,
95+ "content-encoding" : ContentEncoding :: Brotli . to_string( ) ,
96+ "type" : doc_types:: PROPOSAL_SUBMISSION_ACTION . clone( ) ,
97+ "id" : id,
98+ "ver" : id,
99+ "ref" : {
100+ "id" : PROPOSAL_FOR_CATEGORY_DOC . doc_id( ) ?,
101+ "ver" : PROPOSAL_FOR_CATEGORY_DOC . doc_ver( ) ?,
68102 } ,
69103 "parameters" : {
70- "id" : DUMMY_BRAND_DOC . doc_id( ) ?,
71- "ver" : DUMMY_BRAND_DOC . doc_ver( ) ?,
104+ "id" : CATEGORY_PARAMETERS_DOC . doc_id( ) ?,
105+ "ver" : CATEGORY_PARAMETERS_DOC . doc_ver( ) ?,
72106 }
73107 } ) ) ?
74108 . with_json_content( & serde_json:: json!( {
@@ -80,7 +114,7 @@ static DUMMY_BRAND_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|| {
80114 }
81115 => true
82116 ;
83- "valid document"
117+ "valid document with category 'parameters' "
84118) ]
85119#[ test_case(
86120 |provider| {
@@ -96,12 +130,12 @@ static DUMMY_BRAND_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|| {
96130 "id" : id,
97131 "ver" : id,
98132 "ref" : {
99- "id" : DUMMY_PROPOSAL_DOC . doc_id( ) ?,
100- "ver" : DUMMY_PROPOSAL_DOC . doc_ver( ) ?,
133+ "id" : PROPOSAL_FOR_BRAND_DOC . doc_id( ) ?,
134+ "ver" : PROPOSAL_FOR_BRAND_DOC . doc_ver( ) ?,
101135 } ,
102136 "parameters" : {
103- "id" : DUMMY_BRAND_DOC . doc_id( ) ?,
104- "ver" : DUMMY_BRAND_DOC . doc_ver( ) ?,
137+ "id" : BRAND_PARAMETERS_DOC . doc_id( ) ?,
138+ "ver" : BRAND_PARAMETERS_DOC . doc_ver( ) ?,
105139 }
106140 } ) ) ?
107141 . with_json_content( & serde_json:: json!( {
@@ -128,12 +162,12 @@ static DUMMY_BRAND_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|| {
128162 "id" : id,
129163 "ver" : id,
130164 "ref" : {
131- "id" : DUMMY_PROPOSAL_DOC . doc_id( ) ?,
132- "ver" : DUMMY_PROPOSAL_DOC . doc_ver( ) ?,
165+ "id" : PROPOSAL_FOR_BRAND_DOC . doc_id( ) ?,
166+ "ver" : PROPOSAL_FOR_BRAND_DOC . doc_ver( ) ?,
133167 } ,
134168 "parameters" : {
135- "id" : DUMMY_BRAND_DOC . doc_id( ) ?,
136- "ver" : DUMMY_BRAND_DOC . doc_ver( ) ?,
169+ "id" : BRAND_PARAMETERS_DOC . doc_id( ) ?,
170+ "ver" : BRAND_PARAMETERS_DOC . doc_ver( ) ?,
137171 }
138172 } ) ) ?
139173 . empty_content( ) ?
@@ -159,12 +193,12 @@ static DUMMY_BRAND_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|| {
159193 "id" : id,
160194 "ver" : id,
161195 "ref" : {
162- "id" : DUMMY_PROPOSAL_DOC . doc_id( ) ?,
163- "ver" : DUMMY_PROPOSAL_DOC . doc_ver( ) ?,
196+ "id" : PROPOSAL_FOR_BRAND_DOC . doc_id( ) ?,
197+ "ver" : PROPOSAL_FOR_BRAND_DOC . doc_ver( ) ?,
164198 } ,
165199 "parameters" : {
166- "id" : DUMMY_BRAND_DOC . doc_id( ) ?,
167- "ver" : DUMMY_BRAND_DOC . doc_ver( ) ?,
200+ "id" : BRAND_PARAMETERS_DOC . doc_id( ) ?,
201+ "ver" : BRAND_PARAMETERS_DOC . doc_ver( ) ?,
168202 }
169203 } ) ) ?
170204 . with_json_content( & serde_json:: json!( "null" ) ) ?
@@ -188,12 +222,12 @@ static DUMMY_BRAND_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|| {
188222 "id" : id,
189223 "ver" : id,
190224 "ref" : {
191- "id" : DUMMY_PROPOSAL_DOC . doc_id( ) ?,
192- "ver" : DUMMY_PROPOSAL_DOC . doc_ver( ) ?,
225+ "id" : PROPOSAL_FOR_BRAND_DOC . doc_id( ) ?,
226+ "ver" : PROPOSAL_FOR_BRAND_DOC . doc_ver( ) ?,
193227 } ,
194228 "parameters" : {
195- "id" : DUMMY_BRAND_DOC . doc_id( ) ?,
196- "ver" : DUMMY_BRAND_DOC . doc_ver( ) ?,
229+ "id" : BRAND_PARAMETERS_DOC . doc_id( ) ?,
230+ "ver" : BRAND_PARAMETERS_DOC . doc_ver( ) ?,
197231 }
198232 } ) ) ?
199233 . with_json_content( & serde_json:: json!( {
@@ -220,8 +254,8 @@ static DUMMY_BRAND_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|| {
220254 "id" : id,
221255 "ver" : id,
222256 "parameters" : {
223- "id" : DUMMY_BRAND_DOC . doc_id( ) ?,
224- "ver" : DUMMY_BRAND_DOC . doc_ver( ) ?,
257+ "id" : BRAND_PARAMETERS_DOC . doc_id( ) ?,
258+ "ver" : BRAND_PARAMETERS_DOC . doc_ver( ) ?,
225259 }
226260 } ) ) ?
227261 . with_json_content( & serde_json:: json!( {
@@ -249,8 +283,8 @@ static DUMMY_BRAND_DOC: LazyLock<CatalystSignedDocument> = LazyLock::new(|| {
249283 "id" : id,
250284 "ver" : id,
251285 "ref" : {
252- "id" : DUMMY_PROPOSAL_DOC . doc_id( ) ?,
253- "ver" : DUMMY_PROPOSAL_DOC . doc_ver( ) ?,
286+ "id" : PROPOSAL_FOR_BRAND_DOC . doc_id( ) ?,
287+ "ver" : PROPOSAL_FOR_BRAND_DOC . doc_ver( ) ?,
254288 } ,
255289 } ) ) ?
256290 . with_json_content( & serde_json:: json!( {
@@ -272,8 +306,22 @@ async fn test_proposal_submission_action_doc(
272306
273307 let doc = doc_gen ( & mut provider) . unwrap ( ) ;
274308
275- provider. add_document ( None , & DUMMY_PROPOSAL_DOC ) . unwrap ( ) ;
276- provider. add_document ( None , & DUMMY_BRAND_DOC ) . unwrap ( ) ;
309+ provider
310+ . add_document ( None , & PROPOSAL_FOR_BRAND_DOC )
311+ . unwrap ( ) ;
312+ provider
313+ . add_document ( None , & PROPOSAL_FOR_CAMPAIGN_DOC )
314+ . unwrap ( ) ;
315+ provider
316+ . add_document ( None , & PROPOSAL_FOR_CATEGORY_DOC )
317+ . unwrap ( ) ;
318+ provider. add_document ( None , & BRAND_PARAMETERS_DOC ) . unwrap ( ) ;
319+ provider
320+ . add_document ( None , & CAMPAIGN_PARAMETERS_DOC )
321+ . unwrap ( ) ;
322+ provider
323+ . add_document ( None , & CATEGORY_PARAMETERS_DOC )
324+ . unwrap ( ) ;
277325
278326 let is_valid = validator:: validate ( & doc, & provider) . await . unwrap ( ) ;
279327 assert_eq ! ( is_valid, !doc. problem_report( ) . is_problematic( ) ) ;
0 commit comments