79 lines
2.7 KiB
Dart
79 lines
2.7 KiB
Dart
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<ResolvedQuestionSourcePreference> merged =
|
|
QuestionSourcePreferences.mergeStored(null);
|
|
|
|
expect(merged.map((ResolvedQuestionSourcePreference s) => s.id), <String>[
|
|
'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(<String, dynamic>{
|
|
'sources': <Map<String, dynamic>>[
|
|
<String, dynamic>{'id': 'market_history', 'enabled': false, 'ratio': 50},
|
|
<String, dynamic>{'id': 'spelling', 'enabled': false, 'ratio': 50},
|
|
],
|
|
}),
|
|
throwsA(isA<QuestionSourceValidationException>()),
|
|
);
|
|
});
|
|
|
|
test('parsePutBody accepts enabled spelling source', () {
|
|
final List<Map<String, dynamic>> stored =
|
|
QuestionSourcePreferences.parsePutBody(<String, dynamic>{
|
|
'sources': <Map<String, dynamic>>[
|
|
<String, dynamic>{'id': 'market_history', 'enabled': true, 'ratio': 50},
|
|
<String, dynamic>{'id': 'spelling', 'enabled': true, 'ratio': 50},
|
|
],
|
|
});
|
|
|
|
expect(stored.length, 2);
|
|
expect(
|
|
stored.firstWhere((Map<String, dynamic> row) => row['id'] == 'spelling')['enabled'],
|
|
isTrue,
|
|
);
|
|
});
|
|
|
|
test('effectiveMix normalizes enabled source ratios', () {
|
|
final List<ResolvedQuestionSourcePreference> resolved =
|
|
QuestionSourcePreferences.mergeStored(<Map<String, dynamic>>[
|
|
<String, dynamic>{'id': 'market_history', 'enabled': true, 'ratio': 75},
|
|
<String, dynamic>{'id': 'spelling', 'enabled': true, 'ratio': 25},
|
|
]);
|
|
|
|
final Map<String, int> mix =
|
|
QuestionSourcePreferences.effectiveMix(resolved);
|
|
|
|
expect(mix['market_history'], 75);
|
|
expect(mix['spelling'], 25);
|
|
});
|
|
|
|
test('isEnabled returns false for disabled spelling', () {
|
|
final List<ResolvedQuestionSourcePreference> resolved =
|
|
QuestionSourcePreferences.mergeStored(<Map<String, dynamic>>[
|
|
<String, dynamic>{'id': 'market_history', 'enabled': true, 'ratio': 100},
|
|
<String, dynamic>{'id': 'spelling', 'enabled': false, 'ratio': 0},
|
|
]);
|
|
|
|
expect(
|
|
QuestionSourcePreferences.isEnabled(resolved, 'market_history'),
|
|
isTrue,
|
|
);
|
|
expect(QuestionSourcePreferences.isEnabled(resolved, 'spelling'), isFalse);
|
|
});
|
|
}
|