import 'package:cyberhybridhub_server/question_source_preferences.dart'; import 'package:test/test.dart'; void main() { test('mergeStored applies defaults for market and spelling sources', () { final List merged = QuestionSourcePreferences.mergeStored(null); expect(merged.map((ResolvedQuestionSourcePreference s) => s.id), [ 'market_history', 'spelling', ]); expect( merged.firstWhere((ResolvedQuestionSourcePreference s) => s.id == 'market_history').enabled, isTrue, ); expect( merged.firstWhere((ResolvedQuestionSourcePreference s) => s.id == 'spelling').enabled, isTrue, ); }); test('parsePutBody rejects all disabled sources', () { expect( () => QuestionSourcePreferences.parsePutBody({ 'sources': >[ {'id': 'market_history', 'enabled': false, 'ratio': 50}, {'id': 'spelling', 'enabled': false, 'ratio': 50}, ], }), throwsA(isA()), ); }); test('parsePutBody accepts enabled spelling source', () { final List> stored = QuestionSourcePreferences.parsePutBody({ 'sources': >[ {'id': 'market_history', 'enabled': true, 'ratio': 50}, {'id': 'spelling', 'enabled': true, 'ratio': 50}, ], }); expect(stored.length, 2); expect( stored.firstWhere((Map row) => row['id'] == 'spelling')['enabled'], isTrue, ); }); test('effectiveMix normalizes enabled source ratios', () { final List resolved = QuestionSourcePreferences.mergeStored(>[ {'id': 'market_history', 'enabled': true, 'ratio': 75}, {'id': 'spelling', 'enabled': true, 'ratio': 25}, ]); final Map mix = QuestionSourcePreferences.effectiveMix(resolved); expect(mix['market_history'], 75); expect(mix['spelling'], 25); }); test('isEnabled returns false for disabled spelling', () { final List resolved = QuestionSourcePreferences.mergeStored(>[ {'id': 'market_history', 'enabled': true, 'ratio': 100}, {'id': 'spelling', 'enabled': false, 'ratio': 0}, ]); expect( QuestionSourcePreferences.isEnabled(resolved, 'market_history'), isTrue, ); expect(QuestionSourcePreferences.isEnabled(resolved, 'spelling'), isFalse); }); }