Decky/tests/Decky.Core.Tests/CardUpdateRequestTests.cs

63 lines
2.1 KiB
C#

using System.Text.Json;
using Decky.Core.Api.Models;
using Decky.Core.Api.Requests;
namespace Decky.Core.Tests;
public sealed class CardUpdateRequestTests
{
[Fact]
public void FromCard_preserves_fields_and_serializes_explicit_null_done()
{
var card = new CardDto
{
Id = 7,
StackId = 3,
Title = "Original",
Description = "Details",
Type = "plain",
Owner = "elijah",
Order = 42,
Archived = false,
Done = DateTimeOffset.Parse("2026-07-19T12:00:00Z"),
DueDate = DateTimeOffset.Parse("2026-07-20T12:00:00Z"),
StartDate = DateTimeOffset.Parse("2026-07-18T12:00:00Z"),
Color = "d99080",
};
var request = CardUpdateRequest.FromCard(card, title: "Changed", done: null, replaceDone: true);
var json = JsonSerializer.Serialize(request, new JsonSerializerOptions(JsonSerializerDefaults.Web));
using var document = JsonDocument.Parse(json);
var root = document.RootElement;
Assert.Equal("Changed", root.GetProperty("title").GetString());
Assert.Equal("elijah", root.GetProperty("owner").GetString());
Assert.Equal("D99080", root.GetProperty("color").GetString());
Assert.Equal("2026-07-20T12:00:00+00:00", root.GetProperty("duedate").GetString());
Assert.Equal(JsonValueKind.Null, root.GetProperty("done").ValueKind);
}
[Fact]
public void FromCard_can_explicitly_clear_description_and_due_date()
{
var card = new CardDto
{
Title = "Card",
Description = "Remove me",
Type = "plain",
Owner = "admin",
DueDate = DateTimeOffset.Parse("2026-07-20T12:00:00Z"),
Color = "D99080",
};
var request = CardUpdateRequest.FromCard(
card,
description: string.Empty,
replaceDescription: true,
dueDate: null,
replaceDueDate: true);
Assert.Equal(string.Empty, request.Description);
Assert.Null(request.DueDate);
}
}