@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.
Files changed (245) hide show
  1. package/.mocharc.yml +1 -1
  2. package/Cargo.toml +5 -2
  3. package/README.md +5 -1
  4. package/dist/index.js +1 -1
  5. package/dist/index.js.LICENSE.txt +9 -0
  6. package/dist/wasm/wasm_dpp.d.ts +3397 -1237
  7. package/karma.conf.js +5 -0
  8. package/lib/identifier/patchIdentifier.ts +5 -4
  9. package/lib/index.ts +1 -1
  10. package/lib/test/bootstrap.js +5 -0
  11. package/lib/test/fixtures/getDataContractFixture.js +267 -0
  12. package/lib/test/fixtures/getDocumentsFixture.js +43 -0
  13. package/lib/test/mocks/createStateRepositoryMock.js +64 -0
  14. package/lib/test/mocks/getBlsAdapterMock.js +51 -0
  15. package/package.json +11 -8
  16. package/src/bls_adapter.rs +17 -1
  17. package/src/buffer.rs +3 -0
  18. package/src/dash_platform_protocol.rs +107 -10
  19. package/src/data_contract/data_contract.rs +59 -10
  20. package/src/data_contract/data_contract_facade.rs +128 -0
  21. package/src/data_contract/errors/invalid_data_contract.rs +16 -16
  22. package/src/data_contract/errors/invalid_document_type.rs +8 -8
  23. package/src/data_contract/errors/mod.rs +10 -16
  24. package/src/data_contract/index.rs +56 -1
  25. package/src/data_contract/mod.rs +4 -0
  26. package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +1 -1
  27. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +41 -10
  28. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +35 -4
  29. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +1 -1
  30. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +20 -7
  31. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +47 -11
  32. package/src/data_contract_factory/data_contract_factory.rs +19 -17
  33. package/src/data_trigger/data_trigger_execution_context.rs +95 -0
  34. package/src/data_trigger/data_trigger_execution_result.rs +48 -0
  35. package/src/data_trigger/execute_data_triggers_factory.rs +60 -0
  36. package/src/data_trigger/get_data_triggers_factory.rs +65 -0
  37. package/src/data_trigger/mod.rs +121 -0
  38. package/src/document/document_facade.rs +125 -0
  39. package/src/document/errors/invalid_document_error.rs +10 -9
  40. package/src/document/errors/invalid_initial_revision_error.rs +1 -1
  41. package/src/document/errors/mismatch_owners_ids_error.rs +14 -4
  42. package/src/document/errors/mod.rs +17 -13
  43. package/src/document/errors/no_documents_supplied_error.rs +4 -4
  44. package/src/document/factory.rs +257 -0
  45. package/src/document/fetch_and_validate_data_contract.rs +77 -0
  46. package/src/document/generate_document_id.rs +17 -0
  47. package/src/document/mod.rs +311 -37
  48. package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +22 -0
  49. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +253 -1
  50. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +60 -1
  51. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +263 -0
  52. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +302 -3
  53. package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
  54. package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_id.rs +40 -0
  55. package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_indices.rs +50 -0
  56. package/src/document/state_transition/document_batch_transition/validation/basic/mod.rs +8 -0
  57. package/src/document/state_transition/document_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs +34 -0
  58. package/src/document/state_transition/document_batch_transition/validation/basic/validate_partial_compound_indices.rs +39 -0
  59. package/src/document/state_transition/document_batch_transition/validation/mod.rs +2 -0
  60. package/src/document/state_transition/document_batch_transition/validation/state/fetch_documents.rs +43 -0
  61. package/src/document/state_transition/document_batch_transition/validation/state/mod.rs +3 -0
  62. package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_batch_transitions_state.rs +27 -0
  63. package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_uniqueness_by_indices.rs +47 -0
  64. package/src/document/validator.rs +52 -0
  65. package/src/errors/compatible_protocol_version_is_not_defined_error.rs +24 -0
  66. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -1
  67. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -1
  68. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +2 -2
  69. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +15 -1
  70. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +16 -2
  71. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -1
  72. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -1
  73. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
  74. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
  75. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
  76. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +2 -2
  77. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +29 -0
  78. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +4 -3
  79. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -1
  80. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -1
  81. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +4 -3
  82. package/src/errors/consensus/basic/identity/mod.rs +2 -0
  83. package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -1
  84. package/src/errors/consensus/basic/json_schema_error.rs +8 -2
  85. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -1
  86. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +9 -9
  87. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +4 -4
  88. package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +35 -0
  89. package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +34 -0
  90. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +10 -7
  91. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +2 -3
  92. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +7 -3
  93. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +2 -3
  94. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +7 -4
  95. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +2 -1
  96. package/src/errors/consensus/state/identity/mod.rs +4 -0
  97. package/src/errors/consensus_error.rs +218 -268
  98. package/src/errors/data_contract_not_present_error.rs +23 -0
  99. package/src/errors/dpp_error.rs +17 -0
  100. package/src/errors/from.rs +22 -0
  101. package/src/errors/js_conversion.rs +52 -5
  102. package/src/errors/mod.rs +6 -0
  103. package/src/errors/protocol_error.rs +14 -3
  104. package/src/identifier/errors.rs +30 -0
  105. package/src/identifier/mod.rs +95 -11
  106. package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
  107. package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
  108. package/src/identity/errors/invalid_identity_error.rs +32 -0
  109. package/src/identity/errors/mod.rs +9 -0
  110. package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
  111. package/src/identity/factory_utils.rs +87 -0
  112. package/src/identity/identity_facade.rs +194 -20
  113. package/src/identity/identity_factory.rs +209 -0
  114. package/src/identity/identity_public_key/mod.rs +51 -40
  115. package/src/identity/mod.rs +31 -17
  116. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
  117. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
  118. package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
  119. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
  120. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
  121. package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
  122. package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
  123. package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
  124. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +337 -0
  125. package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
  126. package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
  127. package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
  128. package/src/identity/state_transition/identity_create_transition/to_object.rs +45 -0
  129. package/src/identity/state_transition/identity_public_key_transitions.rs +207 -0
  130. package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
  131. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +278 -0
  132. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
  133. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
  134. package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
  135. package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
  136. package/src/identity/state_transition/identity_update_transition/apply_identity_update_transition.rs +24 -0
  137. package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +55 -0
  138. package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +448 -0
  139. package/src/identity/state_transition/identity_update_transition/identity_update_transition_basic_validator.rs +94 -0
  140. package/src/identity/state_transition/identity_update_transition/identity_update_transition_state_validator.rs +53 -0
  141. package/src/identity/state_transition/identity_update_transition/mod.rs +9 -0
  142. package/src/identity/state_transition/identity_update_transition/to_object.rs +66 -0
  143. package/src/identity/state_transition/mod.rs +12 -0
  144. package/src/identity/state_transition/validate_public_key_signatures.rs +61 -0
  145. package/src/identity/validation/identity_validator.rs +50 -0
  146. package/src/identity/validation/mod.rs +2 -0
  147. package/src/identity/validation/public_keys_validator.rs +14 -13
  148. package/src/identity_public_key/public_keys_validator.rs +44 -0
  149. package/src/lib.rs +6 -0
  150. package/src/lodash.rs +7 -0
  151. package/src/metadata.rs +54 -10
  152. package/src/state_repository.rs +598 -101
  153. package/src/state_transition/conversion.rs +104 -0
  154. package/src/state_transition/errors/invalid_state_transition_error.rs +32 -0
  155. package/src/state_transition/errors/mod.rs +1 -0
  156. package/src/state_transition/mod.rs +46 -0
  157. package/src/state_transition/state_transition_facade.rs +263 -0
  158. package/src/state_transition/state_transition_factory.rs +216 -0
  159. package/src/state_transition/validation/mod.rs +1 -0
  160. package/src/state_transition/validation/validate_state_transition_key_signature.rs +62 -0
  161. package/src/utils.rs +210 -8
  162. package/src/validation/json_schema_validator.rs +41 -0
  163. package/src/validation/mod.rs +2 -0
  164. package/src/validation/validation_result.rs +29 -5
  165. package/src/version/mod.rs +2 -0
  166. package/src/version/protocol_version.rs +103 -0
  167. package/test/integration/dataContract/DataContractFacade.spec.js +46 -30
  168. package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +45 -127
  169. package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +91 -139
  170. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +577 -503
  171. package/test/integration/document/Document.spec.js +55 -29
  172. package/test/integration/document/DocumentFacade.spec.js +51 -64
  173. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +38 -16
  174. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +341 -396
  175. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +116 -218
  176. package/test/integration/document/validation/validateDocumentFactory.spec.js +123 -171
  177. package/test/integration/identity/IdentityFacade.spec.js +52 -27
  178. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +185 -164
  179. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +84 -114
  180. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +120 -137
  181. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +106 -91
  182. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +50 -16
  183. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +78 -86
  184. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +74 -30
  185. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -147
  186. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +65 -77
  187. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +60 -23
  188. package/test/integration/identity/validation/validateIdentityFactory.spec.js +46 -114
  189. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +9 -3
  190. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +12 -8
  191. package/test/integration/stateTransition/StateTransitionFacade.spec.js +95 -233
  192. package/test/integration/stateTransition/calculateStateTransitionFeeFromOperationsFactory.spec.js +53 -0
  193. package/test/unit/Identifier.spec.js +36 -36
  194. package/test/unit/Metadata.spec.js +17 -3
  195. package/test/unit/dataContract/DataContract.spec.js +9 -4
  196. package/test/unit/dataContract/createDataContract.spec.js +0 -1
  197. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
  198. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +1 -1
  199. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +2 -2
  200. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +3 -3
  201. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +1 -1
  202. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +25 -31
  203. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +3 -3
  204. package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +2 -0
  205. package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
  206. package/test/unit/document/Document.spec.js +147 -155
  207. package/test/unit/document/DocumentFactory.spec.js +153 -153
  208. package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +59 -14
  209. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +131 -62
  210. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +144 -56
  211. package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +38 -8
  212. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +11 -7
  213. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +29 -18
  214. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +38 -29
  215. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +53 -91
  216. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +357 -493
  217. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +133 -72
  218. package/test/unit/identity/Identity.spec.js +26 -9
  219. package/test/unit/identity/IdentityFactory.spec.js +81 -89
  220. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +73 -30
  221. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +38 -38
  222. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +34 -25
  223. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
  224. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +85 -50
  225. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
  226. package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +44 -22
  227. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +58 -103
  228. package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
  229. package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
  230. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
  231. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
  232. package/test/unit/stateTransition/StateTransitionFactory.spec.js +49 -101
  233. package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +23 -25
  234. package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +73 -46
  235. package/test/unit/version/validateProtocolVersionFactory.spec.js +45 -27
  236. package/wasm/package.json +5 -0
  237. package/wasm/wasm_dpp.d.ts +3397 -1237
  238. package/wasm/wasm_dpp.js +7158 -1384
  239. package/wasm/wasm_dpp_bg.js +1 -1
  240. package/wasm/wasm_dpp_bg.wasm +0 -0
  241. package/wasm/wasm_dpp_bg.wasm.d.ts +777 -389
  242. package/webpack.config.js +9 -0
  243. package/src/document/state_transition/document_batch_transition/document_transition/document_update_transition.rs +0 -22
  244. package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +0 -135
  245. package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +0 -54
@@ -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 DocumentFactory = require('@dashevo/dpp/lib/document/DocumentFactory');
7
- const serializer = require('@dashevo/dpp/lib/util/serializer');
8
- const hash = require('@dashevo/dpp/lib/util/hash');
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 hashMock;
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(function beforeEach() {
18
- dataContract = getDataContractFixture();
19
- documents = getDocumentsFixture(dataContract);
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
- encodeMock = this.sinonSandbox.stub(serializer, 'encode');
22
- hashMock = this.sinonSandbox.stub(hash, 'hash');
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
- afterEach(() => {
31
- encodeMock.restore();
32
- hashMock.restore();
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 = stateTransition.getTransitions();
90
+ const result = stateTransitionJs.getTransitions();
54
91
 
55
- expect(result).to.equal(stateTransition.transitions);
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: documents[0].getOwnerId().toString(),
65
- transitions: stateTransition.getTransitions().map((d) => d.toJSON()),
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(stateTransition.toObject()).to.deep.equal({
130
+ expect(stateTransitionJs.toObject()).to.deep.equal({
75
131
  protocolVersion: protocolVersion.latestVersion,
76
132
  type: stateTransitionTypes.DOCUMENTS_BATCH,
77
- ownerId: documents[0].getOwnerId(),
78
- transitions: stateTransition.getTransitions().map((d) => d.toObject()),
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
- const result = stateTransition.toBuffer();
140
+ it('should return State Transition as plain object - Rust', () => {
141
+ const rawObject = stateTransition.toObject();
142
+ const rawObjectJs = stateTransitionJs.toObject();
92
143
 
93
- const protocolVersionUInt32 = Buffer.alloc(4);
94
- protocolVersionUInt32.writeUInt32LE(stateTransition.protocolVersion, 0);
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
- const dataToEncode = stateTransition.toObject();
101
- delete dataToEncode.protocolVersion;
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(encodeMock).to.have.been.calledOnceWith(dataToEncode);
153
+ expect(bufferJs).to.deep.equal(buffer);
104
154
  });
105
155
  });
106
156
 
107
157
  describe('#hash', () => {
108
- it('should return Documents State Transition hash as hex', () => {
109
- const serializedDocument = Buffer.from('123');
110
- const hashedDocument = '456';
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
- const result = stateTransition.hash();
116
-
117
- expect(result).to.equal(hashedDocument);
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
- const protocolVersionUInt32 = Buffer.alloc(4);
125
- protocolVersionUInt32.writeUInt32LE(stateTransition.protocolVersion, 0);
166
+ describe('#getOwnerId', () => {
167
+ it('should return owner id', async () => {
168
+ const result = stateTransitionJs.getOwnerId();
126
169
 
127
- expect(hashMock).to.have.been.calledOnceWith(
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 = documents.map((doc) => doc.getId());
144
- const result = stateTransition.getModifiedDataIds();
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 Document = require('@dashevo/dpp/lib/document/Document');
2
- const DocumentsBatchTransition = require(
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 StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
20
- const DocumentNotProvidedError = require('@dashevo/dpp/lib/document/errors/DocumentNotProvidedError');
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 documents;
31
+ let documentsJs;
32
+ let dataContractJs;
24
33
  let dataContract;
25
- let documentTransitions;
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 applyDocumentsBatchTransition;
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
- dataContract = getDataContractFixture();
38
- documentsFixture = getDocumentsFixture(dataContract);
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
- documents = [replaceDocument, documentsFixture[2]];
50
-
51
- documentTransitions = getDocumentTransitionsFixture({
52
- create: [documentsFixture[0]],
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: documentTransitions.map((t) => t.toObject()),
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
- stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
68
- stateRepositoryMock.fetchDataContract.resolves(dataContract);
69
- stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTimeMs);
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
- replaceDocument,
115
+ replaceDocumentJs,
74
116
  ]);
75
117
 
76
- applyDocumentsBatchTransition = applyDocumentsBatchTransitionFactory(
77
- stateRepositoryMock,
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 applyDocumentsBatchTransition(stateTransition);
133
+ await applyDocumentsBatchTransitionJs(stateTransitionJs);
84
134
 
85
- const replaceDocumentTransition = documentTransitions[1];
135
+ const replaceDocumentTransition = documentTransitionsJs[1];
86
136
 
87
137
  expect(fetchDocumentsMock).to.have.been.calledOnceWithExactly(
88
138
  [replaceDocumentTransition],
89
- executionContext,
139
+ executionContextJs,
90
140
  );
91
141
 
92
- expect(stateRepositoryMock.createDocument).to.have.been.calledOnce();
93
- expect(stateRepositoryMock.updateDocument).to.have.been.calledOnce();
142
+ expect(stateRepositoryMockJs.createDocument).to.have.been.calledOnce();
143
+ expect(stateRepositoryMockJs.updateDocument).to.have.been.calledOnce();
94
144
 
95
145
  const callsArgs = [
96
- ...stateRepositoryMock.createDocument.getCall(0).args,
97
- ...stateRepositoryMock.updateDocument.getCall(0).args,
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
- documentsFixture[0],
102
- documents[0],
103
- executionContext,
104
- executionContext,
151
+ documentsFixtureJs[0],
152
+ documentsJs[0],
153
+ executionContextJs,
154
+ executionContextJs,
105
155
  ]);
106
156
 
107
- expect(stateRepositoryMock.removeDocument).to.have.been.calledOnceWithExactly(
108
- documentTransitions[2].getDataContract(),
109
- documentTransitions[2].getType(),
110
- documentTransitions[2].getId(),
111
- executionContext,
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 throw an error if document was not provided for a replacement', async () => {
116
- fetchDocumentsMock.resolves([]);
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 = documentTransitions[1];
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()).to.deep.equal(replaceDocumentTransition);
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
- documentTransitions = getDocumentTransitionsFixture({
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: [documents[0]],
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: documentTransitions.map((t) => t.toObject()),
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: stateTransition.getProtocolVersion(),
240
+ $protocolVersion: stateTransitionJs.getProtocolVersion(),
153
241
  $id: documentTransition.getId(),
154
242
  $type: documentTransition.getType(),
155
243
  $dataContractId: documentTransition.getDataContractId(),
156
- $ownerId: stateTransition.getOwnerId(),
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.calledOnceWithExactly(
166
- newDocument,
167
- executionContext,
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
- [documentTransition] = getDocumentTransitionsFixture();
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: documentTransition.getId().toString(),
16
- $type: documentTransition.getType(),
17
- $action: documentTransition.getAction(),
18
- $dataContractId: documentTransition.getDataContractId().toString(),
19
- $entropy: documentTransition.getEntropy().toString('base64'),
20
- $createdAt: documentTransition.getCreatedAt().getTime(),
21
- name: documentTransition.getData().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
  });