122 lines
4.9 KiB
Dart
122 lines
4.9 KiB
Dart
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('ИНСТРУКЦИЯ ДЛЯ ТОЛКОВАНИЯ'));
|
|
});
|
|
});
|
|
}
|