Spaces:
Build error
Build error
| package com.dalab.discovery; | |
| import static org.mockito.ArgumentMatchers.*; | |
| import static org.mockito.Mockito.*; | |
| import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; | |
| import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; | |
| import java.util.ArrayList; | |
| import java.util.Arrays; | |
| import java.util.Collections; | |
| import org.junit.jupiter.api.BeforeEach; | |
| import org.junit.jupiter.api.Test; | |
| import org.springframework.http.HttpHeaders; | |
| import org.springframework.mock.env.MockEnvironment; | |
| import org.springframework.mock.web.MockServletContext; | |
| import org.springframework.test.web.servlet.MockMvc; | |
| import org.springframework.test.web.servlet.setup.MockMvcBuilders; | |
| import com.dalab.discovery.crawler.config.CrawlerWebConfigurer; | |
| import com.dalab.discovery.sd.config.WebConfigurerTestController; | |
| import jakarta.servlet.Filter; | |
| import jakarta.servlet.FilterRegistration; | |
| import jakarta.servlet.Servlet; | |
| import jakarta.servlet.ServletRegistration; | |
| import tech.jhipster.config.JHipsterProperties; | |
| /** | |
| * Unit tests for the {@link WebConfigurer} class. | |
| */ | |
| class WebConfigurerTest { | |
| private CrawlerWebConfigurer webConfigurer; | |
| private MockServletContext servletContext; | |
| private MockEnvironment env; | |
| private JHipsterProperties props; | |
| public void setup() { | |
| servletContext = spy(new MockServletContext()); | |
| doReturn(mock(FilterRegistration.Dynamic.class)).when(servletContext).addFilter(anyString(), any(Filter.class)); | |
| doReturn(mock(ServletRegistration.Dynamic.class)).when(servletContext).addServlet(anyString(), | |
| any(Servlet.class)); | |
| env = new MockEnvironment(); | |
| props = new JHipsterProperties(); | |
| webConfigurer = new CrawlerWebConfigurer(env, props); | |
| } | |
| void shouldCorsFilterOnApiPath() throws Exception { | |
| props.getCors().setAllowedOrigins(Collections.singletonList("other.domain.com")); | |
| props.getCors().setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE")); | |
| props.getCors().setAllowedHeaders(Collections.singletonList("*")); | |
| props.getCors().setMaxAge(1800L); | |
| props.getCors().setAllowCredentials(true); | |
| MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerTestController()) | |
| .addFilters(webConfigurer.corsFilter()).build(); | |
| mockMvc | |
| .perform( | |
| options("/api/test-cors") | |
| .header(HttpHeaders.ORIGIN, "other.domain.com") | |
| .header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "POST")) | |
| .andExpect(status().isOk()) | |
| .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "other.domain.com")) | |
| .andExpect(header().string(HttpHeaders.VARY, "Origin")) | |
| .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET,POST,PUT,DELETE")) | |
| .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true")) | |
| .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_MAX_AGE, "1800")); | |
| mockMvc | |
| .perform(get("/api/test-cors").header(HttpHeaders.ORIGIN, "other.domain.com")) | |
| .andExpect(status().isOk()) | |
| .andExpect(header().string(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "other.domain.com")); | |
| } | |
| void shouldCorsFilterOnOtherPath() throws Exception { | |
| props.getCors().setAllowedOrigins(Collections.singletonList("*")); | |
| props.getCors().setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE")); | |
| props.getCors().setAllowedHeaders(Collections.singletonList("*")); | |
| props.getCors().setMaxAge(1800L); | |
| props.getCors().setAllowCredentials(true); | |
| MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerTestController()) | |
| .addFilters(webConfigurer.corsFilter()).build(); | |
| mockMvc | |
| .perform(get("/test/test-cors").header(HttpHeaders.ORIGIN, "other.domain.com")) | |
| .andExpect(status().isOk()) | |
| .andExpect(header().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); | |
| } | |
| void shouldCorsFilterDeactivatedForNullAllowedOrigins() throws Exception { | |
| props.getCors().setAllowedOrigins(null); | |
| MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerTestController()) | |
| .addFilters(webConfigurer.corsFilter()).build(); | |
| mockMvc | |
| .perform(get("/api/test-cors").header(HttpHeaders.ORIGIN, "other.domain.com")) | |
| .andExpect(status().isOk()) | |
| .andExpect(header().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); | |
| } | |
| void shouldCorsFilterDeactivatedForEmptyAllowedOrigins() throws Exception { | |
| props.getCors().setAllowedOrigins(new ArrayList<>()); | |
| MockMvc mockMvc = MockMvcBuilders.standaloneSetup(new WebConfigurerTestController()) | |
| .addFilters(webConfigurer.corsFilter()).build(); | |
| mockMvc | |
| .perform(get("/api/test-cors").header(HttpHeaders.ORIGIN, "other.domain.com")) | |
| .andExpect(status().isOk()) | |
| .andExpect(header().doesNotExist(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)); | |
| } | |
| } | |