Skip to content

Commit

Permalink
YEL-213 [feat] medium test 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
hyeonjeongs committed Feb 10, 2024
1 parent 90d010b commit da7ccfd
Show file tree
Hide file tree
Showing 14 changed files with 108 additions and 41 deletions.
5 changes: 2 additions & 3 deletions src/docs/asciidoc/create-event-history.adoc
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
:reproducible:
== 공지 조회
== 이벤트 참여

=== 요청

include::{snippets}/api/v1/event/join/1/http-request.adoc[]
include::{snippets}/api/v1/event/join/2/http-request.adoc[]

=== 응답

include::{snippets}/api/v1/event/join/1/http-response.adoc[]

=== 주의

- "tag": "LUNCH_EVENT" | "ADMOB"
- "tag": "LUNCH_EVENT"

=== NOTE

Expand Down
4 changes: 2 additions & 2 deletions src/docs/asciidoc/find-event.adoc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
:reproducible:
== 공지 조회
== 이벤트 조회

=== 요청

Expand All @@ -17,7 +17,7 @@ include::{snippets}/api/v1/event/3/http-response.adoc[]

- data: *Response*[]
- *Response*
- tag : "LUNCH_EVENT" | "ADMOB"
- tag : "LUNCH_EVENT"
* LUNCH_EVENT에 해당하는 *Response*가 없으면 Render 해주지 말아주세요
- startDate : "2024-01-01T00:00:00+09:00"
- endDate : "2024-12-31T00:00:00+09:00"
Expand Down
6 changes: 4 additions & 2 deletions src/docs/asciidoc/index.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,10 @@

=== Event API

* 🆕 link:find-event.html[공지 조회, 2024-02-06]
* 🆕 link:find-event.html[이벤트 조회, 2024-02-06]

* 🆕 link:create-event-history.html[이벤트 참여, 2024-02-07]

* 🆕 link:reward-event.html[이벤트 보상, 2024-02-07]
* 🆕 link:reward-event.html[이벤트 보상, 2024-02-07]

* 🆕 link:reward-admob.html[광고보고 보상 얻기, 2024-02-11]
35 changes: 35 additions & 0 deletions src/docs/asciidoc/reward-admob.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
:reproducible:
== 이벤트 참여

=== 요청

include::{snippets}/api/v1/admob/reward/http-request.adoc[]

=== request body

- "rewardType": String -> "ADMOB_POINT" | "ADMOB_MULTIPLE_POINT"
* ADMOB_POINT : 광고 보고 10 포인트
* ADMOB_MULTIPLE_POINT : 광고 보고 포인트 2배 이벤트

- "randomType" : String -> "FIXED" | "ADMOB_RANDOM"
* FIXED : 고정값 (현재 이것만 사용)
* ADMOB_RANDOM : 랜덤값 (추후 랜덤으로 바뀔 것 고려)
- "uuid" : String -> UUID4 형식만 적용
- "rewardNumber" : Integer -> 포인트인 경우 10, 투표 포인트 2배 이벤트인 경우 현재 투표 후 받은 포인트 보내줘야함

=== 응답

include::{snippets}/api/v1/admob/reward/http-response.adoc[]

=== NOTE

- Header에 무작위한 UUID4 값을 넣어주세요
* 예시) IdempotencyKey: 0397b5f3-ecdc-47d6-b5d7-2b1afcf00e87
- 주의사항
* 같은 멱등성키를 2번 요청하면, 400번 에러.
- ADMOB
* ADMOB 서버에 SSV(ServerSideVerification) Options의 customData에 입력한 것과 동일한 멱등성 키를 넘겨주세요.

=== CHANGELOG

- 2024.02.11 릴리즈
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ protected void doFilterInternal(
|| requestPath.startsWith("/api/v1/admin/login")
|| requestPath.startsWith("/v2/apple/notifications")
|| requestPath.startsWith("/v2/google/notifications")
|| requestPath.startsWith("/api/v1/admob/verify")
|| (requestPath.startsWith("/api/v1/auth")
&& !requestPath.startsWith("/api/v1/auth/token/issue"))) {
filterChain.doFilter(request, response);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
|| requestPath.startsWith("/api/v1/admin/login")
|| requestPath.startsWith("/api/v1/auth")
|| requestPath.startsWith("/v2/apple/notifications")
|| requestPath.startsWith("/v2/google/notifications")) {
|| requestPath.startsWith("/v2/google/notifications")
|| requestPath.startsWith("/api/v1/admob/verify")) {
filterChain.doFilter(request, response);
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import lombok.val;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
Expand Down Expand Up @@ -66,7 +68,7 @@ public BaseResponse<EventRewardResponse> rewardEvent(@AccessTokenUser User user,
}

@GetMapping("/v1/admob/verify")
public BaseResponse verifyAdmob(HttpServletRequest request) {
public ResponseEntity<?> verifyAdmob(HttpServletRequest request) {
URI uri;
try {
uri =
Expand All @@ -76,7 +78,8 @@ public BaseResponse verifyAdmob(HttpServletRequest request) {
throw new EventBadRequestException(ADMOB_URI_BAD_REQUEST_EXCEPTION);
}
eventService.verifyAdmobReward(uri, request);
return BaseResponse.success(VERIFY_ADMOB_SSV_SUCCESS);

return new ResponseEntity<>(HttpStatus.OK);
}

@PostMapping("/v1/admob/reward")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public static AdmobSsvRequest of(Map<String, String[]> parameters ) {
.orElse(0);

return AdmobSsvRequest.builder()
.customData(getParameter.apply("customData"))
.customData(getParameter.apply("custom_data"))
.signature(getParameter.apply("signature"))
.keyId(keyId)
.transactionId(getParameter.apply("transaction_id"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public static EventInstanceReward of(EventInstance eventInstance, EventReward ev
.eventInstance(eventInstance)
.rewardTag(eventReward.getTag())
.rewardValue(eventReward.getMinRewardValue())
.rewardTitle(eventReward.getRewardTitle())
.rewardTitle(String.format(eventReward.getRewardTitle(), eventReward.getMinRewardValue()))
.rewardImage(eventReward.getRewardImage())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,6 @@ public interface EventRepository {
Optional<EventInstance> findInstanceByEventHistory(EventHistory eventHistory);

EventReward findRewardByTag(String rewardTag);

EventRewardMapping findRewardMappingByEventRewardId(Long eventRewardId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,6 @@ public EventReward findRewardByTag(String rewardTag) {
public EventRewardMapping findRewardMappingByEventRewardId(Long eventRewardId) {
return Optional.ofNullable(jpaQueryFactory.selectFrom(eventRewardMapping)
.where(eventRewardMapping.eventReward.id.eq(eventRewardId))
.fetchOne()).orElseThrow(() -> new EventNotFoundException(NOT_FOUND_EVENT_REWARD_EXCEPTION));
.fetchFirst()).orElseThrow(() -> new EventNotFoundException(NOT_FOUND_EVENT_REWARD_EXCEPTION));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ public void verifyAdmobReward(URI uri, HttpServletRequest request) {
RewardedAdsVerifier.KEYS_DOWNLOADER_INSTANCE_PROD)
.build();
verifier.verify(uri.toString());
System.out.println(" verify 성공 !!!!!!");

// 2. google이 넘겨준 query 정보 가져오기
AdmobSsvRequest admobRequest = AdmobSsvRequest.of(request.getParameterMap());
Expand Down
24 changes: 0 additions & 24 deletions src/main/resources/static/docs/user-data-get.html
Original file line number Diff line number Diff line change
Expand Up @@ -483,24 +483,6 @@ <h3 id="_응답">응답</h3>
}</code></pre>
</div>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight nowrap"><code class="language-http" data-lang="http">HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json

{
"status" : 200,
"message" : "유저 데이터 조회에 성공하였습니다.",
"data" : {
"tag" : "account-updated-at",
"value" : "true|null|2024-01-31"
}
}</code></pre>
</div>
</div>
<div class="paragraph">
<p><strong>필드 타입</strong></p>
</div>
Expand All @@ -523,9 +505,6 @@ <h3 id="_응답">응답</h3>
<li>
<p>예시) <strong>"false|2024-01-31|2024-01-31"</strong></p>
</li>
<li>
<p>"updated_at": "YYYY-mm-dd" | null</p>
</li>
</ul>
</div>
</li>
Expand Down Expand Up @@ -553,9 +532,6 @@ <h3 id="_changelog">CHANGELOG</h3>
<div class="ulist">
<ul>
<li>
<p>2024.02.10 응답 케이스 추가</p>
</li>
<li>
<p>2024.01.30 릴리즈</p>
</li>
<li>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.yello.server.domain.authorization.filter.JwtExceptionFilter;
import com.yello.server.domain.authorization.filter.JwtFilter;
import com.yello.server.domain.event.controller.EventController;
import com.yello.server.domain.event.dto.request.AdmobRewardRequest;
import com.yello.server.domain.event.dto.request.EventJoinRequest;
import com.yello.server.domain.event.dto.response.EventResponse;
import com.yello.server.domain.event.dto.response.EventRewardResponse;
Expand All @@ -37,6 +38,7 @@
import java.time.ZonedDateTime;
import java.util.List;
import java.util.UUID;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.DisplayNameGenerator.ReplaceUnderscores;
Expand Down Expand Up @@ -70,13 +72,13 @@
@DisplayName("Event 컨트롤러에서")
class EventControllerTest {

final OperationPreprocessor[] excludeRequestHeaders = new OperationPreprocessor[]{
final OperationPreprocessor[] excludeRequestHeaders = new OperationPreprocessor[] {
prettyPrint(),
modifyHeaders().remove("X-CSRF-TOKEN"),
modifyHeaders().remove(HttpHeaders.HOST)
};

final OperationPreprocessor[] excludeResponseHeaders = new OperationPreprocessor[]{
final OperationPreprocessor[] excludeResponseHeaders = new OperationPreprocessor[] {
prettyPrint(),
modifyHeaders().remove("X-Content-Type-Options"),
modifyHeaders().remove("X-XSS-Protection"),
Expand All @@ -101,6 +103,11 @@ class EventControllerTest {
/**
* TODO Event* TestUtil 작성 및 연결 필요
*/
@BeforeEach
void init() {

}

@Test
void 이벤트_전체_조회에_성공합니다1() throws Exception {
final EventReward ticket = EventReward.builder()
Expand Down Expand Up @@ -140,7 +147,8 @@ class EventControllerTest {
.build();
final EventRandom eventRandom2 = EventRandom.builder()
.randomTag("RANDOM")
.probabilityPointList("[{\"x\": 0, \"y\": 0},{ \"x\": 0.8, \"y\": 0.55 }, { \"x\": 1, \"y\": 1 }]")
.probabilityPointList(
"[{\"x\": 0, \"y\": 0},{ \"x\": 0.8, \"y\": 0.55 }, { \"x\": 1, \"y\": 1 }]")
.build();

final List<EventRewardMapping> rewardList1 = List.of(
Expand Down Expand Up @@ -251,7 +259,8 @@ class EventControllerTest {
.build();
final EventRandom eventRandom2 = EventRandom.builder()
.randomTag("RANDOM")
.probabilityPointList("[{\"x\": 0, \"y\": 0},{ \"x\": 0.8, \"y\": 0.55 }, { \"x\": 1, \"y\": 1 }]")
.probabilityPointList(
"[{\"x\": 0, \"y\": 0},{ \"x\": 0.8, \"y\": 0.55 }, { \"x\": 1, \"y\": 1 }]")
.build();

final List<EventRewardMapping> rewardList2 = List.of(
Expand Down Expand Up @@ -518,4 +527,43 @@ class EventControllerTest {
))
.andExpect(MockMvcResultMatchers.status().isOk());
}

@Test
void 광고__보상에_성공합니다() throws Exception {

final String idempotencyKey = "87552f7c-9b62-4b12-b567-1bd062b09288";

final AdmobRewardRequest request = AdmobRewardRequest.builder()
.rewardType("ADMOB_POINT")
.randomType("FIXED")
.uuid(idempotencyKey)
.rewardNumber(10)
.build();

final EventRewardResponse response = EventRewardResponse.builder()
.rewardTag("ADMOB_POINT")
.rewardValue(10L)
.rewardTitle(String.format("%s 포인트를 얻었어요!", 10L))
.rewardImage("https://storage.googleapis.com/yelloworld/image/ticket-reward.svg")
.build();

given(eventService.rewardAdmob(anyLong(), eq(request)))
.willReturn(response);
// when

// then
mockMvc.perform(
RestDocumentationRequestBuilders.post("/api/v1/admob/reward")
.with(csrf().asHeader())
.header(HttpHeaders.AUTHORIZATION, "Bearer your-access-token")
.header(ConstantUtil.IdempotencyKeyHeader, idempotencyKey)
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(request)))
.andDo(print())
.andDo(document("api/v1/admob/reward",
Preprocessors.preprocessRequest(excludeRequestHeaders),
Preprocessors.preprocessResponse(excludeResponseHeaders)
))
.andExpect(MockMvcResultMatchers.status().isOk());
}
}

0 comments on commit da7ccfd

Please sign in to comment.