-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathStorageImageControllerTest.java
More file actions
68 lines (61 loc) · 3.71 KB
/
StorageImageControllerTest.java
File metadata and controls
68 lines (61 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package dev.steady.storage.controller;
import com.epages.restdocs.apispec.Schema;
import dev.steady.global.auth.Authentication;
import dev.steady.global.config.ControllerTestConfig;
import dev.steady.storage.ImageUploadPurpose;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.document;
import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.resourceDetails;
import static dev.steady.global.auth.AuthFixture.createUserInfo;
import static dev.steady.storage.fixture.StorageFixture.createPutObjectUrlResponse;
import static org.mockito.BDDMockito.given;
import static org.springframework.http.HttpHeaders.AUTHORIZATION;
import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName;
import static org.springframework.restdocs.headers.HeaderDocumentation.requestHeaders;
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
import static org.springframework.restdocs.payload.JsonFieldType.STRING;
import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath;
import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields;
import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName;
import static org.springframework.restdocs.request.RequestDocumentation.queryParameters;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
class StorageImageControllerTest extends ControllerTestConfig {
@ParameterizedTest
@EnumSource(ImageUploadPurpose.class)
@DisplayName("이미지 업로드용 Presigned Url을 반환할 수 있다.")
void getImageUploadUrl(ImageUploadPurpose imageUploadPurpose) throws Exception {
// given
var userId = 1L;
var userInfo = createUserInfo(userId);
var authentication = new Authentication(userId);
given(jwtResolver.getAuthentication(TOKEN)).willReturn(authentication);
var response = createPutObjectUrlResponse();
var fileName = "image.png";
var purpose = imageUploadPurpose.getPurpose();
var keyPattern = imageUploadPurpose.getKeyPattern();
given(storageService.generatePutObjectUrl(fileName, keyPattern)).willReturn(response);
// when, then
mockMvc.perform(get("/api/v1/storage/image/{purpose}", purpose)
.queryParam("fileName", fileName)
.header(AUTHORIZATION, TOKEN))
.andDo(document("storage-v1-get-PutObjectUrlResponse",
resourceDetails().tag("스토리지").description("이미지 업로드 URL 불러오기")
.responseSchema(Schema.schema("PutObjectUrlResponse")),
queryParameters(
parameterWithName("fileName").description("확장자를 포함한 이미지 파일 이름")
),
requestHeaders(
headerWithName(AUTHORIZATION).description("토큰")
),
responseFields(
fieldWithPath("presignedUrl").type(STRING).description("사용자 프로필 이미지 업로드 URL"),
fieldWithPath("objectUrl").type(STRING).description("업로드된 이미지 URL")
))
)
.andExpect(status().isOk())
.andExpect(content().string(objectMapper.writeValueAsString(response)));
}
}