import 'package:test/test.dart'; import 'package:practice_engine/models/question.dart'; import 'package:practice_engine/models/deck_config.dart'; import 'package:practice_engine/algorithms/priority_manager.dart'; void main() { group('PriorityManager', () { late DeckConfig config; setUp(() { config = const DeckConfig( priorityIncreaseOnIncorrect: 5, priorityDecreaseOnCorrect: 2, ); }); test('increases priority on incorrect answer', () { final question = Question( id: 'q1', prompt: 'Test', answers: ['A', 'B'], correctAnswerIndices: [0], priorityPoints: 10, ); final updated = PriorityManager.applyAnswerResult( question: question, isCorrect: false, config: config, ); expect(updated.priorityPoints, equals(10 + config.priorityIncreaseOnIncorrect)); }); test('decreases priority on correct answer', () { final question = Question( id: 'q1', prompt: 'Test', answers: ['A', 'B'], correctAnswerIndices: [0], priorityPoints: 10, ); final updated = PriorityManager.applyAnswerResult( question: question, isCorrect: true, config: config, ); expect(updated.priorityPoints, equals(10 - config.priorityDecreaseOnCorrect)); }); test('priority cannot go below 0', () { final question = Question( id: 'q1', prompt: 'Test', answers: ['A', 'B'], correctAnswerIndices: [0], priorityPoints: 1, ); final updated = PriorityManager.applyAnswerResult( question: question, isCorrect: true, config: config, ); expect(updated.priorityPoints, equals(0)); }); test('resetPriority sets priority to 0', () { final question = Question( id: 'q1', prompt: 'Test', answers: ['A', 'B'], correctAnswerIndices: [0], priorityPoints: 100, ); final updated = PriorityManager.resetPriority(question); expect(updated.priorityPoints, equals(0)); }); test('withPriorityPoints enforces non-negative priority', () { final question = Question( id: 'q1', prompt: 'Test', answers: ['A', 'B'], correctAnswerIndices: [0], priorityPoints: 10, ); final updated = question.withPriorityPoints(-5); expect(updated.priorityPoints, equals(0)); }); }); }