-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcomment.rs
125 lines (106 loc) · 4.15 KB
/
comment.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
//! Integration test for comment document validation part.
use catalyst_signed_doc::{providers::tests::TestCatalystSignedDocumentProvider, *};
mod common;
#[tokio::test]
async fn test_valid_comment_doc() {
let (proposal_doc, proposal_doc_id) =
common::create_dummy_doc(doc_types::PROPOSAL_DOCUMENT_UUID_TYPE).unwrap();
let (template_doc, template_doc_id) =
common::create_dummy_doc(doc_types::COMMENT_TEMPLATE_UUID_TYPE).unwrap();
let uuid_v7 = UuidV7::new();
let (doc, ..) = common::create_dummy_signed_doc(Some(serde_json::json!({
"alg": Algorithm::EdDSA.to_string(),
"content-type": ContentType::Json.to_string(),
"content-encoding": ContentEncoding::Brotli.to_string(),
"type": doc_types::COMMENT_DOCUMENT_UUID_TYPE,
"id": uuid_v7.to_string(),
"ver": uuid_v7.to_string(),
"template": {
"id": template_doc_id
},
"ref": {
"id": proposal_doc_id
}
})))
.unwrap();
let mut provider = TestCatalystSignedDocumentProvider::default();
provider.add_document(template_doc).unwrap();
provider.add_document(proposal_doc).unwrap();
let is_valid = validator::validate(&doc, &provider).await.unwrap();
assert!(is_valid);
}
#[tokio::test]
async fn test_valid_comment_doc_with_reply() {
let empty_json = serde_json::to_vec(&serde_json::json!({})).unwrap();
let (proposal_doc, proposal_doc_id) =
common::create_dummy_doc(doc_types::PROPOSAL_DOCUMENT_UUID_TYPE).unwrap();
let (template_doc, template_doc_id) =
common::create_dummy_doc(doc_types::COMMENT_TEMPLATE_UUID_TYPE).unwrap();
let comment_doc_id = UuidV7::new();
let comment_doc = Builder::new()
.with_json_metadata(serde_json::json!({
"id": comment_doc_id,
"type": doc_types::COMMENT_DOCUMENT_UUID_TYPE,
"content-type": ContentType::Json.to_string(),
"template": { "id": comment_doc_id.to_string() },
"ref": {
"id": proposal_doc_id
},
}))
.unwrap()
.with_decoded_content(empty_json.clone())
.build();
let uuid_v7 = UuidV7::new();
let (doc, ..) = common::create_dummy_signed_doc(Some(serde_json::json!({
"alg": Algorithm::EdDSA.to_string(),
"content-type": ContentType::Json.to_string(),
"content-encoding": ContentEncoding::Brotli.to_string(),
"type": doc_types::COMMENT_DOCUMENT_UUID_TYPE,
"id": uuid_v7.to_string(),
"ver": uuid_v7.to_string(),
"template": {
"id": template_doc_id
},
"ref": {
"id": proposal_doc_id
},
"reply": {
"id": comment_doc_id,
"ver": uuid_v7
}
})))
.unwrap();
let mut provider = TestCatalystSignedDocumentProvider::default();
provider.add_document(template_doc).unwrap();
provider.add_document(proposal_doc).unwrap();
provider.add_document(comment_doc).unwrap();
let is_valid = validator::validate(&doc, &provider).await.unwrap();
assert!(is_valid);
}
#[tokio::test]
async fn test_invalid_comment_doc() {
let (proposal_doc, _) =
common::create_dummy_doc(doc_types::PROPOSAL_DOCUMENT_UUID_TYPE).unwrap();
let (template_doc, template_doc_id) =
common::create_dummy_doc(doc_types::COMMENT_TEMPLATE_UUID_TYPE).unwrap();
let uuid_v7 = UuidV7::new();
let (doc, ..) = common::create_dummy_signed_doc(Some(serde_json::json!({
"alg": Algorithm::EdDSA.to_string(),
"content-type": ContentType::Json.to_string(),
"content-encoding": ContentEncoding::Brotli.to_string(),
"type": doc_types::COMMENT_DOCUMENT_UUID_TYPE,
"id": uuid_v7.to_string(),
"ver": uuid_v7.to_string(),
"template": {
"id": template_doc_id
},
// without ref
"ref": serde_json::Value::Null
})))
.unwrap();
let mut provider = TestCatalystSignedDocumentProvider::default();
provider.add_document(template_doc).unwrap();
provider.add_document(proposal_doc).unwrap();
let is_valid = validator::validate(&doc, &provider).await.unwrap();
assert!(!is_valid);
}