Skip to content

Commit 05e2be9

Browse files
committed
An example endpoint to get users by first name with in memory (H2) repository test
1 parent bb6fa79 commit 05e2be9

File tree

7 files changed

+86
-5
lines changed

7 files changed

+86
-5
lines changed

src/main/java/com/madadipouya/springkafkatest/controller/UserController.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
import com.github.javafaker.Faker;
44
import com.madadipouya.springkafkatest.dto.User;
55
import com.madadipouya.springkafkatest.kafka.producer.UserKafkaProducer;
6+
import com.madadipouya.springkafkatest.service.UserService;
67
import io.swagger.annotations.Api;
78
import io.swagger.annotations.ApiOperation;
89
import org.springframework.http.HttpStatus;
9-
import org.springframework.web.bind.annotation.GetMapping;
10-
import org.springframework.web.bind.annotation.RequestMapping;
11-
import org.springframework.web.bind.annotation.ResponseStatus;
12-
import org.springframework.web.bind.annotation.RestController;
10+
import org.springframework.web.bind.annotation.*;
1311

12+
import java.util.List;
1413
import java.util.UUID;
14+
import java.util.stream.Collectors;
1515

1616
@RestController
1717
@RequestMapping("v1/users")
@@ -20,10 +20,13 @@ public class UserController {
2020

2121
private final UserKafkaProducer kafkaProducer;
2222

23+
private final UserService userService;
24+
2325
private final Faker faker;
2426

25-
public UserController(UserKafkaProducer kafkaProducer) {
27+
public UserController(UserKafkaProducer kafkaProducer, UserService userService) {
2628
this.kafkaProducer = kafkaProducer;
29+
this.userService = userService;
2730
faker = new Faker();
2831
}
2932

@@ -33,4 +36,12 @@ public UserController(UserKafkaProducer kafkaProducer) {
3336
public void generateRandomUser() {
3437
kafkaProducer.writeToKafka(new User(UUID.randomUUID().toString(), faker.name().firstName(), faker.name().lastName()));
3538
}
39+
40+
@GetMapping("/{firstName}")
41+
@ResponseStatus
42+
@ApiOperation(value = "Returns a list of users that matchers the given name")
43+
public List<User> getUsers(@PathVariable(name = "firstName") String name) {
44+
List<com.madadipouya.springkafkatest.entity.User> users = userService.getUsers(name);
45+
return users.stream().map(user -> new User(user.getId(), user.getFirstName(), user.getLastName())).collect(Collectors.toList());
46+
}
3647
}

src/main/java/com/madadipouya/springkafkatest/repository/UserRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
import org.springframework.data.jpa.repository.JpaRepository;
55
import org.springframework.stereotype.Repository;
66

7+
import java.util.List;
8+
79
@Repository
810
public interface UserRepository extends JpaRepository<User, String> {
911

12+
List<User> getByFirstName(String firstName);
13+
1014
}

src/main/java/com/madadipouya/springkafkatest/service/UserService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
import com.madadipouya.springkafkatest.dto.User;
44

5+
import java.util.List;
6+
57
public interface UserService {
68

79
void save(User user);
10+
11+
List<com.madadipouya.springkafkatest.entity.User> getUsers(String firstName);
812
}

src/main/java/com/madadipouya/springkafkatest/service/impl/DefaultUserService.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import org.slf4j.LoggerFactory;
88
import org.springframework.stereotype.Service;
99

10+
import java.util.List;
11+
1012
@Service
1113
public class DefaultUserService implements UserService {
1214

@@ -23,4 +25,9 @@ public void save(User user) {
2325
logger.info("Saving user with id = {}", user.getUuid());
2426
userRepository.save(new com.madadipouya.springkafkatest.entity.User(user.getUuid(), user.getFirstName(), user.getLastName()));
2527
}
28+
29+
@Override
30+
public List<com.madadipouya.springkafkatest.entity.User> getUsers(String firstName) {
31+
return userRepository.getByFirstName(firstName);
32+
}
2633
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
INSERT INTO users (id, first_name, last_name) VALUES
2+
( 'b9e7100b-ff81-4a42-ace7-18802e00a9ab', 'Alejandro', 'Gillick'),
3+
( 'd8096b43-091d-46c4-acca-0869b0502e07', 'Frank', 'Castle'),
4+
( 'c656d2cd-8fe8-4640-b4ee-e9675790e926', 'John', 'Wick'),
5+
( '21494008-a54e-41d1-9c71-13344161378b', 'John', 'Rambo'),
6+
( 'cca1c70e-77d5-415e-8c2f-97ee55c3845d', 'Robert', 'McCall');
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.madadipouya.springkafkatest.kafka.repository;
2+
3+
import com.madadipouya.springkafkatest.entity.User;
4+
import com.madadipouya.springkafkatest.repository.UserRepository;
5+
import org.junit.jupiter.api.Test;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
8+
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
9+
import org.springframework.test.annotation.DirtiesContext;
10+
11+
import java.util.List;
12+
import java.util.UUID;
13+
14+
import static org.junit.jupiter.api.Assertions.assertEquals;
15+
import static org.junit.jupiter.api.Assertions.assertFalse;
16+
17+
@DataJpaTest
18+
@DirtiesContext
19+
public class UserRepositoryTest {
20+
21+
@Autowired
22+
private UserRepository userRepository;
23+
24+
@Autowired
25+
private TestEntityManager testEntityManager;
26+
27+
@Test
28+
void testGetByFirstName() {
29+
testEntityManager.persist(stubUser("John", "Wick"));
30+
testEntityManager.persist(stubUser("Robert", "McCall"));
31+
testEntityManager.persist(stubUser("John", "Rambo"));
32+
33+
List<User> users = userRepository.getByFirstName("John");
34+
35+
assertFalse(users.isEmpty());
36+
assertEquals(2, users.size());
37+
assertEquals("John", users.get(0).getFirstName());
38+
assertEquals("Wick", users.get(0).getLastName());
39+
assertEquals("John", users.get(1).getFirstName());
40+
assertEquals("Rambo", users.get(1).getLastName());
41+
}
42+
43+
private User stubUser(String firstName, String lastName) {
44+
return new User(UUID.randomUUID().toString(), firstName, lastName);
45+
}
46+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
spring.jpa.show-sql=true
2+
spring.datasource.url=jdbc:h2:file:~/testdb
3+
spring.flyway.enabled=false

0 commit comments

Comments
 (0)