Files
999/test/syncretic_session_test.dart

149 lines
5.4 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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);
});
}