npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mock-chronik-client

v1.12.0

Published

Testing utility to mock the Chronik indexer client and support unit tests that need to mock chronik related API calls.

Downloads

72

Readme

mock-chronik-client

Testing utility to mock the Chronik indexer client and support unit tests that need to mock chronik related API calls.

Usage

Import the MockChronikClient module via relative path along with any desired mock objects from /mocks/mockChronikResponses.

const { MockChronikClient } = require('/index');
// Import any mock responses from '/mocks/mockChronikResponses'
const ecashaddr = require('ecashaddrjs');
const mockedChronik = new MockChronikClient();

Mocking API Responses

Chronik-client APIs which don't rely on a preceding .script() call can use the .setMock() function to inject the mock API response.

This includes:

  • .block()
  • .tx()
  • .token()
  • .blockchainInfo()
  • .broadcastTx()
  • .ws()

Example: mocking the chronik.token() call

const { mockTokenInfo } = require('/mocks/mockChronikResponses');
// Initialize chronik mock with token info
mockedChronik.setMock('token', {
	input: 'some token ID',
	output: mockTokenInfo,
});

// Execute the API call
const result = await mockedChronik.token('some token ID');
assert.deepEqual(result, mockTokenInfo);

Chronik-client APIs which do rely on a preceding .script() call will need to firstly set the intended script (address type and hash) before setting the specific mock function.

This includes:

  • .script().utxos()
  • .script().history()

Example: mocking the chronik.script(type, hash).utxos() call

const { mockP2pkhUtxos } = require('/mocks/mockChronikResponses');
// Initialize chronik mock with script and utxo info
const P2PKH_ADDRESS = 'ecash:qzth8qvakhr6y8zcefdrvx30zrdmt2z2gvp7zc5vj8';
const { type, hash } = ecashaddr.decode(P2PKH_ADDRESS, true);
mockedChronik.setScript(type, hash);
mockedChronik.setUtxos(type, hash, mockP2pkhUtxos);

// Execute the API call
const result = await mockedChronik.script(type, hash).utxos();
assert.deepEqual(result, mockP2pkhUtxos);

Mocking API Errors

To test your app's behavior in handling an API error from Chronik, simply set an Error object as the mock output.

Example: mocking an error from the chronik.broadcastTx() call

const mockInvalidRawTxHex = 'not a valid raw tx hex';
const expectedError = new Error('Bad response from Chronik');
mockedChronik.setMock('broadcastTx', {
	input: mockInvalidRawTxHex,
	output: expectedError,
});

// Execute the API call
await assert.rejects(
	async () => {
		await mockedChronik.broadcastTx(mockInvalidRawTxHex);
	},
	expectedError,
);

Questions?

If you have any implementation questions regarding this mock tool please check the test suite in /test/index.test.js or feel free to reach out to the development team via the eCash Development Telegram.

Change Log

1.1.0

  • Add support to in-node subscribeToBlocks method and check flag, isSubscribedBlocks

1.1.1

  • Patch error tests

1.2.0

  • Add support to calls by address(address) returning same as script(type, hash)

1.3.0

  • Add support for subscribeToAddress and unsubscribeFromAddress websocket methods

1.4.0

  • Add support for ws.unsubscribe method and fix errors in ws tests

1.4.1

  • Patch repo path in package.json

1.5.0

  • Add support for ws subscribe methods and shape found in in-node chronik-client

1.6.0

  • Match shape of subs object in ChronikClientNode for ChronikClientNode ws methods and support unsubscribe from blocks

1.7.0

  • Allow getting and setting utxos() and history() by tokenId

1.8.0

  • Allow getting history without specifying pageNumber or pageSize

1.9.0

  • Support blockTxs endpoint
  • Update websocket subs shape to match ChronikClientNode

1.9.1

  • Upgrading npm dependencies D16380

1.10.0

  • Allow getting and setting history() by lokadId D16382

1.10.1

  • Return missing numTxs key from history() calls D16617

1.11.0

  • Add support for MockAgora, a simple set-and-return mock for some ecash-agora class methods D16737

1.12.0

  • Extend MockAgora support to cover offeredFungibleTokenIds() and activeOffersByTokenId() methods D16929