UNPKG

@helium/http

Version:

HTTP library for interacting with the Helium blockchain API

190 lines 10.2 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; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.challengeJson = exports.mockPathData = exports.mockGeocode = exports.mockWitness = exports.mockLegacyWitness = exports.mockReceipt = void 0; const Challenge_1 = __importStar(require("../Challenge")); exports.mockReceipt = { timestamp: 1602014780715326200, snr: 0, signal: 0, origin: 'p2p', gateway: 'fake-gateway', frequency: 0, datarate: [], data: 'i0E', channel: 0, }; // pre POCv10 const mockLegacyWitness = () => ({ timestamp: 1602013549762689800, packet_hash: 'fake-packet_hash', owner: 'fake-owner', location: 'fake-location', gateway: 'fake-witness-gateway', channel: 4, }); exports.mockLegacyWitness = mockLegacyWitness; const mockWitness = (isValid = true) => (Object.assign(Object.assign({ timestamp: 1602013549762689800, snr: 7, signal: -103, packet_hash: 'fake-packet_hash', owner: 'fake-owner', location: 'fake-location', location_hex: 'fake-location_hex', is_valid: isValid }, (!isValid && { invalid_reason: 'fake_invalid_reason' })), { gateway: 'fake-witness-gateway', frequency: 904.7000122070312, datarate: [83, 70, 56, 66, 87, 49, 50, 53], channel: 4 })); exports.mockWitness = mockWitness; exports.mockGeocode = { short_street: 'fake-short_street', short_state: 'fake-short_state', short_country: 'fake-short_country', short_city: 'fake-short_city', long_street: 'fake-long_street', long_state: 'fake-long_state', long_country: 'fake-long_country', long_city: 'fake-long_city', city_id: 'fake-city_id', }; exports.mockPathData = { challengee_owner: 'fake-challengee_owner', challengee_lon: -123.1234567890, challengee_location: 'fake-challengee_location', challengee_location_hex: 'fake-challengee_location_hex', challengee_lat: 12.1234567890, challengee: 'fake-challengee', }; const challengeJson = (path, v2) => ({ type: v2 ? 'poc_receipts_v2' : 'poc_receipts_v1', time: 1589918979, secret: 'fake-secret', request_block_hash: 'fake-request-block-hash', path, onion_key_hash: 'fake-onion-key-hash', height: 339367, hash: 'fake-hash', fee: 0, challenger_owner: 'fake-challenger-owner', challenger_lon: -123.1234567890, challenger_location: 'fake-challenger_location', challenger_location_hex: 'fake-challenger_location_hex', challenger_lat: 12.1234567890, challenger: 'fake-challenger', }); exports.challengeJson = challengeJson; describe('Challenge Model', () => { it('handles empty witness, receipt, and geocode', () => { const challenge = new Challenge_1.default((0, exports.challengeJson)([ Object.assign({ witnesses: [] }, exports.mockPathData), ])); expect(challenge.path[0].geocode).not.toBeDefined(); expect(challenge.path[0].receipt).not.toBeDefined(); expect(challenge.path[0].witnesses.length).toBe(0); }); it('handles legacy poc data (pre POCv10)', () => { const challenge = new Challenge_1.default((0, exports.challengeJson)([ Object.assign({ witnesses: [(0, exports.mockLegacyWitness)()] }, exports.mockPathData), ])); expect(challenge.path.length).toBe(1); expect(challenge.path[0].witnesses[0].isValid).toBe(true); }); it('handles valid witness, receipt, and geocode', () => { const challenge = new Challenge_1.default((0, exports.challengeJson)([ Object.assign({ witnesses: [(0, exports.mockWitness)()], receipt: exports.mockReceipt, geocode: exports.mockGeocode }, exports.mockPathData), ])); expect(challenge.path[0].geocode).toBeDefined(); expect(challenge.path[0].geocode.shortCity).toBe('fake-short_city'); expect(challenge.path[0].witnesses.length).toBe(1); expect(challenge.path[0].receipt.gateway).toBe('fake-gateway'); }); it('is invalid if witness is not valid', () => { const challenge = new Challenge_1.default((0, exports.challengeJson)([ Object.assign({ witnesses: [(0, exports.mockWitness)(false)], receipt: exports.mockReceipt, geocode: exports.mockGeocode }, exports.mockPathData), ])); expect(challenge.path[0].result).toBe(Challenge_1.PathResult.FAILURE); }); it('has invalid reason when witness is not valid', () => { const challenge = new Challenge_1.default((0, exports.challengeJson)([ Object.assign({ witnesses: [(0, exports.mockWitness)(false)], receipt: exports.mockReceipt, geocode: exports.mockGeocode }, exports.mockPathData), ])); expect(challenge.path[0].witnesses[0].invalidReason).not.toBeUndefined(); expect(challenge.path[0].witnesses[0].invalidReason).toBe('fake_invalid_reason'); }); describe('successful beacon', () => { it('challenge has challenger and challengee location data', () => { const challenge = new Challenge_1.default((0, exports.challengeJson)([ Object.assign({ witnesses: [(0, exports.mockWitness)()], receipt: exports.mockReceipt, geocode: exports.mockGeocode }, exports.mockPathData), ])); expect(challenge.challengerLocation).toBe('fake-challenger_location'); expect(challenge.challengerLocationHex).toBe('fake-challenger_location_hex'); expect(challenge.path[0].challengeeLocationHex).toBe('fake-challengee_location_hex'); expect(challenge.path[0].challengeeLocation).toBe('fake-challengee_location'); }); it('first element has witness && receipt', () => { const challenge = new Challenge_1.default((0, exports.challengeJson)([ Object.assign({ witnesses: [(0, exports.mockWitness)()], receipt: exports.mockReceipt, geocode: exports.mockGeocode }, exports.mockPathData), ])); expect(challenge.path[0].result).toBe(Challenge_1.PathResult.SUCCESS); }); it('first element has witness but no receipt', () => { const challenge = new Challenge_1.default((0, exports.challengeJson)([ Object.assign({ witnesses: [(0, exports.mockWitness)()], geocode: exports.mockGeocode }, exports.mockPathData), ])); expect(challenge.path[0].result).toBe(Challenge_1.PathResult.SUCCESS); }); it('second element has witness', () => { const challenge = new Challenge_1.default((0, exports.challengeJson)([ Object.assign({ witnesses: [], geocode: exports.mockGeocode }, exports.mockPathData), Object.assign({ witnesses: [(0, exports.mockWitness)()], geocode: exports.mockGeocode }, exports.mockPathData), ])); expect(challenge.path[0].result).toBe(Challenge_1.PathResult.SUCCESS); expect(challenge.path[1].result).toBe(Challenge_1.PathResult.SUCCESS); }); it('second element has receipt', () => { const challenge = new Challenge_1.default((0, exports.challengeJson)([ Object.assign({ witnesses: [], receipt: exports.mockReceipt, geocode: exports.mockGeocode }, exports.mockPathData), Object.assign({ witnesses: [], receipt: exports.mockReceipt, geocode: exports.mockGeocode }, exports.mockPathData), ])); expect(challenge.path[0].result).toBe(Challenge_1.PathResult.SUCCESS); expect(challenge.path[1].result).toBe(Challenge_1.PathResult.SUCCESS); }); it('valid path then skip then witness', () => { const challenge = new Challenge_1.default((0, exports.challengeJson)([ Object.assign({ witnesses: [(0, exports.mockWitness)()], receipt: exports.mockReceipt, geocode: exports.mockGeocode }, exports.mockPathData), Object.assign({ witnesses: [], geocode: exports.mockGeocode }, exports.mockPathData), Object.assign({ witnesses: [(0, exports.mockWitness)()], receipt: exports.mockReceipt, geocode: exports.mockGeocode }, exports.mockPathData), ])); expect(challenge.path[0].result).toBe(Challenge_1.PathResult.SUCCESS); expect(challenge.path[1].result).toBe(Challenge_1.PathResult.SUCCESS); expect(challenge.path[2].result).toBe(Challenge_1.PathResult.SUCCESS); }); }); describe('failed beacon', () => { it('no witness', () => { const challenge = new Challenge_1.default((0, exports.challengeJson)([ Object.assign({ witnesses: [], geocode: exports.mockGeocode, receipt: exports.mockReceipt }, exports.mockPathData), ])); expect(challenge.path[0].result).toBe(Challenge_1.PathResult.FAILURE); }); it('no witness or receipt', () => { const challenge = new Challenge_1.default((0, exports.challengeJson)([ Object.assign({ witnesses: [], geocode: exports.mockGeocode, receipt: exports.mockReceipt }, exports.mockPathData), ])); expect(challenge.path[0].result).toBe(Challenge_1.PathResult.FAILURE); }); }); }); //# sourceMappingURL=Challenge.spec.js.map