UNPKG

laplace-api

Version:

Client library for Laplace API for the US stock market and BIST (Istanbul stock market) fundamental financial data.

243 lines (196 loc) 7.44 kB
import { Logger } from "winston"; import { LaplaceConfiguration } from "../utilities/configuration"; import "./client_test_suite"; import { PoliticianClient } from "../client/politician"; const mockPoliticians = [ { id: 1, politicianName: "John Doe", totalHoldings: 10000, lastUpdated: new Date("2024-01-01") }, { id: 2, politicianName: "Jane Smith", totalHoldings: 20000, lastUpdated: new Date("2024-01-02") } ]; const mockHoldings = [ { politicianName: "John Doe", symbol: "AAPL", company: "Apple Inc.", holding: "$500,000", allocation: "50%", lastUpdated: new Date("2024-01-01") }, { politicianName: "John Doe", symbol: "GOOGL", company: "Alphabet Inc.", holding: "$500,000", allocation: "50%", lastUpdated: new Date("2024-01-01") } ]; const mockTopHoldings = [ { symbol: "AAPL", company: "Apple Inc.", politicians: [ { name: "John Doe", holding: "$500,000", allocation: "50%" }, { name: "Jane Smith", holding: "$1,000,000", allocation: "40%" } ], count: 2 } ]; const mockPoliticianDetail = { id: 1, name: "John Doe", holdings: [ { symbol: "AAPL", company: "Apple Inc.", holding: "$500,000", allocation: "50%" }, { symbol: "GOOGL", company: "Alphabet Inc.", holding: "$500,000", allocation: "50%" } ], totalHoldings: 1000000, lastUpdated: new Date("2024-01-01") }; describe("Politician Client", () => { let client: PoliticianClient; beforeAll(() => { const config = (global as any).testSuite.config as LaplaceConfiguration; const logger: Logger = { info: jest.fn(), error: jest.fn(), warn: jest.fn(), debug: jest.fn(), } as unknown as Logger; client = new PoliticianClient(config, logger); }); describe("Integration Tests", () => { describe("getAllPolitician", () => { test("should return all politicians", async () => { const resp = await client.getAllPolitician(); expect(Array.isArray(resp)).toBe(true); if (resp.length > 0) { const first = resp[0]; expect(typeof first.id).toBe("number"); expect(typeof first.politicianName).toBe("string"); expect(typeof first.totalHoldings).toBe("number"); expect(first.lastUpdated).toBeDefined(); } }); }); describe("getPoliticianHoldingBySymbol", () => { test("should return holdings for a specific symbol", async () => { const resp = await client.getPoliticianHoldingBySymbol("AAPL"); expect(Array.isArray(resp)).toBe(true); if (resp.length > 0) { const first = resp[0]; expect(typeof first.politicianName).toBe("string"); expect(typeof first.symbol).toBe("string"); expect(typeof first.company).toBe("string"); expect(typeof first.holding).toBe("string"); expect(typeof first.allocation).toBe("string"); } }); }); describe("getAllTopHoldings", () => { test("should return all top holdings", async () => { const resp = await client.getAllTopHoldings(); expect(Array.isArray(resp)).toBe(true); if (resp.length > 0) { const first = resp[0]; expect(typeof first.symbol).toBe("string"); expect(typeof first.company).toBe("string"); expect(typeof first.count).toBe("number"); expect(Array.isArray(first.politicians)).toBe(true); if (first.politicians.length > 0) { const politician = first.politicians[0]; expect(typeof politician.name).toBe("string"); expect(typeof politician.holding).toBe("string"); expect(typeof politician.allocation).toBe("string"); } } }); }); describe("getPoliticianDetail", () => { test("should return politician detail by ID", async () => { const resp = await client.getPoliticianDetail(1); expect(resp).toBeDefined(); expect(typeof resp.id).toBe("number"); expect(typeof resp.name).toBe("string"); expect(typeof resp.totalHoldings).toBe("number"); expect(resp.lastUpdated).toBeDefined(); expect(Array.isArray(resp.holdings)).toBe(true); if (resp.holdings.length > 0) { const first = resp.holdings[0]; expect(typeof first.symbol).toBe("string"); expect(typeof first.company).toBe("string"); expect(typeof first.holding).toBe("string"); expect(typeof first.allocation).toBe("string"); } }); }); }); describe("Mock Tests (Data Injection)", () => { let client: PoliticianClient; let cli: { request: jest.Mock }; beforeEach(() => { cli = { request: jest.fn() }; const config = (global as any).testSuite.config as LaplaceConfiguration; const logger: Logger = { info: jest.fn(), error: jest.fn(), warn: jest.fn(), debug: jest.fn(), } as unknown as Logger; client = new PoliticianClient(config, logger, cli as any); }); test("getAllPolitician: calls correct endpoint and matches raw response", async () => { cli.request.mockResolvedValueOnce({ data: mockPoliticians }); const resp = await client.getAllPolitician(); expect(cli.request).toHaveBeenCalledTimes(1); const call = cli.request.mock.calls[0][0]; expect(call.method).toBe("GET"); expect(call.url).toBe("/api/v1/politician"); expect(call.params).toBeUndefined(); expect(resp).toEqual(mockPoliticians); }); test("getPoliticianHoldingBySymbol: calls correct endpoint and matches raw response", async () => { cli.request.mockResolvedValueOnce({ data: mockHoldings }); const resp = await client.getPoliticianHoldingBySymbol("AAPL"); expect(cli.request).toHaveBeenCalledTimes(1); const call = cli.request.mock.calls[0][0]; expect(call.method).toBe("GET"); expect(call.url).toBe("/api/v1/holding/AAPL"); expect(call.params).toBeUndefined(); expect(resp).toEqual(mockHoldings); }); test("getAllTopHoldings: calls correct endpoint and matches raw response", async () => { cli.request.mockResolvedValueOnce({ data: mockTopHoldings }); const resp = await client.getAllTopHoldings(); expect(cli.request).toHaveBeenCalledTimes(1); const call = cli.request.mock.calls[0][0]; expect(call.method).toBe("GET"); expect(call.url).toBe("/api/v1/top-holding"); expect(call.params).toBeUndefined(); expect(resp).toEqual(mockTopHoldings); }); test("getPoliticianDetail: calls correct endpoint and matches raw response", async () => { cli.request.mockResolvedValueOnce({ data: mockPoliticianDetail }); const resp = await client.getPoliticianDetail(1); expect(cli.request).toHaveBeenCalledTimes(1); const call = cli.request.mock.calls[0][0]; expect(call.method).toBe("GET"); expect(call.url).toBe("/api/v1/politician/1"); expect(call.params).toBeUndefined(); expect(resp).toEqual(mockPoliticianDetail); }); test("bubbles up request error", async () => { cli.request.mockRejectedValueOnce(new Error("API Error")); await expect(client.getAllPolitician()).rejects.toThrow("API Error"); expect(cli.request).toHaveBeenCalledTimes(1); }); }); });