Сгруппировать тестовые проекты по областям

Deal.Tests.Unit, Deal.Telegram.Tests, Deal.Ai.Tests, Deal.Ml.Tests
разложены по областям (Modules/<X>, Api, Infrastructure, Contracts,
Grpc, ...), общие хелперы -> Support; namespace = папка, using
между областями добавлены итеративно по ошибкам сборки.
This commit is contained in:
Rustam Khalimov
2026-09-11 13:28:26 +03:00
parent e3a2692507
commit 5bfa92a4ac
212 changed files with 1982 additions and 1686 deletions
@@ -0,0 +1,61 @@
using Deal.Telegram.Sessions;
using Microsoft.Extensions.Logging.Abstractions;
using Deal.Telegram.Tests.Support;
namespace Deal.Telegram.Tests.Telegram;
// Фабрика компонентов хранилища сессий для unit-тестов: уникальный temp-каталог на сценарий,
// тестовый ключ AES-256 и реальные SessionFileCipher/SessionStore (без сети).
internal static class TestSessionFactory
{
/// <summary>
/// Тестовый ключ AES-256 (байты 1..32).
/// </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-каталогом (NullLogger).
/// </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 допустим.
}
}
}