From e6fb5b935eb4e3a9269b99d078c063d5a93c864e Mon Sep 17 00:00:00 2001 From: Ronan-Yann Lorin Date: Sat, 9 Mar 2024 08:47:39 +0100 Subject: [PATCH] Crypto contract test case --- src/api/contract/crypto.ts | 20 ++++++++++++++ .../get-contract-details.test.ts | 27 ++++++++++++++++--- src/tests/unit/contracts.ts | 2 ++ 3 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 src/api/contract/crypto.ts diff --git a/src/api/contract/crypto.ts b/src/api/contract/crypto.ts new file mode 100644 index 00000000..bb96d8b6 --- /dev/null +++ b/src/api/contract/crypto.ts @@ -0,0 +1,20 @@ +import SecType from "../data/enum/sec-type"; +import { Contract } from "./contract"; + +/** + * Crypto contract. + */ +export class Crypto implements Contract { + constructor( + public symbol: string, + public exchange?: string, + public currency?: string, + ) { + this.currency = this.currency ?? "USD"; + this.exchange = this.exchange ?? "SMART"; + } + + public secType = SecType.CRYPTO; +} + +export default Crypto; diff --git a/src/tests/unit/api-next-live/get-contract-details.test.ts b/src/tests/unit/api-next-live/get-contract-details.test.ts index 12a3fc8a..70d10f4a 100644 --- a/src/tests/unit/api-next-live/get-contract-details.test.ts +++ b/src/tests/unit/api-next-live/get-contract-details.test.ts @@ -6,7 +6,7 @@ import { Subscription } from "rxjs"; import { IBApiNext, IBApiNextError } from "../../.."; import { sample_bond, - sample_future, + sample_crypto, sample_option, sample_stock, } from "../contracts"; @@ -71,13 +71,13 @@ describe("ApiNext: getContractDetails()", () => { test("Future contract details", (done) => { api - .getContractDetails(sample_future) + .getContractDetails(sample_crypto) .then((result) => { // console.log(result); expect(result.length).toBeGreaterThan(0); if (result.length) { - expect(result[0].contract.symbol).toEqual(sample_future.symbol); - expect(result[0].contract.secType).toEqual(sample_future.secType); + expect(result[0].contract.symbol).toEqual(sample_crypto.symbol); + expect(result[0].contract.secType).toEqual(sample_crypto.secType); } done(); }) @@ -124,4 +124,23 @@ describe("ApiNext: getContractDetails()", () => { ); }); }); + + test("Crypto contract details", (done) => { + api + .getContractDetails(sample_crypto) + .then((result) => { + // console.log(result); + expect(result.length).toBeGreaterThan(0); + if (result.length) { + expect(result[0].contract.symbol).toEqual(sample_crypto.symbol); + expect(result[0].contract.secType).toEqual(sample_crypto.secType); + } + done(); + }) + .catch((err: IBApiNextError) => { + done( + `getContractDetails failed with '${err.error.message}' (Error #${err.code})`, + ); + }); + }); }); diff --git a/src/tests/unit/contracts.ts b/src/tests/unit/contracts.ts index 81d72858..1002d317 100644 --- a/src/tests/unit/contracts.ts +++ b/src/tests/unit/contracts.ts @@ -10,6 +10,7 @@ import { OptionType, Stock, } from "../.."; +import Crypto from "../../api/contract/crypto"; export const sample_stock: Contract = new Stock("AAPL"); export const sample_etf: Contract = new Stock("SPY"); @@ -29,3 +30,4 @@ export const sample_option: Contract = new Option( export const sample_bond: Contract = new Bond("912828C57"); export const sample_index: Contract = new Index("ES", "USD"); export const sample_dax_index: Contract = new Index("DAX", "EUR", "EUREX"); +export const sample_crypto: Contract = new Crypto("BTC");