forked from Hithomelabs/CFTunnels
test(portainer-automation): add DeployController tests
This commit is contained in:
parent
d249742052
commit
c9aaeab665
@ -0,0 +1,89 @@
|
||||
package com.hithomelabs.portainer.controller;
|
||||
|
||||
import com.hithomelabs.portainer.config.PortainerAutomationProperties;
|
||||
import com.hithomelabs.portainer.service.DeployService;
|
||||
|
||||
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 org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
||||
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class DeployControllerTest {
|
||||
|
||||
@Mock
|
||||
private DeployService deployService;
|
||||
|
||||
@Mock
|
||||
private PortainerAutomationProperties properties;
|
||||
|
||||
@Mock
|
||||
private PortainerAutomationProperties.Service serviceProps;
|
||||
|
||||
@InjectMocks
|
||||
private DeployController controller;
|
||||
|
||||
private MockMvc mockMvc;
|
||||
|
||||
private static final String VALID_API_KEY = "valid-key";
|
||||
private static final Long STACK_ID = 42L;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
|
||||
when(properties.getService()).thenReturn(serviceProps);
|
||||
when(serviceProps.getApiKey()).thenReturn(VALID_API_KEY);
|
||||
}
|
||||
|
||||
@Test
|
||||
void deploy_withValidKey_returnsOk() throws Exception {
|
||||
mockMvc.perform(post("/api/deploy/{stackId}", STACK_ID)
|
||||
.header("X-API-Key", VALID_API_KEY)
|
||||
.contentType(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().string("Stack " + STACK_ID + " redeploy triggered"));
|
||||
|
||||
verify(deployService).deploy(STACK_ID);
|
||||
}
|
||||
|
||||
@Test
|
||||
void deploy_withInvalidKey_returnsUnauthorized() throws Exception {
|
||||
mockMvc.perform(post("/api/deploy/{stackId}", STACK_ID)
|
||||
.header("X-API-Key", "wrong-key")
|
||||
.contentType(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().isUnauthorized())
|
||||
.andExpect(content().string("Invalid or missing X-API-Key"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void deploy_withoutKey_returnsUnauthorized() throws Exception {
|
||||
mockMvc.perform(post("/api/deploy/{stackId}", STACK_ID)
|
||||
.contentType(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().isUnauthorized())
|
||||
.andExpect(content().string("Invalid or missing X-API-Key"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void deploy_whenServiceThrows_returnsInternalServerError() throws Exception {
|
||||
doThrow(new RuntimeException("Portainer unreachable"))
|
||||
.when(deployService).deploy(STACK_ID);
|
||||
|
||||
mockMvc.perform(post("/api/deploy/{stackId}", STACK_ID)
|
||||
.header("X-API-Key", VALID_API_KEY)
|
||||
.contentType(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().isInternalServerError())
|
||||
.andExpect(content().string("Redeploy failed: Portainer unreachable"));
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user