Skip to content

Commit acc9b3a

Browse files
Remove the boolean flag from the ownership rule (#841)
Co-authored-by: Alex Pozhylenkov <leshiy12345678@gmail.com>
1 parent cdb4ef6 commit acc9b3a

File tree

5 files changed

+86
-58
lines changed

5 files changed

+86
-58
lines changed

rust/signed_doc/src/validator/rules/ownership/mod.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ impl CatalystSignedDocumentValidationRule for DocumentOwnershipRule {
3636
doc: &CatalystSignedDocument,
3737
provider: &dyn Provider,
3838
) -> anyhow::Result<bool> {
39-
self.check_inner(doc, provider)
39+
self.check_inner(doc, provider)?;
40+
Ok(!doc.report().is_problematic())
4041
}
4142
}
4243

@@ -74,14 +75,14 @@ impl DocumentOwnershipRule {
7475
&self,
7576
doc: &CatalystSignedDocument,
7677
provider: &dyn Provider,
77-
) -> anyhow::Result<bool> {
78+
) -> anyhow::Result<()> {
7879
let doc_id = doc.doc_id()?;
7980
if doc_id == doc.doc_ver()? && doc.authors().len() != 1 {
8081
doc.report().functional_validation(
8182
"Document must only be signed by one author",
8283
REPORT_CONTEXT,
8384
);
84-
return Ok(false);
85+
return Ok(());
8586
}
8687

8788
let mut allowed_authors = HashSet::new();
@@ -94,7 +95,7 @@ impl DocumentOwnershipRule {
9495
"Cannot find a first version of the referenced document",
9596
REPORT_CONTEXT,
9697
);
97-
return Ok(false);
98+
return Ok(());
9899
};
99100
allowed_authors.extend(first_doc.authors());
100101
}
@@ -107,7 +108,7 @@ impl DocumentOwnershipRule {
107108
"Cannot find a first version of the referenced document",
108109
REPORT_CONTEXT,
109110
);
110-
return Ok(false);
111+
return Ok(());
111112
};
112113
allowed_authors.extend(first_doc.authors());
113114

@@ -121,19 +122,19 @@ impl DocumentOwnershipRule {
121122
Self::RefFieldBased => {
122123
let Some(doc_ref) = doc.doc_meta().doc_ref() else {
123124
doc.report().missing_field("ref", REPORT_CONTEXT);
124-
return Ok(false);
125+
return Ok(());
125126
};
126127
let [doc_ref] = doc_ref.as_slice() else {
127128
doc.report()
128129
.other("'ref' field cannot have multiple values", REPORT_CONTEXT);
129-
return Ok(false);
130+
return Ok(());
130131
};
131132
let Some(first_ref_doc) = provider.try_get_first_doc(*doc_ref.id())? else {
132133
doc.report().other(
133134
"Cannot find a first version of the referenced document",
134135
REPORT_CONTEXT,
135136
);
136-
return Ok(false);
137+
return Ok(());
137138
};
138139
allowed_authors.extend(first_ref_doc.authors());
139140

@@ -162,6 +163,6 @@ impl DocumentOwnershipRule {
162163
REPORT_CONTEXT
163164
);
164165
}
165-
Ok(is_valid)
166+
Ok(())
166167
}
167168
}

rust/signed_doc/src/validator/rules/ownership/tests/collaborators_field_based.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use crate::{
1515
|_| {
1616
let (sk, kid) = create_dummy_key_pair(RoleId::Role0);
1717
let id = UuidV7::new();
18-
Builder::new()
18+
Builder::with_required_fields()
1919
.with_metadata_field(SupportedField::Id(id))
2020
.with_metadata_field(SupportedField::Ver(id))
2121
.add_signature(|m| sk.sign(&m).to_vec(), kid.clone())
@@ -28,15 +28,15 @@ use crate::{
2828
|provider| {
2929
let (sk, kid) = create_dummy_key_pair(RoleId::Role0);
3030
let id = UuidV7::new();
31-
let doc = Builder::new()
31+
let doc = Builder::with_required_fields()
3232
.with_metadata_field(SupportedField::Id(id))
3333
.with_metadata_field(SupportedField::Ver(id))
3434
.add_signature(|m| sk.sign(&m).to_vec(), kid.clone())
3535
.unwrap()
3636
.build();
3737
provider.add_document(&doc).unwrap();
3838
39-
Builder::new()
39+
Builder::with_required_fields()
4040
.with_metadata_field(SupportedField::Id(id))
4141
.with_metadata_field(SupportedField::Ver(UuidV7::new()))
4242
.add_signature(|m| sk.sign(&m).to_vec(), kid.clone())
@@ -50,7 +50,7 @@ use crate::{
5050
let (a_sk, a_kid) = create_dummy_key_pair(RoleId::Role0);
5151
let (c_sk, c_kid) = create_dummy_key_pair(RoleId::Role0);
5252
let id = UuidV7::new();
53-
let doc = Builder::new()
53+
let doc = Builder::with_required_fields()
5454
.with_metadata_field(SupportedField::Id(id))
5555
.with_metadata_field(SupportedField::Ver(id))
5656
.with_metadata_field(SupportedField::Collaborators(vec![c_kid.clone()].into()))
@@ -59,7 +59,7 @@ use crate::{
5959
.build();
6060
provider.add_document(&doc).unwrap();
6161
62-
Builder::new()
62+
Builder::with_required_fields()
6363
.with_metadata_field(SupportedField::Id(id))
6464
.with_metadata_field(SupportedField::Ver(UuidV7::new()))
6565
.add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone())
@@ -75,7 +75,7 @@ use crate::{
7575
let (a_sk, a_kid) = create_dummy_key_pair(RoleId::Role0);
7676
let (c_sk, c_kid) = create_dummy_key_pair(RoleId::Role0);
7777
let id = UuidV7::new();
78-
let doc = Builder::new()
78+
let doc = Builder::with_required_fields()
7979
.with_metadata_field(SupportedField::Id(id))
8080
.with_metadata_field(SupportedField::Ver(id))
8181
.with_metadata_field(SupportedField::Collaborators(vec![c_kid.clone()].into()))
@@ -84,7 +84,7 @@ use crate::{
8484
.build();
8585
provider.add_document(&doc).unwrap();
8686
87-
Builder::new()
87+
Builder::with_required_fields()
8888
.with_metadata_field(SupportedField::Id(id))
8989
.with_metadata_field(SupportedField::Ver(UuidV7::new()))
9090
.add_signature(|m| c_sk.sign(&m).to_vec(), c_kid.clone())
@@ -96,7 +96,7 @@ use crate::{
9696
#[test_case(
9797
|_| {
9898
let id = UuidV7::new();
99-
Builder::new()
99+
Builder::with_required_fields()
100100
.with_metadata_field(SupportedField::Id(id))
101101
.with_metadata_field(SupportedField::Ver(id))
102102
.build()
@@ -108,7 +108,7 @@ use crate::{
108108
let (sk1, kid1) = create_dummy_key_pair(RoleId::Role0);
109109
let (sk2, kid2) = create_dummy_key_pair(RoleId::Role0);
110110
let id = UuidV7::new();
111-
Builder::new()
111+
Builder::with_required_fields()
112112
.with_metadata_field(SupportedField::Id(id))
113113
.with_metadata_field(SupportedField::Ver(id))
114114
.add_signature(|m| sk1.sign(&m).to_vec(), kid1.clone())
@@ -123,7 +123,7 @@ use crate::{
123123
|provider| {
124124
let (sk, kid) = create_dummy_key_pair(RoleId::Role0);
125125
let id = UuidV7::new();
126-
let doc = Builder::new()
126+
let doc = Builder::with_required_fields()
127127
.with_metadata_field(SupportedField::Id(id))
128128
.with_metadata_field(SupportedField::Ver(id))
129129
.add_signature(|m| sk.sign(&m).to_vec(), kid.clone())
@@ -132,7 +132,7 @@ use crate::{
132132
provider.add_document(&doc).unwrap();
133133
134134
let (sk, kid) = create_dummy_key_pair(RoleId::Role0);
135-
Builder::new()
135+
Builder::with_required_fields()
136136
.with_metadata_field(SupportedField::Id(id))
137137
.with_metadata_field(SupportedField::Ver(UuidV7::new()))
138138
.add_signature(|m| sk.sign(&m).to_vec(), kid.clone())
@@ -146,15 +146,15 @@ use crate::{
146146
let (a_sk, a_kid) = create_dummy_key_pair(RoleId::Role0);
147147
let (c_sk, c_kid) = create_dummy_key_pair(RoleId::Role0);
148148
let id = UuidV7::new();
149-
let doc = Builder::new()
149+
let doc = Builder::with_required_fields()
150150
.with_metadata_field(SupportedField::Id(id))
151151
.with_metadata_field(SupportedField::Ver(id))
152152
.add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone())
153153
.unwrap()
154154
.build();
155155
provider.add_document(&doc).unwrap();
156156
157-
Builder::new()
157+
Builder::with_required_fields()
158158
.with_metadata_field(SupportedField::Id(id))
159159
.with_metadata_field(SupportedField::Ver(UuidV7::new()))
160160
.add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone())
@@ -170,7 +170,7 @@ use crate::{
170170
let (a_sk, a_kid) = create_dummy_key_pair(RoleId::Role0);
171171
let (c1_sk, c1_kid) = create_dummy_key_pair(RoleId::Role0);
172172
let id = UuidV7::new();
173-
let doc = Builder::new()
173+
let doc = Builder::with_required_fields()
174174
.with_metadata_field(SupportedField::Id(id))
175175
.with_metadata_field(SupportedField::Ver(id))
176176
.with_metadata_field(SupportedField::Collaborators(vec![c1_kid.clone()].into()))
@@ -180,7 +180,7 @@ use crate::{
180180
provider.add_document(&doc).unwrap();
181181
182182
let (c2_sk, c2_kid) = create_dummy_key_pair(RoleId::Role0);
183-
Builder::new()
183+
Builder::with_required_fields()
184184
.with_metadata_field(SupportedField::Id(id))
185185
.with_metadata_field(SupportedField::Ver(UuidV7::new()))
186186
.add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone())
@@ -200,9 +200,9 @@ fn ownership_test(
200200

201201
let doc = doc_gen(&mut provider);
202202

203-
let res = DocumentOwnershipRule::CollaboratorsFieldBased
203+
DocumentOwnershipRule::CollaboratorsFieldBased
204204
.check_inner(&doc, &provider)
205205
.unwrap();
206206
println!("{:?}", doc.report());
207-
res
207+
!doc.report().is_problematic()
208208
}

rust/signed_doc/src/validator/rules/ownership/tests/mod.rs

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ use catalyst_types::{catalyst_id::role_index::RoleId, uuid::UuidV7};
44
use ed25519_dalek::ed25519::signature::Signer;
55

66
use crate::{
7-
builder::tests::Builder, metadata::SupportedField, providers::tests::TestCatalystProvider,
8-
tests_utils::create_dummy_key_pair, validator::rules::DocumentOwnershipRule,
7+
CatalystSignedDocument, builder::tests::Builder, metadata::SupportedField,
8+
providers::tests::TestCatalystProvider, tests_utils::create_dummy_key_pair,
9+
validator::rules::DocumentOwnershipRule,
910
};
1011

1112
mod collaborators_field_based;
@@ -16,20 +17,46 @@ mod without_collaborators;
1617
fn empty_provider_test() {
1718
let provider = TestCatalystProvider::default();
1819

20+
let doc = make_document();
21+
DocumentOwnershipRule::OriginalAuthor
22+
.check_inner(&doc, &provider)
23+
.unwrap();
24+
assert!(doc.report().is_problematic());
25+
let report = format!("{:?}", doc.report());
26+
assert!(
27+
report.contains("Cannot find a first version of the referenced document"),
28+
"{report}"
29+
);
30+
31+
let doc = make_document();
32+
DocumentOwnershipRule::RefFieldBased
33+
.check_inner(&doc, &provider)
34+
.unwrap();
35+
assert!(doc.report().is_problematic());
36+
let report = format!("{:?}", doc.report());
37+
assert!(report.contains("Document ownership validation"), "{report}");
38+
39+
let doc = make_document();
40+
DocumentOwnershipRule::CollaboratorsFieldBased
41+
.check_inner(&doc, &provider)
42+
.unwrap();
43+
assert!(doc.report().is_problematic());
44+
let report = format!("{:?}", doc.report());
45+
assert!(
46+
report.contains("Cannot find a first version of the referenced document"),
47+
"{report}"
48+
);
49+
}
50+
51+
/// Creates a document for testing.
52+
fn make_document() -> CatalystSignedDocument {
1953
let (a_sk, a_kid) = create_dummy_key_pair(RoleId::Role0);
2054
let id = UuidV7::new();
2155
let ver = UuidV7::new();
22-
let doc = Builder::new()
56+
Builder::with_required_fields()
2357
.with_metadata_field(SupportedField::Id(id))
2458
.with_metadata_field(SupportedField::Ver(ver))
2559
.add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone())
2660
.unwrap()
27-
.build();
28-
29-
let result = DocumentOwnershipRule::OriginalAuthor.check_inner(&doc, &provider);
30-
assert!(matches!(result, Ok(false)));
31-
let result = DocumentOwnershipRule::RefFieldBased.check_inner(&doc, &provider);
32-
assert!(matches!(result, Ok(false)));
33-
let result = DocumentOwnershipRule::CollaboratorsFieldBased.check_inner(&doc, &provider);
34-
assert!(matches!(result, Ok(false)));
61+
.build()
3562
}

rust/signed_doc/src/validator/rules/ownership/tests/ref_field_based.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use crate::{
1515
|provider| {
1616
let (a_sk, a_kid) = create_dummy_key_pair(RoleId::Role0);
1717
let id = UuidV7::new();
18-
let doc = Builder::new()
18+
let doc = Builder::with_required_fields()
1919
.with_metadata_field(SupportedField::Id(id))
2020
.with_metadata_field(SupportedField::Ver(id))
2121
.add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone())
@@ -24,7 +24,7 @@ use crate::{
2424
provider.add_document(&doc).unwrap();
2525
2626
let id = UuidV7::new();
27-
Builder::new()
27+
Builder::with_required_fields()
2828
.with_metadata_field(SupportedField::Id(id))
2929
.with_metadata_field(SupportedField::Ver(id))
3030
.with_metadata_field(SupportedField::Ref(
@@ -41,7 +41,7 @@ use crate::{
4141
let (a_sk, a_kid) = create_dummy_key_pair(RoleId::Role0);
4242
let (c_sk, c_kid) = create_dummy_key_pair(RoleId::Role0);
4343
let id = UuidV7::new();
44-
let doc = Builder::new()
44+
let doc = Builder::with_required_fields()
4545
.with_metadata_field(SupportedField::Id(id))
4646
.with_metadata_field(SupportedField::Ver(id))
4747
.with_metadata_field(SupportedField::Collaborators(vec![c_kid.clone()].into()))
@@ -51,7 +51,7 @@ use crate::{
5151
provider.add_document(&doc).unwrap();
5252
5353
let id = UuidV7::new();
54-
Builder::new()
54+
Builder::with_required_fields()
5555
.with_metadata_field(SupportedField::Id(id))
5656
.with_metadata_field(SupportedField::Ver(id))
5757
.with_metadata_field(SupportedField::Ref(
@@ -66,7 +66,7 @@ use crate::{
6666
#[test_case(
6767
|_| {
6868
let id = UuidV7::new();
69-
Builder::new()
69+
Builder::with_required_fields()
7070
.with_metadata_field(SupportedField::Id(id))
7171
.with_metadata_field(SupportedField::Ver(id))
7272
.build()
@@ -77,7 +77,7 @@ use crate::{
7777
|_| {
7878
let (sk, kid) = create_dummy_key_pair(RoleId::Role0);
7979
let id = UuidV7::new();
80-
Builder::new()
80+
Builder::with_required_fields()
8181
.with_metadata_field(SupportedField::Id(id))
8282
.with_metadata_field(SupportedField::Ver(id))
8383
.add_signature(|m| sk.sign(&m).to_vec(), kid.clone())
@@ -90,7 +90,7 @@ use crate::{
9090
|provider| {
9191
let (a_sk, a_kid) = create_dummy_key_pair(RoleId::Role0);
9292
let id = UuidV7::new();
93-
let doc = Builder::new()
93+
let doc = Builder::with_required_fields()
9494
.with_metadata_field(SupportedField::Id(id))
9595
.with_metadata_field(SupportedField::Ver(id))
9696
.add_signature(|m| a_sk.sign(&m).to_vec(), a_kid.clone())
@@ -100,7 +100,7 @@ use crate::{
100100
101101
let (a_sk, a_kid) = create_dummy_key_pair(RoleId::Role0);
102102
let id = UuidV7::new();
103-
Builder::new()
103+
Builder::with_required_fields()
104104
.with_metadata_field(SupportedField::Id(id))
105105
.with_metadata_field(SupportedField::Ver(id))
106106
.with_metadata_field(SupportedField::Ref(
@@ -119,9 +119,9 @@ fn ownership_test(
119119

120120
let doc = doc_gen(&mut provider);
121121

122-
let res = DocumentOwnershipRule::RefFieldBased
122+
DocumentOwnershipRule::RefFieldBased
123123
.check_inner(&doc, &provider)
124124
.unwrap();
125125
println!("{:?}", doc.report());
126-
res
126+
!doc.report().is_problematic()
127127
}

0 commit comments

Comments
 (0)