Skip to content

Commit 8827bb0

Browse files
authored
feat(rust/signed-doc): Validation and tests for submission action (#257)
* feat(submission action): validation and tests * feat(submission action): validation and tests
1 parent fc4a05d commit 8827bb0

File tree

2 files changed

+103
-2
lines changed

2 files changed

+103
-2
lines changed

rust/signed_doc/src/validator/mod.rs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ use rules::{
1414

1515
use crate::{
1616
doc_types::{
17-
COMMENT_DOCUMENT_UUID_TYPE, COMMENT_TEMPLATE_UUID_TYPE, PROPOSAL_DOCUMENT_UUID_TYPE,
18-
PROPOSAL_TEMPLATE_UUID_TYPE,
17+
COMMENT_DOCUMENT_UUID_TYPE, COMMENT_TEMPLATE_UUID_TYPE, PROPOSAL_ACTION_DOCUMENT_UUID_TYPE,
18+
PROPOSAL_DOCUMENT_UUID_TYPE, PROPOSAL_TEMPLATE_UUID_TYPE,
1919
},
2020
providers::{CatalystSignedDocumentProvider, VerifyingKeyProvider},
2121
CatalystSignedDocument, ContentEncoding, ContentType,
@@ -79,6 +79,31 @@ fn document_rules_init() -> HashMap<Uuid, Rules> {
7979
};
8080
document_rules_map.insert(COMMENT_DOCUMENT_UUID_TYPE, comment_document_rules);
8181

82+
let proposal_submission_action_rules = Rules {
83+
content_type: ContentTypeRule {
84+
exp: ContentType::Json,
85+
},
86+
content_encoding: ContentEncodingRule {
87+
exp: ContentEncoding::Brotli,
88+
optional: false,
89+
},
90+
template: TemplateRule::NotSpecified,
91+
category: CategoryRule::Specified { optional: true },
92+
doc_ref: RefRule::Specified {
93+
exp_ref_type: PROPOSAL_DOCUMENT_UUID_TYPE
94+
.try_into()
95+
.expect("Must be a valid UUID V4"),
96+
optional: false,
97+
},
98+
reply: ReplyRule::NotSpecified,
99+
section: SectionRule::NotSpecified,
100+
};
101+
102+
document_rules_map.insert(
103+
PROPOSAL_ACTION_DOCUMENT_UUID_TYPE,
104+
proposal_submission_action_rules,
105+
);
106+
82107
document_rules_map
83108
}
84109

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
//! Test for proposal submission action.
2+
3+
use catalyst_signed_doc::{providers::tests::TestCatalystSignedDocumentProvider, *};
4+
5+
mod common;
6+
7+
#[tokio::test]
8+
async fn test_valid_submission_action() {
9+
let (proposal_doc, proposal_doc_id) =
10+
common::create_dummy_doc(doc_types::PROPOSAL_DOCUMENT_UUID_TYPE).unwrap();
11+
12+
let uuid_v7 = UuidV7::new();
13+
let (doc, ..) = common::create_dummy_signed_doc(Some(serde_json::json!({
14+
"content-type": ContentType::Json.to_string(),
15+
"content-encoding": ContentEncoding::Brotli.to_string(),
16+
"type": doc_types::PROPOSAL_ACTION_DOCUMENT_UUID_TYPE,
17+
"id": uuid_v7.to_string(),
18+
"ver": uuid_v7.to_string(),
19+
"ref": {
20+
"id": proposal_doc_id
21+
},
22+
})))
23+
.unwrap();
24+
25+
let mut provider = TestCatalystSignedDocumentProvider::default();
26+
provider.add_document(proposal_doc).unwrap();
27+
28+
let is_valid = validator::validate(&doc, &provider).await.unwrap();
29+
30+
assert!(is_valid);
31+
}
32+
33+
#[tokio::test]
34+
async fn test_valid_submission_action_with_empty_provider() {
35+
let proposal_doc_id = UuidV7::new();
36+
37+
let uuid_v7 = UuidV7::new();
38+
let (doc, ..) = common::create_dummy_signed_doc(Some(serde_json::json!({
39+
"content-type": ContentType::Json.to_string(),
40+
"content-encoding": ContentEncoding::Brotli.to_string(),
41+
"type": doc_types::PROPOSAL_ACTION_DOCUMENT_UUID_TYPE,
42+
"id": uuid_v7.to_string(),
43+
"ver": uuid_v7.to_string(),
44+
"ref": {
45+
"id": proposal_doc_id
46+
},
47+
})))
48+
.unwrap();
49+
50+
let provider = TestCatalystSignedDocumentProvider::default();
51+
52+
let is_valid = validator::validate(&doc, &provider).await.unwrap();
53+
54+
assert!(!is_valid);
55+
}
56+
57+
#[tokio::test]
58+
async fn test_invalid_submission_action() {
59+
let uuid_v7 = UuidV7::new();
60+
let (doc, ..) = common::create_dummy_signed_doc(Some(serde_json::json!({
61+
"content-type": ContentType::Json.to_string(),
62+
"content-encoding": ContentEncoding::Brotli.to_string(),
63+
"type": doc_types::PROPOSAL_ACTION_DOCUMENT_UUID_TYPE,
64+
"id": uuid_v7.to_string(),
65+
"ver": uuid_v7.to_string(),
66+
// without specifying ref
67+
"ref": serde_json::Value::Null,
68+
})))
69+
.unwrap();
70+
71+
let provider = TestCatalystSignedDocumentProvider::default();
72+
73+
let is_valid = validator::validate(&doc, &provider).await.unwrap();
74+
75+
assert!(!is_valid);
76+
}

0 commit comments

Comments
 (0)