Files
999/test/querent_prompt_test.dart
T

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