import 'package:flutter_test/flutter_test.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:words999/models/houses_session_model.dart'; import 'package:words999/models/word_model.dart'; import 'package:words999/services/houses_service.dart'; import 'package:words999/services/words_repository.dart'; import 'package:words999/services/oracle_master_prompt_generator.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); group('Querent & Master Prompt Tests', () { late HousesService service; setUp(() async { SharedPreferences.setMockInitialValues({}); final repo = WordsRepository(); await repo.init(remoteDailyShuffle: false); service = HousesService(); }); test('Querent is properly initialized and anchored in session', () { const querent = WordItem( id: 1, word: 'ИСТИНА', partOfSpeech: 'существительное', frequency: 50.0, core: 'Незыблемое основание бытия', category: 'Философия', description: 'Чистый свет разума', oracle: 'Всякая тень исчезает перед ликом Истины', shadow: 'Фанатичная убежденность', asks: 'В чем ты боишься признаться себе?', step: 'Взгляни правде в глаза', binds: ['Искажение'], ); final session = service.createNewSession( question: 'Куда ведет путь?', querentWord: querent, querentHouseIndex: 42, ); expect(session.querentWord, isNotNull); expect(session.querentWord!.word, 'ИСТИНА'); expect(session.querentHouseIndex, 42); expect(session.question, 'Куда ведет путь?'); }); test('Master Prompt compiles full 3-tier hierarchy and sacred geometry', () { const querent = WordItem( id: 2, word: 'ПУТНИК', partOfSpeech: 'существительное', frequency: 45.0, core: 'Движение сквозь миры', category: 'Архетип', description: 'Идущий сквозь пространство и время', oracle: 'Дорога рождается под ногами идущего', shadow: 'Блуждание без цели', asks: 'Каков твой истинный пункт назначения?', step: 'Сделай первый шаг в неизведанное', binds: ['Застой'], ); var session = service.createNewSession( question: 'Что ожидает на пороге нового цикла?', querentWord: querent, querentHouseIndex: 100, ); // Open 2 houses with guests final cell1 = session.grid[10]; const guest1 = WordItem( id: 3, word: 'ОГОНЬ', partOfSpeech: 'существительное', frequency: 60.0, core: 'Первичная искра трансформации', category: 'Стихия', description: 'Пламя очищения', oracle: 'Огонь сжигает ветхое', shadow: 'Разрушительная ярость', asks: 'Что требует очищения?', step: 'Зажги внутреннее пламя', binds: ['Пепел'], ); session = service.revealHouse(session, cell: cell1, guestWord: guest1); final cell2 = session.grid[25]; const guest2 = WordItem( id: 4, word: 'ЗЕРКАЛО', partOfSpeech: 'существительное', frequency: 55.0, core: 'Отражение скрытой сущности', category: 'Символ', description: 'Гладь осознания', oracle: 'То, что ты видишь снаружи — внутри тебя', shadow: 'Иллюзия и самообман', asks: 'Что отражается в твоем сердце?', step: 'Прими свое отражение', binds: ['Кривое зеркало'], ); session = service.revealHouse(session, cell: cell2, guestWord: guest2); final prompt = OracleMasterPromptGenerator.generate(session); expect(prompt, contains('ОРАКУЛ 999')); expect(prompt, contains('ПУТНИК')); expect(prompt, contains('Что ожидает на пороге нового цикла?')); expect(prompt, contains('ОГОНЬ')); expect(prompt, contains('ЗЕРКАЛО')); expect(prompt, contains('АРХОНТ')); expect(prompt, contains('ДОМ')); expect(prompt, contains('ГОСТЬ')); expect(prompt, contains('САКРАЛЬНАЯ ГЕОМЕТРИЯ')); expect(prompt, contains('ИНСТРУКЦИЯ ДЛЯ ТОЛКОВАНИЯ')); }); }); }