Add tests for Alpaca Historical Bars API

- Implemented tests for fetching historical bars for AAPL with different timeframes (1D, 5Min, 1H).
- Verified response structure and data integrity for each timeframe.
- Ensured that the API returns valid data and appropriate status for the requests.
This commit is contained in:
2026-05-14 12:50:14 +02:00
parent d1a84325ae
commit cc22174b78
13 changed files with 384 additions and 59 deletions
+74
View File
@@ -0,0 +1,74 @@
import Alpaca from "@alpacahq/alpaca-trade-api";
const alpaca = new Alpaca({
keyId: process.env.ALPACA_API_KEY!,
secretKey: process.env.ALPACA_SECRET_KEY!,
baseUrl: process.env.ALPACA_BASE_URL || "https://paper-api.alpaca.markets",
dataBaseUrl: process.env.ALPACA_DATA_URL || "https://data.alpaca.markets",
retryOnError: false,
});
export async function loader({ request }: { request: Request }) {
const url = new URL(request.url);
const ticker = url.searchParams.get("ticker")?.toUpperCase() || "AAPL";
try {
// Test different timeframes
const timeframes = ["1Day", "1Min", "5Min"];
const results: any = {};
for (const tf of timeframes) {
try {
console.log(`test-alpaca: testing ${ticker} with timeframe ${tf}`);
const bars = await alpaca.getBarsV2(ticker, {
timeframe: tf as any,
limit: 3,
});
const barsArray = [];
for await (const bar of bars) {
barsArray.push(bar);
}
results[tf] = { count: barsArray.length, sample: barsArray[0] };
console.log(`test-alpaca: ${tf} -> ${barsArray.length} bars`);
} catch (e) {
results[tf] = { error: e instanceof Error ? e.message : String(e) };
}
}
// Test popular stocks
const symbols = ["AAPL", "MSFT", "SPY", "QQQ"];
const symbolResults: any = {};
const startDate = new Date();
startDate.setDate(startDate.getDate() - 30);
const start = startDate.toISOString().split('T')[0];
for (const sym of symbols) {
try {
const bars = await alpaca.getBarsV2(sym, {
timeframe: "1D",
limit: 3,
start,
});
const barsArray = [];
for await (const bar of bars) barsArray.push(bar);
symbolResults[sym] = barsArray.length;
} catch (e) {
symbolResults[sym] = e instanceof Error ? e.message : String(e);
}
}
return Response.json({
ticker,
timeframeResults: results,
symbolResults,
});
} catch (error) {
console.error("test-alpaca error:", error);
return Response.json({
error: error instanceof Error ? error.message : String(error),
ticker
}, { status: 500 });
}
}