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); } }