From 32cb026aaae0816af7935b35adb334536368bb99 Mon Sep 17 00:00:00 2001 From: Ivan Shumkov Date: Fri, 3 Apr 2020 18:27:16 +0300 Subject: [PATCH] feat: implement create identity create transition factory --- lib/identity/IdentityFacade.js | 10 ++++++++++ lib/identity/IdentityFactory.js | 19 +++++++++++++++++++ .../identity/IdentityFacade.spec.js | 15 +++++++++++++++ test/unit/identity/IdentityFactory.spec.js | 16 ++++++++++++++++ 4 files changed, 60 insertions(+) diff --git a/lib/identity/IdentityFacade.js b/lib/identity/IdentityFacade.js index a5fc791c0..39e08e02c 100644 --- a/lib/identity/IdentityFacade.js +++ b/lib/identity/IdentityFacade.js @@ -65,6 +65,16 @@ class IdentityFacade { validate(identity) { return this.validateIdentity(identity); } + + /** + * Create identity create transition + * + * @param {Identity} identity + * @return {IdentityCreateTransition} + */ + createIdentityCreateTransition(identity) { + return this.factory.createIdentityCreateTransition(identity); + } } module.exports = IdentityFacade; diff --git a/lib/identity/IdentityFactory.js b/lib/identity/IdentityFactory.js index f4750674c..c575cabfb 100644 --- a/lib/identity/IdentityFactory.js +++ b/lib/identity/IdentityFactory.js @@ -7,6 +7,7 @@ const Identity = require('./Identity'); const { decode } = require('../util/serializer'); const IdentityPublicKey = require('./IdentityPublicKey'); +const IdentityCreateTransition = require('./stateTransitions/identityCreateTransition/IdentityCreateTransition'); const InvalidIdentityError = require('./errors/InvalidIdentityError'); const SerializedObjectParsingError = require('../errors/SerializedObjectParsingError'); @@ -93,6 +94,24 @@ class IdentityFactory { return this.createFromObject(rawIdentity, options); } + + /** + * Create identity create transition + * + * @param {Identity} identity + * @return {IdentityCreateTransition} + */ + createIdentityCreateTransition(identity) { + const lockedOutPoint = identity.getLockedOutPoint().toString('base64'); + + const stateTransition = new IdentityCreateTransition({ + lockedOutPoint, + }); + + stateTransition.setPublicKeys(identity.getPublicKeys()); + + return stateTransition; + } } module.exports = IdentityFactory; diff --git a/test/integration/identity/IdentityFacade.spec.js b/test/integration/identity/IdentityFacade.spec.js index 5b099f340..d6eaf64b6 100644 --- a/test/integration/identity/IdentityFacade.spec.js +++ b/test/integration/identity/IdentityFacade.spec.js @@ -8,6 +8,7 @@ const hash = require('../../../lib/util/hash'); const DashPlatformProtocol = require('../../../lib/DashPlatformProtocol'); const Identity = require('../../../lib/identity/Identity'); +const IdentityCreateTransition = require('../../../lib/identity/stateTransitions/identityCreateTransition/IdentityCreateTransition'); const ValidationResult = require('../../../lib/validation/ValidationResult'); @@ -87,4 +88,18 @@ describe('IdentityFacade', () => { expect(result.isValid()).to.be.true(); }); }); + + describe('#createIdentityCreateTransition', () => { + it('should create IdentityCreateTransition from Identity model', () => { + const lockedOutPoint = crypto.randomBytes(64); + + identity.setLockedOutPoint(lockedOutPoint); + + const stateTransition = dpp.identity.createIdentityCreateTransition(identity); + + expect(stateTransition).to.be.instanceOf(IdentityCreateTransition); + expect(stateTransition.getPublicKeys()).to.equal(identity.getPublicKeys()); + expect(stateTransition.getLockedOutPoint()).to.equal(lockedOutPoint.toString('base64')); + }); + }); }); diff --git a/test/unit/identity/IdentityFactory.spec.js b/test/unit/identity/IdentityFactory.spec.js index 370e8634c..1c244369a 100644 --- a/test/unit/identity/IdentityFactory.spec.js +++ b/test/unit/identity/IdentityFactory.spec.js @@ -7,6 +7,7 @@ const { PublicKey } = require('@dashevo/dashcore-lib'); const hash = require('../../../lib/util/hash'); const Identity = require('../../../lib/identity/Identity'); +const IdentityCreateTransition = require('../../../lib/identity/stateTransitions/identityCreateTransition/IdentityCreateTransition'); const getIdentityFixture = require('../../../lib/test/fixtures/getIdentityFixture'); @@ -36,6 +37,7 @@ describe('IdentityFactory', () => { decode: decodeMock, }, '../../../lib/identity/Identity': Identity, + '../../../lib/identity/stateTransitions/identityCreateTransition/IdentityCreateTransition': IdentityCreateTransition, }, ); @@ -150,4 +152,18 @@ describe('IdentityFactory', () => { } }); }); + + describe('#createIdentityCreateTransition', () => { + it('should create IdentityCreateTransition from Identity model', () => { + const lockedOutPoint = crypto.randomBytes(64); + + identity.setLockedOutPoint(lockedOutPoint); + + const stateTransition = factory.createIdentityCreateTransition(identity); + + expect(stateTransition).to.be.instanceOf(IdentityCreateTransition); + expect(stateTransition.getPublicKeys()).to.equal(identity.getPublicKeys()); + expect(stateTransition.getLockedOutPoint()).to.equal(lockedOutPoint.toString('base64')); + }); + }); });