1
package by.andd3dfx.services;
3
import static org.hamcrest.CoreMatchers.is;
4
import static org.hamcrest.MatcherAssert.assertThat;
5
import static org.mockito.Mockito.verify;
6
import static org.mockito.Mockito.when;
8
import by.andd3dfx.dto.LoggingSearchCriteria;
9
import by.andd3dfx.dto.MethodCallRecord;
10
import by.andd3dfx.helper.JsonHelper;
11
import by.andd3dfx.persistence.dao.LoggingRepository;
12
import by.andd3dfx.persistence.entities.LoggedRecord;
13
import by.andd3dfx.services.impl.LoggingService;
14
import java.time.LocalDateTime;
15
import java.util.Arrays;
16
import java.util.HashMap;
19
import org.junit.jupiter.api.Test;
20
import org.junit.jupiter.api.extension.ExtendWith;
21
import org.mockito.ArgumentCaptor;
22
import org.mockito.Captor;
23
import org.mockito.InjectMocks;
24
import org.mockito.Mock;
25
import org.mockito.junit.jupiter.MockitoExtension;
26
import org.springframework.messaging.simp.SimpMessagingTemplate;
28
@ExtendWith(MockitoExtension.class)
29
class LoggingServiceTest {
32
LoggingRepository loggingRepository;
34
SimpMessagingTemplate messagingTemplate;
36
JsonHelper jsonHelper;
38
ArgumentCaptor<LoggedRecord> captor;
41
LoggingService loggingService;
44
void getLoggedRecords() {
45
final LoggingSearchCriteria criteria = new LoggingSearchCriteria();
46
LoggedRecord loggedRecord = new LoggedRecord();
47
loggedRecord.setMethodName("method-name");
48
loggedRecord.setTimestamp(LocalDateTime.now());
49
loggedRecord.setIsSucceed(true);
50
loggedRecord.setResult("some-result");
51
final List<LoggedRecord> entities = Arrays.asList(loggedRecord);
52
when(loggingRepository.findByCriteria(criteria)).thenReturn(entities);
53
final Map<String, Object> ARGS = new HashMap<>();
54
when(jsonHelper.jsonStringToMap(loggedRecord.getArguments())).thenReturn(ARGS);
55
final Object RESULT = new Object();
56
when(jsonHelper.jsonStringToDefiniteType(loggedRecord.getResult(), loggedRecord.getResultType())).thenReturn(RESULT);
58
List<MethodCallRecord> result = loggingService.getLoggedRecords(criteria);
60
assertThat(result.size(), is(1));
61
assertThat(result.get(0).getName(), is(loggedRecord.getMethodName()));
62
assertThat(result.get(0).getArgs(), is(ARGS));
63
assertThat(result.get(0).getResult(), is(RESULT));
64
assertThat(result.get(0).getTimestamp(), is(loggedRecord.getTimestamp()));
65
assertThat(result.get(0).getIsSucceed(), is(loggedRecord.getIsSucceed()));
69
void addLoggingRecord() {
70
MethodCallRecord methodCallRecord = buildMethodCallRecord();
71
when(jsonHelper.objectToString(methodCallRecord.getArgs())).thenReturn("STRING1");
72
when(jsonHelper.objectToString(methodCallRecord.getResult())).thenReturn("STRING2");
74
loggingService.addLoggingRecord(methodCallRecord);
76
verify(loggingRepository).save(captor.capture());
77
LoggedRecord loggedRecord = captor.getValue();
78
assertThat(loggedRecord.getMethodName(), is("some-name"));
79
assertThat(loggedRecord.getArguments(), is("STRING1"));
80
assertThat(loggedRecord.getResult(), is("STRING2"));
81
assertThat(loggedRecord.getResultType(), is(String.class.getName()));
82
assertThat(loggedRecord.getTimestamp(), is(methodCallRecord.getTimestamp()));
83
assertThat(loggedRecord.getIsSucceed(), is(true));
86
private MethodCallRecord buildMethodCallRecord() {
87
MethodCallRecord methodCallRecord = new MethodCallRecord();
88
methodCallRecord.setName("some-name");
89
methodCallRecord.setArgs(new HashMap<>());
90
methodCallRecord.setResult("Some alien string");
91
methodCallRecord.setTimestamp(LocalDateTime.now());
92
methodCallRecord.setIsSucceed(true);
93
return methodCallRecord;