Skip to content

Commit

Permalink
[Improve] add ServerChanAlertNotifyHandlerImpl unit test (#2381)
Browse files Browse the repository at this point in the history
Signed-off-by: yuluo-yx <yuluo08290126@gmail.com>
Co-authored-by: tomsun28 <tomsun28@outlook.com>
  • Loading branch information
yuluo-yx and tomsun28 authored Jul 25, 2024
1 parent 659346d commit 3d9be22
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public byte type() {
}

@Data
private static class ServerChanWebHookDto {
protected static class ServerChanWebHookDto {
private static final String MARKDOWN = "markdown";

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,128 @@

package org.apache.hertzbeat.manager.component.alerter.impl;

import org.apache.hertzbeat.alert.AlerterProperties;
import org.apache.hertzbeat.common.entity.alerter.Alert;
import org.apache.hertzbeat.common.entity.manager.NoticeReceiver;
import org.apache.hertzbeat.common.entity.manager.NoticeTemplate;
import org.apache.hertzbeat.manager.support.exception.AlertNoticeException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.client.RestTemplate;

import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

/**
* test case for {@link ServerChanAlertNotifyHandlerImpl}
*/

class ServerChanAlertNotifyHandlerImplTest {

@Mock
private RestTemplate restTemplate;

@Mock
private HttpHeaders headers;

private ServerChanAlertNotifyHandlerImpl notifyHandler;

private NoticeTemplate noticeTemplate;

private NoticeReceiver receiver;

private AlerterProperties alerterProperties;

@BeforeEach
void setUp() {

MockitoAnnotations.openMocks(this);

noticeTemplate = mock(NoticeTemplate.class);
when(noticeTemplate.getContent()).thenReturn("This is a test notice template.");

receiver = mock(NoticeReceiver.class);
when(receiver.getAccessToken()).thenReturn("dummyToken");

alerterProperties = mock(AlerterProperties.class);
when(alerterProperties.getServerChanWebhookUrl()).thenReturn("http://localhost:8080/webhook/%s");

notifyHandler = new ServerChanAlertNotifyHandlerImpl();
ReflectionTestUtils.setField(notifyHandler, "restTemplate", restTemplate);
ReflectionTestUtils.setField(notifyHandler, "alerterProperties", alerterProperties);
}

@Test
void testSendSuccess() {

Alert alert = Alert.builder()
.content("Alert Content")
.lastAlarmTime(System.currentTimeMillis())
.id(1L)
.build();

ServerChanAlertNotifyHandlerImpl.ServerChanWebHookDto serverChanWebHookDto =
new ServerChanAlertNotifyHandlerImpl.ServerChanWebHookDto();
serverChanWebHookDto.setTitle("Test Title");
serverChanWebHookDto.setDesp("Test Message");

ResponseEntity<CommonRobotNotifyResp> mockResponseEntity =
new ResponseEntity<>(new CommonRobotNotifyResp(), HttpStatus.OK);
when(restTemplate.postForEntity(
anyString(),
any(HttpEntity.class),
eq(CommonRobotNotifyResp.class))
).thenReturn(mockResponseEntity);

notifyHandler.send(receiver, noticeTemplate, alert);

verify(restTemplate, times(1)).postForEntity(
anyString(),
any(HttpEntity.class),
eq(CommonRobotNotifyResp.class)
);
}

@Test
void testSendFailed() {

Alert alert = Alert.builder()
.content("Alert Content")
.lastAlarmTime(System.currentTimeMillis())
.id(1L)
.build();

when(restTemplate.postForEntity(
anyString(),
any(HttpEntity.class),
eq(CommonRobotNotifyResp.class))
).thenThrow(new RuntimeException("Simulated failure"));

AlertNoticeException exception = assertThrows(
AlertNoticeException.class,
() -> notifyHandler.send(receiver, noticeTemplate, alert)
);
assertTrue(exception.getMessage().contains("[ServerChan Notify Error]"));

verify(restTemplate, times(1)).postForEntity(
anyString(),
any(HttpEntity.class),
eq(CommonRobotNotifyResp.class)
);
}

}

0 comments on commit 3d9be22

Please sign in to comment.