@dashevo/wasm-dpp 0.23.0-dev.10
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/.babelrc +5 -0
- package/.editorconfig +13 -0
- package/.eslintignore +1 -0
- package/.eslintrc +15 -0
- package/.mocharc.yml +4 -0
- package/CHANGELOG.md +397 -0
- package/LICENSE +20 -0
- package/README.md +37 -0
- package/karma.conf.js +53 -0
- package/package.json +107 -0
- package/test/.eslintrc +12 -0
- package/test/integration/DashPlatformProtocol.spec.js +53 -0
- package/test/integration/ajv/keywords/byteArray/addByteArrayKeyword.spec.js +148 -0
- package/test/integration/dataContract/DataContractFacade.spec.js +84 -0
- package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +357 -0
- package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +444 -0
- package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +2191 -0
- package/test/integration/document/Document.spec.js +90 -0
- package/test/integration/document/DocumentFacade.spec.js +155 -0
- package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +83 -0
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +1146 -0
- package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +294 -0
- package/test/integration/document/validation/validateDocumentFactory.spec.js +447 -0
- package/test/integration/error/consensus/createConsensusError.spec.js +21 -0
- package/test/integration/identity/IdentityFacade.spec.js +187 -0
- package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +422 -0
- package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +361 -0
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +595 -0
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +299 -0
- package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +66 -0
- package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +415 -0
- package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +134 -0
- package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +401 -0
- package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +205 -0
- package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +127 -0
- package/test/integration/identity/validation/validateIdentityFactory.spec.js +370 -0
- package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +497 -0
- package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +507 -0
- package/test/integration/stateTransition/StateTransitionFacade.spec.js +418 -0
- package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +35 -0
- package/test/integration/util/generateEntropy.spec.js +17 -0
- package/test/integration/util/serializer.spec.js +24 -0
- package/test/unit/DashPlatformProtocol.spec.js +79 -0
- package/test/unit/Identifier.spec.js +123 -0
- package/test/unit/Metadata.spec.js +37 -0
- package/test/unit/dataContract/DataContract.spec.js +407 -0
- package/test/unit/dataContract/DataContractFactory.spec.js +178 -0
- package/test/unit/dataContract/createDataContract.spec.js +57 -0
- package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +46 -0
- package/test/unit/dataContract/generateDataContractId.spec.js +19 -0
- package/test/unit/dataContract/getBinaryPropertiesFromSchema.spec.js +103 -0
- package/test/unit/dataContract/getPropertyDefinitionByPath.spec.js +84 -0
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +160 -0
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +48 -0
- package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +85 -0
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +158 -0
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +47 -0
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +121 -0
- package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +111 -0
- package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +93 -0
- package/test/unit/dataContract/validation/validateDataContractPatternsFactory.spec.js +64 -0
- package/test/unit/dataTrigger/DataTrigger.spec.js +132 -0
- package/test/unit/dataTrigger/DataTriggerExecutionContext.spec.js +29 -0
- package/test/unit/dataTrigger/dashpayDataTriggers/createContactRequestDataTrigger.spec.js +109 -0
- package/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js +382 -0
- package/test/unit/dataTrigger/featureFlagDataTriggers/createFeatureFlagDataTrigger.spec.js +101 -0
- package/test/unit/dataTrigger/getDataTriggersFactory.spec.js +113 -0
- package/test/unit/dataTrigger/rejectDataTrigger.spec.js +51 -0
- package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +200 -0
- package/test/unit/decodeProtocolEntityFactory.spec.js +75 -0
- package/test/unit/document/Document.spec.js +444 -0
- package/test/unit/document/DocumentFactory.spec.js +376 -0
- package/test/unit/document/errors/InvalidDocumentError.spec.js +46 -0
- package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +66 -0
- package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +168 -0
- package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +171 -0
- package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +25 -0
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +31 -0
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +122 -0
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +75 -0
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +128 -0
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +811 -0
- package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +279 -0
- package/test/unit/errors/consensus/codes.spec.js +102 -0
- package/test/unit/identity/Identity.spec.js +243 -0
- package/test/unit/identity/IdentityFactory.spec.js +274 -0
- package/test/unit/identity/IdentityPublicKey.spec.js +273 -0
- package/test/unit/identity/creditsConverter.spec.js +34 -0
- package/test/unit/identity/errors/InvalidIdentityError.spec.js +46 -0
- package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +184 -0
- package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +90 -0
- package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +71 -0
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +137 -0
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +108 -0
- package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +22 -0
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +219 -0
- package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +149 -0
- package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +21 -0
- package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +36 -0
- package/test/unit/identity/validation/validateRequiredPurposeAndSecurityLevelFactory.spec.js +47 -0
- package/test/unit/stateTransition/StateTransitionFactory.spec.js +160 -0
- package/test/unit/stateTransition/createStateTransitionFactory.spec.js +72 -0
- package/test/unit/stateTransition/errors/InvalidStateTransitionError.spec.js +51 -0
- package/test/unit/stateTransition/validation/validateStateTransitionBasicFactory.spec.js +138 -0
- package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +372 -0
- package/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js +339 -0
- package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +86 -0
- package/test/unit/stateTransition/validation/validateStateTransitionStateFactory.spec.js +89 -0
- package/test/unit/version/validateProtocolVersionFactory.spec.js +80 -0
- package/webpack.config.js +49 -0
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
const { getRE2Class } = require('@dashevo/wasm-re2');
|
|
2
|
+
|
|
3
|
+
const createAjv = require('../../../../../../../lib/ajv/createAjv');
|
|
4
|
+
|
|
5
|
+
const JsonSchemaValidator = require('../../../../../../../lib/validation/JsonSchemaValidator');
|
|
6
|
+
|
|
7
|
+
const getIdentityCreateTransitionFixture = require('../../../../../../../lib/test/fixtures/getIdentityCreateTransitionFixture');
|
|
8
|
+
|
|
9
|
+
const validateIdentityCreateTransitionBasicFactory = require(
|
|
10
|
+
'../../../../../../../lib/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory',
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
const {
|
|
14
|
+
expectJsonSchemaError,
|
|
15
|
+
expectValidationError,
|
|
16
|
+
} = require('../../../../../../../lib/test/expect/expectError');
|
|
17
|
+
|
|
18
|
+
const ValidationResult = require('../../../../../../../lib/validation/ValidationResult');
|
|
19
|
+
const InstantAssetLockProof = require('../../../../../../../lib/identity/stateTransition/assetLockProof/instant/InstantAssetLockProof');
|
|
20
|
+
const ChainAssetLockProof = require('../../../../../../../lib/identity/stateTransition/assetLockProof/chain/ChainAssetLockProof');
|
|
21
|
+
const SomeConsensusError = require('../../../../../../../lib/test/mocks/SomeConsensusError');
|
|
22
|
+
const IdentityPublicKey = require('../../../../../../../lib/identity/IdentityPublicKey');
|
|
23
|
+
const StateTransitionExecutionContext = require('../../../../../../../lib/stateTransition/StateTransitionExecutionContext');
|
|
24
|
+
|
|
25
|
+
describe('validateIdentityCreateTransitionBasicFactory', () => {
|
|
26
|
+
let validateIdentityCreateTransitionBasic;
|
|
27
|
+
let rawStateTransition;
|
|
28
|
+
let stateTransition;
|
|
29
|
+
let validatePublicKeysMock;
|
|
30
|
+
let validatePublicKeysInIdentityCreateTransition;
|
|
31
|
+
let assetLockPublicKeyHash;
|
|
32
|
+
let proofValidationFunctionsByTypeMock;
|
|
33
|
+
let validateProtocolVersionMock;
|
|
34
|
+
let validatePublicKeySignaturesMock;
|
|
35
|
+
|
|
36
|
+
beforeEach(async function beforeEach() {
|
|
37
|
+
validatePublicKeysMock = this.sinonSandbox.stub()
|
|
38
|
+
.returns(new ValidationResult());
|
|
39
|
+
|
|
40
|
+
validatePublicKeysInIdentityCreateTransition = this.sinonSandbox.stub()
|
|
41
|
+
.returns(new ValidationResult());
|
|
42
|
+
|
|
43
|
+
assetLockPublicKeyHash = Buffer.alloc(20, 1);
|
|
44
|
+
|
|
45
|
+
const assetLockValidationResult = new ValidationResult();
|
|
46
|
+
|
|
47
|
+
assetLockValidationResult.setData(assetLockPublicKeyHash);
|
|
48
|
+
|
|
49
|
+
const RE2 = await getRE2Class();
|
|
50
|
+
const ajv = createAjv(RE2);
|
|
51
|
+
|
|
52
|
+
const jsonSchemaValidator = new JsonSchemaValidator(ajv);
|
|
53
|
+
|
|
54
|
+
const proofValidationResult = new ValidationResult();
|
|
55
|
+
proofValidationResult.setData(assetLockPublicKeyHash);
|
|
56
|
+
|
|
57
|
+
proofValidationFunctionsByTypeMock = {
|
|
58
|
+
[InstantAssetLockProof.type]: this.sinonSandbox.stub().resolves(proofValidationResult),
|
|
59
|
+
[ChainAssetLockProof.type]: this.sinonSandbox.stub().resolves(proofValidationResult),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
validateProtocolVersionMock = this.sinonSandbox.stub().returns(new ValidationResult());
|
|
63
|
+
|
|
64
|
+
validatePublicKeySignaturesMock = this.sinonSandbox.stub()
|
|
65
|
+
.returns(new ValidationResult());
|
|
66
|
+
|
|
67
|
+
validateIdentityCreateTransitionBasic = validateIdentityCreateTransitionBasicFactory(
|
|
68
|
+
jsonSchemaValidator,
|
|
69
|
+
validatePublicKeysMock,
|
|
70
|
+
validatePublicKeysInIdentityCreateTransition,
|
|
71
|
+
proofValidationFunctionsByTypeMock,
|
|
72
|
+
validateProtocolVersionMock,
|
|
73
|
+
validatePublicKeySignaturesMock,
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
stateTransition = getIdentityCreateTransitionFixture();
|
|
77
|
+
|
|
78
|
+
const privateKey = '9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2';
|
|
79
|
+
|
|
80
|
+
await stateTransition.signByPrivateKey(privateKey, IdentityPublicKey.TYPES.ECDSA_SECP256K1);
|
|
81
|
+
|
|
82
|
+
rawStateTransition = stateTransition.toObject();
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
describe('protocolVersion', () => {
|
|
86
|
+
it('should be present', async () => {
|
|
87
|
+
delete rawStateTransition.protocolVersion;
|
|
88
|
+
|
|
89
|
+
const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
|
|
90
|
+
|
|
91
|
+
expectJsonSchemaError(result);
|
|
92
|
+
|
|
93
|
+
const [error] = result.getErrors();
|
|
94
|
+
|
|
95
|
+
expect(error.getInstancePath()).to.equal('');
|
|
96
|
+
expect(error.getKeyword()).to.equal('required');
|
|
97
|
+
expect(error.getParams().missingProperty).to.equal('protocolVersion');
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('should be an integer', async () => {
|
|
101
|
+
rawStateTransition.protocolVersion = '1';
|
|
102
|
+
|
|
103
|
+
const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
|
|
104
|
+
|
|
105
|
+
expectJsonSchemaError(result);
|
|
106
|
+
|
|
107
|
+
const [error] = result.getErrors();
|
|
108
|
+
|
|
109
|
+
expect(error.getInstancePath()).to.equal('/protocolVersion');
|
|
110
|
+
expect(error.getKeyword()).to.equal('type');
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it('should be valid', async () => {
|
|
114
|
+
rawStateTransition.protocolVersion = -1;
|
|
115
|
+
|
|
116
|
+
const protocolVersionError = new SomeConsensusError('test');
|
|
117
|
+
const protocolVersionResult = new ValidationResult([
|
|
118
|
+
protocolVersionError,
|
|
119
|
+
]);
|
|
120
|
+
|
|
121
|
+
validateProtocolVersionMock.returns(protocolVersionResult);
|
|
122
|
+
|
|
123
|
+
const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
|
|
124
|
+
|
|
125
|
+
expectValidationError(result, SomeConsensusError);
|
|
126
|
+
|
|
127
|
+
const [error] = result.getErrors();
|
|
128
|
+
|
|
129
|
+
expect(error).to.equal(protocolVersionError);
|
|
130
|
+
|
|
131
|
+
expect(validateProtocolVersionMock).to.be.calledOnceWith(
|
|
132
|
+
rawStateTransition.protocolVersion,
|
|
133
|
+
);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
describe('type', () => {
|
|
138
|
+
it('should be present', async () => {
|
|
139
|
+
delete rawStateTransition.type;
|
|
140
|
+
|
|
141
|
+
const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
|
|
142
|
+
|
|
143
|
+
expectJsonSchemaError(result);
|
|
144
|
+
|
|
145
|
+
const [error] = result.getErrors();
|
|
146
|
+
|
|
147
|
+
expect(error.getInstancePath()).to.equal('');
|
|
148
|
+
expect(error.getKeyword()).to.equal('required');
|
|
149
|
+
expect(error.getParams().missingProperty).to.equal('type');
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
it('should be equal to 2', async () => {
|
|
153
|
+
rawStateTransition.type = 666;
|
|
154
|
+
|
|
155
|
+
const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
|
|
156
|
+
|
|
157
|
+
expectJsonSchemaError(result);
|
|
158
|
+
|
|
159
|
+
const [error] = result.getErrors();
|
|
160
|
+
|
|
161
|
+
expect(error.getInstancePath()).to.equal('/type');
|
|
162
|
+
expect(error.getKeyword()).to.equal('const');
|
|
163
|
+
expect(error.getParams().allowedValue).to.equal(2);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
describe('assetLockProof', () => {
|
|
168
|
+
it('should be present', async () => {
|
|
169
|
+
delete rawStateTransition.assetLockProof;
|
|
170
|
+
|
|
171
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
172
|
+
rawStateTransition,
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
expectJsonSchemaError(result);
|
|
176
|
+
|
|
177
|
+
const [error] = result.getErrors();
|
|
178
|
+
|
|
179
|
+
expect(error.getInstancePath()).to.equal('');
|
|
180
|
+
expect(error.getParams().missingProperty).to.equal('assetLockProof');
|
|
181
|
+
expect(error.getKeyword()).to.equal('required');
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it('should be an object', async () => {
|
|
185
|
+
rawStateTransition.assetLockProof = 1;
|
|
186
|
+
|
|
187
|
+
const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
|
|
188
|
+
|
|
189
|
+
expectJsonSchemaError(result, 1);
|
|
190
|
+
|
|
191
|
+
const [error] = result.getErrors();
|
|
192
|
+
|
|
193
|
+
expect(error.getInstancePath()).to.equal('/assetLockProof');
|
|
194
|
+
expect(error.getKeyword()).to.equal('type');
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
it('should be valid', async () => {
|
|
198
|
+
const assetLockError = new SomeConsensusError('test');
|
|
199
|
+
const assetLockResult = new ValidationResult([
|
|
200
|
+
assetLockError,
|
|
201
|
+
]);
|
|
202
|
+
|
|
203
|
+
const executionContext = new StateTransitionExecutionContext();
|
|
204
|
+
|
|
205
|
+
proofValidationFunctionsByTypeMock[InstantAssetLockProof.type].resolves(assetLockResult);
|
|
206
|
+
|
|
207
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
208
|
+
rawStateTransition,
|
|
209
|
+
executionContext,
|
|
210
|
+
);
|
|
211
|
+
|
|
212
|
+
expectValidationError(result);
|
|
213
|
+
|
|
214
|
+
const [error] = result.getErrors();
|
|
215
|
+
|
|
216
|
+
expect(error).to.equal(assetLockError);
|
|
217
|
+
|
|
218
|
+
expect(proofValidationFunctionsByTypeMock[InstantAssetLockProof.type])
|
|
219
|
+
.to.be.calledOnceWithExactly(
|
|
220
|
+
rawStateTransition.assetLockProof,
|
|
221
|
+
executionContext,
|
|
222
|
+
);
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
describe('publicKeys', () => {
|
|
227
|
+
it('should be present', async () => {
|
|
228
|
+
rawStateTransition.publicKeys = undefined;
|
|
229
|
+
|
|
230
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
231
|
+
rawStateTransition,
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
expectJsonSchemaError(result);
|
|
235
|
+
|
|
236
|
+
const [error] = result.getErrors();
|
|
237
|
+
|
|
238
|
+
expect(error.getInstancePath()).to.equal('');
|
|
239
|
+
expect(error.getParams().missingProperty).to.equal('publicKeys');
|
|
240
|
+
expect(error.getKeyword()).to.equal('required');
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
it('should not be empty', async () => {
|
|
244
|
+
rawStateTransition.publicKeys = [];
|
|
245
|
+
|
|
246
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
247
|
+
rawStateTransition,
|
|
248
|
+
);
|
|
249
|
+
|
|
250
|
+
expectJsonSchemaError(result);
|
|
251
|
+
|
|
252
|
+
const [error] = result.getErrors();
|
|
253
|
+
|
|
254
|
+
expect(error.getKeyword()).to.equal('minItems');
|
|
255
|
+
expect(error.getInstancePath()).to.equal('/publicKeys');
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
it('should not have more than 10 items', async () => {
|
|
259
|
+
const [key] = rawStateTransition.publicKeys;
|
|
260
|
+
|
|
261
|
+
for (let i = 0; i < 10; i++) {
|
|
262
|
+
rawStateTransition.publicKeys.push(key);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
266
|
+
rawStateTransition,
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
expectJsonSchemaError(result);
|
|
270
|
+
|
|
271
|
+
const [error] = result.getErrors();
|
|
272
|
+
|
|
273
|
+
expect(error.getKeyword()).to.equal('maxItems');
|
|
274
|
+
expect(error.getInstancePath()).to.equal('/publicKeys');
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
it('should be unique', async () => {
|
|
278
|
+
rawStateTransition.publicKeys.push(rawStateTransition.publicKeys[0]);
|
|
279
|
+
|
|
280
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
281
|
+
rawStateTransition,
|
|
282
|
+
);
|
|
283
|
+
|
|
284
|
+
expectJsonSchemaError(result);
|
|
285
|
+
|
|
286
|
+
const [error] = result.getErrors();
|
|
287
|
+
|
|
288
|
+
expect(error.getKeyword()).to.equal('uniqueItems');
|
|
289
|
+
expect(error.getInstancePath()).to.equal('/publicKeys');
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
it('should be valid', async () => {
|
|
293
|
+
const publicKeysError = new SomeConsensusError('test');
|
|
294
|
+
const publicKeysResult = new ValidationResult([
|
|
295
|
+
publicKeysError,
|
|
296
|
+
]);
|
|
297
|
+
|
|
298
|
+
validatePublicKeysMock.returns(publicKeysResult);
|
|
299
|
+
|
|
300
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
301
|
+
rawStateTransition,
|
|
302
|
+
);
|
|
303
|
+
|
|
304
|
+
expectValidationError(result);
|
|
305
|
+
|
|
306
|
+
const [error] = result.getErrors();
|
|
307
|
+
|
|
308
|
+
expect(error).to.equal(publicKeysError);
|
|
309
|
+
|
|
310
|
+
expect(validatePublicKeysMock)
|
|
311
|
+
.to.be.calledOnceWithExactly(rawStateTransition.publicKeys);
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
it('should have at least 1 master key', async () => {
|
|
315
|
+
const publicKeysError = new SomeConsensusError('test');
|
|
316
|
+
const publicKeysResult = new ValidationResult([
|
|
317
|
+
publicKeysError,
|
|
318
|
+
]);
|
|
319
|
+
|
|
320
|
+
validatePublicKeysInIdentityCreateTransition.returns(publicKeysResult);
|
|
321
|
+
|
|
322
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
323
|
+
rawStateTransition,
|
|
324
|
+
);
|
|
325
|
+
|
|
326
|
+
expectValidationError(result);
|
|
327
|
+
|
|
328
|
+
const [error] = result.getErrors();
|
|
329
|
+
|
|
330
|
+
expect(error).to.equal(publicKeysError);
|
|
331
|
+
|
|
332
|
+
expect(validatePublicKeysInIdentityCreateTransition)
|
|
333
|
+
.to.be.calledOnceWithExactly(rawStateTransition.publicKeys);
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
it('should have valid signatures', async () => {
|
|
337
|
+
const publicKeysError = new SomeConsensusError('test');
|
|
338
|
+
const publicKeysResult = new ValidationResult([
|
|
339
|
+
publicKeysError,
|
|
340
|
+
]);
|
|
341
|
+
|
|
342
|
+
validatePublicKeySignaturesMock.resolves(publicKeysResult);
|
|
343
|
+
|
|
344
|
+
const result = await validateIdentityCreateTransitionBasic(
|
|
345
|
+
rawStateTransition,
|
|
346
|
+
);
|
|
347
|
+
|
|
348
|
+
expectValidationError(result);
|
|
349
|
+
|
|
350
|
+
const [error] = result.getErrors();
|
|
351
|
+
|
|
352
|
+
expect(error).to.equal(publicKeysError);
|
|
353
|
+
});
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
describe('signature', () => {
|
|
357
|
+
it('should be present', async () => {
|
|
358
|
+
delete rawStateTransition.signature;
|
|
359
|
+
|
|
360
|
+
const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
|
|
361
|
+
|
|
362
|
+
expectJsonSchemaError(result);
|
|
363
|
+
|
|
364
|
+
const [error] = result.getErrors();
|
|
365
|
+
|
|
366
|
+
expect(error.instancePath).to.equal('');
|
|
367
|
+
expect(error.getKeyword()).to.equal('required');
|
|
368
|
+
expect(error.getParams().missingProperty).to.equal('signature');
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
it('should be a byte array', async () => {
|
|
372
|
+
rawStateTransition.signature = new Array(65).fill('string');
|
|
373
|
+
|
|
374
|
+
const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
|
|
375
|
+
|
|
376
|
+
expectJsonSchemaError(result, 2);
|
|
377
|
+
|
|
378
|
+
const [error, byteArrayError] = result.getErrors();
|
|
379
|
+
|
|
380
|
+
expect(error.instancePath).to.equal('/signature/0');
|
|
381
|
+
expect(error.getKeyword()).to.equal('type');
|
|
382
|
+
|
|
383
|
+
expect(byteArrayError.getKeyword()).to.equal('byteArray');
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
it('should be not shorter than 65 bytes', async () => {
|
|
387
|
+
rawStateTransition.signature = Buffer.alloc(64);
|
|
388
|
+
|
|
389
|
+
const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
|
|
390
|
+
|
|
391
|
+
expectJsonSchemaError(result);
|
|
392
|
+
|
|
393
|
+
const [error] = result.getErrors();
|
|
394
|
+
|
|
395
|
+
expect(error.instancePath).to.equal('/signature');
|
|
396
|
+
expect(error.getKeyword()).to.equal('minItems');
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
it('should be not longer than 65 bytes', async () => {
|
|
400
|
+
rawStateTransition.signature = Buffer.alloc(66);
|
|
401
|
+
|
|
402
|
+
const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
|
|
403
|
+
|
|
404
|
+
expectJsonSchemaError(result);
|
|
405
|
+
|
|
406
|
+
const [error] = result.getErrors();
|
|
407
|
+
|
|
408
|
+
expect(error.instancePath).to.equal('/signature');
|
|
409
|
+
expect(error.getKeyword()).to.equal('maxItems');
|
|
410
|
+
});
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
it('should return valid result', async () => {
|
|
414
|
+
const result = await validateIdentityCreateTransitionBasic(rawStateTransition);
|
|
415
|
+
|
|
416
|
+
expect(result.isValid()).to.be.true();
|
|
417
|
+
|
|
418
|
+
expect(validatePublicKeysMock).to.be.calledOnceWithExactly(
|
|
419
|
+
rawStateTransition.publicKeys,
|
|
420
|
+
);
|
|
421
|
+
});
|
|
422
|
+
});
|