Ajay Yadav
Initial deployment of da-autoarchival-dev
1c19d33
package com.dalab.autoarchival.controller;
import com.dalab.autoarchival.dto.ArchivalConfigDTO;
import com.dalab.autoarchival.service.IArchivalConfigService;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.web.servlet.MockMvc;
import java.util.HashMap;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@WebMvcTest(ArchivalConfigController.class)
class ArchivalConfigControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private IArchivalConfigService archivalConfigService;
@Autowired
private ObjectMapper objectMapper;
private ArchivalConfigDTO sampleConfigDTO;
@BeforeEach
void setUp() {
sampleConfigDTO = ArchivalConfigDTO.builder()
.enabled(true)
.defaultArchivalTier("S3_GLACIER")
.defaultRetentionDays(365L)
.requireApprovalForArchival(true)
.requireApprovalForRestore(false)
.providerConfigs(new HashMap<>())
.build();
}
@Test
@WithMockUser(authorities = "ROLE_ADMIN")
void getArchivalConfiguration_AsAdmin_ShouldReturnConfig() throws Exception {
when(archivalConfigService.getArchivalConfig()).thenReturn(sampleConfigDTO);
mockMvc.perform(get("/api/v1/archival/config"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.enabled").value(true))
.andExpect(jsonPath("$.defaultArchivalTier").value("S3_GLACIER"));
}
@Test
@WithMockUser(authorities = "ROLE_DATA_STEWARD")
void getArchivalConfiguration_AsDataSteward_ShouldReturnConfig() throws Exception {
when(archivalConfigService.getArchivalConfig()).thenReturn(sampleConfigDTO);
mockMvc.perform(get("/api/v1/archival/config"))
.andExpect(status().isOk());
}
@Test
@WithMockUser(authorities = "ROLE_USER")
void getArchivalConfiguration_AsUser_ShouldBeForbidden() throws Exception {
mockMvc.perform(get("/api/v1/archival/config"))
.andExpect(status().isForbidden());
}
@Test
@WithMockUser(authorities = "ROLE_ADMIN")
void updateArchivalConfiguration_AsAdmin_ShouldReturnOk() throws Exception {
doNothing().when(archivalConfigService).updateArchivalConfig(any(ArchivalConfigDTO.class));
mockMvc.perform(put("/api/v1/archival/config")
.with(csrf()) // Add CSRF token for PUT if Spring Security CSRF is enabled
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(sampleConfigDTO)))
.andExpect(status().isOk());
verify(archivalConfigService, times(1)).updateArchivalConfig(any(ArchivalConfigDTO.class));
}
@Test
@WithMockUser(authorities = "ROLE_DATA_STEWARD")
void updateArchivalConfiguration_AsDataSteward_ShouldBeForbidden() throws Exception {
mockMvc.perform(put("/api/v1/archival/config")
.with(csrf())
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(sampleConfigDTO)))
.andExpect(status().isForbidden());
}
}