Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package com.devteria.identityservice.controller;

import com.devteria.identityservice.dto.request.UserCreationRequest;
import com.devteria.identityservice.dto.response.UserResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.testcontainers.containers.MySQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;

import java.time.LocalDate;

@Slf4j
@SpringBootTest
@AutoConfigureMockMvc
@Testcontainers
class UserControllerIntergrationTest {
@Container
static final MySQLContainer<?> MY_SQL_CONTAINER = new MySQLContainer<>("mysql:latest");

@DynamicPropertySource
static void configureDataSource(DynamicPropertyRegistry registry) {
registry.add("spring.datasource.url", MY_SQL_CONTAINER::getJdbcUrl);
registry.add("spring.datasource.username", MY_SQL_CONTAINER::getUsername);
registry.add("spring.datasource.password", MY_SQL_CONTAINER::getPassword);
registry.add("spring.datasource.driverClassName", () -> "com.mysql.cj.jdbc.Driver");
registry.add("spring.jpa.hibernate.ddl-auto", () -> "update");
}

@Autowired
private MockMvc mockMvc;


private UserCreationRequest request;
private UserResponse userResponse;
private LocalDate dob;

@BeforeEach
void initData() {
dob = LocalDate.of(1990, 1, 1);

request = UserCreationRequest.builder()
.username("john")
.firstName("John")
.lastName("Doe")
.password("12345678")
.dob(dob)
.build();

userResponse = UserResponse.builder()
.id("cf0600f538b3")
.username("john")
.firstName("John")
.lastName("Doe")
.dob(dob)
.build();
}

@Test
//
void createUser_validRequest_success() throws Exception {
// GIVEN
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
String content = objectMapper.writeValueAsString(request);

// WHEN, THEN
mockMvc.perform(MockMvcRequestBuilders.post("/users")
.contentType(MediaType.APPLICATION_JSON_VALUE)
.content(content))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("code").value(1000))
.andExpect(MockMvcResultMatchers.jsonPath("result.username").value("john"))
.andExpect(MockMvcResultMatchers.jsonPath("result.firstName").value("John"))
.andExpect(MockMvcResultMatchers.jsonPath("result.lastName").value("Doe"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,16 @@
import java.time.LocalDate;
import java.util.Optional;

import com.devteria.identityservice.constant.PredefinedRole;
import com.devteria.identityservice.entity.Role;
import com.devteria.identityservice.repository.RoleRepository;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.TestPropertySource;

Expand All @@ -31,6 +35,8 @@ public class UserServiceTest {

@MockBean
private UserRepository userRepository;
@MockBean
private RoleRepository roleRepository;

private UserCreationRequest request;
private UserResponse userResponse;
Expand Down Expand Up @@ -71,6 +77,10 @@ void createUser_validRequest_success() {
// GIVEN
when(userRepository.existsByUsername(anyString())).thenReturn(false);
when(userRepository.save(any())).thenReturn(user);
when(roleRepository.findById(PredefinedRole.USER_ROLE))
.thenReturn(Optional.of(Role.builder()
.name(PredefinedRole.USER_ROLE)
.build()));

// WHEN
var response = userService.createUser(request);
Expand All @@ -83,7 +93,7 @@ void createUser_validRequest_success() {
@Test
void createUser_userExisted_fail() {
// GIVEN
when(userRepository.existsByUsername(anyString())).thenReturn(true);
when(userRepository.save(any())).thenThrow(new DataIntegrityViolationException("User existed"));

// WHEN
var exception = assertThrows(AppException.class, () -> userService.createUser(request));
Expand Down