64 lines
2.5 KiB
C#
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);
|
|
}
|