Skip to content

Commit

Permalink
Merge pull request #206 from Yanabada/feature/202
Browse files Browse the repository at this point in the history
판매 가능한 예약 내역 확인 날짜 수정
  • Loading branch information
Programmer-may authored Jan 26, 2024
2 parents 34a6586 + d32e1d3 commit 7b9b043
Show file tree
Hide file tree
Showing 8 changed files with 121 additions and 8 deletions.
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"));
}
}

0 comments on commit 7b9b043

Please sign in to comment.