48 lines
1.7 KiB
C#
48 lines
1.7 KiB
C#
|
|
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));
|
||
|
|
}
|
||
|
|
}
|