From ed512f1b0f23012d80f59d80c5e401695420c6bb Mon Sep 17 00:00:00 2001 From: Roy Date: Thu, 10 Sep 2026 13:53:48 +0900 Subject: [PATCH] =?UTF-8?q?test:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EA=B4=91?= =?UTF-8?q?=EA=B3=A0=20=EC=A1=B0=ED=9A=8C=EA=B0=80=20=EB=85=B8=EC=B6=9C=20?= =?UTF-8?q?=EC=A7=91=EA=B3=84=EB=A5=BC=20=EB=B3=80=EA=B2=BD=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20=EB=B3=B4=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Confidence: high Scope-risk: narrow Tested: AdControllerTest 및 AdQueryServiceTest 10개 통과 --- .../ad/controller/AdControllerTest.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/test/java/com/swyp/picke/domain/ad/controller/AdControllerTest.java diff --git a/src/test/java/com/swyp/picke/domain/ad/controller/AdControllerTest.java b/src/test/java/com/swyp/picke/domain/ad/controller/AdControllerTest.java new file mode 100644 index 0000000..a9ce0e5 --- /dev/null +++ b/src/test/java/com/swyp/picke/domain/ad/controller/AdControllerTest.java @@ -0,0 +1,32 @@ +package com.swyp.picke.domain.ad.controller; + +import com.swyp.picke.domain.ad.dto.response.AdResponse; +import com.swyp.picke.domain.ad.enums.AdNetwork; +import com.swyp.picke.domain.ad.enums.AdSlotCode; +import com.swyp.picke.domain.ad.enums.AdTargetOs; +import com.swyp.picke.domain.ad.service.AdQueryService; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +class AdControllerTest { + @Test + void previewUsesExactUserResponseWithoutRecordingImpressions() throws Exception { + AdQueryService service = mock(AdQueryService.class); + AdResponse ad = new AdResponse("sample01", AdNetwork.ADPICK, "사용자 광고", "상품 설명", + "https://example.com/image.jpg", "구매하러 가기", "https://ad.picke.store/c/sample01", "광고"); + when(service.findServableAds(AdSlotCode.HOME_FEED, AdTargetOs.IOS, 5)).thenReturn(List.of(ad)); + MockMvcBuilders.standaloneSetup(new AdController(service)).build() + .perform(get("/api/v1/ads").accept(org.springframework.http.MediaType.APPLICATION_JSON).param("slot", "HOME_FEED").param("os", "IOS").param("size", "5")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.data.length()").value(1)) + .andExpect(jsonPath("$.data[0].code").value("sample01")) + .andExpect(jsonPath("$.data[0].title").value("사용자 광고")) + .andExpect(jsonPath("$.data[0].label").value("광고")); + verify(service).findServableAds(AdSlotCode.HOME_FEED, AdTargetOs.IOS, 5); + verifyNoMoreInteractions(service); + } +}