import 'package:flutter_test/flutter_test.dart'; import 'package:words999/models/syncretic_session_model.dart'; import 'package:words999/services/words_repository.dart'; import 'package:words999/services/traditions_repository.dart'; import 'package:words999/services/oracle_master_prompt_generator.dart'; void main() { setUpAll(() async { TestWidgetsFlutterBinding.ensureInitialized(); await WordsRepository().init(); await TraditionsRepository().init(); }); test('SyncreticSession accumulates multiple diverse readings and generates Meta-Prompt', () { final repo = WordsRepository(); final r1 = SyncreticReading( id: 'test_r1', systemId: 'cleromancy', systemName: 'Оракул 999 (Клеромантия)', systemIcon: '🎲', timestamp: DateTime.now(), layoutTitle: '2 знака', inputMethod: 'dice', items: [ ReadingSignItem( title: '#142 ВОЛЯ', subtitle: 'Существительное', symbol: '🎲', lore: 'Импульс намерения', linkedWord: repo.allWords[0], ), ], question: 'Как реализовать проект?', ); final r2 = SyncreticReading( id: 'test_r2', systemId: 'runes', systemName: 'Руны Старшего Футарка (24)', systemIcon: 'ᚱ', timestamp: DateTime.now(), layoutTitle: 'Бросок 2×d12', inputMethod: 'dice', items: [ ReadingSignItem( title: 'Феху (Fehu)', subtitle: 'Этт Фрейи', symbol: 'ᚠ', lore: 'Скот, богатство, первичный огонь творения.', isReversed: false, linkedWord: repo.allWords[1], ), ], question: 'Как реализовать проект?', ); final r3 = SyncreticReading( id: 'test_r3', systemId: 'lenormand', systemName: 'Малый Оракул Ленорман', systemIcon: '🪶', timestamp: DateTime.now(), layoutTitle: 'd6+d12: Карта #24', inputMethod: 'dice', items: [ ReadingSignItem( title: 'Карта 24 «Сердце»', subtitle: 'Любовь, искренность, страсть', symbol: '#24', lore: 'Сердце указывает на чистую эмоциональную вовлечённость.', linkedWord: repo.allWords[2], ), ], question: 'Как реализовать проект?', ); final session = SyncreticSession( id: 'syn_test_day', date: DateTime.now(), mainQuestion: 'Как реализовать проект?', readings: [r1, r2, r3], ); expect(session.readings.length, 3); final metaPrompt = OracleMasterPromptGenerator.generateCrossSystemComparison(session); expect(metaPrompt.isNotEmpty, true); expect(metaPrompt.contains('ВЕЛИКИЙ МЕТА-МАСТЕР-ПРОМПТ'), true); expect(metaPrompt.contains('Как реализовать проект?'), true); expect(metaPrompt.contains('ОРАКУЛ 999'), true); expect(metaPrompt.contains('РУНЫ СТАРШЕГО ФУТАРКА'), true); expect(metaPrompt.contains('МАЛЫЙ ОРАКУЛ ЛЕНОРМАН'), true); expect(metaPrompt.contains('ТОЧКА КОНВЕРГЕНЦИИ'), true); expect(metaPrompt.contains('ТОЧКИ ДИВЕРГЕНЦИИ И ПОЛЯРНОСТИ'), true); }); test('Matrix chains reading can be recorded and serialized in SyncreticSession', () { final repo = WordsRepository(); final chainReading = SyncreticReading( id: 'chains_session_99', systemId: 'matrix_chains', systemName: 'Матрица 33×30: Цепочки Домов', systemIcon: '🔗', timestamp: DateTime.now(), layoutTitle: '1 цепочка', inputMethod: 'dice', items: [ ReadingSignItem( title: 'Цепочка #1: Петля Судьбы', subtitle: 'Старт: Дом #1 «ОГОНЬ» • Шагов: 3', symbol: '🔄', lore: 'Траектория: «ВОДА» ➔ «ЗЕМЛЯ» ➔ «ОГОНЬ»\nЗамкнутая петля судьбы.', linkedWord: repo.allWords[0], meta: { 'chainIndex': 1, 'endType': 'loop', 'stepsCount': 3, 'path': '«ВОДА» ➔ «ЗЕМЛЯ» ➔ «ОГОНЬ»', }, ), ], question: 'Вектор развития', ); final session = SyncreticSession( id: 'syn_matrix_chains_test', date: DateTime.now(), mainQuestion: 'Вектор развития', readings: [chainReading], ); final jsonStr = session.toJson(); final restored = SyncreticSession.fromJson(jsonStr); expect(restored.readings.length, 1); expect(restored.readings.first.systemId, 'matrix_chains'); expect(restored.readings.first.items.first.title, 'Цепочка #1: Петля Судьбы'); expect(restored.readings.first.items.first.symbol, '🔄'); expect(restored.readings.first.items.first.meta?['endType'], 'loop'); final metaPrompt = OracleMasterPromptGenerator.generateCrossSystemComparison(restored); expect(metaPrompt.contains('МАТРИЦА 33×30: ЦЕПОЧКИ ДОМОВ'), true); expect(metaPrompt.contains('ЦЕПОЧКА #1: ПЕТЛЯ СУДЬБЫ'), true); }); }