w4c-workflows-api/w4c-workflows-api.Tests/TriggerSpecTests.cs

87 lines
2.2 KiB
C#

using w4c_workflows.Models;
using w4c_workflows.Services.Triggers;
using Xunit;
namespace w4c_workflows.Tests;
public class TriggerSpecTests
{
[Fact]
public void Parses_cron_trigger()
{
var spec = TriggerSpec.Parse("{\"type\":\"cron\",\"cron\":\"0 */6 * * *\"}", out var error);
Assert.Null(error);
Assert.NotNull(spec);
Assert.Equal(TriggerType.Cron, spec!.Type);
Assert.Equal("0 */6 * * *", spec.Cron);
Assert.Null(spec.Interval);
}
[Fact]
public void Parses_interval_trigger_into_a_timespan()
{
var spec = TriggerSpec.Parse("{\"type\":\"interval\",\"interval\":\"30m\"}", out var error);
Assert.Null(error);
Assert.NotNull(spec);
Assert.Equal(TriggerType.Interval, spec!.Type);
Assert.Equal(TimeSpan.FromMinutes(30), spec.Interval);
}
[Fact]
public void Parses_webhook_trigger()
{
var spec = TriggerSpec.Parse("{\"type\":\"webhook\",\"webhookPath\":\"/h/orders\"}", out var error);
Assert.Null(error);
Assert.Equal("/h/orders", spec!.WebhookPath);
}
[Fact]
public void Parses_queue_trigger_with_stream()
{
var spec = TriggerSpec.Parse("{\"type\":\"queue\",\"stream\":\"orders\"}", out var error);
Assert.Null(error);
Assert.Equal(TriggerType.Queue, spec!.Type);
Assert.Equal("orders", spec.Stream);
}
[Fact]
public void Null_json_returns_null_without_error()
{
var spec = TriggerSpec.Parse(null, out var error);
Assert.Null(spec);
Assert.Null(error);
}
[Fact]
public void Invalid_interval_returns_null_with_error()
{
var spec = TriggerSpec.Parse("{\"type\":\"interval\",\"interval\":\"soon\"}", out var error);
Assert.Null(spec);
Assert.NotNull(error);
}
[Fact]
public void Malformed_json_returns_null_with_error()
{
var spec = TriggerSpec.Parse("{not json", out var error);
Assert.Null(spec);
Assert.NotNull(error);
}
[Fact]
public void Missing_type_returns_null_with_error()
{
var spec = TriggerSpec.Parse("{\"cron\":\"0 9 * * *\"}", out var error);
Assert.Null(spec);
Assert.NotNull(error);
}
}