cyberhybridhub/server/test/trading/trading_config_test.dart

69 lines
2.2 KiB
Dart

import 'package:cyberhybridhub_server/trading/trading_config.dart';
import 'package:test/test.dart';
void main() {
group('EffectiveTradingConfig.mergeJson', () {
test('user rule patch merges into template by id', () {
final Map<String, dynamic> base = <String, dynamic>{
'version': 1,
'enabled': true,
'rules': <Map<String, dynamic>>[
<String, dynamic>{
'id': 'dip_confirm',
'type': 'price_below_pct_of_ref',
'symbol': 'SPY',
'threshold_pct': -1.5,
'question_template': 'template text',
},
],
};
final Map<String, dynamic> override = <String, dynamic>{
'rules': <Map<String, dynamic>>[
<String, dynamic>{
'id': 'dip_confirm',
'threshold_pct': -2.0,
},
],
};
final Map<String, dynamic> merged =
EffectiveTradingConfig.mergeJson(base, override);
final List<dynamic> rules = merged['rules'] as List<dynamic>;
final Map<String, dynamic> rule =
Map<String, dynamic>.from(rules.single as Map);
expect(rule['threshold_pct'], -2.0);
expect(rule['question_template'], 'template text');
});
test('user data_inputs patch replaces symbols for same id', () {
final Map<String, dynamic> base = <String, dynamic>{
'data_inputs': <Map<String, dynamic>>[
<String, dynamic>{
'id': 'primary_watchlist',
'symbols': <String>['AAPL', 'MSFT', 'SPY'],
'metrics': <String>['last_trade'],
},
],
};
final Map<String, dynamic> override = <String, dynamic>{
'data_inputs': <Map<String, dynamic>>[
<String, dynamic>{
'id': 'primary_watchlist',
'symbols': <String>['SPY'],
},
],
};
final Map<String, dynamic> merged =
EffectiveTradingConfig.mergeJson(base, override);
final List<dynamic> inputs = merged['data_inputs'] as List<dynamic>;
final Map<String, dynamic> input =
Map<String, dynamic>.from(inputs.single as Map);
expect(input['symbols'], <String>['SPY']);
expect(input['metrics'], <String>['last_trade']);
});
});
}