mirror of
https://github.com/luxfi/oracle.git
synced 2026-11-02 07:13:30 +00:00
126 lines
3.8 KiB
JavaScript
126 lines
3.8 KiB
JavaScript
const { web3 } = require("hardhat");
|
|
const { assert } = require("chai");
|
|
const { parseFixed } = require("@uma/common");
|
|
const { DefiPulsePriceFeed } = require("../../dist/price-feed/DefiPulsePriceFeed");
|
|
const { NetworkerMock } = require("../../dist/price-feed/NetworkerMock");
|
|
const winston = require("winston");
|
|
|
|
describe("DefiPulsePriceFeed.js", function () {
|
|
let defiPulsePriceFeed;
|
|
let mockTime = 1611583300;
|
|
let networker;
|
|
|
|
const defipulseApiKey = "test-api-key";
|
|
const lookback = 3600 * 24 * 7;
|
|
const decimals = 6;
|
|
const project = "SushiSwap";
|
|
|
|
const getTime = () => mockTime;
|
|
const minTimeBetweenUpdates = 600; // every 10 minutes
|
|
|
|
// Fake data to inject.
|
|
const validResponses = [
|
|
[
|
|
{ timestamp: "1611572400", tvlUSD: 24780000000 },
|
|
{ timestamp: "1611576000", tvlUSD: 23500000000 },
|
|
{ timestamp: "1611579600", tvlUSD: 22250000000 },
|
|
{ timestamp: "1611583200", tvlUSD: 25100000001 },
|
|
],
|
|
];
|
|
|
|
beforeEach(async function () {
|
|
networker = new NetworkerMock();
|
|
const dummyLogger = winston.createLogger({ level: "info", transports: [new winston.transports.Console()] });
|
|
|
|
defiPulsePriceFeed = new DefiPulsePriceFeed(
|
|
dummyLogger,
|
|
web3,
|
|
defipulseApiKey,
|
|
lookback,
|
|
networker,
|
|
getTime,
|
|
minTimeBetweenUpdates,
|
|
decimals, // Add arbitrary decimal conversion and prove this works.
|
|
project
|
|
);
|
|
});
|
|
|
|
it("No update", async function () {
|
|
assert.equal(defiPulsePriceFeed.getCurrentPrice(), undefined);
|
|
assert.isTrue(await defiPulsePriceFeed.getHistoricalPrice(1000).catch(() => true));
|
|
assert.equal(defiPulsePriceFeed.getLastUpdateTime(), undefined);
|
|
});
|
|
|
|
it("Check decimals", async function () {
|
|
assert.equal(defiPulsePriceFeed.getPriceFeedDecimals(), decimals);
|
|
});
|
|
|
|
it("Basic historical price", async function () {
|
|
// Inject data.
|
|
networker.getJsonReturns = [...validResponses];
|
|
|
|
await defiPulsePriceFeed.update();
|
|
|
|
// Before period 1 should return null.
|
|
assert.isTrue(await defiPulsePriceFeed.getHistoricalPrice(1611572399).catch(() => true));
|
|
assert.equal(
|
|
(await defiPulsePriceFeed.getHistoricalPrice(1611575900)).toString(),
|
|
parseFixed("24.78", decimals).toString()
|
|
);
|
|
assert.equal(
|
|
(await defiPulsePriceFeed.getHistoricalPrice(1611579500)).toString(),
|
|
parseFixed("23.50", decimals).toString()
|
|
);
|
|
assert.equal(
|
|
(await defiPulsePriceFeed.getHistoricalPrice(1611579500)).toString(),
|
|
parseFixed("23.50", decimals).toString()
|
|
);
|
|
assert.equal(
|
|
(await defiPulsePriceFeed.getHistoricalPrice(1611579601)).toString(),
|
|
parseFixed("22.25", decimals).toString()
|
|
);
|
|
});
|
|
|
|
it("Basic current price", async function () {
|
|
// Inject data.
|
|
networker.getJsonReturns = [...validResponses];
|
|
|
|
await defiPulsePriceFeed.update();
|
|
|
|
// Should return the current price in the data.
|
|
assert.equal(defiPulsePriceFeed.getCurrentPrice().toString(), parseFixed("25.1", decimals).toString());
|
|
});
|
|
|
|
it("Last update time", async function () {
|
|
// Inject data.
|
|
networker.getJsonReturns = [...validResponses];
|
|
|
|
await defiPulsePriceFeed.update();
|
|
|
|
// Should return the mock time.
|
|
assert.equal(defiPulsePriceFeed.getLastUpdateTime(), mockTime);
|
|
});
|
|
|
|
it("Bad project name", async function () {
|
|
const dummyLogger = winston.createLogger({ level: "info", transports: [new winston.transports.Console()] });
|
|
|
|
let errorThrown = false;
|
|
try {
|
|
new DefiPulsePriceFeed(
|
|
dummyLogger,
|
|
web3,
|
|
defipulseApiKey,
|
|
lookback,
|
|
networker,
|
|
getTime,
|
|
minTimeBetweenUpdates,
|
|
decimals, // Add arbitrary decimal conversion and prove this works.
|
|
"NotAProject"
|
|
);
|
|
} catch (error) {
|
|
errorThrown = true;
|
|
}
|
|
assert.isTrue(errorThrown);
|
|
});
|
|
});
|