File size: 4,914 Bytes
d6afd6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package com.dalab.adminservice.service.impl;

import com.dalab.adminservice.client.*;
import com.dalab.adminservice.dto.AggregatedJobStatusDTO;
import com.dalab.adminservice.dto.JobStatusDTO;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
class JobStatusServiceImplTest {

    @Mock
    private IDiscoveryJobApiClient discoveryJobApiClient;
    @Mock
    private IAutolabelJobApiClient autolabelJobApiClient;
    @Mock
    private IAutoarchivalTaskApiClient autoarchivalTaskApiClient;
    @Mock
    private IAutodeleteTaskApiClient autodeleteTaskApiClient;
    @Mock
    private IAutocomplianceJobApiClient autocomplianceJobApiClient;

    @InjectMocks
    private JobStatusServiceImpl jobStatusService;

    private JobStatusDTO sampleJob1, sampleJob2;

    @BeforeEach
    void setUp() {
        sampleJob1 = JobStatusDTO.builder()
                .jobId("job1")
                .serviceName("TestService1")
                .status("COMPLETED_SUCCESS")
                .submittedAt(LocalDateTime.now().minusHours(2))
                .completedAt(LocalDateTime.now().minusHours(1))
                .build();

        sampleJob2 = JobStatusDTO.builder()
                .jobId("job2")
                .serviceName("TestService2")
                .status("PENDING")
                .submittedAt(LocalDateTime.now().minusMinutes(30))
                .build();
    }

    @Test
    void getAggregatedJobStatuses_shouldAggregateFromAllClients() {
        when(discoveryJobApiClient.getDiscoveryJobs()).thenReturn(List.of(sampleJob1));
        when(autolabelJobApiClient.getAutolabelJobs()).thenReturn(List.of(sampleJob2));
        when(autoarchivalTaskApiClient.getArchivalTasks()).thenReturn(Collections.emptyList());
        when(autodeleteTaskApiClient.getDeletionTasks()).thenReturn(Collections.emptyList());
        when(autocomplianceJobApiClient.getComplianceReportJobs()).thenReturn(Collections.emptyList());

        AggregatedJobStatusDTO result = jobStatusService.getAggregatedJobStatuses();

        assertNotNull(result);
        assertEquals(2, result.getTotalJobs());
        assertEquals(1, result.getCompletedSuccessJobs());
        assertEquals(1, result.getPendingJobs());
        assertEquals(0, result.getRunningJobs());
        assertEquals(0, result.getCompletedFailedJobs());
        assertNotNull(result.getJobs());
        assertEquals(2, result.getJobs().size());
    }

    @Test
    void getAggregatedJobStatuses_whenClientThrowsException_shouldHandleGracefully() {
        when(discoveryJobApiClient.getDiscoveryJobs()).thenThrow(new RuntimeException("Discovery Unreachable"));
        when(autolabelJobApiClient.getAutolabelJobs()).thenReturn(List.of(sampleJob2)); // Autolabel still works
        when(autoarchivalTaskApiClient.getArchivalTasks()).thenReturn(Collections.emptyList());
        when(autodeleteTaskApiClient.getDeletionTasks()).thenReturn(Collections.emptyList());
        when(autocomplianceJobApiClient.getComplianceReportJobs()).thenReturn(Collections.emptyList());

        AggregatedJobStatusDTO result = jobStatusService.getAggregatedJobStatuses();

        assertNotNull(result);
        assertEquals(1, result.getTotalJobs()); // Only sampleJob2 from autolabel
        assertEquals(0, result.getCompletedSuccessJobs());
        assertEquals(1, result.getPendingJobs());
        assertNotNull(result.getJobs());
        assertEquals(1, result.getJobs().size());
        assertEquals("job2", result.getJobs().get(0).getJobId());
    }

    @Test
    void getAggregatedJobStatuses_whenAllClientsReturnEmpty_shouldReturnEmptyAggregation() {
        when(discoveryJobApiClient.getDiscoveryJobs()).thenReturn(Collections.emptyList());
        when(autolabelJobApiClient.getAutolabelJobs()).thenReturn(Collections.emptyList());
        when(autoarchivalTaskApiClient.getArchivalTasks()).thenReturn(Collections.emptyList());
        when(autodeleteTaskApiClient.getDeletionTasks()).thenReturn(Collections.emptyList());
        when(autocomplianceJobApiClient.getComplianceReportJobs()).thenReturn(Collections.emptyList());

        AggregatedJobStatusDTO result = jobStatusService.getAggregatedJobStatuses();

        assertNotNull(result);
        assertEquals(0, result.getTotalJobs());
        assertEquals(0, result.getPendingJobs());
        assertEquals(0, result.getCompletedSuccessJobs());
        assertNotNull(result.getJobs());
        assertEquals(0, result.getJobs().size());
    }
}