Files
VolcanicCore/tests/VolcanicCore.Tests/WorkflowsEndpointsTests.cs

64 lines
2.5 KiB
C#

using System.Net;
using System.Net.Http.Json;
namespace VolcanicCore.Tests;
public class WorkflowsEndpointsTests : IClassFixture<WebFactory>
{
private readonly WebFactory _factory;
public WorkflowsEndpointsTests(WebFactory f) => _factory = f;
private async Task<HttpClient> LoggedIn()
{
var c = _factory.CreateClient(new() { HandleCookies = true, AllowAutoRedirect = false });
await c.PostAsJsonAsync("/api/session", new { password = _factory.AdminPassword });
return c;
}
private static object EmptyGraph() => new { nodes = new object[0], edges = new object[0] };
[Fact]
public async Task Full_crud_round_trip()
{
var c = await LoggedIn();
var create = await c.PostAsJsonAsync("/api/workflows", new { name = "hello", graph = EmptyGraph() });
Assert.Equal(HttpStatusCode.Created, create.StatusCode);
var created = await create.Content.ReadFromJsonAsync<WorkflowDto>();
Assert.NotNull(created);
Assert.False(created!.Active);
var got = await c.GetFromJsonAsync<WorkflowDto>($"/api/workflows/{created.Id}");
Assert.Equal("hello", got!.Name);
var upd = await c.PutAsJsonAsync($"/api/workflows/{created.Id}",
new { name = "renamed", graph = EmptyGraph() });
Assert.Equal(HttpStatusCode.NoContent, upd.StatusCode);
var toggle = await c.PostAsync($"/api/workflows/{created.Id}/activate", null);
Assert.Equal(HttpStatusCode.NoContent, toggle.StatusCode);
var after = await c.GetFromJsonAsync<WorkflowDto>($"/api/workflows/{created.Id}");
Assert.True(after!.Active);
Assert.Equal("renamed", after.Name);
var deact = await c.PostAsync($"/api/workflows/{created.Id}/deactivate", null);
Assert.Equal(HttpStatusCode.NoContent, deact.StatusCode);
var del = await c.DeleteAsync($"/api/workflows/{created.Id}");
Assert.Equal(HttpStatusCode.NoContent, del.StatusCode);
var missing = await c.GetAsync($"/api/workflows/{created.Id}");
Assert.Equal(HttpStatusCode.NotFound, missing.StatusCode);
}
[Fact]
public async Task Post_with_missing_graph_returns_400()
{
var c = await LoggedIn();
var res = await c.PostAsJsonAsync("/api/workflows", new { name = "nograph" });
Assert.Equal(HttpStatusCode.BadRequest, res.StatusCode);
}
private sealed record WorkflowDto(string Id, string Name, bool Active,
System.Text.Json.JsonElement Graph, DateTimeOffset CreatedAt, DateTimeOffset UpdatedAt);
}