using Deal.Telegram.Dialogs;
using Xunit;
using Deal.Telegram.Tests.Support;
namespace Deal.Telegram.Tests.Telegram;
///
/// Unit-тесты цвета диалога (план Task 10: DialogHue — 1:1 dialog_hue прототипа L876–880 и палитры
/// constants.py DIALOG_HUES). Ожидаемые значения посчитаны python-прототипом (те же алгоритм/палитра) —
/// паритет цветов источников между реализациями.
///
public sealed class DialogHueTests
{
///
/// Цвет по паре (id, имя) совпадает с python-прототипом.
///
[Theory]
[InlineData("-1001234567890", "IT Канал", "#a78bfa")]
[InlineData("-123456", "Уютный чат", "#34d399")]
[InlineData("+79990001122", "Иван Петров", "#fb7185")]
[InlineData("-100999", "", "#34d399")]
public void Compute_MatchesPythonPrototype(
string dialogId,
string name,
string expectedHue)
{
Assert.Equal(expectedHue, DialogHue.Compute(dialogId, name));
}
///
/// Цвет детерминирован: повторный вызов возвращает то же значение.
///
[Fact]
public void Compute_IsDeterministic()
{
string first = DialogHue.Compute("-1001234567890", "IT Канал");
Assert.Equal(first, DialogHue.Compute("-1001234567890", "IT Канал"));
}
///
/// Разные источники распределяются по палитре (цвета коллизируют не все вместе).
///
[Fact]
public void Compute_DifferentSources_DistributeAcrossPalette()
{
var hues = new[]
{
DialogHue.Compute("-100111", "Канал А"),
DialogHue.Compute("-100222", "Канал Б"),
DialogHue.Compute("+79990001122", "Иван Петров"),
DialogHue.Compute("-5", "Работа"),
};
// Ожидание посчитано python-прототипом: 4 источника дают 3 разных цвета палитры.
Assert.Equal(3, hues.Distinct().Count());
}
}