Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 병합 #207

Merged
merged 11 commits into from
Jan 26, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
import java.util.List;
import kr.co.fastcampus.yanabada.domain.member.entity.Member;
import kr.co.fastcampus.yanabada.domain.member.entity.ProviderType;
import lombok.Builder;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

@Builder
public record PrincipalDetails(
Long id,
String email,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
public enum RoomCancelPolicy {
YNBD_1(7L),
YNBD_2(6L),
YNBD_1(6L),
YNBD_2(5L),
YNBD_3(Long.MAX_VALUE),
;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ public class OrderController {
private final OrderService orderService;

@PostMapping
public ResponseBody<Void> addOrder(@RequestBody OrderSaveRequest request) {
orderService.saveOrder(request);
public ResponseBody<Void> addOrders(@RequestBody List<OrderSaveRequest> requests) {
orderService.saveOrders(requests);
return ResponseBody.ok();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@ public class OrderService {
private final MemberRepository memberRepository;

@Transactional
public void saveOrder(OrderSaveRequest request) {
Room room = roomRepository.getRoom(request.roomId());
Member member = memberRepository.getMember(request.memberId());
Order order = orderRepository.save(request.toEntity(room, member, LocalDateTime.now()));
public void saveOrders(List<OrderSaveRequest> requests) {
requests.forEach(request -> {
Room room = roomRepository.getRoom(request.roomId());
Member member = memberRepository.getMember(request.memberId());
Order order = orderRepository.save(request.toEntity(room, member, LocalDateTime.now()));
});
}

@Transactional(readOnly = true)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package kr.co.fastcampus.yanabada.common.config;

import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;

@TestConfiguration
public class QueryDslTestConfig {

@PersistenceContext
private EntityManager entityManager;

@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package kr.co.fastcampus.yanabada.common.security;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import org.springframework.security.test.context.support.WithSecurityContext;

@Retention(RetentionPolicy.RUNTIME)
@WithSecurityContext(factory = WithMockMemberSecurityContextFactory.class)
public @interface WithMockMember {
long id() default 1L;
String[] authorities() default "ROLE_USER";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package kr.co.fastcampus.yanabada.common.security;

import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.test.context.support.WithSecurityContextFactory;

public class WithMockMemberSecurityContextFactory
implements WithSecurityContextFactory<WithMockMember> {

@Override
public SecurityContext createSecurityContext(WithMockMember annotation) {
PrincipalDetails memberDetails = PrincipalDetails.builder()
.id(annotation.id())
.email("test@email.com")
.build();
SecurityContext securityContext = SecurityContextHolder.createEmptyContext();
securityContext.setAuthentication(
new UsernamePasswordAuthenticationToken(
memberDetails,
null,
memberDetails.getAuthorities())
);
return securityContext;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package kr.co.fastcampus.yanabada.domain.product.controller;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import kr.co.fastcampus.yanabada.common.security.WithMockMember;
import org.junit.jupiter.api.DisplayName;
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.web.servlet.MockMvc;

@SpringBootTest
@AutoConfigureMockMvc
public class ProductControllerTest {

private static final MediaType MEDIA_TYPE = MediaType.APPLICATION_JSON;

@Autowired
private MockMvc mockMvc;

@DisplayName("[API][POST] 상품 등록 - 정상적인 등록 요청일 경우, 정상적으로 상품이 등록됩니다.")
@Test
@WithMockMember
void add_success() throws Exception {
//given
String url = "/v1/products";
String request = """
{
"orderId": 1,
"price": "400000",
"description": "급하게 처분합니다. 네고 환영합니다!!!",
"canNegotiate": true,
"saleEndDate": "2024-01-26",
"isAutoCancel": true
}
""";

//when
mockMvc.perform(post(url)
.content(request)
.contentType(MEDIA_TYPE)
)

//then
.andExpect(status().isBadRequest())
.andExpect(jsonPath("$.status").value("FAIL"));
}
}
Loading