Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1096,4 +1096,141 @@ mod deletion_tests {
// He still has no token balance of the gas token
assert_eq!(token_balance, None);
}

#[test]
fn test_document_deletion_where_we_are_not_the_owner() {
let platform_version = PlatformVersion::latest();
let mut platform = TestPlatformBuilder::new()
.with_latest_protocol_version()
.build_with_mock_rpc()
.set_genesis_state();

let mut rng = StdRng::seed_from_u64(433);

let platform_state = platform.state.load();

let (identity, signer, key) = setup_identity(&mut platform, 958, dash_to_credits!(0.1));

let (other_identity, other_signer, other_key) =
setup_identity(&mut platform, 495, dash_to_credits!(0.1));

let dpns = platform.drive.cache.system_data_contracts.load_dpns();
let dpns_contract = dpns.clone();

let preorder_document_type = dpns_contract
.document_type_for_name("preorder")
.expect("expected a profile document type");

assert!(preorder_document_type.documents_can_be_deleted());

let entropy = Bytes32::random_with_rng(&mut rng);

let document = preorder_document_type
.random_document_with_identifier_and_entropy(
&mut rng,
identity.id(),
entropy,
DocumentFieldFillType::FillIfNotRequired,
DocumentFieldFillSize::AnyDocumentFillSize,
platform_version,
)
.expect("expected a random document");

let mut altered_document = document.clone();

altered_document.set_revision(Some(1));

altered_document.set_owner_id(other_identity.id());

let documents_batch_create_transition =
BatchTransition::new_document_creation_transition_from_document(
document,
preorder_document_type,
entropy.0,
&key,
2,
0,
None,
&signer,
platform_version,
None,
)
.expect("expect to create documents batch transition");

let documents_batch_create_serialized_transition = documents_batch_create_transition
.serialize_to_bytes()
.expect("expected documents batch serialized state transition");

let transaction = platform.drive.grove.start_transaction();

let processing_result = platform
.platform
.process_raw_state_transitions(
&vec![documents_batch_create_serialized_transition.clone()],
&platform_state,
&BlockInfo::default(),
&transaction,
platform_version,
false,
None,
)
.expect("expected to process state transition");

assert_eq!(processing_result.valid_count(), 1);

platform
.drive
.grove
.commit_transaction(transaction)
.unwrap()
.expect("expected to commit transaction");

let documents_batch_deletion_transition =
BatchTransition::new_document_deletion_transition_from_document(
altered_document,
preorder_document_type,
&other_key,
3,
0,
None,
&other_signer,
platform_version,
None,
)
.expect("expect to create documents batch transition");

let documents_batch_deletion_serialized_transition = documents_batch_deletion_transition
.serialize_to_bytes()
.expect("expected documents batch serialized state transition");

let transaction = platform.drive.grove.start_transaction();

let processing_result = platform
.platform
.process_raw_state_transitions(
&vec![documents_batch_deletion_serialized_transition.clone()],
&platform_state,
&BlockInfo::default(),
&transaction,
platform_version,
false,
None,
)
.expect("expected to process state transition");

platform
.drive
.grove
.commit_transaction(transaction)
.unwrap()
.expect("expected to commit transaction");

assert_matches!(
processing_result.execution_results().as_slice(),
[PaidConsensusError(
ConsensusError::StateError(StateError::DocumentOwnerIdMismatchError(_)),
_
)]
);
}
}
Loading