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

48 lines
1.7 KiB
C#
Raw Permalink Normal View History

using w4c_workflows.Services.Execution;
using Xunit;
namespace w4c_workflows.Tests;
public class TaskResultTests
{
private static TaskInvocation Invocation() => new(
TaskInvocation.TypeValue, "run-1", "task-1", "root",
"shell", "a.sh", null, new Dictionary<string, string>(), "{}", null, "tenant-1", 1);
[Fact]
public void Parses_success_fields_published_by_the_worker()
{
var result = new ExecutionResult(true, 0, "stdout", string.Empty, "{\"ok\":true}", null, TimeSpan.FromMilliseconds(42));
var parsed = TaskResult.FromFields(TaskResultMessage.ToFields(Invocation(), result));
Assert.True(parsed.Success);
Assert.Equal("run-1", parsed.RunId);
Assert.Equal("task-1", parsed.TaskId);
Assert.Equal(1, parsed.Attempt);
Assert.Equal("tenant-1", parsed.TenantId);
Assert.Equal(0, parsed.ExitCode);
Assert.Equal("{\"ok\":true}", parsed.Output);
Assert.Null(parsed.Error);
Assert.Equal(42, parsed.DurationMs);
}
[Fact]
public void Parses_failure_fields_with_error()
{
var result = new ExecutionResult(false, 1, string.Empty, "boom", null, "boom", TimeSpan.Zero);
var parsed = TaskResult.FromFields(TaskResultMessage.ToFields(Invocation(), result));
Assert.False(parsed.Success);
Assert.Equal(1, parsed.ExitCode);
Assert.Equal("boom", parsed.Error);
Assert.Null(parsed.Output);
}
[Fact]
public void Throws_when_required_fields_are_missing()
{
var fields = new Dictionary<string, string> { ["type"] = "task.result" };
Assert.Throws<InvalidOperationException>(() => TaskResult.FromFields(fields));
}
}