UNPKG

@entangle-labs/udf-sdk

Version:

SDK for interacting with UDF Oracle

117 lines (116 loc) 6.42 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const chai_1 = require("chai"); const sinon_1 = __importDefault(require("sinon")); const sdk_1 = __importDefault(require("./sdk")); describe("UdfSdk", () => { let sdk; let fetchStub; const mockResponse = { update_call_data: "0x55444646024e474c2f555344000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000001ac168f5571b70300000000000000000000000000000000000000000000000000000000676bf5177cfce9425e6b3969ecc44b4270e729212e9decc7f79d57822da90491e3922daa4eedfb9ce49fdb01b52147ef89e425c24328cb87e2ed5e8d802f3cff719c15441b00000000000000000000000000000000000000000000000001ac168f5571b70300000000000000000000000000000000000000000000000000000000676bf50efdbab27df5b290476721d1441ad2737a15188f5fa9c241d35038f3afd288ec780d5d10898fcf1e547523652e6448692deee42a783a7a55ce310903e1bda0ea741b00000000000000000000000000000000000000000000000001ac168f5571b70300000000000000000000000000000000000000000000000000000000676bf51af433b2c959268c83354f4283fd1643a04c844640956d95c3fc8a8532363ed3035973edb54ea4cdfc2b943f89907172b59bd2ff6fafcce544a07e3091e35c24141b4554482f55534400000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000bbc3abdf2b4c38918400000000000000000000000000000000000000000000000000000000676bf51a353a8411801893d6944ac2d12a05f49655d43803382b87edbf4d08b555ce4d6f33faf5f0bd29e3ea1c2c6df7c6130e50be8f88e1639cb001fe21ddd258dd4c7c1c0000000000000000000000000000000000000000000000bbc8d768ae124885a600000000000000000000000000000000000000000000000000000000676bf517edc279536ed2be6c35d3e81caa815cc6aaec96cb97f3ec0ce9c6c739cf4eeb687477c07fdd3bafe3640026ef4f13f222866ec2df202bbe606898d27739112f691b0000000000000000000000000000000000000000000000bbd843133296b9cee400000000000000000000000000000000000000000000000000000000676bf50e6356fafa76ad053de2e5908af6806055b0a5553588fcc9b10463e57db20b46b42941a8cdcceab230a764d4918af097020857481f3ce1672102fde4ff34b132ea1b", feeds: [ { feed_key: "NGL/USD", votes: [ { Value: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAawWj1VxtwM=", Timestamp: 1735128343, Publisher: "0x2e1f4AE4195f25bA62351f9Dc8A7F7D65743B196", Signature: { R: "0x7cfce9425e6b3969ecc44b4270e729212e9decc7f79d57822da90491e3922daa", S: "0x4eedfb9ce49fdb01b52147ef89e425c24328cb87e2ed5e8d802f3cff719c1544", V: 27, }, }, { Value: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAawWj1VxtwM=", Timestamp: 1735128334, Publisher: "0x5a598D1d71b932ed3bF880AE00c9d44494bd75d0", Signature: { R: "0xfdbab27df5b290476721d1441ad2737a15188f5fa9c241d35038f3afd288ec78", S: "0x0d5d10898fcf1e547523652e6448692deee42a783a7a55ce310903e1bda0ea74", V: 27, }, }, { Value: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAawWj1VxtwM=", Timestamp: 1735128346, Publisher: "0x6d5da0218C26E4B9cec27931ECC3D7DF58cC7750", Signature: { R: "0xf433b2c959268c83354f4283fd1643a04c844640956d95c3fc8a8532363ed303", S: "0x5973edb54ea4cdfc2b943f89907172b59bd2ff6fafcce544a07e3091e35c2414", V: 27, }, }, ], }, ], }; beforeEach(() => { sdk = new sdk_1.default("https://test.com"); // Setup fetch stub global.fetch = global.fetch || (() => Promise.resolve()); fetchStub = sinon_1.default.stub(global, "fetch").callsFake(() => Promise.resolve({ ok: true, json: () => Promise.resolve(mockResponse), })); }); afterEach(() => { sinon_1.default.restore(); }); describe("getCallData", () => { it("should return call data", async () => { const callData = await sdk.getCallData(["ENGL/USD"]); (0, chai_1.expect)(callData).to.equal(mockResponse.update_call_data); }); }); describe("getVotes", () => { it("should return decoded votes", async () => { const votes = await sdk.getVotes(["NGL/USD"]); (0, chai_1.expect)(votes).to.have.lengthOf(3); (0, chai_1.expect)(votes[0].value).to.equal(120496094901810947n); }); }); describe("getMedian", () => { it("should calculate median correctly", async () => { const median = await sdk.getMedian("NGL/USD"); (0, chai_1.expect)(median).to.equal(120496094901810947n); }); it("should throw error when no votes available", async () => { fetchStub.callsFake(() => Promise.resolve({ ok: true, json: () => Promise.resolve({ ...mockResponse, feeds: [{ feed_key: "NGL/USD", votes: [] }], }), })); try { await sdk.getMedian("NGL/USD"); chai_1.expect.fail("Should have thrown an error"); } catch (error) { ///@ts-ignore (0, chai_1.expect)(error.message).to.include("No votes provided for median calculation"); } }); }); describe("Error handling", () => { it("should handle fetch errors", async () => { fetchStub.callsFake(() => Promise.resolve({ ok: false, status: 404, })); try { await sdk.getCallData(["ETH/USD"]); chai_1.expect.fail("Should have thrown an error"); } catch (error) { ///@ts-ignore (0, chai_1.expect)(error.message).to.include("HTTP error! status: 404"); } }); }); });