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 base = { 'version': 1, 'enabled': true, 'rules': >[ { 'id': 'dip_confirm', 'type': 'price_below_pct_of_ref', 'symbol': 'SPY', 'threshold_pct': -1.5, 'question_template': 'template text', }, ], }; final Map override = { 'rules': >[ { 'id': 'dip_confirm', 'threshold_pct': -2.0, }, ], }; final Map merged = EffectiveTradingConfig.mergeJson(base, override); final List rules = merged['rules'] as List; final Map rule = Map.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 base = { 'data_inputs': >[ { 'id': 'primary_watchlist', 'symbols': ['AAPL', 'MSFT', 'SPY'], 'metrics': ['last_trade'], }, ], }; final Map override = { 'data_inputs': >[ { 'id': 'primary_watchlist', 'symbols': ['SPY'], }, ], }; final Map merged = EffectiveTradingConfig.mergeJson(base, override); final List inputs = merged['data_inputs'] as List; final Map input = Map.from(inputs.single as Map); expect(input['symbols'], ['SPY']); expect(input['metrics'], ['last_trade']); }); }); }