@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
@@ -1,36 +1,48 @@
1
- const DataContractFactory = require('@dashevo/dpp/lib/dataContract/DataContractFactory');
2
-
3
- const generateRandomIdentifier = require('@dashevo/dpp/lib/test/utils/generateRandomIdentifier');
4
-
1
+ const JsDataContractFactory = require('@dashevo/dpp/lib/dataContract/DataContractFactory');
2
+ const JsIdentifier = require('@dashevo/dpp/lib/identifier/Identifier');
3
+ const JsDocument = require('@dashevo/dpp/lib/document/Document');
5
4
  const DocumentCreateTransition = require(
6
5
  '@dashevo/dpp/lib/document/stateTransition/DocumentsBatchTransition/documentTransition/DocumentCreateTransition',
7
6
  );
8
-
9
- const Identifier = require('@dashevo/dpp/lib/identifier/Identifier');
10
-
11
7
  const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
12
8
  const createDPPMock = require('@dashevo/dpp/lib/test/mocks/createDPPMock');
9
+ const generateRandomIdentifier = require('@dashevo/dpp/lib/test/utils/generateRandomIdentifier');
10
+ const lodash = require('lodash');
13
11
 
14
- const Document = require('@dashevo/dpp/lib/document/Document');
12
+ const generateRandomIdentifierAsync = require('../../../lib/test/utils/generateRandomIdentifierAsync');
13
+ const { default: loadWasmDpp } = require('../../../dist');
15
14
 
16
- const hash = require('@dashevo/dpp/lib/util/hash');
17
- const serializer = require('@dashevo/dpp/lib/util/serializer');
15
+ let DataContractFactory;
16
+ let DataContractValidator;
17
+ let Identifier;
18
+ let Document;
18
19
 
19
20
  describe('Document', () => {
20
- let hashMock;
21
- let encodeMock;
22
21
  let rawDocument;
23
22
  let document;
24
23
  let dataContract;
24
+ let documentJs;
25
+ let dataContractJs;
26
+ let rawDocumentJs;
27
+ let rawDocumentWithBuffers;
25
28
 
26
- beforeEach(function beforeEach() {
27
- const now = new Date().getTime();
29
+ // eslint-disable-next-line prefer-arrow-callback
30
+ beforeEach(async function beforeEach() {
31
+ ({
32
+ Identifier, Document, DataContractFactory, DataContractValidator,
33
+ } = await loadWasmDpp());
28
34
 
29
- const ownerId = generateRandomIdentifier().toBuffer();
35
+ const now = new Date().getTime();
36
+ const id = await generateRandomIdentifierAsync();
37
+ const jsId = new JsIdentifier(Buffer.from(id.toBuffer()));
30
38
 
31
- const dataContractFactory = new DataContractFactory(createDPPMock(), () => {});
39
+ const ownerId = await generateRandomIdentifierAsync();
40
+ const jsOwnerId = new JsIdentifier(Buffer.from(ownerId.toBuffer()));
41
+ const jsDataContractFactory = new JsDataContractFactory(createDPPMock(), () => { });
42
+ const dataContractValidator = new DataContractValidator();
43
+ const dataContractFactory = new DataContractFactory(1, dataContractValidator);
32
44
 
33
- dataContract = dataContractFactory.create(ownerId, {
45
+ const rawDataContract = {
34
46
  test: {
35
47
  properties: {
36
48
  name: {
@@ -45,7 +57,13 @@ describe('Document', () => {
45
57
  identifier: {
46
58
  type: 'array',
47
59
  byteArray: true,
48
- contentMediaType: Identifier.MEDIA_TYPE,
60
+ contentMediaType: JsIdentifier.MEDIA_TYPE,
61
+ minItems: 32,
62
+ maxItems: 32,
63
+ },
64
+ binaryData: {
65
+ type: 'array',
66
+ byteArray: true,
49
67
  minItems: 32,
50
68
  maxItems: 32,
51
69
  },
@@ -55,11 +73,14 @@ describe('Document', () => {
55
73
  },
56
74
  },
57
75
  },
58
- });
76
+ };
77
+
78
+ dataContract = dataContractFactory.create(ownerId.clone(), rawDataContract);
79
+ dataContractJs = jsDataContractFactory.create(jsOwnerId, rawDataContract);
59
80
 
60
81
  rawDocument = {
61
82
  $protocolVersion: protocolVersion.latestVersion,
62
- $id: generateRandomIdentifier(),
83
+ $id: id,
63
84
  $type: 'test',
64
85
  $dataContractId: dataContract.getId(),
65
86
  $ownerId: ownerId,
@@ -68,32 +89,41 @@ describe('Document', () => {
68
89
  $updatedAt: now,
69
90
  };
70
91
 
71
- document = new Document(rawDocument, dataContract);
92
+ rawDocumentWithBuffers = {
93
+ $protocolVersion: protocolVersion.latestVersion,
94
+ $id: id.toBuffer(),
95
+ $type: 'test',
96
+ $dataContractId: dataContract.getId().toBuffer(),
97
+ $ownerId: ownerId.toBuffer(),
98
+ $revision: DocumentCreateTransition.INITIAL_REVISION,
99
+ $createdAt: now,
100
+ $updatedAt: now,
101
+ };
72
102
 
73
- encodeMock = this.sinonSandbox.stub(serializer, 'encode');
74
- hashMock = this.sinonSandbox.stub(hash, 'hash');
75
- });
103
+ document = new Document(rawDocument, dataContract);
104
+ rawDocumentJs = lodash.cloneDeepWith(rawDocument);
105
+ rawDocumentJs.$id = jsId;
106
+ rawDocumentJs.$ownerId = jsOwnerId;
76
107
 
77
- afterEach(() => {
78
- encodeMock.restore();
79
- hashMock.restore();
108
+ rawDocumentJs.$dataContractId = dataContractJs.id;
109
+ documentJs = new JsDocument(rawDocumentJs, dataContractJs);
110
+ documentJs.dataContractId = JsIdentifier.from(Buffer.from(dataContract.getId().toBuffer()));
80
111
  });
81
112
 
82
113
  describe('constructor', () => {
83
- it('should create Document with $id and data if present', () => {
114
+ it('should create Document with $id and data if present', async () => {
84
115
  const data = {
85
116
  test: 1,
86
117
  };
87
118
 
88
119
  rawDocument = {
89
- $id: Buffer.alloc(32),
120
+ $id: await generateRandomIdentifierAsync(),
90
121
  $type: 'test',
91
122
  ...data,
92
123
  };
93
124
 
94
125
  document = new Document(rawDocument, dataContract);
95
-
96
- expect(document.id).to.deep.equal(rawDocument.$id);
126
+ expect(document.getId().toBuffer()).to.deep.equal(rawDocument.$id.toBuffer());
97
127
  });
98
128
 
99
129
  it('should create Document with $type and data if present', () => {
@@ -108,39 +138,40 @@ describe('Document', () => {
108
138
 
109
139
  document = new Document(rawDocument, dataContract);
110
140
 
111
- expect(document.type).to.equal(rawDocument.$type);
141
+ expect(document.getType()).to.equal(rawDocument.$type);
112
142
  });
113
143
 
114
- it('should create Document with $dataContractId and data if present', () => {
144
+ it('should create Document with $dataContractId and data if present', async () => {
115
145
  const data = {
116
146
  test: 1,
117
147
  };
118
148
 
119
149
  rawDocument = {
120
- $dataContractId: generateRandomIdentifier().toBuffer(),
150
+ $dataContractId: await generateRandomIdentifierAsync(),
121
151
  $type: 'test',
122
152
  ...data,
123
153
  };
124
154
 
125
155
  document = new Document(rawDocument, dataContract);
126
156
 
127
- expect(document.dataContractId).to.deep.equal(rawDocument.$dataContractId);
157
+ expect(document.getDataContractId().toBuffer())
158
+ .to.deep.equal(rawDocument.$dataContractId.toBuffer());
128
159
  });
129
160
 
130
- it('should create Document with $ownerId and data if present', () => {
161
+ it('should create Document with $ownerId and data if present', async () => {
131
162
  const data = {
132
163
  test: 1,
133
164
  };
134
165
 
135
166
  rawDocument = {
136
- $ownerId: generateRandomIdentifier().toBuffer(),
167
+ $ownerId: await generateRandomIdentifierAsync(),
137
168
  $type: 'test',
138
169
  ...data,
139
170
  };
140
171
 
141
172
  document = new Document(rawDocument, dataContract);
142
173
 
143
- expect(document.ownerId.toBuffer()).to.deep.equal(rawDocument.$ownerId);
174
+ expect(document.getOwnerId().toBuffer()).to.deep.equal(rawDocument.$ownerId.toBuffer());
144
175
  });
145
176
 
146
177
  it('should create Document with undefined action and data if present', () => {
@@ -154,8 +185,7 @@ describe('Document', () => {
154
185
  };
155
186
 
156
187
  document = new Document(rawDocument, dataContract);
157
-
158
- expect(document.action).to.equal(undefined);
188
+ expect(document.get('action')).to.equal(undefined);
159
189
  });
160
190
 
161
191
  it('should create Document with $revision and data if present', () => {
@@ -164,14 +194,14 @@ describe('Document', () => {
164
194
  };
165
195
 
166
196
  rawDocument = {
167
- $revision: 'test',
197
+ $revision: 123,
168
198
  $type: 'test',
169
199
  ...data,
170
200
  };
171
201
 
172
202
  document = new Document(rawDocument, dataContract);
173
203
 
174
- expect(document.revision).to.equal(rawDocument.$revision);
204
+ expect(document.getRevision()).to.equal(rawDocument.$revision);
175
205
  });
176
206
 
177
207
  it('should create Document with $createdAt and data if present', async () => {
@@ -189,7 +219,7 @@ describe('Document', () => {
189
219
 
190
220
  document = new Document(rawDocument, dataContract);
191
221
 
192
- expect(document.getCreatedAt().getTime()).to.equal(rawDocument.$createdAt);
222
+ expect(document.getCreatedAt()).to.equal(rawDocument.$createdAt);
193
223
  });
194
224
 
195
225
  it('should create Document with $updatedAt and data if present', async () => {
@@ -207,21 +237,19 @@ describe('Document', () => {
207
237
 
208
238
  document = new Document(rawDocument, dataContract);
209
239
 
210
- expect(document.getUpdatedAt().getTime()).to.equal(rawDocument.$updatedAt);
240
+ expect(document.getUpdatedAt()).to.equal(rawDocument.$updatedAt);
211
241
  });
212
242
  });
213
243
 
214
244
  describe('#getId', () => {
215
- it('should return ID', () => {
216
- const id = '123';
245
+ it('should return ID', async () => {
246
+ const id = await generateRandomIdentifierAsync();
217
247
 
218
- document.id = id;
248
+ document.setId(id.clone());
219
249
 
220
250
  const actualId = document.getId();
221
251
 
222
- expect(hashMock).to.have.not.been.called();
223
-
224
- expect(id).to.equal(actualId);
252
+ expect(id.toBuffer()).to.deep.equal(actualId.toBuffer());
225
253
  });
226
254
  });
227
255
 
@@ -233,61 +261,36 @@ describe('Document', () => {
233
261
 
234
262
  describe('#getOwnerId', () => {
235
263
  it('should return $ownerId', () => {
236
- expect(document.getOwnerId()).to.deep.equal(rawDocument.$ownerId);
264
+ expect(document.getOwnerId().toBuffer()).to.deep.equal(rawDocument.$ownerId.toBuffer());
237
265
  });
238
266
  });
239
267
 
240
268
  describe('#getDataContractId', () => {
241
269
  it('should return $dataContractId', () => {
242
- expect(document.getOwnerId()).to.deep.equal(rawDocument.$ownerId);
243
- });
244
- });
245
-
246
- describe('#setRevision', () => {
247
- it('should set $revision', () => {
248
- const revision = 5;
249
-
250
- const result = document.setRevision(revision);
251
-
252
- expect(result).to.equal(document);
253
-
254
- expect(document.revision).to.equal(revision);
270
+ expect(document.getOwnerId().toBuffer()).to.deep.equal(rawDocument.$ownerId.toBuffer());
255
271
  });
256
272
  });
257
273
 
258
- describe('#getRevision', () => {
259
- it('should return $revision', () => {
274
+ describe('#setRevision/#getRevision', () => {
275
+ it('should set $revision and get $revision', () => {
260
276
  const revision = 5;
261
277
 
262
- document.revision = revision;
278
+ document.setRevision(revision);
263
279
 
264
280
  expect(document.getRevision()).to.equal(revision);
265
281
  });
266
282
  });
267
283
 
268
- describe('#setData', () => {
269
- it('should call set for each document property', () => {
284
+ describe('#setData/#getDAta', () => {
285
+ it('should call set and get for each document property', () => {
270
286
  const data = {
271
287
  test1: 1,
272
288
  test2: 2,
273
289
  };
274
290
 
275
- const result = document.setData(data);
291
+ document.setData(data);
276
292
 
277
- expect(result).to.equal(document);
278
- });
279
- });
280
-
281
- describe('#getData', () => {
282
- it('should return all data', () => {
283
- const data = {
284
- test1: 1,
285
- test2: 2,
286
- };
287
-
288
- document.data = data;
289
-
290
- expect(document.getData()).to.equal(data);
293
+ expect(document.getData()).to.deep.equal(data);
291
294
  });
292
295
  });
293
296
 
@@ -296,41 +299,31 @@ describe('Document', () => {
296
299
  const path = 'test[0].$my';
297
300
  const value = 2;
298
301
 
299
- const result = document.set(path, value);
302
+ document.set(path, value);
300
303
 
301
- expect(result).to.equal(document);
304
+ expect(document.get(path)).to.deep.equal(2);
302
305
  });
303
306
 
304
307
  it('should set identifier', () => {
305
308
  const path = 'dataObject.binaryObject.identifier';
306
309
  const buffer = Buffer.alloc(32);
310
+ const identifier = new Identifier(buffer);
307
311
 
308
- const result = document.set(path, buffer);
312
+ document.set(path, identifier);
309
313
 
310
- expect(result).to.equal(document);
314
+ expect(document.get(path).toBuffer()).to.deep.equal(buffer);
311
315
  });
312
316
 
313
317
  it('should set identifier as part of object', () => {
314
318
  const buffer = Buffer.alloc(32, 'a');
315
319
  const path = 'dataObject.binaryObject';
316
- const value = { identifier: buffer };
320
+ const identifierPath = 'dataObject.binaryObject.identifier';
321
+ const identifier = new Identifier(buffer);
322
+ const value = { identifier };
317
323
 
318
- const result = document.set(path, value);
324
+ document.set(path, value);
319
325
 
320
- expect(result).to.equal(document);
321
- });
322
- });
323
-
324
- describe('#get', () => {
325
- it('should return value for specified property name', () => {
326
- const path = 'dataObject.binaryObject.identifier';
327
- const buffer = Buffer.alloc(32);
328
-
329
- document.set(path, buffer);
330
-
331
- const result = document.get(path);
332
-
333
- expect(result).to.deep.equal(buffer);
326
+ expect(document.get(identifierPath).toBuffer()).to.deep.equal(buffer);
334
327
  });
335
328
  });
336
329
 
@@ -338,83 +331,84 @@ describe('Document', () => {
338
331
  it('should return Document as plain JS object', () => {
339
332
  const jsonDocument = {
340
333
  ...rawDocument,
341
- $dataContractId: document.dataContractId.toString(),
342
- $id: document.id.toString(),
343
- $ownerId: document.ownerId.toString(),
334
+ $dataContractId: document.getDataContractId().toString(),
335
+ $id: document.getId().toString(),
336
+ $ownerId: document.getOwnerId().toString(),
344
337
  };
345
338
 
346
339
  expect(document.toJSON()).to.deep.equal(jsonDocument);
347
340
  });
348
341
  });
349
342
 
350
- describe('#toBuffer', () => {
351
- it('should return serialized Document', () => {
352
- const serializedDocument = Buffer.from('123');
353
-
354
- encodeMock.returns(serializedDocument);
355
-
356
- const result = document.toBuffer();
357
-
358
- const protocolVersionUInt32 = Buffer.alloc(4);
359
- protocolVersionUInt32.writeUInt32LE(rawDocument.$protocolVersion, 0);
360
-
361
- expect(result).to.deep.equal(Buffer.concat([protocolVersionUInt32, serializedDocument]));
362
-
363
- const documentToEncode = { ...rawDocument };
364
- delete documentToEncode.$protocolVersion;
343
+ describe('#toObject', () => {
344
+ it('should return Document as object', () => {
345
+ const result = document.toObject();
365
346
 
366
- expect(encodeMock.getCall(0).args).to.have.deep.members([
367
- documentToEncode,
368
- ]);
347
+ expect(rawDocumentWithBuffers).to.deep.equal(result);
369
348
  });
370
349
  });
371
350
 
372
- describe('#hash', () => {
373
- let toBufferMock;
351
+ describe('#toBuffer', () => {
352
+ it('returned bytes should be the same as JS version', () => {
353
+ const jsBuffer = documentJs.toBuffer();
354
+ const buffer = document.toBuffer();
374
355
 
375
- beforeEach(function beforeEach() {
376
- toBufferMock = this.sinonSandbox.stub(Document.prototype, 'toBuffer');
356
+ expect(jsBuffer.length).to.equal(buffer.length);
357
+ expect(jsBuffer).to.deep.equal(buffer);
377
358
  });
378
359
 
379
- afterEach(() => {
380
- toBufferMock.restore();
381
- });
360
+ it('should return the same bytes as JS version when dynamic identifier is in Document', () => {
361
+ const jsId = generateRandomIdentifier();
362
+ const id = new Identifier(jsId.toBuffer());
363
+ const path = 'dataObject.binaryObject.identifier';
382
364
 
383
- it('should return Document hash', () => {
384
- const serializedDocument = '123';
385
- const hashedDocument = '456';
365
+ documentJs.set(path, jsId);
366
+ document.set(path, id);
386
367
 
387
- toBufferMock.returns(serializedDocument);
368
+ expect(documentJs.get(path).toBuffer()).to.deep.equal(jsId);
369
+ expect(document.get(path).toBuffer()).to.deep.equal(jsId.toBuffer());
388
370
 
389
- hashMock.returns(hashedDocument);
371
+ const jsBuffer = documentJs.toBuffer();
372
+ const buffer = document.toBuffer();
373
+ expect(jsBuffer).to.deep.equal(buffer);
374
+ });
390
375
 
391
- const result = document.hash();
376
+ it('should return the same bytes as JS version when dynamic binaryData is in Document', () => {
377
+ const data = Buffer.alloc(32);
378
+ const path = 'dataObject.binaryObject.binaryData';
392
379
 
393
- expect(result).to.equal(hashedDocument);
380
+ documentJs.set(path, data);
381
+ document.set(path, data);
394
382
 
395
- expect(toBufferMock).to.have.been.calledOnce();
383
+ const jsBuffer = documentJs.toBuffer();
384
+ const buffer = document.toBuffer();
396
385
 
397
- expect(hashMock).to.have.been.calledOnceWith(serializedDocument);
386
+ expect(jsBuffer.length).to.equal(buffer.length);
387
+ expect(jsBuffer).to.deep.equal(buffer);
388
+ });
389
+ });
390
+
391
+ describe('#hash', () => {
392
+ it('returned hash should be the same as JS version', () => {
393
+ expect(documentJs.hash()).to.deep.equal(document.hash());
398
394
  });
399
395
  });
400
396
 
401
397
  describe('#setCreatedAt', () => {
402
398
  it('should set $createdAt', () => {
403
- const time = new Date();
399
+ const time = new Date().getTime();
404
400
 
405
- const result = document.setCreatedAt(time);
401
+ document.setCreatedAt(time);
406
402
 
407
- expect(result).to.equal(document);
408
-
409
- expect(document.createdAt).to.equal(time);
403
+ expect(document.getCreatedAt()).to.equal(time);
410
404
  });
411
405
  });
412
406
 
413
407
  describe('#getCreatedAt', () => {
414
408
  it('should return $createdAt', () => {
415
- const time = new Date();
409
+ const time = new Date().getTime();
416
410
 
417
- document.createdAt = time;
411
+ document.setCreatedAt(time);
418
412
 
419
413
  expect(document.getCreatedAt()).to.equal(time);
420
414
  });
@@ -422,21 +416,19 @@ describe('Document', () => {
422
416
 
423
417
  describe('#setUpdatedAt', () => {
424
418
  it('should set $updatedAt', () => {
425
- const time = new Date();
419
+ const time = new Date().getTime();
426
420
 
427
- const result = document.setUpdatedAt(time);
421
+ document.setUpdatedAt(time);
428
422
 
429
- expect(result).to.equal(document);
430
-
431
- expect(document.updatedAt).to.equal(time);
423
+ expect(document.getUpdatedAt()).to.equal(time);
432
424
  });
433
425
  });
434
426
 
435
427
  describe('#getUpdatedAt', () => {
436
428
  it('should return $updatedAt', () => {
437
- const time = new Date();
429
+ const time = new Date().getTime();
438
430
 
439
- document.updatedAt = time;
431
+ document.setUpdatedAt(time);
440
432
 
441
433
  expect(document.getUpdatedAt()).to.equal(time);
442
434
  });