diff --git a/tests/SIGCM2.Api.Tests/Json/DateOnlyJsonConverterTests.cs b/tests/SIGCM2.Api.Tests/Json/DateOnlyJsonConverterTests.cs
new file mode 100644
index 0000000..51fb8bd
--- /dev/null
+++ b/tests/SIGCM2.Api.Tests/Json/DateOnlyJsonConverterTests.cs
@@ -0,0 +1,54 @@
+using System.Text.Json;
+using FluentAssertions;
+using SIGCM2.Api.Json;
+
+namespace SIGCM2.Api.Tests.Json;
+
+///
+/// UDT-011 T300.30 — Unit tests for DateOnlyJsonConverter.
+/// Verifies round-trip serialization as "yyyy-MM-dd" ISO string.
+/// No DB, no HTTP.
+///
+public sealed class DateOnlyJsonConverterTests
+{
+ private readonly JsonSerializerOptions _options = new()
+ {
+ Converters = { new DateOnlyJsonConverter() }
+ };
+
+ /// [REQ-BE-JSON-001] DateOnly serializes as "yyyy-MM-dd" string.
+ [Fact]
+ public void Serialize_DateOnly_WritesYyyyMmDdString()
+ {
+ var date = new DateOnly(2026, 5, 1);
+ var json = JsonSerializer.Serialize(date, _options);
+ json.Should().Be("\"2026-05-01\"");
+ }
+
+ /// [REQ-BE-JSON-002] "yyyy-MM-dd" string deserializes back to DateOnly.
+ [Fact]
+ public void Deserialize_YyyyMmDdString_ReturnsDateOnly()
+ {
+ var json = "\"2026-05-01\"";
+ var date = JsonSerializer.Deserialize(json, _options);
+ date.Should().Be(new DateOnly(2026, 5, 1));
+ }
+
+ /// [REQ-BE-JSON-003] Invalid date format (dd/MM/yyyy) throws on deserialize.
+ [Fact]
+ public void Deserialize_InvalidFormat_ThrowsFormatException()
+ {
+ var json = "\"01/05/2026\""; // formato dd/MM/yyyy — inválido
+ var act = () => JsonSerializer.Deserialize(json, _options);
+ act.Should().Throw();
+ }
+
+ /// JSON null is not valid for non-nullable DateOnly — must throw.
+ [Fact]
+ public void Deserialize_Null_ThrowsException()
+ {
+ var json = "null";
+ var act = () => JsonSerializer.Deserialize(json, _options);
+ act.Should().Throw(); // JsonException desde GetString() null path
+ }
+}