From 52543cf7a2ec972923f5d3618dd77b366a73c92a Mon Sep 17 00:00:00 2001 From: Serghei Cebotari Date: Wed, 11 Oct 2023 22:35:39 +0300 Subject: [PATCH] Add bend formers --- .../RautitanFittingsTests.cs | 6 +++++ RhSolutions.QueryModifiers/ElbowModifier.cs | 24 +++++++++++++++---- .../ProductQueryModifierFactory.cs | 6 ++++- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/RhSolutions.Api.Tests/RautitanFittingsTests.cs b/RhSolutions.Api.Tests/RautitanFittingsTests.cs index ba11999..aac29b8 100644 --- a/RhSolutions.Api.Tests/RautitanFittingsTests.cs +++ b/RhSolutions.Api.Tests/RautitanFittingsTests.cs @@ -47,4 +47,10 @@ public class RautitanFittingsTests : ProductQueryModifierTests [TestCase("Тройник RAUTITAN RX+ с наружной резьбой 20-20-R 3/4", "Тройник RAUTITAN с наружной резьбой 20-20-R 3/4")] public void ThreadTPieceExternalTest(string query, string modified) => Execute(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); } diff --git a/RhSolutions.QueryModifiers/ElbowModifier.cs b/RhSolutions.QueryModifiers/ElbowModifier.cs index 05ca9b4..571fac8 100644 --- a/RhSolutions.QueryModifiers/ElbowModifier.cs +++ b/RhSolutions.QueryModifiers/ElbowModifier.cs @@ -4,10 +4,12 @@ using Microsoft.AspNetCore.Http.Extensions; namespace RhSolutions.QueryModifiers { - public class ElbowModifier : IProductQueryModifier + public class ElbowModifier : IProductQueryModifier { - private string diameterPattern { get; } = @"\b(16|20|25|32|40|50|63)\b"; - private string anglePattern { get; } = @"\b(45|90)"; + private string diameterPattern { get; } = @"([\b\D]|^)(?16|20|25|32|40|50|63)([\b\D]|$)"; + private string anglePattern { get; } = @"([\b\D]|^)(?45|90)([\b\D]|$)"; + + protected virtual string name {get;} = "Угольник RAUTITAN -PLATINUM"; public bool TryQueryModify(IQueryCollection collection, out QueryString queryString) { queryString = QueryString.Empty; @@ -22,7 +24,7 @@ namespace RhSolutions.QueryModifiers var angle = Regex.Match(query, anglePattern); QueryBuilder qb = new() { - {"query", $"Угольник RAUTITAN -PLATINUM {(angle.Success ? angle.Captures.First() : 90)} {diameter.Captures.First()}"} + {"query", CreateName(angle, diameter)} }; queryString = qb.ToQueryString(); return true; @@ -32,5 +34,19 @@ namespace RhSolutions.QueryModifiers return false; } } + + protected virtual string CreateName(Match angle, Match diameter) + { + return $"{name} {(angle.Success ? angle.Groups["Angle"].Captures.First() : 90)} {diameter.Groups["Diameter"].Captures.First()}"; + } + } + + public class BendFormerHeating : ElbowModifier + { + protected override string name => "Фиксатор поворота без колец"; + protected override string CreateName(Match angle, Match diameter) + { + return $"{name} {(diameter.Groups["Diameter"].Captures.First().ToString() == "16" ? "16/17" : diameter.Groups["Diameter"].Captures.First())}/{(angle.Success ? angle.Groups["Angle"].Captures.First() : 90)}°"; + } } } diff --git a/RhSolutions.QueryModifiers/ProductQueryModifierFactory.cs b/RhSolutions.QueryModifiers/ProductQueryModifierFactory.cs index 32d5e5e..094b5ae 100644 --- a/RhSolutions.QueryModifiers/ProductQueryModifierFactory.cs +++ b/RhSolutions.QueryModifiers/ProductQueryModifierFactory.cs @@ -1,4 +1,6 @@ -namespace RhSolutions.QueryModifiers; +using RhSolutions.QueryModifiers.Heating; + +namespace RhSolutions.QueryModifiers; public class ProductQueryModifierFactory { @@ -32,6 +34,8 @@ public class ProductQueryModifierFactory return new CouplingModifier(); case "Угольник RAUTITAN": return new ElbowModifier(); + case "Фиксатор поворота без колец": + return new BendFormerHeating(); case "Flex": return new FlexPipeQueryModifier(); case "Pink":