Skip to content

Commit 77ba3b1

Browse files
frankliu20GitHub Copilot
andauthored
chore: add ut for s3 (#36)
Co-authored-by: GitHub Copilot <[email protected]>
1 parent 1c6496d commit 77ba3b1

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package com.microsoft.migration.assets.worker.service;
2+
3+
import com.microsoft.migration.assets.worker.repository.ImageMetadataRepository;
4+
import org.junit.jupiter.api.BeforeEach;
5+
import org.junit.jupiter.api.Test;
6+
import org.junit.jupiter.api.extension.ExtendWith;
7+
import org.mockito.InjectMocks;
8+
import org.mockito.Mock;
9+
import org.mockito.junit.jupiter.MockitoExtension;
10+
import org.springframework.test.util.ReflectionTestUtils;
11+
import software.amazon.awssdk.core.ResponseInputStream;
12+
import software.amazon.awssdk.core.sync.RequestBody;
13+
import software.amazon.awssdk.services.s3.S3Client;
14+
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
15+
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
16+
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
17+
18+
import java.nio.file.Files;
19+
import java.nio.file.Path;
20+
import java.util.Collections;
21+
22+
import static org.junit.jupiter.api.Assertions.assertEquals;
23+
import static org.mockito.ArgumentMatchers.any;
24+
import static org.mockito.Mockito.*;
25+
26+
@ExtendWith(MockitoExtension.class)
27+
public class S3FileProcessingServiceTest {
28+
29+
@Mock
30+
private S3Client s3Client;
31+
32+
@Mock
33+
private ImageMetadataRepository imageMetadataRepository;
34+
35+
@InjectMocks
36+
private S3FileProcessingService s3FileProcessingService;
37+
38+
private final String bucketName = "test-bucket";
39+
private final String testKey = "test-image.jpg";
40+
private final String thumbnailKey = "test-image_thumbnail.jpg";
41+
42+
@BeforeEach
43+
void setUp() {
44+
ReflectionTestUtils.setField(s3FileProcessingService, "bucketName", bucketName);
45+
}
46+
47+
@Test
48+
void getStorageTypeReturnsS3() {
49+
// Act
50+
String result = s3FileProcessingService.getStorageType();
51+
52+
// Assert
53+
assertEquals("s3", result);
54+
}
55+
56+
@Test
57+
void downloadOriginalCopiesFileFromS3() throws Exception {
58+
// Arrange
59+
Path tempFile = Files.createTempFile("download-", ".tmp");
60+
@SuppressWarnings("unchecked")
61+
ResponseInputStream<GetObjectResponse> mockResponse = mock(ResponseInputStream.class);
62+
63+
when(s3Client.getObject(any(GetObjectRequest.class))).thenReturn(mockResponse);
64+
65+
// Act
66+
s3FileProcessingService.downloadOriginal(testKey, tempFile);
67+
68+
// Assert
69+
verify(s3Client).getObject(any(GetObjectRequest.class));
70+
71+
// Clean up
72+
Files.deleteIfExists(tempFile);
73+
}
74+
75+
@Test
76+
void uploadThumbnailPutsFileToS3() throws Exception {
77+
// Arrange
78+
Path tempFile = Files.createTempFile("thumbnail-", ".tmp");
79+
when(imageMetadataRepository.findAll()).thenReturn(Collections.emptyList());
80+
81+
// Act
82+
s3FileProcessingService.uploadThumbnail(tempFile, thumbnailKey, "image/jpeg");
83+
84+
// Assert
85+
verify(s3Client).putObject(any(PutObjectRequest.class), any(RequestBody.class));
86+
87+
// Clean up
88+
Files.deleteIfExists(tempFile);
89+
}
90+
91+
@Test
92+
void testExtractOriginalKey() throws Exception {
93+
// Use reflection to test private method
94+
String result = (String) ReflectionTestUtils.invokeMethod(
95+
s3FileProcessingService,
96+
"extractOriginalKey",
97+
"image_thumbnail.jpg");
98+
99+
// Assert
100+
assertEquals("image.jpg", result);
101+
}
102+
}

0 commit comments

Comments
 (0)