- Add monthly bars aggregation in worker (services/worker/internal/marketdata/aggregation/) - Support monthly timeframe in operator runner and output - Add monthly aggregation test data and test cases - Update contracts (proto, Dart, Go) for monthly timeframe support - Sync parser_map, socket handlers, and worker client across services - Add code review and plan logs for multi-timeframe coverage milestones
91 lines
3.2 KiB
Dart
91 lines
3.2 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:alt_client/src/contracts/alt_contracts.dart';
|
|
import 'package:alt_client/src/generated/alt/v1/common.pb.dart';
|
|
import 'package:alt_client/src/generated/alt/v1/market.pb.dart';
|
|
import 'package:alt_client/src/generated/alt/v1/backtest.pb.dart';
|
|
import 'package:alt_client/src/generated/alt/v1/paper_trading.pb.dart';
|
|
import 'package:alt_client/src/generated/alt/v1/live_trading.pb.dart';
|
|
|
|
void main() {
|
|
group('ALT contracts parser map helper tests', () {
|
|
test(
|
|
'altParserMap contains all expected parsers and passes round-trip parsing',
|
|
() {
|
|
final parsers = altParserMap();
|
|
|
|
final expectedMessages = [
|
|
HelloRequest(),
|
|
HelloResponse(),
|
|
ListInstrumentsRequest(),
|
|
ListInstrumentsResponse(),
|
|
ListBarsRequest(),
|
|
ListBarsResponse(),
|
|
AggregateMonthlyBarsRequest(),
|
|
AggregateMonthlyBarsResponse(),
|
|
MonthlyProvenance(),
|
|
StartBacktestRequest(),
|
|
StartBacktestResponse(),
|
|
GetBacktestRunRequest(),
|
|
GetBacktestRunResponse(),
|
|
GetBacktestResultRequest(),
|
|
GetBacktestResultResponse(),
|
|
BacktestResult(),
|
|
ListBacktestRunsRequest(),
|
|
ListBacktestRunsResponse(),
|
|
GetBacktestRunDetailRequest(),
|
|
GetBacktestRunDetailResponse(),
|
|
CompareBacktestRunsRequest(),
|
|
CompareBacktestRunsResponse(),
|
|
StartPaperTradingRequest(),
|
|
StartPaperTradingResponse(),
|
|
GetPaperTradingStateRequest(),
|
|
GetPaperTradingStateResponse(),
|
|
PaperTradingState(),
|
|
GetLiveBrokerCapabilitiesRequest(),
|
|
GetLiveBrokerCapabilitiesResponse(),
|
|
LiveBrokerCapability(),
|
|
SubmitLiveOrderRequest(),
|
|
SubmitLiveOrderResponse(),
|
|
CancelLiveOrderRequest(),
|
|
CancelLiveOrderResponse(),
|
|
GetLiveOrderRequest(),
|
|
GetLiveOrderResponse(),
|
|
GetLiveRiskPolicyRequest(),
|
|
GetLiveRiskPolicyResponse(),
|
|
LiveRiskPolicy(),
|
|
GetLiveKillSwitchRequest(),
|
|
GetLiveKillSwitchResponse(),
|
|
SetLiveKillSwitchRequest(),
|
|
SetLiveKillSwitchResponse(),
|
|
LiveKillSwitchState(),
|
|
LiveRiskDecision(),
|
|
SyncLiveAccountRequest(),
|
|
SyncLiveAccountResponse(),
|
|
GetLiveAccountSnapshotRequest(),
|
|
GetLiveAccountSnapshotResponse(),
|
|
LiveAccountSnapshot(),
|
|
LiveCashBalance(),
|
|
LivePositionSnapshot(),
|
|
];
|
|
|
|
expect(parsers.length, equals(expectedMessages.length));
|
|
|
|
for (final msg in expectedMessages) {
|
|
final qualifiedName = msg.info_.qualifiedMessageName;
|
|
expect(
|
|
parsers.containsKey(qualifiedName),
|
|
isTrue,
|
|
reason: 'Map should contain parser for $qualifiedName',
|
|
);
|
|
|
|
final parser = parsers[qualifiedName]!;
|
|
final serialized = msg.writeToBuffer();
|
|
final parsed = parser(serialized);
|
|
|
|
expect(parsed.info_.qualifiedMessageName, equals(qualifiedName));
|
|
expect(parsed.writeToBuffer(), equals(serialized));
|
|
}
|
|
},
|
|
);
|
|
});
|
|
}
|