Skip to content

Commit 2fd5ccf

Browse files
committed
Improve unit testing for mapping logic
1 parent 72777af commit 2fd5ccf

File tree

4 files changed

+89
-12
lines changed

4 files changed

+89
-12
lines changed

src/main/java/org/openpodcastapi/opa/subscription/model/Subscription.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
package org.openpodcastapi.opa.subscription.model;
22

33
import jakarta.persistence.*;
4-
import lombok.Generated;
5-
import lombok.Getter;
6-
import lombok.NoArgsConstructor;
7-
import lombok.Setter;
4+
import lombok.*;
85

96
import java.time.Instant;
107
import java.util.Set;
118
import java.util.UUID;
129

1310
@Entity
14-
@Table(name = "subscriptions")
1511
@NoArgsConstructor
12+
@AllArgsConstructor
13+
@Builder
14+
@Table(name = "subscriptions")
1615
public class Subscription {
1716
@Id
1817
@GeneratedValue(strategy = GenerationType.IDENTITY)

src/main/java/org/openpodcastapi/opa/subscription/model/UserSubscription.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
package org.openpodcastapi.opa.subscription.model;
22

33
import jakarta.persistence.*;
4-
import lombok.Generated;
5-
import lombok.Getter;
6-
import lombok.NoArgsConstructor;
7-
import lombok.Setter;
4+
import lombok.*;
85
import org.openpodcastapi.opa.user.model.User;
96

107
import java.time.Instant;
118
import java.util.UUID;
129

1310
@Entity
1411
@NoArgsConstructor
12+
@AllArgsConstructor
13+
@Builder
1514
@Table(name = "user_subscription")
1615
public class UserSubscription {
1716
@Id
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package org.openpodcastapi.opa.subscriptions;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.api.extension.ExtendWith;
5+
import org.openpodcastapi.opa.subscription.dto.UserSubscriptionDto;
6+
import org.openpodcastapi.opa.subscription.mapper.UserSubscriptionMapper;
7+
import org.openpodcastapi.opa.subscription.mapper.UserSubscriptionMapperImpl;
8+
import org.openpodcastapi.opa.subscription.model.Subscription;
9+
import org.openpodcastapi.opa.subscription.model.UserSubscription;
10+
import org.openpodcastapi.opa.subscription.repository.UserSubscriptionRepository;
11+
import org.openpodcastapi.opa.user.model.User;
12+
import org.springframework.beans.factory.annotation.Autowired;
13+
import org.springframework.test.context.ContextConfiguration;
14+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
15+
import org.springframework.test.context.junit.jupiter.SpringExtension;
16+
17+
import java.time.Instant;
18+
import java.util.UUID;
19+
20+
import static org.junit.jupiter.api.Assertions.*;
21+
22+
@ExtendWith(SpringExtension.class)
23+
@ContextConfiguration(classes = UserSubscriptionMapperImpl.class)
24+
class UserSubscriptionMapperTest {
25+
@Autowired
26+
private UserSubscriptionMapper mapper;
27+
28+
@MockitoBean
29+
private UserSubscriptionRepository userSubscriptionRepository;
30+
31+
/// Tests that a [UserSubscription] entity maps to a [UserSubscriptionDto] representation
32+
@Test
33+
void testToDto() {
34+
final Instant timestamp = Instant.now();
35+
final UUID uuid = UUID.randomUUID();
36+
User user = User.builder()
37+
.uuid(UUID.randomUUID())
38+
.username("test")
39+
.email("test@test.test")
40+
.createdAt(timestamp)
41+
.updatedAt(timestamp)
42+
.build();
43+
44+
Subscription subscription = Subscription.builder()
45+
.uuid(UUID.randomUUID())
46+
.feedUrl("test.com/feed1")
47+
.createdAt(timestamp)
48+
.updatedAt(timestamp)
49+
.build();
50+
51+
UserSubscription userSubscription = UserSubscription.builder()
52+
.uuid(uuid)
53+
.user(user)
54+
.subscription(subscription)
55+
.isSubscribed(true)
56+
.createdAt(timestamp)
57+
.updatedAt(timestamp)
58+
.build();
59+
60+
UserSubscriptionDto dto = mapper.toDto(userSubscription);
61+
assertNotNull(dto);
62+
63+
// The DTO should inherit the feed URL from the Subscription
64+
assertEquals(subscription.getFeedUrl(), dto.feedUrl());
65+
66+
// The DTO should use the Subscription's UUID rather than the UserSubscription's
67+
assertEquals(subscription.getUuid(), dto.uuid());
68+
assertTrue(dto.isSubscribed());
69+
}
70+
}

src/test/java/org/openpodcastapi/opa/user/UserMapperSpringTest.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
11
package org.openpodcastapi.opa.user;
22

33
import org.junit.jupiter.api.Test;
4-
import org.mapstruct.factory.Mappers;
4+
import org.junit.jupiter.api.extension.ExtendWith;
55
import org.openpodcastapi.opa.user.dto.CreateUserDto;
6+
import org.openpodcastapi.opa.user.dto.UserDto;
67
import org.openpodcastapi.opa.user.mapper.UserMapper;
8+
import org.openpodcastapi.opa.user.mapper.UserMapperImpl;
79
import org.openpodcastapi.opa.user.model.User;
810
import org.openpodcastapi.opa.user.repository.UserRepository;
9-
import org.openpodcastapi.opa.user.dto.UserDto;
11+
import org.springframework.beans.factory.annotation.Autowired;
12+
import org.springframework.test.context.ContextConfiguration;
1013
import org.springframework.test.context.bean.override.mockito.MockitoBean;
14+
import org.springframework.test.context.junit.jupiter.SpringExtension;
1115

1216
import java.time.Instant;
1317
import java.util.UUID;
1418

1519
import static org.junit.jupiter.api.Assertions.*;
1620

21+
@ExtendWith(SpringExtension.class)
22+
@ContextConfiguration(classes = UserMapperImpl.class)
1723
class UserMapperSpringTest {
18-
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
24+
@Autowired
25+
private UserMapper mapper;
1926

2027
@MockitoBean
2128
private UserRepository userRepository;
2229

30+
/// Tests that a [User] entity maps to a [UserDto] representation
2331
@Test
2432
void testToDto() {
2533
final Instant timestamp = Instant.now();
@@ -41,6 +49,7 @@ void testToDto() {
4149
assertEquals(user.getUpdatedAt(), dto.updatedAt());
4250
}
4351

52+
/// Tests that a [CreateUserDto] maps to a [User] entity
4453
@Test
4554
void testToEntity() {
4655
CreateUserDto dto = new CreateUserDto("test", "testPassword", "test@test.test");

0 commit comments

Comments
 (0)