using FluentAssertions; using foodmarket.Application.Common; using Xunit; namespace foodmarket.UnitTests; /// Нормализация телефонов KZ (Sprint 15: расширили покрытие /// под цель 70% по Application). Контракт: пустой → null, 11 цифр '77...' → /// +7..., с ведущей '8' → переписать в '7', невалидные → null. public class PhoneNormalizationTests { [Theory] [InlineData("+7 700 123 45 67", "+77001234567")] [InlineData("87001234567", "+77001234567")] [InlineData("77001234567", "+77001234567")] [InlineData("8 (700) 123-45-67", "+77001234567")] [InlineData(" +7-700-1234567 ", "+77001234567")] public void Normalizes_valid_kz_numbers(string raw, string normalized) => PhoneNormalization.TryNormalizeKz(raw).Should().Be(normalized); [Theory] [InlineData(null)] [InlineData("")] [InlineData(" ")] public void Empty_input_returns_null(string? raw) => PhoneNormalization.TryNormalizeKz(raw).Should().BeNull(); [Theory] [InlineData("+79161234567")] // RU, начинается с 79 [InlineData("12345")] // слишком короткий [InlineData("+77001234567890")] // слишком длинный [InlineData("abcdef")] // нет цифр [InlineData("+74950001234")] // RU 74… public void Invalid_returns_null(string raw) => PhoneNormalization.TryNormalizeKz(raw).Should().BeNull(); [Fact] public void IsValidOrEmpty_treats_null_as_valid() { PhoneNormalization.IsValidOrEmpty(null).Should().BeTrue(); PhoneNormalization.IsValidOrEmpty("").Should().BeTrue(); PhoneNormalization.IsValidOrEmpty("+77001234567").Should().BeTrue(); PhoneNormalization.IsValidOrEmpty("garbage").Should().BeFalse(); } }