UNPKG

@helium/http

Version:

HTTP library for interacting with the Helium blockchain API

174 lines 8.34 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const nock_1 = __importDefault(require("nock")); const __1 = __importStar(require("..")); test('exposes a client instance with default options', () => { const prodUrl = 'https://api.helium.io'; const client = new __1.default(); expect(client.network.baseURL).toBe(prodUrl); }); test('configure client with different endpoint', () => { const stagingUrl = 'https://api.helium.wtf'; const client = new __1.default(__1.Network.staging); expect(client.network.baseURL).toBe(stagingUrl); }); test('configure client with different endpoint', () => { const stagingUrl = 'https://api.helium.wtf'; const client = new __1.default(__1.Network.staging); expect(client.network.baseURL).toBe(stagingUrl); }); describe('get', () => { it('creates a GET request to the full url', async () => { (0, nock_1.default)('https://api.helium.io').get('/v1/greeting').reply(200, { greeting: 'hello', }); const client = new __1.default(); const { data } = await client.get('/greeting'); expect(data.greeting).toBe('hello'); }); it('client passes headers to GET request', async () => { const nameHeader = 'name-header-test'; const userAgentHeader = 'user-agent-test'; (0, nock_1.default)('https://api.helium.io') .get('/v1/greeting') .reply(200, { greeting: 'hello', }); const client = new __1.default(__1.Network.production, { name: nameHeader, userAgent: userAgentHeader }); const response = await client.get('/greeting'); expect(response.data.greeting).toBe('hello'); expect(response.config.headers['x-client-name']).toBe(nameHeader); expect(response.config.headers['User-Agent']).toBe(userAgentHeader); }); }); it('client passes default headers to GET request', async () => { const nameHeader = 'name-header-test'; const userAgentHeader = 'user-agent-test'; const network = 'helium'; (0, nock_1.default)('https://api.helium.io') .get('/v1/greeting') .reply(200, { greeting: 'hello', }); const opts = { name: nameHeader, userAgent: userAgentHeader, headers: { network } }; const client = new __1.default(__1.Network.production, opts); const response = await client.get('/greeting'); expect(response.data.greeting).toBe('hello'); expect(response.config.headers['x-client-name']).toBe(nameHeader); expect(response.config.headers['User-Agent']).toBe(userAgentHeader); expect(response.config.headers.network).toBe(network); }); describe('post', () => { it('creates a POST request to the full url', async () => { (0, nock_1.default)('https://api.helium.io').post('/v1/greeting', { greeting: 'hello' }).reply(200, { response: 'hey there!', }); const client = new __1.default(); const params = { greeting: 'hello' }; const { data } = await client.post('/greeting', params); expect(data.response).toBe('hey there!'); }); it('client passes headers to POST request', async () => { const nameHeader = 'name-header-test'; const userAgentHeader = 'user-agent-test'; (0, nock_1.default)('https://api.helium.io').post('/v1/greeting', { greeting: 'hello' }).reply(200, { response: 'hey there!', }); const client = new __1.default(__1.Network.production, { name: nameHeader, userAgent: userAgentHeader }); const params = { greeting: 'hello' }; const response = await client.post('/greeting', params); expect(response.data.response).toBe('hey there!'); expect(response.config.headers['x-client-name']).toBe(nameHeader); expect(response.config.headers['User-Agent']).toBe(userAgentHeader); }); it('client passes default headers to POST request', async () => { const network = 'helium'; const nameHeader = 'name-header-test'; const userAgentHeader = 'user-agent-test'; (0, nock_1.default)('https://api.helium.io').post('/v1/greeting', { greeting: 'hello' }).reply(200, { response: 'hey there!', }); const opts = { name: nameHeader, userAgent: userAgentHeader, headers: { network } }; const client = new __1.default(__1.Network.production, opts); const params = { greeting: 'hello' }; const response = await client.post('/greeting', params); expect(response.data.response).toBe('hey there!'); expect(response.config.headers['x-client-name']).toBe(nameHeader); expect(response.config.headers['User-Agent']).toBe(userAgentHeader); expect(response.config.headers.network).toBe(network); }); }); describe('retry logic', () => { (0, nock_1.default)('https://api.helium.io').get('/v1/greeting').times(1).reply(503, 'bad gateway'); (0, nock_1.default)('https://api.helium.io').get('/v1/greeting').times(1).reply(200, { greeting: 'hello', }); it('retries requests with exponential backoff', async () => { const client = new __1.default(); expect(client.retry).toBe(5); const { data } = await client.get('/greeting'); expect(data.greeting).toBe('hello'); }); }); describe('retry disabled', () => { (0, nock_1.default)('https://api.helium.io').get('/v1/farewell').times(1).reply(503, 'bad gateway'); (0, nock_1.default)('https://api.helium.io').get('/v1/farewell').times(1).reply(200, 'good response'); it('make request with retry disabled', async () => { const client = new __1.default(__1.Network.production, { retry: 0 }); expect(client.retry).toBe(0); const makeRequest = async () => { await client.get('/farewell'); }; await expect(makeRequest()).rejects.toThrow('Request failed with status code 503'); }); }); describe('name', () => { it('is initialized with a client name', () => { const client = new __1.default(__1.Network.production, { name: 'Test Client' }); expect(client.name).toBe('Test Client'); }); it('adds an x-client-name header to GET requests when name is set', async () => { (0, nock_1.default)('https://api.helium.io').get('/v1/greeting').reply(200, { greeting: 'hello', }); const client = new __1.default(__1.Network.production, { name: 'Test Client' }); const { request } = await client.get('/greeting'); expect(request.headers['x-client-name']).toBe('Test Client'); }); it('adds an x-client-name header to POST requests when name is set', async () => { (0, nock_1.default)('https://api.helium.io').post('/v1/greeting', { greeting: 'hello' }).reply(200, { response: 'hey there!', }); const client = new __1.default(__1.Network.production, { name: 'Test Client' }); const params = { greeting: 'hello' }; const { request } = await client.post('/greeting', params); expect(request.headers['x-client-name']).toBe('Test Client'); }); }); //# sourceMappingURL=Client.spec.js.map