Сгруппировать тестовые проекты по областям
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:
@@ -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 допустим.
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user