69 lines
2.2 KiB
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']);
|
|
});
|
|
});
|
|
}
|