using Deal.Telegram.Sessions; using Microsoft.Extensions.Logging.Abstractions; namespace Deal.Telegram.Tests.Telegram; // Фабрика компонентов хранилища сессий для unit-тестов: уникальный temp-каталог на сценарий, // тестовый ключ AES-256 и реальные SessionFileCipher/SessionStore (без сети). internal static class TestSessionFactory { /// /// Тестовый ключ AES-256 /// public static byte[] TestKey { get; } = Enumerable.Range(1, 32).Select(index => (byte)index).ToArray(); /// /// Создаёт уникальный temp-каталог для сценария теста. /// public static string NewSessionsDirectory() => Path.Combine(Path.GetTempPath(), "deal-tg-sessions", Guid.NewGuid().ToString("N")); /// /// Опции хранилища над temp-каталогом. /// /// Каталог сессий (NewSessionsDirectory). /// Ключ шифрования (по умолчанию ). public static TgOptions Options(string sessionsDirectory, byte[]? key = null) => TgOptions.Create(key ?? TestKey, sessionsDirectory); /// /// Шифр сессий над каталогом. /// /// Каталог сессий. /// Ключ шифрования. public static SessionFileCipher Cipher(string sessionsDirectory, byte[]? key = null) => new(Options(sessionsDirectory, key)); /// /// Реальное файловое хранилище над temp-каталогом /// /// Каталог сессий. /// Ключ шифрования. public static SessionStore Store(string sessionsDirectory, byte[]? key = null) => new(Options(sessionsDirectory, key), Cipher(sessionsDirectory, key), NullLogger.Instance); /// /// Удаляет temp-каталог после сценария /// /// Каталог сессий. public static void Cleanup(string sessionsDirectory) { try { Directory.Delete(sessionsDirectory, recursive: true); } catch (IOException) { // Занятый файл — тестовый мусор в temp допустим. } } }