import { describe, expect, test } from '@jest/globals'; import 'dotenv/config'; import { ActionDateType, AlpacaExchange } from '../src/index'; import { createLogger, transports, format } from "winston"; const timeout = 10000; const logger = createLogger({ transports: [new transports.Console()], format: format.combine( format.colorize(), format.timestamp(), format.printf(({ timestamp, level, message, service }) => { return `[${timestamp}] ${service} ${level}: ${message}`; }) ), defaultMeta: { service: "AlpacaTest", }, }); describe('Alpaca Tests', () => { test('portfolio fetch', async () => { expect(process.env.ALPACA_API_KEY).toBeDefined(); expect(process.env.ALPACA_SECRET_KEY).toBeDefined(); const exchange = new AlpacaExchange(process.env.ALPACA_API_KEY!, process.env.ALPACA_SECRET_KEY!, true); await expect(exchange.portfolioProvider.fetchPortfolio()).resolves.toBeDefined(); }, timeout); test('quote fetch', async () => { expect(process.env.ALPACA_API_KEY).toBeDefined(); expect(process.env.ALPACA_SECRET_KEY).toBeDefined(); const exchange = new AlpacaExchange(process.env.ALPACA_API_KEY!, process.env.ALPACA_SECRET_KEY!, true); await expect(exchange.quoteProvider.fetchQuote("AAPL")).resolves.toBeDefined(); }, timeout); test('action fetch', async () => { expect(process.env.ALPACA_API_KEY).toBeDefined(); expect(process.env.ALPACA_SECRET_KEY).toBeDefined(); const exchange = new AlpacaExchange(process.env.ALPACA_API_KEY!, process.env.ALPACA_SECRET_KEY!, true); const date = new Date("2023-10-23T13:30:28.163Z"); const response = await exchange.actionProvider.fetchActions({ pageSize: undefined, dateOptions: { date: date, dateType: ActionDateType.On } }); expect(response).toBeDefined(); logger.info(JSON.stringify(response)); for (const action of response.actions) { expect(action).toBeDefined(); expect(action.symbol).toBeDefined(); expect(action.quantity).toBeDefined(); expect(action.side).toBeDefined(); expect(action.pricePerShare).toBeDefined(); expect(action.timestamp).toBeDefined(); expect(action.timestamp.getFullYear()).toBe(date.getFullYear()); expect(action.timestamp.getMonth()).toBe(date.getMonth()); expect(action.timestamp.getDate()).toBe(date.getDate()); } }, timeout); });