@RunWith(MockitoJUnitRunner.class)
public class LambdaFunctionHandlerTest {
private final String CONTENT_TYPE = "image/jpeg";
private final String TEST_IMAGE_FILENAME = "HappyFace.jpg";
private S3Event event;
@Mock
private AmazonS3 s3Client;
@Mock
private S3Object s3Object;
@Mock
private HttpRequestBase httpRequestBaseMock;
@Captor
private ArgumentCaptor<GetObjectRequest> getObjectRequest;
@Captor
private ArgumentCaptor<PutObjectRequest> putObjectRequestCaptor;
@Before
public void setUp() throws IOException {
event = TestUtils.parse("/s3-event.put.json", S3Event.class);
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType(CONTENT_TYPE);
when(s3Object.getObjectMetadata()).thenReturn(objectMetadata);
when(s3Client.getObject(getObjectRequest.capture())).thenReturn(s3Object);
when(s3Object.getKey()).thenReturn(TEST_IMAGE_FILENAME);
when(s3Object.getObjectContent()).thenReturn(new S3ObjectInputStream(LambdaFunctionHandler.class.getResourceAsStream("/HappyFace.jpg"), httpRequestBaseMock));
}
private Context createContext() {
TestContext ctx = new TestContext();
ctx.setFunctionName("Your Function Name");
return ctx;
}
@Test
public void testLambdaFunctionHandler() {
LambdaFunctionHandler handler = new LambdaFunctionHandler(s3Client);
Context ctx = createContext();
String output = handler.handleRequest(event, ctx);
Assert.assertEquals(CONTENT_TYPE, output);
}
@Test
public void testLambdaFunctionHandlerSendsResizedImageToTheResizedImageBucket() {
LambdaFunctionHandler handler = new LambdaFunctionHandler(s3Client);
Context ctx = createContext();
handler.handleRequest(event, ctx);
verify(s3Client).putObject(putObjectRequestCaptor.capture());
PutObjectRequest putObject = putObjectRequestCaptor.getValue();
assertEquals("resizedimgmtdevukcom", putObject.getBucketName());
assertEquals(TEST_IMAGE_FILENAME, putObject.getKey());
}
@Test
public void testLambdaFunctionHandlerResizedImageTo100x100() throws IOException {
LambdaFunctionHandler handler = new LambdaFunctionHandler(s3Client);
Context ctx = createContext();
handler.handleRequest(event, ctx);
verify(s3Client).putObject(putObjectRequestCaptor.capture());
PutObjectRequest putObjectRequest = putObjectRequestCaptor.getValue();
File imageFile = putObjectRequest.getFile();
BufferedImage originalImage = ImageIO.read(imageFile);
assertEquals(100, originalImage.getHeight());
assertEquals(100, originalImage.getWidth());
}
}