149 lines
5.4 KiB
Dart
149 lines
5.4 KiB
Dart
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);
|
||
});
|
||
|
||
}
|