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()); } }