Я реализовал интеграционный тест для моего контроллера.
и пытаюсь проверить метод POST, который создает новую запись.
Мой контроллер: -
package com.gasx.corex.scheduler.controller;
import java.awt.*;
import java.util.List;
import com.gasx.corex.scheduler.service.SchedulerJobServiceI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.gasx.corex.ext.scheduler.domain.SchedulerJob;
import com.gasx.corex.scheduler.service.SchedulerJobService;
@RestController
@RequestMapping("/gasx/restscd")
public class SchedulerJobController {
@Autowired
private SchedulerJobServiceI schedulerJobService;
@RequestMapping(method = RequestMethod.POST, value = "/addschedulerjob")
public void addSchedulerJob(@RequestBody SchedulerJob schedulerJob) {
schedulerJobService.addSchedulerJob(schedulerJob);
}
}
Мой класс обслуживания: -
package com.gasx.corex.scheduler.service;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.gasx.corex.ext.scheduler.domain.SchedulerJob;
import com.gasx.corex.scheduler.rest.SchedulerJobRestRepositoryI;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class SchedulerJobService implements SchedulerJobServiceI {
@Autowired
private SchedulerJobRestRepositoryI schedulerJobRestRepositoryI;
@Override
@Transactional
public void addSchedulerJob(SchedulerJob schedulerJob) {
schedulerJobRestRepositoryI.save(schedulerJob);
}
}
Мой репозиторий: -
package com.gasx.corex.scheduler.rest;
import java.util.List;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import com.gasx.corex.ext.scheduler.domain.SchedulerJob;
import com.gasx.corex.ext.user.domain.Profile;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
@Repository
@Transactional
//@Embeddable
//@RepositoryRestResource(collectionResourceRel = "schedulerJobs", path = "schedulerjobs")
public interface SchedulerJobRestRepositoryI extends CrudRepository<SchedulerJob, Integer> {
List<Profile> findByName(@Param("name") String name);
}
Мой весенний основной класс: -
package com.gasx.corex.scheduler.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@EntityScan(basePackages = "com.gasx.*")
@EnableJpaRepositories(basePackages = {"com.gasx.*"})
//@EnableWebSecurity
@SpringBootApplication(scanBasePackages = { "com.gasx.*" })
@EnableTransactionManagement
@ComponentScan("com.gasx.*" )
public class SchedulerApplication {
public static void main(String[] args) {
SpringApplication.run(SchedulerApplication.class, args);
}
}
Мои приложения.properties
spring.datasource.platform=h2
spring.datasource.url=jdbc:h2:mem:corextrunk;Mode=MySQL;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS corextrunk
spring.datasource.driverclassName=org.h2.Driver
spring.jpa.hibernate.ddl-auto=create-drop
spring.flyway.enabled=true
spring.h2.console.enabled=true
spring.boot.admin.client.enabled=false
Вывод MY Console при выполнении функции сохранения: -
Hibernate: вставка в scheduler_job (идентификатор, активный, alb_endpoint, alb_jobuser, alb_payload, alb_prio, категория, cron_expr, описание, hook_script_name, часы, часы,id_region, минуты, имя, rest_endpoint_alias, rest_entity_content, rest_export_path, rest_media_type, rest_method, rest_url, run_archieve_lifespan, схема, имя_скрипта, script_params, soap_send_action, shell_script_params ,______________}ноль, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) 2018-12-14 14: 34: 35.270 INFO 6908 --- [Thread-4] ossconcurrent.ThreadPoolTaskExecutor: Завершение работы ExecutorService 'applicationTaskExecutor' 2018-12-14 14: 34: 35.277 INFO 6908 --- [Thread-4] j.LocalContainerEntityManagerFactoryBean: Закрытие JPA EntityManagerFactory для модуля сохранения «по умолчанию» 2018-12-14 14:3435.281 INFO 6908 --- [Thread-4] com.zaxxer.hikari.HikariDataSource: HikariPool-1 - Завершение работы инициировано ... 2018-12-14 14: 34: 35.296 INFO 6908 --- [Thread-4] com.zaxxer.hikari.HikariDataSource: HikariPool-1 - Завершение работы завершено.
Моя проблема: - Я исправил многочисленные примеры в Google, но все еще не получаю ошибки на консоли, вставка выполнена, но я не вижу свою запись, когдаЯ пытаюсь просмотреть базу данных из браузера: - URL, который я использую для просмотра базы данных h2: - http://localhost:8081/h2-console Я даже пытался изменить: - spring.jpa.hibernate.ddl-auto = create-drop для spring.jpa.hibernate.ddl-auto = create-update (ничего не изменено) удалено spring.datasource.platform = h2 из моего файла свойств, все еще ничего не изменено.
Я использую springBoot и H2 в базе данных памяти.
чтобы не забыть мой класс теста интеграции: =
package com.gasx.corex.ext.scheduler.integrationtest.domain;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.gasx.corex.base.configuration.CoreConfiguration;
import com.gasx.corex.ext.scheduler.domain.SchedulerJob;
import com.gasx.corex.ext.scheduler.domain.utils.SchedulerJobType;
import com.gasx.corex.scheduler.rest.SchedulerJobRestRepositoryI;
import com.gasx.corex.scheduler.service.SchedulerJobService;
import com.gasx.corex.scheduler.service.SchedulerJobServiceI;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.http.HttpHeaders;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import java.util.Base64;
import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT , properties = {
"management.server.port=0", "management.context-path=/admin" ,"security.basic.enabled=false"} )
//@EnableAutoConfiguration
@ContextConfiguration( classes = {AllowAnonymousWebAccess.class } )
@AutoConfigureMockMvc
@ComponentScan("com.gasx.*")
@TestPropertySource(locations = "classpath:application-testing-h2.properties")
public class SchedulerJobTestInt {
@LocalServerPort
private int port ;
@Autowired
private TestRestTemplate testRestTemplate;
@Autowired
private MockMvc mockMvc;
@Test
public void addSchedulerJobIntTest() throws Exception{
SchedulerJob schedulerJob = new SchedulerJob();
schedulerJob.setName("ALB Cleanup");
schedulerJob.setDescription("Cleanup of alb jobs. Please do not deactivate!");
schedulerJob.setType(SchedulerJobType.REST);
schedulerJob.setActive(true);
schedulerJob.setStartMissedRun(false);
schedulerJob.setCategory("SYSTEM");
schedulerJob.setCronExpression(null);
schedulerJob.setScheme("testScheme");
schedulerJob.setIdRegion(1);
schedulerJob.setAlbEndpoint("testAlbEndPoint");
schedulerJob.setAlbPayload("SCHED_ALB");
schedulerJob.setAlbPrio(1);
schedulerJob.setAlbJobUser("MKRAUS");
schedulerJob.setScriptParams("testScriptParams");
schedulerJob.setShellScriptParams("clear_tmp 15");
schedulerJob.setSoapEndpointAlias("");
schedulerJob.setSoapImportPath("CORE/CORE2003/imp/price");
schedulerJob.setSoapExportPath("testExportPath");
schedulerJob.setSoapPayload("<api:readPartnersByIdRequest>");
schedulerJob.setSoapAction("urn:readPartnersById");
schedulerJob.setRestEndpointAlias("testEndpointAlias");
schedulerJob.setRestUrl("testUrl");
schedulerJob.setRestEntityContent("");
schedulerJob.setRestExportPath("testRestExportPath");
schedulerJob.setHookScriptName("testHookScriptName");
schedulerJob.setMinutes("");
schedulerJob.setHours("");
mockMvc.perform(post("/gasx/restscd/addschedulerjob").content(asJsonString(schedulerJob))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
}
}