@dashevo/wasm-dpp 0.24.0-dev.12 → 0.24.0-dev.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mocharc.yml +1 -1
- package/Cargo.toml +5 -2
- package/README.md +5 -1
- package/dist/index.js +1 -1
- package/dist/index.js.LICENSE.txt +9 -0
- package/dist/wasm/wasm_dpp.d.ts +3397 -1237
- package/karma.conf.js +5 -0
- package/lib/identifier/patchIdentifier.ts +5 -4
- package/lib/index.ts +1 -1
- package/lib/test/bootstrap.js +5 -0
- package/lib/test/fixtures/getDataContractFixture.js +267 -0
- package/lib/test/fixtures/getDocumentsFixture.js +43 -0
- package/lib/test/mocks/createStateRepositoryMock.js +64 -0
- package/lib/test/mocks/getBlsAdapterMock.js +51 -0
- package/package.json +11 -8
- package/src/bls_adapter.rs +17 -1
- package/src/buffer.rs +3 -0
- package/src/dash_platform_protocol.rs +107 -10
- package/src/data_contract/data_contract.rs +59 -10
- package/src/data_contract/data_contract_facade.rs +128 -0
- package/src/data_contract/errors/invalid_data_contract.rs +16 -16
- package/src/data_contract/errors/invalid_document_type.rs +8 -8
- package/src/data_contract/errors/mod.rs +10 -16
- package/src/data_contract/index.rs +56 -1
- package/src/data_contract/mod.rs +4 -0
- package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +1 -1
- package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +41 -10
- package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +35 -4
- package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +1 -1
- package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +20 -7
- package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +47 -11
- package/src/data_contract_factory/data_contract_factory.rs +19 -17
- package/src/data_trigger/data_trigger_execution_context.rs +95 -0
- package/src/data_trigger/data_trigger_execution_result.rs +48 -0
- package/src/data_trigger/execute_data_triggers_factory.rs +60 -0
- package/src/data_trigger/get_data_triggers_factory.rs +65 -0
- package/src/data_trigger/mod.rs +121 -0
- package/src/document/document_facade.rs +125 -0
- package/src/document/errors/invalid_document_error.rs +10 -9
- package/src/document/errors/invalid_initial_revision_error.rs +1 -1
- package/src/document/errors/mismatch_owners_ids_error.rs +14 -4
- package/src/document/errors/mod.rs +17 -13
- package/src/document/errors/no_documents_supplied_error.rs +4 -4
- package/src/document/factory.rs +257 -0
- package/src/document/fetch_and_validate_data_contract.rs +77 -0
- package/src/document/generate_document_id.rs +17 -0
- package/src/document/mod.rs +311 -37
- package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +22 -0
- package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +253 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +60 -1
- package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +263 -0
- package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +302 -3
- package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_id.rs +40 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_indices.rs +50 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/mod.rs +8 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs +34 -0
- package/src/document/state_transition/document_batch_transition/validation/basic/validate_partial_compound_indices.rs +39 -0
- package/src/document/state_transition/document_batch_transition/validation/mod.rs +2 -0
- package/src/document/state_transition/document_batch_transition/validation/state/fetch_documents.rs +43 -0
- package/src/document/state_transition/document_batch_transition/validation/state/mod.rs +3 -0
- package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_batch_transitions_state.rs +27 -0
- package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_uniqueness_by_indices.rs +47 -0
- package/src/document/validator.rs +52 -0
- package/src/errors/compatible_protocol_version_is_not_defined_error.rs +24 -0
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -1
- package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -1
- package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +2 -2
- package/src/errors/consensus/basic/document/invalid_document_type_error.rs +15 -1
- package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +16 -2
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -1
- package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -1
- package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
- package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
- package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
- package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +2 -2
- package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +29 -0
- package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +4 -3
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -1
- package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -1
- package/src/errors/consensus/basic/identity/missing_public_key_error.rs +4 -3
- package/src/errors/consensus/basic/identity/mod.rs +2 -0
- package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -1
- package/src/errors/consensus/basic/json_schema_error.rs +8 -2
- package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -1
- package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +9 -9
- package/src/errors/consensus/state/document/invalid_document_revision_error.rs +4 -4
- package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +35 -0
- package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +34 -0
- package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +10 -7
- package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +2 -3
- package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +7 -3
- package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +2 -3
- package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +7 -4
- package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +2 -1
- package/src/errors/consensus/state/identity/mod.rs +4 -0
- package/src/errors/consensus_error.rs +218 -268
- package/src/errors/data_contract_not_present_error.rs +23 -0
- package/src/errors/dpp_error.rs +17 -0
- package/src/errors/from.rs +22 -0
- package/src/errors/js_conversion.rs +52 -5
- package/src/errors/mod.rs +6 -0
- package/src/errors/protocol_error.rs +14 -3
- package/src/identifier/errors.rs +30 -0
- package/src/identifier/mod.rs +95 -11
- package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
- package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
- package/src/identity/errors/invalid_identity_error.rs +32 -0
- package/src/identity/errors/mod.rs +9 -0
- package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
- package/src/identity/factory_utils.rs +87 -0
- package/src/identity/identity_facade.rs +194 -20
- package/src/identity/identity_factory.rs +209 -0
- package/src/identity/identity_public_key/mod.rs +51 -40
- package/src/identity/mod.rs +31 -17
- package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
- package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
- package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
- package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
- package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
- package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
- package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
- package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +337 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
- package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
- package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
- package/src/identity/state_transition/identity_create_transition/to_object.rs +45 -0
- package/src/identity/state_transition/identity_public_key_transitions.rs +207 -0
- package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +278 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
- package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
- package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
- package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
- package/src/identity/state_transition/identity_update_transition/apply_identity_update_transition.rs +24 -0
- package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +55 -0
- package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +448 -0
- package/src/identity/state_transition/identity_update_transition/identity_update_transition_basic_validator.rs +94 -0
- package/src/identity/state_transition/identity_update_transition/identity_update_transition_state_validator.rs +53 -0
- package/src/identity/state_transition/identity_update_transition/mod.rs +9 -0
- package/src/identity/state_transition/identity_update_transition/to_object.rs +66 -0
- package/src/identity/state_transition/mod.rs +12 -0
- package/src/identity/state_transition/validate_public_key_signatures.rs +61 -0
- package/src/identity/validation/identity_validator.rs +50 -0
- package/src/identity/validation/mod.rs +2 -0
- package/src/identity/validation/public_keys_validator.rs +14 -13
- package/src/identity_public_key/public_keys_validator.rs +44 -0
- package/src/lib.rs +6 -0
- package/src/lodash.rs +7 -0
- package/src/metadata.rs +54 -10
- package/src/state_repository.rs +598 -101
- package/src/state_transition/conversion.rs +104 -0
- package/src/state_transition/errors/invalid_state_transition_error.rs +32 -0
- package/src/state_transition/errors/mod.rs +1 -0
- package/src/state_transition/mod.rs +46 -0
- package/src/state_transition/state_transition_facade.rs +263 -0
- package/src/state_transition/state_transition_factory.rs +216 -0
- package/src/state_transition/validation/mod.rs +1 -0
- package/src/state_transition/validation/validate_state_transition_key_signature.rs +62 -0
- package/src/utils.rs +210 -8
- package/src/validation/json_schema_validator.rs +41 -0
- package/src/validation/mod.rs +2 -0
- package/src/validation/validation_result.rs +29 -5
- package/src/version/mod.rs +2 -0
- package/src/version/protocol_version.rs +103 -0
- package/test/integration/dataContract/DataContractFacade.spec.js +46 -30
- package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +45 -127
- package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +91 -139
- package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +577 -503
- package/test/integration/document/Document.spec.js +55 -29
- package/test/integration/document/DocumentFacade.spec.js +51 -64
- package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +38 -16
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +341 -396
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +116 -218
- package/test/integration/document/validation/validateDocumentFactory.spec.js +123 -171
- package/test/integration/identity/IdentityFacade.spec.js +52 -27
- package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +185 -164
- package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +84 -114
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +120 -137
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +106 -91
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +50 -16
- package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +78 -86
- package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +74 -30
- package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -147
- package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +65 -77
- package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +60 -23
- package/test/integration/identity/validation/validateIdentityFactory.spec.js +46 -114
- package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +9 -3
- package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +12 -8
- package/test/integration/stateTransition/StateTransitionFacade.spec.js +95 -233
- package/test/integration/stateTransition/calculateStateTransitionFeeFromOperationsFactory.spec.js +53 -0
- package/test/unit/Identifier.spec.js +36 -36
- package/test/unit/Metadata.spec.js +17 -3
- package/test/unit/dataContract/DataContract.spec.js +9 -4
- package/test/unit/dataContract/createDataContract.spec.js +0 -1
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +1 -1
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +2 -2
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +3 -3
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +1 -1
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +25 -31
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +3 -3
- package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +2 -0
- package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
- package/test/unit/document/Document.spec.js +147 -155
- package/test/unit/document/DocumentFactory.spec.js +153 -153
- package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +59 -14
- package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +131 -62
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +144 -56
- package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +38 -8
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +11 -7
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +29 -18
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +38 -29
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +53 -91
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +357 -493
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +133 -72
- package/test/unit/identity/Identity.spec.js +26 -9
- package/test/unit/identity/IdentityFactory.spec.js +81 -89
- package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +73 -30
- package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +38 -38
- package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +34 -25
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +85 -50
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +44 -22
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +58 -103
- package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
- package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
- package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
- package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
- package/test/unit/stateTransition/StateTransitionFactory.spec.js +49 -101
- package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +23 -25
- package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +73 -46
- package/test/unit/version/validateProtocolVersionFactory.spec.js +45 -27
- package/wasm/package.json +5 -0
- package/wasm/wasm_dpp.d.ts +3397 -1237
- package/wasm/wasm_dpp.js +7158 -1384
- package/wasm/wasm_dpp_bg.js +1 -1
- package/wasm/wasm_dpp_bg.wasm +0 -0
- package/wasm/wasm_dpp_bg.wasm.d.ts +777 -389
- package/webpack.config.js +9 -0
- package/src/document/state_transition/document_batch_transition/document_transition/document_update_transition.rs +0 -22
- package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +0 -135
- package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +0 -54
package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js
CHANGED
|
@@ -3,36 +3,65 @@ const getDocumentsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocuments
|
|
|
3
3
|
const stateTransitionTypes = require('@dashevo/dpp/lib/stateTransition/stateTransitionTypes');
|
|
4
4
|
const createDPPMock = require('@dashevo/dpp/lib/test/mocks/createDPPMock');
|
|
5
5
|
const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
6
|
+
const DocumentFactoryJs = require('@dashevo/dpp/lib/document/DocumentFactory');
|
|
7
|
+
const { default: loadWasmDpp } = require('../../../../../dist');
|
|
8
|
+
|
|
9
|
+
let DocumentFactory;
|
|
10
|
+
let DataContract;
|
|
11
|
+
let Document;
|
|
12
|
+
let DocumentValidator;
|
|
13
|
+
let ProtocolVersionValidator;
|
|
9
14
|
|
|
10
15
|
describe('DocumentsBatchTransition', () => {
|
|
16
|
+
let stateTransitionJs;
|
|
11
17
|
let stateTransition;
|
|
18
|
+
let documentsJs;
|
|
12
19
|
let documents;
|
|
13
|
-
let
|
|
14
|
-
let encodeMock;
|
|
20
|
+
let dataContractJs;
|
|
15
21
|
let dataContract;
|
|
22
|
+
let factoryJs;
|
|
23
|
+
|
|
24
|
+
beforeEach(async () => {
|
|
25
|
+
({
|
|
26
|
+
ProtocolVersionValidator, DocumentValidator, DocumentFactory, DataContract,
|
|
27
|
+
Document,
|
|
28
|
+
} = await loadWasmDpp());
|
|
29
|
+
});
|
|
16
30
|
|
|
17
|
-
beforeEach(
|
|
18
|
-
|
|
19
|
-
|
|
31
|
+
beforeEach(async () => {
|
|
32
|
+
dataContractJs = getDataContractFixture();
|
|
33
|
+
dataContract = DataContract.fromBuffer(dataContractJs.toBuffer());
|
|
34
|
+
|
|
35
|
+
documentsJs = getDocumentsFixture(dataContractJs);
|
|
36
|
+
documents = documentsJs.map((d) => {
|
|
37
|
+
const doc = new Document(d.toObject(), dataContract);
|
|
38
|
+
doc.setEntropy(d.entropy);
|
|
39
|
+
return doc;
|
|
40
|
+
});
|
|
20
41
|
|
|
21
|
-
|
|
22
|
-
|
|
42
|
+
const protocolVersionValidatorRs = new ProtocolVersionValidator();
|
|
43
|
+
const documentValidatorRs = new DocumentValidator(protocolVersionValidatorRs);
|
|
44
|
+
const factory = new DocumentFactory(1, documentValidatorRs, {});
|
|
45
|
+
factoryJs = new DocumentFactoryJs(createDPPMock(), undefined, undefined);
|
|
46
|
+
|
|
47
|
+
stateTransitionJs = factoryJs.createStateTransition({
|
|
48
|
+
create: documentsJs,
|
|
49
|
+
});
|
|
23
50
|
|
|
24
|
-
const factory = new DocumentFactory(createDPPMock(), undefined, undefined);
|
|
25
51
|
stateTransition = factory.createStateTransition({
|
|
26
52
|
create: documents,
|
|
27
53
|
});
|
|
28
54
|
});
|
|
29
55
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
56
|
+
describe('#getProtocolVersion', () => {
|
|
57
|
+
it('should return the current protocol version', () => {
|
|
58
|
+
const result = stateTransitionJs.getProtocolVersion();
|
|
59
|
+
|
|
60
|
+
expect(result).to.equal(protocolVersion.latestVersion);
|
|
61
|
+
});
|
|
33
62
|
});
|
|
34
63
|
|
|
35
|
-
describe('#getProtocolVersion', () => {
|
|
64
|
+
describe('#getProtocolVersion - Rust', () => {
|
|
36
65
|
it('should return the current protocol version', () => {
|
|
37
66
|
const result = stateTransition.getProtocolVersion();
|
|
38
67
|
|
|
@@ -41,6 +70,14 @@ describe('DocumentsBatchTransition', () => {
|
|
|
41
70
|
});
|
|
42
71
|
|
|
43
72
|
describe('#getType', () => {
|
|
73
|
+
it('should return State Transition type', () => {
|
|
74
|
+
const result = stateTransitionJs.getType();
|
|
75
|
+
|
|
76
|
+
expect(result).to.equal(stateTransitionTypes.DOCUMENTS_BATCH);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
describe('#getType - Rust', () => {
|
|
44
81
|
it('should return State Transition type', () => {
|
|
45
82
|
const result = stateTransition.getType();
|
|
46
83
|
|
|
@@ -50,19 +87,38 @@ describe('DocumentsBatchTransition', () => {
|
|
|
50
87
|
|
|
51
88
|
describe('#getTransitions', () => {
|
|
52
89
|
it('should return document transitions', () => {
|
|
53
|
-
const result =
|
|
90
|
+
const result = stateTransitionJs.getTransitions();
|
|
54
91
|
|
|
55
|
-
expect(result).to.equal(
|
|
92
|
+
expect(result).to.equal(stateTransitionJs.transitions);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
describe('#getTransitions - Rust', () => {
|
|
97
|
+
it('should return document transitions', () => {
|
|
98
|
+
const transitionsJs = stateTransitionJs.getTransitions().map((t) => t.toJSON());
|
|
99
|
+
const transitions = stateTransition.getTransitions().map((t) => t.toJSON());
|
|
100
|
+
expect(transitionsJs).to.deep.equal(transitions);
|
|
56
101
|
});
|
|
57
102
|
});
|
|
58
103
|
|
|
59
104
|
describe('#toJSON', () => {
|
|
60
105
|
it('should return State Transition as JSON', () => {
|
|
106
|
+
expect(stateTransitionJs.toJSON()).to.deep.equal({
|
|
107
|
+
protocolVersion: protocolVersion.latestVersion,
|
|
108
|
+
type: stateTransitionTypes.DOCUMENTS_BATCH,
|
|
109
|
+
ownerId: documentsJs[0].getOwnerId().toString(),
|
|
110
|
+
transitions: stateTransitionJs.getTransitions().map((d) => d.toJSON()),
|
|
111
|
+
signaturePublicKeyId: undefined,
|
|
112
|
+
signature: undefined,
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('should return State Transition as JSON - Rust', () => {
|
|
61
117
|
expect(stateTransition.toJSON()).to.deep.equal({
|
|
62
118
|
protocolVersion: protocolVersion.latestVersion,
|
|
63
119
|
type: stateTransitionTypes.DOCUMENTS_BATCH,
|
|
64
|
-
ownerId:
|
|
65
|
-
transitions:
|
|
120
|
+
ownerId: documentsJs[0].getOwnerId().toString(),
|
|
121
|
+
transitions: stateTransitionJs.getTransitions().map((d) => d.toJSON()),
|
|
66
122
|
signaturePublicKeyId: undefined,
|
|
67
123
|
signature: undefined,
|
|
68
124
|
});
|
|
@@ -71,77 +127,72 @@ describe('DocumentsBatchTransition', () => {
|
|
|
71
127
|
|
|
72
128
|
describe('#toObject', () => {
|
|
73
129
|
it('should return State Transition as plain object', () => {
|
|
74
|
-
expect(
|
|
130
|
+
expect(stateTransitionJs.toObject()).to.deep.equal({
|
|
75
131
|
protocolVersion: protocolVersion.latestVersion,
|
|
76
132
|
type: stateTransitionTypes.DOCUMENTS_BATCH,
|
|
77
|
-
ownerId:
|
|
78
|
-
transitions:
|
|
133
|
+
ownerId: documentsJs[0].getOwnerId(),
|
|
134
|
+
transitions: stateTransitionJs.getTransitions().map((d) => d.toObject()),
|
|
79
135
|
signaturePublicKeyId: undefined,
|
|
80
136
|
signature: undefined,
|
|
81
137
|
});
|
|
82
138
|
});
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
describe('#toBuffer', () => {
|
|
86
|
-
it('should return serialized Documents State Transition', () => {
|
|
87
|
-
const serializedStateTransition = Buffer.from('123');
|
|
88
|
-
|
|
89
|
-
encodeMock.returns(serializedStateTransition);
|
|
90
139
|
|
|
91
|
-
|
|
140
|
+
it('should return State Transition as plain object - Rust', () => {
|
|
141
|
+
const rawObject = stateTransition.toObject();
|
|
142
|
+
const rawObjectJs = stateTransitionJs.toObject();
|
|
92
143
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
expect(result).to.deep.equal(
|
|
97
|
-
Buffer.concat([protocolVersionUInt32, serializedStateTransition]),
|
|
98
|
-
);
|
|
144
|
+
expect(rawObject).to.deep.equal(rawObjectJs);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
99
147
|
|
|
100
|
-
|
|
101
|
-
|
|
148
|
+
describe('#toBuffer', () => {
|
|
149
|
+
it('should return the same bytes as JS version', () => {
|
|
150
|
+
const bufferJs = stateTransitionJs.toBuffer();
|
|
151
|
+
const buffer = stateTransition.toBuffer();
|
|
102
152
|
|
|
103
|
-
expect(
|
|
153
|
+
expect(bufferJs).to.deep.equal(buffer);
|
|
104
154
|
});
|
|
105
155
|
});
|
|
106
156
|
|
|
107
157
|
describe('#hash', () => {
|
|
108
|
-
it('should return
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
encodeMock.returns(serializedDocument);
|
|
113
|
-
hashMock.returns(hashedDocument);
|
|
158
|
+
it('should return the same hash as the JS version', () => {
|
|
159
|
+
const hashJs = stateTransitionJs.hash();
|
|
160
|
+
const hash = stateTransitionJs.hash();
|
|
114
161
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
const dataToEncode = stateTransition.toObject();
|
|
120
|
-
delete dataToEncode.protocolVersion;
|
|
121
|
-
|
|
122
|
-
expect(encodeMock).to.have.been.calledOnceWith(dataToEncode);
|
|
162
|
+
expect(hash).to.deep.equal(hashJs);
|
|
163
|
+
});
|
|
164
|
+
});
|
|
123
165
|
|
|
124
|
-
|
|
125
|
-
|
|
166
|
+
describe('#getOwnerId', () => {
|
|
167
|
+
it('should return owner id', async () => {
|
|
168
|
+
const result = stateTransitionJs.getOwnerId();
|
|
126
169
|
|
|
127
|
-
expect(
|
|
128
|
-
Buffer.concat([protocolVersionUInt32, serializedDocument]),
|
|
129
|
-
);
|
|
170
|
+
expect(result).to.deep.equal(getDocumentsFixture.ownerId);
|
|
130
171
|
});
|
|
131
172
|
});
|
|
132
173
|
|
|
133
|
-
describe('#getOwnerId', () => {
|
|
174
|
+
describe('#getOwnerId - Rust', () => {
|
|
134
175
|
it('should return owner id', async () => {
|
|
135
176
|
const result = stateTransition.getOwnerId();
|
|
136
177
|
|
|
137
|
-
expect(result).to.deep.equal(getDocumentsFixture.ownerId);
|
|
178
|
+
expect(result.toBuffer()).to.deep.equal(getDocumentsFixture.ownerId.toBuffer());
|
|
138
179
|
});
|
|
139
180
|
});
|
|
140
181
|
|
|
141
182
|
describe('#getModifiedDataIds', () => {
|
|
142
183
|
it('should return ids of affected documents', () => {
|
|
143
|
-
const expectedIds =
|
|
144
|
-
const result =
|
|
184
|
+
const expectedIds = documentsJs.map((doc) => doc.getId());
|
|
185
|
+
const result = stateTransitionJs.getModifiedDataIds();
|
|
186
|
+
|
|
187
|
+
expect(result.length).to.be.equal(10);
|
|
188
|
+
expect(result).to.be.deep.equal(expectedIds);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
describe('#getModifiedDataIds - Rust', () => {
|
|
193
|
+
it('should return ids of affected documents', () => {
|
|
194
|
+
const expectedIds = documentsJs.map((doc) => doc.getId().toBuffer());
|
|
195
|
+
const result = stateTransition.getModifiedDataIds().map((id) => id.toBuffer());
|
|
145
196
|
|
|
146
197
|
expect(result.length).to.be.equal(10);
|
|
147
198
|
expect(result).to.be.deep.equal(expectedIds);
|
|
@@ -149,18 +200,36 @@ describe('DocumentsBatchTransition', () => {
|
|
|
149
200
|
});
|
|
150
201
|
|
|
151
202
|
describe('#isDataContractStateTransition', () => {
|
|
203
|
+
it('should return false', () => {
|
|
204
|
+
expect(stateTransitionJs.isDataContractStateTransition()).to.be.false();
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
describe('#isDataContractStateTransition - Rust', () => {
|
|
152
209
|
it('should return false', () => {
|
|
153
210
|
expect(stateTransition.isDataContractStateTransition()).to.be.false();
|
|
154
211
|
});
|
|
155
212
|
});
|
|
156
213
|
|
|
157
214
|
describe('#isDocumentStateTransition', () => {
|
|
215
|
+
it('should return true', () => {
|
|
216
|
+
expect(stateTransitionJs.isDocumentStateTransition()).to.be.true();
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
describe('#isDocumentStateTransition - Rust', () => {
|
|
158
221
|
it('should return true', () => {
|
|
159
222
|
expect(stateTransition.isDocumentStateTransition()).to.be.true();
|
|
160
223
|
});
|
|
161
224
|
});
|
|
162
225
|
|
|
163
226
|
describe('#isIdentityStateTransition', () => {
|
|
227
|
+
it('should return false', () => {
|
|
228
|
+
expect(stateTransitionJs.isIdentityStateTransition()).to.be.false();
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
describe('#isIdentityStateTransition - Rust', () => {
|
|
164
233
|
it('should return false', () => {
|
|
165
234
|
expect(stateTransition.isIdentityStateTransition()).to.be.false();
|
|
166
235
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
1
|
+
const DocumentJs = require('@dashevo/dpp/lib/document/Document');
|
|
2
|
+
const DocumentsBatchTransitionJs = require(
|
|
3
3
|
'@dashevo/dpp/lib/document/stateTransition/DocumentsBatchTransition/DocumentsBatchTransition',
|
|
4
4
|
);
|
|
5
5
|
|
|
@@ -16,144 +16,232 @@ const getDocumentTransitionsFixture = require(
|
|
|
16
16
|
const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
|
|
17
17
|
|
|
18
18
|
const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
|
|
19
|
-
const
|
|
20
|
-
|
|
19
|
+
const StateTransitionExecutionContextJs = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
|
|
20
|
+
|
|
21
|
+
const { default: loadWasmDpp } = require('../../../../../dist');
|
|
22
|
+
|
|
23
|
+
let Document;
|
|
24
|
+
let DocumentsBatchTransition;
|
|
25
|
+
let DataContract;
|
|
26
|
+
let StateTransitionExecutionContext;
|
|
27
|
+
let applyDocumentsBatchTransition;
|
|
28
|
+
let DocumentNotProvidedError;
|
|
21
29
|
|
|
22
30
|
describe('applyDocumentsBatchTransitionFactory', () => {
|
|
23
|
-
let
|
|
31
|
+
let documentsJs;
|
|
32
|
+
let dataContractJs;
|
|
24
33
|
let dataContract;
|
|
25
|
-
let
|
|
34
|
+
let documentTransitionsJs;
|
|
26
35
|
let ownerId;
|
|
36
|
+
let replaceDocumentJs;
|
|
27
37
|
let replaceDocument;
|
|
38
|
+
let stateTransitionJs;
|
|
28
39
|
let stateTransition;
|
|
40
|
+
let documentsFixtureJs;
|
|
29
41
|
let documentsFixture;
|
|
30
|
-
let
|
|
42
|
+
let applyDocumentsBatchTransitionJs;
|
|
43
|
+
let stateRepositoryMockJs;
|
|
31
44
|
let stateRepositoryMock;
|
|
32
45
|
let fetchDocumentsMock;
|
|
46
|
+
let executionContextJs;
|
|
33
47
|
let executionContext;
|
|
34
48
|
let blockTimeMs;
|
|
35
49
|
|
|
36
|
-
beforeEach(function beforeEach() {
|
|
37
|
-
|
|
38
|
-
|
|
50
|
+
beforeEach(async function beforeEach() {
|
|
51
|
+
({
|
|
52
|
+
DataContract,
|
|
53
|
+
Document,
|
|
54
|
+
DocumentsBatchTransition,
|
|
55
|
+
StateTransitionExecutionContext,
|
|
56
|
+
applyDocumentsBatchTransition,
|
|
57
|
+
// Errors:
|
|
58
|
+
DocumentNotProvidedError,
|
|
59
|
+
} = await loadWasmDpp());
|
|
60
|
+
|
|
61
|
+
dataContractJs = getDataContractFixture();
|
|
62
|
+
dataContract = DataContract.fromBuffer(dataContractJs.toBuffer());
|
|
63
|
+
|
|
64
|
+
documentsFixtureJs = getDocumentsFixture(dataContractJs);
|
|
65
|
+
documentsFixture = documentsFixtureJs.map((d) => {
|
|
66
|
+
const doc = new Document(d.toObject(), dataContract);
|
|
67
|
+
doc.setEntropy(d.entropy);
|
|
68
|
+
return doc;
|
|
69
|
+
});
|
|
39
70
|
|
|
40
71
|
ownerId = getDocumentsFixture.ownerId;
|
|
41
72
|
|
|
73
|
+
replaceDocumentJs = new DocumentJs({
|
|
74
|
+
...documentsFixtureJs[1].toObject(),
|
|
75
|
+
lastName: 'NotSoShiny',
|
|
76
|
+
}, dataContractJs);
|
|
77
|
+
|
|
42
78
|
replaceDocument = new Document({
|
|
43
79
|
...documentsFixture[1].toObject(),
|
|
44
80
|
lastName: 'NotSoShiny',
|
|
45
81
|
}, dataContract);
|
|
46
82
|
|
|
47
83
|
blockTimeMs = Date.now();
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
replace: [documents[0]],
|
|
54
|
-
delete: [documents[1]],
|
|
84
|
+
documentsJs = [replaceDocumentJs, documentsFixtureJs[2]];
|
|
85
|
+
documentTransitionsJs = getDocumentTransitionsFixture({
|
|
86
|
+
create: [documentsFixtureJs[0]],
|
|
87
|
+
replace: [documentsJs[0]],
|
|
88
|
+
delete: [documentsJs[1]],
|
|
55
89
|
});
|
|
56
90
|
|
|
91
|
+
stateTransitionJs = new DocumentsBatchTransitionJs({
|
|
92
|
+
protocolVersion: protocolVersion.latestVersion,
|
|
93
|
+
ownerId,
|
|
94
|
+
transitions: documentTransitionsJs.map((t) => t.toObject()),
|
|
95
|
+
}, [dataContractJs]);
|
|
96
|
+
|
|
57
97
|
stateTransition = new DocumentsBatchTransition({
|
|
58
98
|
protocolVersion: protocolVersion.latestVersion,
|
|
59
99
|
ownerId,
|
|
60
|
-
transitions:
|
|
100
|
+
transitions: documentTransitionsJs.map((t) => t.toObject()),
|
|
61
101
|
}, [dataContract]);
|
|
62
102
|
|
|
103
|
+
executionContextJs = new StateTransitionExecutionContextJs();
|
|
63
104
|
executionContext = new StateTransitionExecutionContext();
|
|
64
105
|
|
|
106
|
+
stateTransitionJs.setExecutionContext(executionContextJs);
|
|
65
107
|
stateTransition.setExecutionContext(executionContext);
|
|
66
108
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
109
|
+
stateRepositoryMockJs = createStateRepositoryMock(this.sinonSandbox);
|
|
110
|
+
stateRepositoryMockJs.fetchDataContract.resolves(dataContractJs);
|
|
111
|
+
stateRepositoryMockJs.fetchLatestPlatformBlockTime.resolves(blockTimeMs);
|
|
70
112
|
|
|
71
113
|
fetchDocumentsMock = this.sinonSandbox.stub();
|
|
72
114
|
fetchDocumentsMock.resolves([
|
|
73
|
-
|
|
115
|
+
replaceDocumentJs,
|
|
74
116
|
]);
|
|
75
117
|
|
|
76
|
-
|
|
77
|
-
|
|
118
|
+
stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
|
|
119
|
+
stateRepositoryMock.fetchDataContract.resolves(dataContract);
|
|
120
|
+
stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTimeMs);
|
|
121
|
+
stateRepositoryMock.updateDocument.resolves(null);
|
|
122
|
+
stateRepositoryMock.removeDocument.resolves(null);
|
|
123
|
+
stateRepositoryMock.createDocument.resolves(null);
|
|
124
|
+
stateRepositoryMock.fetchDocuments.resolves([replaceDocument]);
|
|
125
|
+
|
|
126
|
+
applyDocumentsBatchTransitionJs = applyDocumentsBatchTransitionFactory(
|
|
127
|
+
stateRepositoryMockJs,
|
|
78
128
|
fetchDocumentsMock,
|
|
79
129
|
);
|
|
80
130
|
});
|
|
81
131
|
|
|
82
132
|
it('should call `store`, `replace` and `remove` functions for specific type of transitions', async () => {
|
|
83
|
-
await
|
|
133
|
+
await applyDocumentsBatchTransitionJs(stateTransitionJs);
|
|
84
134
|
|
|
85
|
-
const replaceDocumentTransition =
|
|
135
|
+
const replaceDocumentTransition = documentTransitionsJs[1];
|
|
86
136
|
|
|
87
137
|
expect(fetchDocumentsMock).to.have.been.calledOnceWithExactly(
|
|
88
138
|
[replaceDocumentTransition],
|
|
89
|
-
|
|
139
|
+
executionContextJs,
|
|
90
140
|
);
|
|
91
141
|
|
|
92
|
-
expect(
|
|
93
|
-
expect(
|
|
142
|
+
expect(stateRepositoryMockJs.createDocument).to.have.been.calledOnce();
|
|
143
|
+
expect(stateRepositoryMockJs.updateDocument).to.have.been.calledOnce();
|
|
94
144
|
|
|
95
145
|
const callsArgs = [
|
|
96
|
-
...
|
|
97
|
-
...
|
|
146
|
+
...stateRepositoryMockJs.createDocument.getCall(0).args,
|
|
147
|
+
...stateRepositoryMockJs.updateDocument.getCall(0).args,
|
|
98
148
|
];
|
|
99
149
|
|
|
100
150
|
expect(callsArgs).to.have.deep.members([
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
151
|
+
documentsFixtureJs[0],
|
|
152
|
+
documentsJs[0],
|
|
153
|
+
executionContextJs,
|
|
154
|
+
executionContextJs,
|
|
105
155
|
]);
|
|
106
156
|
|
|
107
|
-
expect(
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
157
|
+
expect(stateRepositoryMockJs.removeDocument).to.have.been.calledOnceWithExactly(
|
|
158
|
+
documentTransitionsJs[2].getDataContract(),
|
|
159
|
+
documentTransitionsJs[2].getType(),
|
|
160
|
+
documentTransitionsJs[2].getId(),
|
|
161
|
+
executionContextJs,
|
|
112
162
|
);
|
|
113
163
|
});
|
|
114
164
|
|
|
115
|
-
it('should
|
|
116
|
-
|
|
165
|
+
it('should call `store`, `replace` and `remove` functions for specific type of transitions - Rust', async () => {
|
|
166
|
+
await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition);
|
|
167
|
+
expect(stateRepositoryMock.createDocument).to.have.been.calledOnce();
|
|
168
|
+
|
|
169
|
+
const [fetchContractId, fetchDocumentType] = stateRepositoryMock.fetchDocuments.getCall(0).args;
|
|
170
|
+
expect(fetchContractId.toBuffer()).to.deep.equal(documentTransitionsJs[1].getDataContractId());
|
|
171
|
+
expect(fetchDocumentType).to.equal(documentTransitionsJs[1].getType());
|
|
172
|
+
|
|
173
|
+
expect(stateRepositoryMock.updateDocument).to.have.been.calledOnce();
|
|
174
|
+
expect(stateRepositoryMock.fetchDocuments).to.have.been.calledOnce();
|
|
175
|
+
|
|
176
|
+
const [createDocument] = stateRepositoryMock.createDocument.getCall(0).args;
|
|
177
|
+
const [updateDocument] = stateRepositoryMock.updateDocument.getCall(0).args;
|
|
178
|
+
const [
|
|
179
|
+
deleteDataContract,
|
|
180
|
+
deleteDocumentType,
|
|
181
|
+
deleteDocumentId,
|
|
182
|
+
] = stateRepositoryMock.removeDocument.getCall(0).args;
|
|
183
|
+
|
|
184
|
+
expect(createDocument.toObject()).to.deep.equal(documentsFixtureJs[0].toObject());
|
|
185
|
+
const expectDocument = documentsJs[0].toJSON();
|
|
186
|
+
|
|
187
|
+
// ! Why we need to replace. Apparently, `applyDocumentsTransition` somehow
|
|
188
|
+
// ! modifies `documentsJs` and increments revision and $updatedAt. I have
|
|
189
|
+
// ! no clue how it's possible.
|
|
190
|
+
expectDocument.$updatedAt = documentTransitionsJs[1].toJSON().$updatedAt;
|
|
191
|
+
expectDocument.$revision = documentTransitionsJs[1].toJSON().$revision;
|
|
192
|
+
expect(updateDocument.toJSON()).to.deep.equal(expectDocument);
|
|
193
|
+
|
|
194
|
+
expect(deleteDataContract.toObject()).to.deep.equal(dataContract.toObject());
|
|
195
|
+
expect(deleteDocumentType).to.deep.equal(documentTransitionsJs[2].getType());
|
|
196
|
+
expect(deleteDocumentId.toBuffer()).to.deep.equal(documentTransitionsJs[2].getId());
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it('should throw an error if document was not provided for a replacement - Rust', async () => {
|
|
200
|
+
stateRepositoryMock.fetchDocuments.resolves([]);
|
|
117
201
|
|
|
118
|
-
const replaceDocumentTransition =
|
|
202
|
+
const replaceDocumentTransition = documentTransitionsJs[1];
|
|
119
203
|
|
|
120
204
|
try {
|
|
121
|
-
await applyDocumentsBatchTransition(stateTransition);
|
|
205
|
+
await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition);
|
|
122
206
|
expect.fail('Error was not thrown');
|
|
123
207
|
} catch (e) {
|
|
124
208
|
expect(e).to.be.an.instanceOf(DocumentNotProvidedError);
|
|
125
|
-
expect(e.getDocumentTransition()
|
|
209
|
+
expect(e.getDocumentTransition().toObject())
|
|
210
|
+
.to.deep.equal(replaceDocumentTransition.toObject());
|
|
126
211
|
}
|
|
127
212
|
});
|
|
128
213
|
|
|
129
|
-
it('should call `replace` functions on dry run', async ()
|
|
130
|
-
|
|
214
|
+
it('should call `replace` functions on dry run - Rust', async function test() {
|
|
215
|
+
this.timeout(10000);
|
|
216
|
+
stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTimeMs);
|
|
217
|
+
documentTransitionsJs = getDocumentTransitionsFixture({
|
|
131
218
|
create: [],
|
|
132
|
-
replace: [
|
|
219
|
+
replace: [documentsJs[0]],
|
|
133
220
|
delete: [],
|
|
134
221
|
});
|
|
135
222
|
|
|
136
223
|
stateTransition = new DocumentsBatchTransition({
|
|
137
224
|
protocolVersion: protocolVersion.latestVersion,
|
|
138
225
|
ownerId,
|
|
139
|
-
transitions:
|
|
226
|
+
transitions: documentTransitionsJs.map((t) => t.toObject()),
|
|
140
227
|
}, [dataContract]);
|
|
141
228
|
|
|
142
229
|
stateTransition.getExecutionContext().enableDryRun();
|
|
143
230
|
|
|
144
|
-
await applyDocumentsBatchTransition(stateTransition);
|
|
231
|
+
await applyDocumentsBatchTransition(stateRepositoryMock, stateTransition);
|
|
145
232
|
|
|
146
233
|
stateTransition.getExecutionContext().disableDryRun();
|
|
147
234
|
|
|
148
235
|
expect(stateRepositoryMock.fetchLatestPlatformBlockTime).to.have.been.calledOnceWith();
|
|
149
236
|
|
|
150
237
|
const [documentTransition] = stateTransition.getTransitions();
|
|
238
|
+
|
|
151
239
|
const newDocument = new Document({
|
|
152
|
-
$protocolVersion:
|
|
240
|
+
$protocolVersion: stateTransitionJs.getProtocolVersion(),
|
|
153
241
|
$id: documentTransition.getId(),
|
|
154
242
|
$type: documentTransition.getType(),
|
|
155
243
|
$dataContractId: documentTransition.getDataContractId(),
|
|
156
|
-
$ownerId:
|
|
244
|
+
$ownerId: stateTransitionJs.getOwnerId(),
|
|
157
245
|
$createdAt: blockTimeMs,
|
|
158
246
|
...documentTransition.getData(),
|
|
159
247
|
}, documentTransition.getDataContract());
|
|
@@ -162,9 +250,9 @@ describe('applyDocumentsBatchTransitionFactory', () => {
|
|
|
162
250
|
newDocument.setData(documentTransition.getData());
|
|
163
251
|
newDocument.setUpdatedAt(documentTransition.getUpdatedAt());
|
|
164
252
|
|
|
165
|
-
expect(stateRepositoryMock.updateDocument).to.have.been.
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
);
|
|
253
|
+
expect(stateRepositoryMock.updateDocument).to.have.been.called.calledOnce();
|
|
254
|
+
const [updateDocument] = stateRepositoryMock.updateDocument.getCall(0).args;
|
|
255
|
+
|
|
256
|
+
expect(updateDocument.toObject()).to.be.deep.equal(newDocument.toObject());
|
|
169
257
|
});
|
|
170
258
|
});
|
|
@@ -1,24 +1,54 @@
|
|
|
1
1
|
const getDocumentTransitionsFixture = require('@dashevo/dpp/lib/test/fixtures/getDocumentTransitionsFixture');
|
|
2
|
+
const { default: loadWasmDpp } = require('../../../../../../dist');
|
|
3
|
+
|
|
4
|
+
let DataContract;
|
|
5
|
+
let DocumentCreateTransition;
|
|
2
6
|
|
|
3
7
|
describe('DocumentCreateTransition', () => {
|
|
8
|
+
let documentTransitionJs;
|
|
4
9
|
let documentTransition;
|
|
5
10
|
|
|
11
|
+
beforeEach(async () => {
|
|
12
|
+
({
|
|
13
|
+
DataContract, DocumentCreateTransition,
|
|
14
|
+
} = await loadWasmDpp());
|
|
15
|
+
});
|
|
16
|
+
|
|
6
17
|
beforeEach(() => {
|
|
7
|
-
[
|
|
18
|
+
[documentTransitionJs] = getDocumentTransitionsFixture();
|
|
19
|
+
const dataContractJs = documentTransitionJs.dataContract;
|
|
20
|
+
const dataContract = DataContract.fromBuffer(dataContractJs.toBuffer());
|
|
21
|
+
|
|
22
|
+
documentTransition = new DocumentCreateTransition(documentTransitionJs.toObject(),
|
|
23
|
+
dataContract);
|
|
8
24
|
});
|
|
9
25
|
|
|
10
26
|
describe('toJSON', () => {
|
|
11
27
|
it('should return json representation', () => {
|
|
28
|
+
const jsonDocumentTransition = documentTransitionJs.toJSON();
|
|
29
|
+
|
|
30
|
+
expect(jsonDocumentTransition).to.deep.equal({
|
|
31
|
+
$id: documentTransitionJs.getId().toString(),
|
|
32
|
+
$type: documentTransitionJs.getType(),
|
|
33
|
+
$action: documentTransitionJs.getAction(),
|
|
34
|
+
$dataContractId: documentTransitionJs.getDataContractId().toString(),
|
|
35
|
+
$entropy: documentTransitionJs.getEntropy().toString('base64'),
|
|
36
|
+
$createdAt: documentTransitionJs.getCreatedAt().getTime(),
|
|
37
|
+
name: documentTransitionJs.getData().name,
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('should return json representation - Rust', () => {
|
|
12
42
|
const jsonDocumentTransition = documentTransition.toJSON();
|
|
13
43
|
|
|
14
44
|
expect(jsonDocumentTransition).to.deep.equal({
|
|
15
|
-
$id:
|
|
16
|
-
$type:
|
|
17
|
-
$action:
|
|
18
|
-
$dataContractId:
|
|
19
|
-
$entropy:
|
|
20
|
-
$createdAt:
|
|
21
|
-
name:
|
|
45
|
+
$id: documentTransitionJs.getId().toString(),
|
|
46
|
+
$type: documentTransitionJs.getType(),
|
|
47
|
+
$action: documentTransitionJs.getAction(),
|
|
48
|
+
$dataContractId: documentTransitionJs.getDataContractId().toString(),
|
|
49
|
+
$entropy: documentTransitionJs.getEntropy().toString('base64'),
|
|
50
|
+
$createdAt: documentTransitionJs.getCreatedAt().getTime(),
|
|
51
|
+
name: documentTransitionJs.getData().name,
|
|
22
52
|
});
|
|
23
53
|
});
|
|
24
54
|
});
|