Как включить консоль H2 в интеграционном тесте - PullRequest
0 голосов
/ 25 марта 2019

Я использую H2 DB в тесте и временно в разработке. Я добавляю консоль h2 в свое приложение, и оно работает. Мне нужно дать доступ только администраторам, и это тоже работает. Но мне нужна тестовая работа доступа пользователей и администраторов и тестовая ошибка get 404. Как я могу решить эту проблему?

Я попытался протестировать без авторизации и получил ошибку 401. Для использования консоли H2 я добавляю инструменты Dev

Интеграционный тест

@RunWith(SpringRunner.class)
@SpringBootTest(properties = "spring.h2.console.enabled=true", classes = CrmApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = H2ConsoleSecurityConfig.class)
public class H2ConsoleSecurityTest {
@Autowired
private WebApplicationContext context;

private MockMvc mockMvc;

@Before
public void setUp() {
    mockMvc = webAppContextSetup(context)
            .apply(springSecurity()).build();
}

@Test
@WithMockUser(username = "admin2@email.com", password = "AdminPass", roles = "ADMIN")
public void youCanAccessH2ConsoleWhenRoleIsAdmin() throws Exception {
    mockMvc.perform(get("/h2-console")
            .with(httpBasic("admin2@email.com", "AdminPass")))
            .andExpect(status().isOk());
}
}

Конфигурация безопасности Spring

@Configuration
@Order(1)
public class H2ConsoleSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .antMatcher("/h2-console/**")
            .authorizeRequests()
            .anyRequest()
            .hasRole("ADMIN")
            .and()
            .httpBasic()
            .and()
            .csrf().disable()
            .headers().frameOptions().sameOrigin();
}
}

application.properties

spring.main.banner-mode=off
spring.jpa.hibernate.ddl-auto=none
server.address=localhost
server.port=8000

#frontend info
frontend.domain=http://localhost:8081

#datasource properties
spring.datasource.url=jdbc:h2:mem:FoxmindedCrmDB;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1
spring.datasource.username=user
spring.datasource.password=pwd
spring.datasource.driverClassName=org.h2.Driver

#mail properties
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

#h2 console conf when without Dev Tools
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

#LogMailScheduler properties
logmail.from = applogreport@foxminded.com.ua
logmail.to = testgmail.com
logmail.subject = FoxmindedCRM Log Email Report

#RegistrationConfirmationMail properties
email.confirmationEmail.from = appinfo@foxminded.com.ua

#Swagger properties
swagger.title=CRM RESTful Web Service with Spring Boot
swagger.description=CRM RESTful Web Service with Spring Boot for Foxminded
swagger.terms.service.url=
swagger.contact.name=
swagger.contact.url=
swagger.contact.email=
swagger.license=Apache License Version 2.0
swagger.license.url=https://www.apache.org/license.html
swagger.license.version=1.0.0

#Default admin properties
default.user.admin.pass=AdminPass
default.user.admin.firstName=admin
default.user.admin.lastName=admin
default.user.admin.email=admin@email.com

#Default time-zone properties
default.time.zone.name=Europe/Kiev

# JWT token properties
jwt.Secret=x-auth-token
jwt.ExpirationInMs=864000000

# Email Token confirmation
token.emailConfirmation.lifeDays=1

#Actuator endpoints properties
endpoints.shutdown.enabled=true
management.security.roles=ROLE_ADMIN

#Logging properties
logging.level.org.springframework=error
logging.level.ua.com.foxminded=debug
logging.path=./crm-backend/logs
logging.file=${logging.path}/application.log

#Locale properties
default.locale.language=uk

application.properties для теста

#h2 console conf
#spring.h2.console.enabled=true
#spring.h2.console.path=/console

spring.main.banner-mode=off
server.port=8000

#frontend info
frontend.domain=http://localhost:8081

logging.level.org.springframework=error
logging.level.ua.com.foxminded=debug
spring.jpa.hibernate.ddl-auto=none

#mail properties
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

#RegistrationConfirmationMail properties
email.confirmationEmail.from = appinfo@foxminded.com.ua

#Swager properties
swagger.title=CRM RESTful Web Service with Spring Boot
swagger.description=CRM RESTful Web Service with Spring Boot for Foxminded
swagger.terms.service.url=
swagger.contact.name=
swagger.contact.url=
swagger.contact.email=
swagger.license=Apache License Version 2.0
swagger.license.url=https://www.apache.org/license.html
swagger.license.version=1.0.0

#Default admin properties
default.user.admin.pass=AdminPass
default.user.admin.firstName=admin
default.user.admin.lastName=admin
default.user.admin.email=admin@email.com

#Default time-zone properties
default.time.zone.name=Europe/Kiev

# JWT token properties
jwt.Secret=x-auth-token
jwt.ExpirationInMs=864000000

# Email Token confirmation
token.emailConfirmation.lifeDays=1

#Locale properties
default.locale.language=uk

Я ожидаю, что консоль h2 будет работать для тестирования.

...