diff --git a/RhSolutions.Api.Tests/BypassQueryModifier.cs b/RhSolutions.Api.Tests/BypassQueryModifier.cs deleted file mode 100644 index 44159e2..0000000 --- a/RhSolutions.Api.Tests/BypassQueryModifier.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace RhSolutions.Api.Tests; - -public sealed class BypassQueryModifier : IProductMLModifier -{ - public bool TryQueryModify(string query, out string queryModified) - { - queryModified = string.Empty; - return false; - } -} \ No newline at end of file diff --git a/RhSolutions.Api.Tests/ProductQueryModifierFactory.cs b/RhSolutions.Api.Tests/ProductQueryModifierFactory.cs deleted file mode 100644 index d9a4d67..0000000 --- a/RhSolutions.Api.Tests/ProductQueryModifierFactory.cs +++ /dev/null @@ -1,76 +0,0 @@ -using RhSolutions.MLModifiers.DrinkingWaterHeatingFittings; -using RhSolutions.MLModifiers.DrinkingWaterHeatingPipes; - -namespace RhSolutions.Api.Tests; - -public class ProductQueryModifierFactory -{ - public IProductMLModifier GetModifier(string productTypeName) - { - switch (productTypeName) - { - case "Монтажная гильза": - return new Sleeve(); - case "Желоб": - return new SupportingClip(); - case "Тройник RAUTITAN": - return new TPiece(); - case "Тройник RAUTITAN резьбовой наружный": - return new ThreadTPieceExternal(); - case "Тройник RAUTITAN резьбовой внутренний": - return new ThreadTPieceInternal(); - case "Переходник на наружную резьбу": - return new AdapterExternal(); - case "Переходник на внутреннюю резьбу": - return new AdapterInternal(); - case "Переходник с накидной гайкой": - return new AdapterScrewcap(); - case "Угольник с наружной резьбой": - return new ThreadElbowExternal(); - case "Угольник с внутренней резьбой": - return new ThreadElbowInternal(); - case "Угольник настенный наружный": - return new ThreadElbowWallExternal(); - case "Угольник настенный внутренний": - return new ThreadElbowWallInternal(); - case "Проточный настенный угольник": - return new ThreadElbowDoubleWallInternal(); - case "Угольник с накидной гайкой": - return new ScrewcapElbow(); - case "Муфта соединительная": - return new Coupling(); - case "Угольник RAUTITAN": - return new Elbow(); - case "Фиксатор поворота отопление": - return new BendFormerHeating(); - case "Фиксатор поворота водоснабжение": - return new BendFormerSanitary(); - case "Трубка Г-образная": - return new ConnectionBend(); - case "Трубка Т-образная": - return new ConnectionTee(); - case "Резьбозажимное flex": - return new EuroconeFlex(); - case "Резьбозажимное stabil": - return new EuroconeStabil(); - case "Переходник на евроконус": - return new EuroconeAdapter(); - case "Резьбозажимное для трубки": - return new EuroconeConnectionBend(); - case "Ниппель": - return new Nippel(); - case "Заглушка труб RAUTITAN": - return new DummyPlug(); - case "Flex": - return new FlexPipe(); - case "Pink": - return new PinkPipe(); - case "Stabil": - return new StabilPipe(); - case "Black": - return new BlackPipe(); - default: - return new BypassQueryModifier(); - } - } -} diff --git a/RhSolutions.Api.Tests/ProductQueryModifierTests.cs b/RhSolutions.Api.Tests/ProductQueryModifierTests.cs index 16c6054..a642f9c 100644 --- a/RhSolutions.Api.Tests/ProductQueryModifierTests.cs +++ b/RhSolutions.Api.Tests/ProductQueryModifierTests.cs @@ -1,18 +1,14 @@ +using Microsoft.Extensions.DependencyInjection; + namespace RhSolutions.Api.Tests; public abstract class ProductQueryModifierTests { - protected ProductQueryModifierFactory _factory; - - [SetUp] - public void Setup() + public void Invoke(string productType, string query, string expected) { - _factory = new ProductQueryModifierFactory(); - } - public void Execute(string productType, string query, string expected) - { - var modifier = _factory.GetModifier(productType); - Assert.That(modifier.TryQueryModify(query, out var actual), Is.True); + var modifier = TestServiceCollection.ServiceProvider?.GetRequiredKeyedService(productType); + string actual = string.Empty; + Assert.That(modifier?.TryQueryModify(query, out actual), Is.True); Assert.That(actual, Is.EqualTo(expected)); } -} \ No newline at end of file +} diff --git a/RhSolutions.Api.Tests/RautitanFittingsTests.cs b/RhSolutions.Api.Tests/RautitanFittingsTests.cs index bc4ede7..54f75a8 100644 --- a/RhSolutions.Api.Tests/RautitanFittingsTests.cs +++ b/RhSolutions.Api.Tests/RautitanFittingsTests.cs @@ -1,23 +1,24 @@ + namespace RhSolutions.Api.Tests; public class RautitanFittingsTests : ProductQueryModifierTests { - [TestCase("Гильза 16", "Монтажная гильза 16")] + [TestCase("Гильза 16", "Монтажная гильза 16")] [TestCase("Пресс-втулка 20", "Монтажная гильза 20")] [TestCase("UPONOR Q&E EVOLUTION КОЛЬЦО БЕЛОЕ 16 '900Ф", "Монтажная гильза 16")] public void SleeveTest(string query, string modified) - => Execute(productType: "Монтажная гильза", query, modified); + => Invoke(productType: "Монтажная гильза", query, modified); [TestCase("Фиксирующий желоб для ПЭ-трубы 16", "Фиксирующий желоб для ПЭ-трубы 16/17")] [TestCase("Фиксирующий желоб для ПЭ-трубы 20", "Фиксирующий желоб для ПЭ-трубы 20")] public void SupportingClipTest(string query, string modified) - => Execute(productType: "Желоб", query, modified); + => Invoke(productType: "Желоб", query, modified); [TestCase("Тройник 20-16-16", "Тройник -PLATINUM 20-16-16")] [TestCase("Тройник 20x16x16", "Тройник -PLATINUM 20-16-16")] [TestCase("Тройник 20-16-25", "Тройник -PLATINUM 25-16-20")] public void TPieceTest(string query, string modified) - => Execute(productType: "Тройник RAUTITAN", query, modified); + => Invoke(productType: "Тройник RAUTITAN", query, modified); [TestCase("муфта 20", "Муфта соединительная равнопроходная 20")] [TestCase("переходник 20-16", "Муфта соединительная переходная 20-16")] @@ -25,105 +26,105 @@ public class RautitanFittingsTests : ProductQueryModifierTests [TestCase("Соединение труба-труба 20/20, бронза", "Муфта соединительная равнопроходная 20")] [TestCase("Муфта соединительная переходная 20x16 для труб из сшитого полиэтилена аксиальный", "Муфта соединительная переходная 20-16")] public void CouplingTest(string query, string modified) - => Execute(productType: "Муфта соединительная", query, modified); + => Invoke(productType: "Муфта соединительная", query, modified); [TestCase("Переходник с внутренней резьбой 16xG 3/4\" для труб из сшитого полиэтилена аксиальный", "Переходник с внутренней резьбой -угольник-переходник 16 3/4")] public void AdapterInternalTest(string query, string modified) - => Execute(productType: "Переходник на внутреннюю резьбу", query, modified); + => Invoke(productType: "Переходник на внутреннюю резьбу", query, modified); [TestCase("Угольник 90°, 40 PX", "Угольник -PLATINUM 90 40")] public void ElbowTest(string query, string modified) - => Execute(productType: "Угольник RAUTITAN", query, modified); + => Invoke(productType: "Угольник RAUTITAN", query, modified); [TestCase("Уголок соединительный с ниппелем 20 х 1/2'', бронза", "Угольник-переходник с наружной резьбой 20 1/2")] public void ThreadElbowExternalTest(string query, string modified) - => Execute(productType: "Угольник с наружной резьбой", query, modified); + => Invoke(productType: "Угольник с наружной резьбой", query, modified); [TestCase("Уголок соединительный с муфтой 16 х 1/2\", бронза", "Угольник-переходник с внутренней резьбой 16 1/2")] public void ThreadElbowInternalTest(string query, string modified) - => Execute(productType: "Угольник с внутренней резьбой", query, modified); + => Invoke(productType: "Угольник с внутренней резьбой", query, modified); [TestCase("Угольник-переходник с накидной гайкой 16-G 1/2 RX+", "Угольник-переходник с накидной гайкой 16 1/2")] [TestCase("Соединение угловое с накидной гайкой 16 х 1/2\", латунь", "Угольник-переходник с накидной гайкой 16 1/2")] public void ScrewcapElbowTest(string query, string modified) - => Execute(productType: "Угольник с накидной гайкой", query, modified); + => Invoke(productType: "Угольник с накидной гайкой", query, modified); [TestCase("Тройник с внутр. резьбой на боков. проходе 25-Rp 1/2-25 RX+", "Тройник с внутр. резьбой на боков. проходе 25-Rp 1/2-25")] [TestCase("Тройник настенный с внутренней резьбой 16-Rp1/2-16 RX+", "Тройник настенный с внутренней резьбой 16-Rp1/2-16")] public void ThreadTPieceInternalTest(string query, string modified) - => Execute(productType: "Тройник RAUTITAN резьбовой внутренний", query, modified); + => Invoke(productType: "Тройник RAUTITAN резьбовой внутренний", query, modified); [TestCase("Тройник RAUTITAN RX+ с наружной резьбой 20-20-R 3/4", "Тройник с наружной резьбой 20-20-R 3/4")] public void ThreadTPieceExternalTest(string query, string modified) - => Execute(productType: "Тройник RAUTITAN резьбовой наружный", query, modified); + => Invoke(productType: "Тройник RAUTITAN резьбовой наружный", query, modified); [TestCase("Фиксатор поворота трубы 16/17/90°, без колец (оцинк. сталь)", "Фиксатор поворота 16/17/90°")] [TestCase("Дуга 90° 25", "Фиксатор поворота 25/90°")] [TestCase("Дуга 90° r/d >= 2.5. Ø25 (767025)", "Фиксатор поворота 25/90°")] public void BendFormerHeatingTest(string query, string modified) - => Execute(productType: "Фиксатор поворота отопление", query, modified); + => Invoke(productType: "Фиксатор поворота отопление", query, modified); [TestCase("Фиксатор поворота с кольцами 90°, 32", "Фиксатор поворота с кольцами 90° 32")] [TestCase("Фиксатор поворота с кольцами 45°, 16", "Фиксатор поворота с кольцами 45° 16")] public void BendFormerSanitaryTest(string query, string modified) - => Execute(productType: "Фиксатор поворота водоснабжение", query, modified); + => Invoke(productType: "Фиксатор поворота водоснабжение", query, modified); [TestCase("Угольник настенный с наружной резьбой 16-R 1/2 RX+", "Угольник настенный с наружной резьбой 16-R 1/2")] public void ThreadElbowWallExternalTest(string query, string modified) - => Execute(productType: "Угольник настенный наружный", query, modified); + => Invoke(productType: "Угольник настенный наружный", query, modified); [TestCase("Угольник настенный с внутр. резьбой 16-Rp 1/2 RX+", "Угольник настенный внутр. резьба 16-Rp 1/2")] [TestCase("Угольник настенный с длинным патрубком, внутр. резьба 16-Rp 1/2 RX+", "Угольник настенный внутр. резьба длинный 16-Rp 1/2")] [TestCase("Уголок с настенным креплением, удлиненный, 16 х 1/2'', бронза", "Угольник настенный внутр. резьба длинный 16-Rp 1/2")] public void ThreadElbowWallInternalTest(string query, string modified) - => Execute(productType: "Угольник настенный внутренний", query, modified); + => Invoke(productType: "Угольник настенный внутренний", query, modified); [TestCase("Проточный настенный угольник 16/16-Rp 1/2 длинный RX+", "Проточный настенный угольник 16/16-Rp 1/2 длинный")] [TestCase("Проточный настенный угольник 16/16-Rp 1/2 короткий RX+", "Проточный настенный угольник 16/16-Rp 1/2 короткий")] public void ThreadElbowDoubleWallInternalTest(string query, string modified) - => Execute(productType: "Проточный настенный угольник", query, modified); + => Invoke(productType: "Проточный настенный угольник", query, modified); [TestCase("Трубка из. нерж. стали для подкл. радиатора, Г-образная 16/250", "Трубка Г-образная 16/250")] [TestCase("Монтажная трубка для радиатора, конечная, 16 х 15 х 300 мм", "Трубка Г-образная 16/250")] public void ConnectionBendTest(string query, string modified) - => Execute(productType: "Трубка Г-образная", query, modified); + => Invoke(productType: "Трубка Г-образная", query, modified); [TestCase("Трубка из. нерж. стали для подкл. радиатора, Т-образная 16/250", "Трубка Т-образная 16/250")] [TestCase("Монтажная трубка для радиатора, проходная 20 х 15 х 300 мм", "Трубка Т-образная 20/250")] public void ConnectionTeeTest(string query, string modified) - => Execute(productType: "Трубка Т-образная", query, modified); + => Invoke(productType: "Трубка Т-образная", query, modified); [TestCase("Заглушка для полимерн. трубы 16 RX+", "Заглушка для полимерн. трубы 16")] [TestCase("Заглушка 20", "Заглушка для полимерн. трубы 20")] [TestCase("Заглушка, 16, латунь", "Заглушка для полимерн. трубы 16")] public void DummyPlugTest(string query, string modified) - => Execute(productType: "Заглушка труб RAUTITAN", query, modified); + => Invoke(productType: "Заглушка труб RAUTITAN", query, modified); [TestCase("Концовка разб. 3/4'' (еврок) для универс. трубы 16", "Резьбозажимное соединение flex/pink 16х2,2xG3/4")] [TestCase("Переходник компрессионный PEX 20х2.8-G 3/4\" Евроконус", "Резьбозажимное соединение flex/pink 20х2,8xG3/4")] [TestCase("Резьбозажимное соединение flex/pink 20х2,8xG3/4", "Резьбозажимное соединение flex/pink 20х2,8xG3/4")] public void EuroconeFlexTest(string query, string modified) - => Execute(productType: "Резьбозажимное flex", query, modified); + => Invoke(productType: "Резьбозажимное flex", query, modified); [TestCase("Резьбозажимное соединение stabil 16,2x2,6xG3/4", "Резьбозажимное соединение stabil 16,2x2,6xG3/4")] [TestCase("Резьбозажимное соединение stabil 20x2,9xG3/4", "Резьбозажимное соединение stabil 20x2,9xG3/4")] [TestCase("Концовка разб.3/4''(еврок.) для PE-Xc и PE-MDXс 16", "Резьбозажимное соединение stabil 16,2x2,6xG3/4")] public void EuroconeStabilTest(string query, string modified) - => Execute(productType: "Резьбозажимное stabil", query, modified); + => Invoke(productType: "Резьбозажимное stabil", query, modified); [TestCase("Переходник на евроконус 16-G 3/4", "Переходник на евроконус 16-G 3/4")] [TestCase("Соед.прям. с вн.резьбой (н.гайка, еврок.) 16 ник.", "Переходник на евроконус 16-G 3/4")] [TestCase("Переходник с накидной гайкой 16x2.2 -G 3/4\" Евроконус, c гильзой в комплекте", "Переходник на евроконус 16-G 3/4")] public void EuroconeAdapterTest(string query, string modified) - => Execute(productType: "Переходник на евроконус", query, modified); + => Invoke(productType: "Переходник на евроконус", query, modified); [TestCase("Резьбозажимное соединение для металлической трубки G 3/4 -15", "Резьбозажимное соединение для металлической трубки G 3/4 -15")] [TestCase("Концовка для монтажной трубы 15 х 1/2''", "Резьбозажимное соединение для металлической трубки G 3/4 -15")] [TestCase("Фитинг подключения L и T-образной медной трубки - D15 - G 3/4", "Резьбозажимное соединение для металлической трубки G 3/4 -15")] public void EuroconeConnectionBendTest(string query, string modified) - => Execute(productType: "Резьбозажимное для трубки", query, modified); + => Invoke(productType: "Резьбозажимное для трубки", query, modified); [TestCase("Ниппель", "К-т двух резьбозажим. нипелей с нар.резьбой 1/2х3/4")] public void NippelTest(string query, string modified) - => Execute(productType: "Ниппель", query, modified); + => Invoke(productType: "Ниппель", query, modified); } diff --git a/RhSolutions.Api.Tests/RautitanPipesTests.cs b/RhSolutions.Api.Tests/RautitanPipesTests.cs index 9a07e95..64a549b 100644 --- a/RhSolutions.Api.Tests/RautitanPipesTests.cs +++ b/RhSolutions.Api.Tests/RautitanPipesTests.cs @@ -1,30 +1,31 @@ + namespace RhSolutions.Api.Tests; public class RautitanPipesTests : ProductQueryModifierTests -{ - [TestCase("Унив.труба RAUTITAN flex 16x2,2, бухта 100м", "Труба Flex 16x2,2 бухта")] +{ + [TestCase("Унив.труба RAUTITAN flex 16x2,2, бухта 100м", "Труба Flex 16x2,2 бухта")] [TestCase("Труба flex 16", "Труба Flex 16x2,2 бухта")] [TestCase("Унив.труба RAUTITAN flex 32x4,4, прям.отрезки 6м", "Труба Flex 32x4,4 прям.отрезки")] [TestCase("Труба flex 32", "Труба Flex 32x4,4 прям.отрезки")] public void FlexPipeTest(string query, string modified) - => Execute(productType: "Flex", query, modified); + => Invoke(productType: "Flex", query, modified); [TestCase("Унив. труба RAUTITAN pink+ 16х2,2 мм, бухта 120 м", "Труба Pink+ 16х2,2 бухта")] [TestCase("труба pink 16", "Труба Pink+ 16х2,2 бухта")] [TestCase("Унив. труба RAUTITAN pink+ 32х4,4 мм, бухта 50 м", "Труба Pink+ 32х4,4 бухта")] [TestCase("труба pink 32", "Труба Pink+ 32х4,4 прямые отрезки")] public void PinkPipeTest(string query, string modified) - => Execute(productType: "Pink", query, modified); + => Invoke(productType: "Pink", query, modified); [TestCase("Универсальн.труба RAUTITAN stabil 16,2х2,6 мм, бухта 100 м", "Труба Stabil -PLATINUM 16,2х2,6 бухта")] [TestCase("труба stabil 16", "Труба Stabil -PLATINUM 16,2х2,6 бухта")] [TestCase("Универсальн.труба RAUTITAN stabil 32х4,7 мм, прям.отрезки 5м", "Труба Stabil -PLATINUM 32х4,7 прям.отрезки")] [TestCase("труба stabil 32", "Труба Stabil -PLATINUM 32х4,7 прям.отрезки")] public void StabilPipeTest(string query, string modified) - => Execute(productType: "Stabil", query, modified); + => Invoke(productType: "Stabil", query, modified); [TestCase("Отоп.труба РЕХАУ BLACK 16х2,2 мм, бухта 200 м", "Труба Black 16х2,2 бухта")] [TestCase("труба BLACK 16", "Труба Black 16х2,2 бухта")] public void BlackPipeTest(string query, string modified) - => Execute(productType: "Black", query, modified); + => Invoke(productType: "Black", query, modified); } \ No newline at end of file diff --git a/RhSolutions.Api.Tests/TestServiceCollection.cs b/RhSolutions.Api.Tests/TestServiceCollection.cs new file mode 100644 index 0000000..9f15c89 --- /dev/null +++ b/RhSolutions.Api.Tests/TestServiceCollection.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace RhSolutions.Api.Tests; + +[SetUpFixture] +public class TestServiceCollection +{ + public static ServiceProvider? ServiceProvider { get; private set; } + + [OneTimeSetUp] + public void CreateProvider() + { + var collection = new ServiceCollection(); + collection.AddModifiers(); + ServiceProvider = collection.BuildServiceProvider(); + } + + [OneTimeTearDown] + public void DisposeProvider() + { + ServiceProvider?.Dispose(); + } +} \ No newline at end of file