Browse Source

add tests

pull/2794/head
Jason Dove 6 months ago
parent
commit
dd3d73f3a6
No known key found for this signature in database
  1. 34
      ErsatzTV.Core.Tests/Scheduling/CountExpressionTests.cs
  2. 13
      ErsatzTV.Core/Scheduling/CountExpression.cs
  3. 3
      ErsatzTV/Pages/ScheduleItemsEditor.razor

34
ErsatzTV.Core.Tests/Scheduling/CountExpressionTests.cs

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
using ErsatzTV.Core.Interfaces.Scheduling;
using ErsatzTV.Core.Scheduling;
using NSubstitute;
using NUnit.Framework;
using Shouldly;
namespace ErsatzTV.Core.Tests.Scheduling;
[TestFixture]
public class CountExpressionTests
{
[Test]
[TestCase("2", 2)]
[TestCase("count", 10)]
[TestCase("count / 2", 5)]
[TestCase("count * 2", 20)]
[TestCase("count + 1", 11)]
[TestCase("count - 1", 9)]
[TestCase("random % 4 + 1", 3)]
[TestCase("invalid", 0)]
[TestCase("count / 0", 0)]
public void Should_Evaluate_Expression(string expression, int expected)
{
var enumerator = Substitute.For<IMediaCollectionEnumerator>();
enumerator.Count.Returns(10);
var random = Substitute.For<Random>();
random.Next().Returns(2);
int result = CountExpression.Evaluate(expression, enumerator, random, CancellationToken.None);
result.ShouldBe(expected);
}
}

13
ErsatzTV.Core/Scheduling/CountExpression.cs

@ -25,11 +25,22 @@ public static class CountExpression @@ -25,11 +25,22 @@ public static class CountExpression
};
};
object expressionResult = expression.Evaluate(cancellationToken);
object expressionResult = 0;
try
{
expressionResult = expression.Evaluate(cancellationToken);
}
catch (Exception)
{
// do nothing
}
return expressionResult switch
{
double d when double.IsInfinity(d) || double.IsNaN(d) => 0,
double doubleResult => (int)Math.Floor(doubleResult),
int intResult => intResult,
long longResult => (int)longResult,
_ => 0
};
}

3
ErsatzTV/Pages/ScheduleItemsEditor.razor

@ -532,7 +532,8 @@ @@ -532,7 +532,8 @@
</div>
<MudTextField @bind-Value="@_selectedItem.MultipleCount"
For="@(() => _selectedItem.MultipleCount)"
Disabled="@(_selectedItem.PlayoutMode is not PlayoutMode.Multiple || _selectedItem.MultipleMode is not MultipleMode.Count)"/>
Disabled="@(_selectedItem.PlayoutMode is not PlayoutMode.Multiple || _selectedItem.MultipleMode is not MultipleMode.Count)"
HelperText="Can be an expression with 'count' (collection size) and 'random' (0 to count-1)"/>
</MudStack>
<MudStack Row="true" Breakpoint="Breakpoint.SmAndDown" Class="form-field-stack gap-md-8 mb-5">
<div class="d-flex">

Loading…
Cancel
Save