Untitled

mail@pastecode.io avatar
unknown
plain_text
8 months ago
5.4 kB
2
Indexable
Never
public class ExampleUnitTest {
    @Test
    void testLogFeatureExtraDataUploaded() throws Throwable {
        // Chuẩn bị dữ liệu mẫu
        int featureId = 1;
        MultipartFile[] multipartFiles = new MultipartFile[1];
        ProceedingJoinPoint joinPoint = Mockito.mock(ProceedingJoinPoint.class);
        Example example = new Example();
        Example exampleMock = Mockito.spy(example); // Tạo mock của Example

        // Tạo proxy bằng AspectJProxyFactory
        AspectJProxyFactory proxyFactory = new AspectJProxyFactory(exampleMock);
        FeatureExtraDataService featureExtraDataServiceProxy = Mockito.mock(FeatureExtraDataService.class);
        proxyFactory.addAspect(new FeatureExtraDataServiceAspect(featureExtraDataServiceProxy));
        Example exampleProxy = proxyFactory.getProxy();

        // Thiết lập mock cho phương thức isExtraDataExistInS3() trên proxy
        Mockito.when(featureExtraDataServiceProxy.isExtraDataExistInS3(any(int.class), any(MultipartFile[].class), any(ExtraDataType.class)))
                .thenReturn(true);

        // Thực thi phương thức cần kiểm tra trên proxy
        String result = exampleProxy.logFeatureExtraDataUploaded(joinPoint, featureId, multipartFiles, ExtraDataType.TYPE_A);

        // Kiểm tra kết quả trả về
        assertEquals("endpointUrl", result);

        // Kiểm tra các phương thức tương tác với proxy
        Mockito.verify(featureExtraDataServiceProxy, Mockito.times(1))
                .isExtraDataExistInS3(featureId, multipartFiles, ExtraDataType.TYPE_A);
        Mockito.verify(joinPoint, Mockito.times(1)).proceed();

        // Kiểm tra việc gọi phương thức saveChangeLog()
        Mockito.verify(exampleMock, Mockito.times(1)).saveChangeLog(featureId, null, DataType.EXTRA_DATA, ChangeType.UPDATED, "{\"extraDataName\":\"fileName\"}");
    }
}
////////////////////////
public class ExampleUnitTest {
    @Test
    void testLogFeatureExtraDataDeleted() {
        // Chuẩn bị dữ liệu mẫu
        int featureId = 1;
        String extraDataName = "example.txt";
        Boolean success = true;
        JoinPoint joinPoint = Mockito.mock(JoinPoint.class);
        Example example = new Example();
        Example exampleMock = Mockito.spy(example); // Tạo mock của Example

        // Tạo proxy bằng AspectJProxyFactory
        AspectJProxyFactory proxyFactory = new AspectJProxyFactory(exampleMock);
        FeatureExtraDataService featureExtraDataServiceProxy = Mockito.mock(FeatureExtraDataService.class);
        proxyFactory.addAspect(new FeatureExtraDataServiceAspect(featureExtraDataServiceProxy));
        Example exampleProxy = proxyFactory.getProxy();

        // Thực thi phương thức cần kiểm tra trên proxy
        exampleProxy.logFeatureExtraDataDeleted(joinPoint, featureId, extraDataName, success);

        // Kiểm tra việc gọi phương thức saveChangeLog()
        Mockito.verify(exampleMock, Mockito.times(1)).saveChangeLog(featureId, null, DataType.EXTRA_DATA, ChangeType.DELETED, "{\"extraDataName\":\"example.txt\"}");
    }
}
////////////////////////////
@PrepareForTest({ObjectMapper.class, HttpStatus.class})
public class TestFilterTest {

    @Test
    public void testDoFilterInternal_InvalidApiKey_SendError() throws ServletException, IOException {
        // Arrange
        String configApiKey = "validApiKey";
        String invalidApiKey = "invalidApiKey";

        // Tạo các mock objects
        HttpServletRequest request = mock(HttpServletRequest.class);
        HttpServletResponse response = mock(HttpServletResponse.class);
        ServletOutputStream outputStream = mock(ServletOutputStream.class);
        FilterChain filterChain = mock(FilterChain.class);

        // Thiết lập giá trị cho API key trong header
        when(request.getHeader("x-api-key")).thenReturn(invalidApiKey);

        // Mock các phương thức tĩnh của lớp ObjectMapper và HttpStatus
        PowerMockito.mockStatic(ObjectMapper.class);
        PowerMockito.mockStatic(HttpStatus.class);

        // Thiết lập giá trị trả về cho phương thức writeValueAsString của ObjectMapper
        when(ObjectMapper.writeValueAsString(any(ResultDTO.class))).thenReturn("{\"status\": \"UNAUTHORIZED\"}");

        TestFilter testFilter = new TestFilter(configApiKey);

        // Act
        testFilter.doFilterInternal(request, response, filterChain);

        // Assert
        // Kiểm tra xem phương thức sendError đã được gọi hay chưa
        verify(response, times(1)).resetBuffer();
        verify(response, times(1)).setContentType("application/json");
        verify(response, times(1)).setStatus(HttpServletResponse.SC_UNAUTHORIZED);

        // Kiểm tra xem phương thức doFilter đã không được gọi
        verify(filterChain, never()).doFilter(request, response);

        // Kiểm tra xem phương thức getOutputStream đã được gọi
        verify(response, times(1)).getOutputStream();

        // Kiểm tra xem phương thức print và flushBuffer đã được gọi
        verify(outputStream, times(1)).print("{\"status\": \"UNAUTHORIZED\"}");
        verify(response, times(1)).flushBuffer();
    }
}
Leave a Comment