Files
Deal/src/telegram-service/Deal.Telegram.Tests/Telegram/TestSessionFactory.cs
T
Rustam Khalimov b053d58335 Почистить комментарии от упоминаний процесса
Удалены <remarks>, <summary> сжаты до короткой фразы, вырезаны
ссылки на Task/Ruling/этап/python/прототип; //-комментарии со ссылками
на процесс удалены; то же в .proto. Правила обновлены в
docs/spec/Код-стайл-Дейл.md. Строк комментариев 27210 -> ~19100.
2026-09-11 13:39:39 +03:00

61 lines
2.7 KiB
C#

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