0
0

Use Service Provider for test purposes
All checks were successful
Test API / test (push) Successful in 2m17s

This commit is contained in:
Serghei Cebotari 2024-01-26 16:48:47 +03:00
parent 194d85fbfe
commit 118761ebc2
6 changed files with 63 additions and 128 deletions

View File

@ -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;
}
}

View File

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

View File

@ -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<IProductMLModifier>(productType);
string actual = string.Empty;
Assert.That(modifier?.TryQueryModify(query, out actual), Is.True);
Assert.That(actual, Is.EqualTo(expected));
}
}

View File

@ -1,3 +1,4 @@
namespace RhSolutions.Api.Tests;
public class RautitanFittingsTests : ProductQueryModifierTests
@ -6,18 +7,18 @@ public class RautitanFittingsTests : ProductQueryModifierTests
[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);
}

View File

@ -1,3 +1,4 @@
namespace RhSolutions.Api.Tests;
public class RautitanPipesTests : ProductQueryModifierTests
@ -7,24 +8,24 @@ public class RautitanPipesTests : ProductQueryModifierTests
[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);
}

View File

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