Новые условия (#15)
Tests / frontend-test (push) Successful in 46s
Tests / backend-test (push) Successful in 1m48s

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/15
This commit was merged in pull request #15.
This commit is contained in:
2026-08-24 12:27:25 +00:00
parent a1fa862ed4
commit e4a6cb8167
12 changed files with 137 additions and 31 deletions
@@ -360,9 +360,10 @@ public sealed class TemplateRouteService(
var expected = step.Value;
return step.Operation switch
{
ComparisonOperator.Equal =>
string.Equals(actual.Trim(), expected?.Trim(), StringComparison.OrdinalIgnoreCase) ||
(TryParseNumber(actual, out var eqActual) && TryParseNumber(expected, out var eqExpected) && eqActual == eqExpected),
ComparisonOperator.Equal => IsEqual(actual, expected),
ComparisonOperator.NotEqual => !IsEqual(actual, expected),
ComparisonOperator.Contains => Contains(actual, expected),
ComparisonOperator.NotContains => !Contains(actual, expected),
ComparisonOperator.GreaterThan =>
TryParseNumber(actual, out var gtActual) && TryParseNumber(expected, out var gtExpected) && gtActual > gtExpected,
ComparisonOperator.LessThan =>
@@ -371,6 +372,19 @@ public sealed class TemplateRouteService(
};
}
/// <summary>
/// «Равно» для значений без типа: сначала как текст без учёта регистра, затем как числа —
/// чтобы «1000» и «1000.00» считались равными. «Не равно» — строгое отрицание этого же.
/// </summary>
private static bool IsEqual(string actual, string? expected) =>
string.Equals(actual.Trim(), expected?.Trim(), StringComparison.OrdinalIgnoreCase) ||
(TryParseNumber(actual, out var eqActual) && TryParseNumber(expected, out var eqExpected) && eqActual == eqExpected);
/// <summary>«Содержит» — подстрока без учёта регистра; операторы доступны только для текстовых полей.</summary>
private static bool Contains(string actual, string? expected) =>
!string.IsNullOrEmpty(expected) &&
actual.Contains(expected.Trim(), StringComparison.OrdinalIgnoreCase);
private static bool TryParseNumber(string? value, out double number) =>
double.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out number);