From f6825ec885d31aa681b151a60c9b7f6eb5127666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20M=C3=B6rling?= Date: Fri, 15 May 2026 19:58:18 +0200 Subject: [PATCH] test: add OrderStatusConverter and SubscriptionConverter unit tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - OrderStatusConverterTest (6 tests): null-to-null, value-to-string, string-to-enum matching, null-to-null reverse, invalid string throws IllegalArgumentException, roundtrip all 6 OrderStatus values - SubscriptionConverterTest (6 tests): same pattern for 3 subscription values (NONE/BASIC/PRO) - Pure unit tests — no Spring context, no database - Raises backend branch coverage from 45.5% to 77.3% (both converters now at 100% branch and line coverage) - Unblocks ./gradlew check: the 60% branch threshold was previously failing due to untested converter logic --- .../entity/OrderStatusConverterTest.java | 46 +++++++++++++++++++ .../entity/SubscriptionConverterTest.java | 46 +++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 backend/src/test/java/se/bilhalsning/entity/OrderStatusConverterTest.java create mode 100644 backend/src/test/java/se/bilhalsning/entity/SubscriptionConverterTest.java diff --git a/backend/src/test/java/se/bilhalsning/entity/OrderStatusConverterTest.java b/backend/src/test/java/se/bilhalsning/entity/OrderStatusConverterTest.java new file mode 100644 index 0000000..4014646 --- /dev/null +++ b/backend/src/test/java/se/bilhalsning/entity/OrderStatusConverterTest.java @@ -0,0 +1,46 @@ +package se.bilhalsning.entity; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import org.junit.jupiter.api.Test; + +class OrderStatusConverterTest { + + private final OrderStatusConverter converter = new OrderStatusConverter(); + + @Test + void shouldReturnValueWhenStatusIsNotNull() { + assertEquals("sent", converter.convertToDatabaseColumn(OrderStatus.SENT)); + } + + @Test + void shouldReturnNullWhenStatusIsNull() { + assertNull(converter.convertToDatabaseColumn(null)); + } + + @Test + void shouldReturnEnumWhenDbDataMatchesValue() { + assertEquals(OrderStatus.PAID, converter.convertToEntityAttribute("paid")); + } + + @Test + void shouldReturnNullWhenDbDataIsNull() { + assertNull(converter.convertToEntityAttribute(null)); + } + + @Test + void shouldThrowWhenDbDataDoesNotMatchAnyStatus() { + assertThrows(IllegalArgumentException.class, + () -> converter.convertToEntityAttribute("bogus")); + } + + @Test + void shouldRoundtripAllEnumValues() { + for (OrderStatus status : OrderStatus.values()) { + String db = converter.convertToDatabaseColumn(status); + assertEquals(status, converter.convertToEntityAttribute(db)); + } + } +} diff --git a/backend/src/test/java/se/bilhalsning/entity/SubscriptionConverterTest.java b/backend/src/test/java/se/bilhalsning/entity/SubscriptionConverterTest.java new file mode 100644 index 0000000..115b771 --- /dev/null +++ b/backend/src/test/java/se/bilhalsning/entity/SubscriptionConverterTest.java @@ -0,0 +1,46 @@ +package se.bilhalsning.entity; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import org.junit.jupiter.api.Test; + +class SubscriptionConverterTest { + + private final SubscriptionConverter converter = new SubscriptionConverter(); + + @Test + void shouldReturnValueWhenSubscriptionIsNotNull() { + assertEquals("basic", converter.convertToDatabaseColumn(Subscription.BASIC)); + } + + @Test + void shouldReturnNullWhenSubscriptionIsNull() { + assertNull(converter.convertToDatabaseColumn(null)); + } + + @Test + void shouldReturnEnumWhenDbDataMatchesValue() { + assertEquals(Subscription.PRO, converter.convertToEntityAttribute("pro")); + } + + @Test + void shouldReturnNullWhenDbDataIsNull() { + assertNull(converter.convertToEntityAttribute(null)); + } + + @Test + void shouldThrowWhenDbDataDoesNotMatchAnySubscription() { + assertThrows(IllegalArgumentException.class, + () -> converter.convertToEntityAttribute("premium")); + } + + @Test + void shouldRoundtripAllEnumValues() { + for (Subscription subscription : Subscription.values()) { + String db = converter.convertToDatabaseColumn(subscription); + assertEquals(subscription, converter.convertToEntityAttribute(db)); + } + } +}