59 lines
1.6 KiB
Dart
59 lines
1.6 KiB
Dart
import 'package:cyberhybridhub_server/alpaca/alpaca_models.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
import '../helpers/fixture_loader.dart';
|
|
|
|
void main() {
|
|
late FixtureLoader fixtures;
|
|
|
|
setUp(() {
|
|
fixtures = FixtureLoader();
|
|
});
|
|
|
|
test('parses latest trade fixture', () async {
|
|
final Map<String, dynamic> json =
|
|
await fixtures.loadJson('alpaca_latest_trade.json');
|
|
final AlpacaLatestTradeResponse response =
|
|
AlpacaLatestTradeResponse.fromJson(json);
|
|
|
|
expect(response.symbol, 'SPY');
|
|
expect(response.trade.price, 492.15);
|
|
expect(response.trade.size, 500);
|
|
});
|
|
|
|
test('parses daily bars fixture', () async {
|
|
final Map<String, dynamic> json =
|
|
await fixtures.loadJson('alpaca_daily_bars.json');
|
|
final AlpacaBarsResponse response = AlpacaBarsResponse.fromJson(json);
|
|
final AlpacaBar? bar = response.latestBar('SPY');
|
|
|
|
expect(bar, isNotNull);
|
|
expect(bar!.close, 500.0);
|
|
expect(bar.volume, 45000000);
|
|
expect(response.previousDailyBar('SPY')!.close, 498.0);
|
|
});
|
|
|
|
test('AlpacaOrderRequest serializes market notional order', () {
|
|
final AlpacaOrderRequest request = AlpacaOrderRequest(
|
|
symbol: 'SPY',
|
|
side: 'buy',
|
|
type: 'market',
|
|
timeInForce: 'day',
|
|
clientOrderId: 'uid-dip_confirm-qid',
|
|
notional: 10,
|
|
);
|
|
|
|
expect(
|
|
request.toJson(),
|
|
<String, dynamic>{
|
|
'symbol': 'SPY',
|
|
'side': 'buy',
|
|
'type': 'market',
|
|
'time_in_force': 'day',
|
|
'client_order_id': 'uid-dip_confirm-qid',
|
|
'notional': 10,
|
|
},
|
|
);
|
|
});
|
|
}
|