diff --git a/packages/js-dapi-client/lib/methods/platform/PlatformMethodsFacade.js b/packages/js-dapi-client/lib/methods/platform/PlatformMethodsFacade.js index 8de255abde..16f44665a9 100644 --- a/packages/js-dapi-client/lib/methods/platform/PlatformMethodsFacade.js +++ b/packages/js-dapi-client/lib/methods/platform/PlatformMethodsFacade.js @@ -16,6 +16,8 @@ const getIdentityKeysFactory = require('./getIdentityKeys/getIdentityKeysFactory const getTotalCreditsInPlatformFactory = require('./getTotalCreditsInPlatform/getTotalCreditsInPlatformFactory'); const getStatusFactory = require('./getStatus/getStatusFactory'); const getIdentityBalanceFactory = require('./getIdentityBalance/getIdentityBalanceFactory'); +const getContestedResourceVoteStateFactory = require('./getContestedResourceVoteState/getContestedResourceVoteStateFactory'); +const getContestedResourcesFactory = require('./getContestedResources/getContestedResourcesFactory'); class PlatformMethodsFacade { /** @@ -42,6 +44,8 @@ class PlatformMethodsFacade { this.getTotalCreditsInPlatform = getTotalCreditsInPlatformFactory(grpcTransport); this.getStatus = getStatusFactory(grpcTransport); this.getIdentityBalance = getIdentityBalanceFactory(grpcTransport); + this.getContestedResourceVoteState = getContestedResourceVoteStateFactory(grpcTransport); + this.getContestedResources = getContestedResourcesFactory(grpcTransport); } } diff --git a/packages/js-dapi-client/lib/methods/platform/getContestedResourceVoteState/GetContestedResourceVoteStateResponse.js b/packages/js-dapi-client/lib/methods/platform/getContestedResourceVoteState/GetContestedResourceVoteStateResponse.js new file mode 100644 index 0000000000..8e707d4cfa --- /dev/null +++ b/packages/js-dapi-client/lib/methods/platform/getContestedResourceVoteState/GetContestedResourceVoteStateResponse.js @@ -0,0 +1,47 @@ +const AbstractResponse = require('../response/AbstractResponse'); +const InvalidResponseError = require('../response/errors/InvalidResponseError'); + +class GetContestedResourceVoteStateResponse extends AbstractResponse { + /** + * @param {object} contestedResourceContenders + * @param {Metadata} metadata + * @param {Proof} [proof] + */ + constructor(contestedResourceContenders, metadata, proof = undefined) { + super(metadata, proof); + + this.contestedResourceContenders = contestedResourceContenders; + } + + /** + * @returns {object} + */ + getContestedResourceContenders() { + return this.contestedResourceContenders; + } + + /** + * @param proto + * @returns {GetContestedResourceVoteStateResponse} + */ + static createFromProto(proto) { + // eslint-disable-next-line + const contestedResourceContenders = proto.getV0().getContestedResourceContenders(); + + const { metadata, proof } = AbstractResponse.createMetadataAndProofFromProto( + proto, + ); + + if ((typeof contestedResourceContenders === 'undefined' || contestedResourceContenders === null) && !proof) { + throw new InvalidResponseError('Contested Resource Contenders data is not defined'); + } + + return new GetContestedResourceVoteStateResponse( + contestedResourceContenders.toObject(), + metadata, + proof, + ); + } +} + +module.exports = GetContestedResourceVoteStateResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getContestedResourceVoteState/getContestedResourceVoteStateFactory.js b/packages/js-dapi-client/lib/methods/platform/getContestedResourceVoteState/getContestedResourceVoteStateFactory.js new file mode 100644 index 0000000000..4a78e84e4c --- /dev/null +++ b/packages/js-dapi-client/lib/methods/platform/getContestedResourceVoteState/getContestedResourceVoteStateFactory.js @@ -0,0 +1,96 @@ +const { + v0: { + PlatformPromiseClient, + GetContestedResourceVoteStateRequest, + }, +} = require('@dashevo/dapi-grpc'); + +const GetContestedResourceVoteStateResponse = require('./GetContestedResourceVoteStateResponse'); +const InvalidResponseError = require('../response/errors/InvalidResponseError'); + +/** + * @param {GrpcTransport} grpcTransport + * @returns {getContestedResourceVoteStateRequest} + */ +function getContestedResourceVoteStateFactory(grpcTransport) { + /** + * Fetch the version upgrade votes status + * @typedef {getContestedResourceVoteState} + * @param contractId + * @param documentTypeName + * @param indexName + * @param resultType + * @param indexValuesList + * @param startAtIdentifierInfo + * @param allowIncludeLockedAndAbstainingVoteTally + * @param count + * @param {DAPIClientOptions & {prove: boolean}} [options] + * @returns {Promise} + */ + async function getContestedResourceVoteState( + contractId, + documentTypeName, + indexName, + resultType, + indexValuesList, + startAtIdentifierInfo, + allowIncludeLockedAndAbstainingVoteTally, + count, + options = {}, + ) { + const { GetContestedResourceVoteStateRequestV0 } = GetContestedResourceVoteStateRequest; + + // eslint-disable-next-line max-len + const getContestedResourceVoteStateRequest = new GetContestedResourceVoteStateRequest(); + + if (Buffer.isBuffer(contractId)) { + // eslint-disable-next-line no-param-reassign + contractId = Buffer.from(contractId); + } + + getContestedResourceVoteStateRequest.setV0( + new GetContestedResourceVoteStateRequestV0() + .setContractId(contractId) + .setDocumentTypeName(documentTypeName) + .setIndexName(indexName) + .setResultType(resultType) + .setIndexValuesList(indexValuesList) + .setStartAtIdentifierInfo(startAtIdentifierInfo) + .setAllowIncludeLockedAndAbstainingVoteTally(allowIncludeLockedAndAbstainingVoteTally) + .setCount(count) + .setProve(!!options.prove), + ); + + let lastError; + + // TODO: simple retry before the dapi versioning is properly implemented + for (let i = 0; i < 3; i += 1) { + try { + // eslint-disable-next-line no-await-in-loop + const getContestedResourceVoteStateResponse = await grpcTransport.request( + PlatformPromiseClient, + 'getContestedResourceVoteState', + getContestedResourceVoteStateRequest, + options, + ); + + return GetContestedResourceVoteStateResponse + .createFromProto(getContestedResourceVoteStateResponse); + } catch (e) { + if (e instanceof InvalidResponseError) { + lastError = e; + } else { + throw e; + } + } + } + + // If we made it past the cycle it means that the retry didn't work, + // and we're throwing the last error encountered + throw lastError; + } + + return getContestedResourceVoteState; +} + +module.exports = getContestedResourceVoteStateFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getContestedResources/getContestedResourcesFactory.js b/packages/js-dapi-client/lib/methods/platform/getContestedResources/getContestedResourcesFactory.js new file mode 100644 index 0000000000..845814e94f --- /dev/null +++ b/packages/js-dapi-client/lib/methods/platform/getContestedResources/getContestedResourcesFactory.js @@ -0,0 +1,96 @@ +const { + v0: { + PlatformPromiseClient, + GetContestedResourcesRequest, + }, +} = require('@dashevo/dapi-grpc'); + +const GetContestedResourcesResponse = require('./GetContestedResourcesResponse'); +const InvalidResponseError = require('../response/errors/InvalidResponseError'); + +/** + * @param {GrpcTransport} grpcTransport + * @returns {getContestedResourcesRequest} + */ +function getContestedResourcesFactory(grpcTransport) { + /** + * Fetch the contested resources for specific contract + * @typedef {getContestedResources} + * @param contractId + * @param documentTypeName + * @param indexName + * @param startIndexValues + * @param endIndexValues + * @param startAtValueInfo + * @param count + * @param orderAscending + * @param {DAPIClientOptions & {prove: boolean}} [options] + * @returns {Promise} + */ + async function getContestedResources( + contractId, + documentTypeName, + indexName, + startIndexValues, + endIndexValues, + startAtValueInfo, + count, + orderAscending, + options = {}, + ) { + const { GetContestedResourcesRequestV0 } = GetContestedResourcesRequest; + + // eslint-disable-next-line max-len + const getContestedResourcesRequest = new GetContestedResourcesRequest(); + + if (Buffer.isBuffer(contractId)) { + // eslint-disable-next-line no-param-reassign + contractId = Buffer.from(contractId); + } + + getContestedResourcesRequest.setV0( + new GetContestedResourcesRequestV0() + .setContractId(contractId) + .setDocumentTypeName(documentTypeName) + .setIndexName(indexName) + .setStartIndexValuesList(startIndexValues) + .setEndIndexValuesList(endIndexValues) + .setStartAtValueInfo(startAtValueInfo) + .setCount(count) + .setOrderAscending(orderAscending) + .setProve(!!options.prove), + ); + + let lastError; + + // TODO: simple retry before the dapi versioning is properly implemented + for (let i = 0; i < 3; i += 1) { + try { + // eslint-disable-next-line no-await-in-loop + const getContestedResourcesResponse = await grpcTransport.request( + PlatformPromiseClient, + 'getContestedResources', + getContestedResourcesRequest, + options, + ); + + return GetContestedResourcesResponse + .createFromProto(getContestedResourcesResponse); + } catch (e) { + if (e instanceof InvalidResponseError) { + lastError = e; + } else { + throw e; + } + } + } + + // If we made it past the cycle it means that the retry didn't work, + // and we're throwing the last error encountered + throw lastError; + } + + return getContestedResources; +} + +module.exports = getContestedResourcesFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getContestedResources/getContestedResourcesResponse.js b/packages/js-dapi-client/lib/methods/platform/getContestedResources/getContestedResourcesResponse.js new file mode 100644 index 0000000000..f7783c22a7 --- /dev/null +++ b/packages/js-dapi-client/lib/methods/platform/getContestedResources/getContestedResourcesResponse.js @@ -0,0 +1,52 @@ +const AbstractResponse = require('../response/AbstractResponse'); +const InvalidResponseError = require('../response/errors/InvalidResponseError'); + +class GetContestedResourcesResponse extends AbstractResponse { + /** + * @param {object} contestedResourceContenders + * @param contestedResources + * @param resultCase + * @param {Metadata} metadata + * @param {Proof} [proof] + */ + constructor(contestedResources, resultCase, metadata, proof = undefined) { + super(metadata, proof); + + this.contestedResources = contestedResources; + this.resultCase = resultCase; + } + + /** + * @returns {object} + */ + getContestedResources() { + return this.contestedResources; + } + + /** + * @param proto + * @returns {GetContestedResourcesResponse} + */ + static createFromProto(proto) { + // eslint-disable-next-line + const contestedResourceContenders = proto.getV0().getContestedResourceValues(); + const resultCase = proto.getV0().getResultCase(); + + const { metadata, proof } = AbstractResponse.createMetadataAndProofFromProto( + proto, + ); + + if ((typeof contestedResourceContenders === 'undefined' || contestedResourceContenders === null) && !proof) { + throw new InvalidResponseError('Contested Resource Contenders data is not defined'); + } + + return new GetContestedResourcesResponse( + contestedResourceContenders !== undefined ? contestedResourceContenders.getContestedResourceValuesList() : '', + resultCase, + metadata, + proof, + ); + } +} + +module.exports = GetContestedResourcesResponse; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDocuments/GetDocumentsResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getContestedResources/GetContestedResourcesResponse.spec.js similarity index 50% rename from packages/js-dapi-client/test/unit/methods/platform/getDocuments/GetDocumentsResponse.spec.js rename to packages/js-dapi-client/test/unit/methods/platform/getContestedResources/GetContestedResourcesResponse.spec.js index 4aa187b0b8..90160640d1 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDocuments/GetDocumentsResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getContestedResources/GetContestedResourcesResponse.spec.js @@ -1,75 +1,70 @@ -const getDocumentsFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getDocumentsFixture'); const { v0: { - GetDocumentsResponse, + GetContestedResourcesResponse, ResponseMetadata, Proof: ProofResponse, }, } = require('@dashevo/dapi-grpc'); -const GetDocumentsResponseClass = require('../../../../../lib/methods/platform/getDocuments/GetDocumentsResponse'); +const GetContestedResourceResponseClass = require('../../../../../lib/methods/platform/getContestedResources/getContestedResourcesResponse'); const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); const Proof = require('../../../../../lib/methods/platform/response/Proof'); const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); -describe('GetDocumentsResponse', () => { - let getDocumentsResponse; +describe('GetContestedResourcesResponse', () => { + let getContestedResourcesResponse; let metadataFixture; - let documentsFixture; let proto; - let serializedDocuments; let proofFixture; + let contestedResourceValues; beforeEach(async () => { metadataFixture = getMetadataFixture(); - documentsFixture = await getDocumentsFixture(); proofFixture = getProofFixture(); + contestedResourceValues = ['EgRkYXNo']; - serializedDocuments = documentsFixture - .map((document) => Buffer.from(JSON.stringify(document))); - - const { GetDocumentsResponseV0 } = GetDocumentsResponse; - proto = new GetDocumentsResponse(); + const { GetContestedResourcesResponseV0 } = GetContestedResourcesResponse; + proto = new GetContestedResourcesResponse(); const metadata = new ResponseMetadata(); metadata.setHeight(metadataFixture.height); metadata.setCoreChainLockedHeight(metadataFixture.coreChainLockedHeight); proto.setV0( - new GetDocumentsResponseV0() - .setDocuments( - new GetDocumentsResponseV0.Documents() - .setDocumentsList(serializedDocuments), - ).setMetadata(metadata), + new GetContestedResourcesResponseV0() + .setContestedResourceValues(new GetContestedResourcesResponseV0 + .ContestedResourceValues([contestedResourceValues])) + .setMetadata(metadata), ); - getDocumentsResponse = new GetDocumentsResponseClass( - serializedDocuments, + getContestedResourcesResponse = new GetContestedResourceResponseClass( + contestedResourceValues, + 1, new Metadata(metadataFixture), ); }); - it('should return documents', () => { - const documents = getDocumentsResponse.getDocuments(); - const proof = getDocumentsResponse.getProof(); + it('should return contested resources', () => { + const contestedResources = getContestedResourcesResponse.getContestedResources(); + const proof = getContestedResourcesResponse.getProof(); - expect(documents).to.deep.equal(serializedDocuments); + expect(contestedResources).to.deep.equal(contestedResourceValues); expect(proof).to.equal(undefined); }); it('should return proof', async () => { - getDocumentsResponse = new GetDocumentsResponseClass( - [], + getContestedResourcesResponse = new GetContestedResourceResponseClass( + '', + 1, new Metadata(metadataFixture), new Proof(proofFixture), ); + const contestedResources = getContestedResourcesResponse.getContestedResources(); + const proof = getContestedResourcesResponse.getProof(); - const documents = getDocumentsResponse.getDocuments(); - const proof = getDocumentsResponse.getProof(); - - expect(documents).to.deep.equal([]); + expect(contestedResources).to.equal(''); expect(proof).to.be.an.instanceOf(Proof); expect(proof.getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); @@ -78,18 +73,19 @@ describe('GetDocumentsResponse', () => { }); it('should create an instance from proto', () => { - getDocumentsResponse = GetDocumentsResponseClass.createFromProto(proto); - expect(getDocumentsResponse).to.be.an.instanceOf(GetDocumentsResponseClass); - expect(getDocumentsResponse.getDocuments()).to.deep.equal(serializedDocuments); + getContestedResourcesResponse = GetContestedResourceResponseClass.createFromProto(proto); + expect(getContestedResourcesResponse).to.be.an.instanceOf(GetContestedResourceResponseClass); + expect(getContestedResourcesResponse.getContestedResources()) + .to.deep.equal(contestedResourceValues); - expect(getDocumentsResponse.getMetadata()) + expect(getContestedResourcesResponse.getMetadata()) .to.be.an.instanceOf(Metadata); - expect(getDocumentsResponse.getMetadata().getHeight()) + expect(getContestedResourcesResponse.getMetadata().getHeight()) .to.equal(metadataFixture.height); - expect(getDocumentsResponse.getMetadata().getCoreChainLockedHeight()) + expect(getContestedResourcesResponse.getMetadata().getCoreChainLockedHeight()) .to.equal(metadataFixture.coreChainLockedHeight); - expect(getDocumentsResponse.getProof()).to.equal(undefined); + expect(getContestedResourcesResponse.getProof()).to.equal(undefined); }); it('should create an instance with proof from proto', () => { @@ -101,19 +97,19 @@ describe('GetDocumentsResponse', () => { proto.getV0().setProof(proofProto); - getDocumentsResponse = GetDocumentsResponseClass.createFromProto(proto); + getContestedResourcesResponse = GetContestedResourceResponseClass.createFromProto(proto); - expect(getDocumentsResponse).to.be.an.instanceOf(GetDocumentsResponseClass); - expect(getDocumentsResponse.getDocuments()).to.deep.members([]); + expect(getContestedResourcesResponse).to.be.an.instanceOf(GetContestedResourceResponseClass); + expect(getContestedResourcesResponse.getContestedResources()).to.equal(''); - expect(getDocumentsResponse.getMetadata()) + expect(getContestedResourcesResponse.getMetadata()) .to.be.an.instanceOf(Metadata); - expect(getDocumentsResponse.getMetadata().getHeight()) + expect(getContestedResourcesResponse.getMetadata().getHeight()) .to.equal(metadataFixture.height); - expect(getDocumentsResponse.getMetadata().getCoreChainLockedHeight()) + expect(getContestedResourcesResponse.getMetadata().getCoreChainLockedHeight()) .to.equal(metadataFixture.coreChainLockedHeight); - const proof = getDocumentsResponse.getProof(); + const proof = getContestedResourcesResponse.getProof(); expect(proof).to.be.an.instanceOf(Proof); expect(proof.getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); expect(proof.getQuorumHash()).to.deep.equal(proofFixture.quorumHash); @@ -124,7 +120,7 @@ describe('GetDocumentsResponse', () => { proto.getV0().setMetadata(undefined); try { - getDocumentsResponse = GetDocumentsResponseClass.createFromProto(proto); + getContestedResourcesResponse = GetContestedResourceResponseClass.createFromProto(proto); expect.fail('should throw InvalidResponseError'); } catch (e) { diff --git a/packages/js-dapi-client/test/unit/methods/platform/getContestedResources/getContestedResourcesFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getContestedResources/getContestedResourcesFactory.spec.js new file mode 100644 index 0000000000..45e6706dd9 --- /dev/null +++ b/packages/js-dapi-client/test/unit/methods/platform/getContestedResources/getContestedResourcesFactory.spec.js @@ -0,0 +1,179 @@ +const { + v0: { + PlatformPromiseClient, + GetContestedResourcesRequest, + GetContestedResourcesResponse, + ResponseMetadata, + Proof: ProofResponse, + }, +} = require('@dashevo/dapi-grpc'); + +const generateRandomIdentifier = require('@dashevo/wasm-dpp/lib/test/utils/generateRandomIdentifierAsync'); +const getContestedResourcesFactory = require('../../../../../lib/methods/platform/getContestedResources/getContestedResourcesFactory'); +const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); +const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); +const Proof = require('../../../../../lib/methods/platform/response/Proof'); + +describe('getContestedResourcesFactory', () => { + let grpcTransportMock; + let contractIdBuffer; + let metadataFixture; + let proofFixture; + let proofResponse; + let response; + let documentTypeName; + let indexName; + let startIndexValues; + let endIndexValues; + let startAtValueInfo; + let count; + let orderAscending; + let contestedResourceValues; + let getContestedResources; + + beforeEach(async function beforeEach() { + contractIdBuffer = Buffer.from('11c70af56a763b05943888fa3719ef56b3e826615fdda2d463c63f4034cb861c', 'hex'); + documentTypeName = 'domain'; + indexName = 'normalizedLabel'; + startIndexValues = []; + endIndexValues = []; + startAtValueInfo = new GetContestedResourcesRequest + .GetContestedResourcesRequestV0 + .StartAtValueInfo({ + startValue: (await generateRandomIdentifier()), + startValueIncluded: true, + }); + contestedResourceValues = ['EgRkYXNo']; + count = 1; + orderAscending = true; + + metadataFixture = getMetadataFixture(); + proofFixture = getProofFixture(); + + getContestedResources = getContestedResourcesFactory(grpcTransportMock); + + const metadata = new ResponseMetadata(); + metadata.setHeight(metadataFixture.height); + metadata.setCoreChainLockedHeight(metadataFixture.coreChainLockedHeight); + metadata.setTimeMs(metadataFixture.timeMs); + metadata.setProtocolVersion(metadataFixture.protocolVersion); + + const { GetContestedResourcesResponseV0 } = GetContestedResourcesResponse; + response = new GetContestedResourcesResponse(); + response.setV0( + new GetContestedResourcesResponseV0() + .setContestedResourceValues(new GetContestedResourcesResponseV0 + .ContestedResourceValues([contestedResourceValues])) + .setMetadata(metadata), + ); + + grpcTransportMock = { + request: this.sinon.stub().resolves(response), + }; + + getContestedResources = getContestedResourcesFactory(grpcTransportMock); + + proofResponse = new ProofResponse(); + proofResponse.setQuorumHash(proofFixture.quorumHash); + proofResponse.setSignature(proofFixture.signature); + proofResponse.setGrovedbProof(proofFixture.merkleProof); + proofResponse.setRound(proofFixture.round); + }); + + it('should return contested resources', async () => { + const options = { prove: false }; + + const result = await getContestedResources( + contractIdBuffer, + documentTypeName, + indexName, + startIndexValues, + endIndexValues, + startAtValueInfo, + count, + orderAscending, + options, + ); + + const { GetContestedResourcesRequestV0 } = GetContestedResourcesRequest; + + const request = new GetContestedResourcesRequest(); + + request.setV0( + new GetContestedResourcesRequestV0() + .setContractId(contractIdBuffer) + .setDocumentTypeName(documentTypeName) + .setIndexName(indexName) + .setStartIndexValuesList([]) + .setEndIndexValuesList([]) + .setStartAtValueInfo(startAtValueInfo) + .setCount(1) + .setOrderAscending(true) + .setProve(!!options.prove), + ); + + expect(grpcTransportMock.request).to.be.calledOnceWithExactly( + PlatformPromiseClient, + 'getContestedResources', + request, + options, + ); + expect(result.getContestedResources()).to.equal(contestedResourceValues); + expect(result.getMetadata()).to.deep.equal(metadataFixture); + expect(result.getProof()).to.equal(undefined); + }); + + it('should return proof', async () => { + const options = { prove: true }; + response.getV0().setProof(proofResponse); + + const result = await getContestedResources( + contractIdBuffer, + documentTypeName, + indexName, + startIndexValues, + endIndexValues, + startAtValueInfo, + count, + orderAscending, + options, + ); + + const { GetContestedResourcesRequestV0 } = GetContestedResourcesRequest; + const request = new GetContestedResourcesRequest(); + + request.setV0( + new GetContestedResourcesRequestV0() + .setContractId(contractIdBuffer) + .setDocumentTypeName(documentTypeName) + .setIndexName(indexName) + .setStartIndexValuesList([]) + .setEndIndexValuesList([]) + .setStartAtValueInfo(startAtValueInfo) + .setCount(1) + .setOrderAscending(true) + .setProve(!!options.prove), + ); + + expect(grpcTransportMock.request).to.be.calledOnceWithExactly( + PlatformPromiseClient, + 'getContestedResources', + request, + options, + ); + + expect(result.getContestedResources()).to.equal(''); + expect(result.getMetadata()).to.deep.equal(metadataFixture); + + expect(result.getProof()).to.be.an.instanceOf(Proof); + expect(result.getProof().getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); + expect(result.getProof().getQuorumHash()).to.deep.equal(proofFixture.quorumHash); + expect(result.getProof().getSignature()).to.deep.equal(proofFixture.signature); + expect(result.getProof().getRound()).to.deep.equal(proofFixture.round); + expect(result.getMetadata()).to.deep.equal(metadataFixture); + expect(result.getMetadata().getHeight()).to.equal(metadataFixture.height); + expect(result.getMetadata().getCoreChainLockedHeight()).to.equal( + metadataFixture.coreChainLockedHeight, + ); + }); +});