Spring @Scope ("session") not working with webAppContextSetup

0

In my spring test when i use standaloneSetup (controller) the @Scope ("session") works fine. But when I change to webAppContextSetup (this.wac) the scope stop working.

My question is, why?

Controller:

@Controller
@RequestMapping("/pedido")
@Scope("session")
public class PedidoController {

    @Autowired
    private ClienteService clienteService;

    @Autowired
    private PedidoService pedidoService;

    private Pedido pedido;

    @Autowired private PedidoValidator validator;

    @InitBinder
    public void initBinders(WebDataBinder binder) {
        binder.addValidators(validator);
    }

    @RequestMapping(method=RequestMethod.GET)
    public ModelAndView homePedido(Pedido pedido) {
        ModelAndView mv = new ModelAndView("pedidos-novo");
        mv.addObject("clientes", clienteService.listarClientes());
        mv.addObject("tiposComercializacao", pedidoService.listaTipoComercializacao());
        mv.addObject("transportadoras", pedidoService.listaTransportadora());
        mv.addObject("classificacoes", pedidoService.listaClassificacao());
        mv.addObject("condpagtos", pedidoService.listaCondPagto());
        mv.addObject("pedido", pedido);
        mv.addObject("pedidoIniciado", !(this.pedido==null));
        return mv;      
    }

    @RequestMapping(path="/iniciar",method=RequestMethod.POST)
    public ModelAndView iniciarPedido(@ModelAttribute("pedido") Pedido pedido, BindingResult result) {
        this.pedido = pedido;
        return this.homePedido(pedido);
    }

    @SuppressWarnings("rawtypes")
    @RequestMapping(path="/pedidoiniciado",method=RequestMethod.GET)
    public @ResponseBody ResponseEntity pedidoIniciado() {
        if(this.pedido==null) {
            return new ResponseEntity(HttpStatus.NO_CONTENT);   
        }
        return ResponseEntity.ok(this.pedido);
    }
}

TestContext:

@Configuration
@ComponentScan(basePackages = { "br.com.testes" })
@EnableWebMvc
public class SpringTestContext {

}

Test:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=SpringTestContext.class)
@WebAppConfiguration
@ActiveProfiles({ "test" })
public class PedidoControllerTest {
    private MockMvc mockMvc;

    @Autowired
    private WebApplicationContext wac;

    @Autowired
    private PedidoController pedidoController;

    private ObjectMapper objectMapper = new ObjectMapper();

    private Pedido pedido;

    @Before
    public void setUp() throws Exception {
        //This way the scope of controller doesn't work
        mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();

       //This way works like a charm
       //mockMvc = MockMvcBuilders.standaloneSetup(pedidoController).build();
    }

    @Test
    public void abrirPedido() throws Exception {

        MvcResult result = mockMvc.perform(
                get("/pedido")
        )
        .andExpect(status().isOk())
        .andExpect(view().name("pedidos-novo")).andReturn();

        Map<String,Object> modelAndView = result.getModelAndView().getModel();
        this.pedido = (Pedido)modelAndView.get("pedido");
    }


    @Test
    public void iniciarPedido() throws Exception {
        abrirPedido();

        MvcResult result = mockMvc.perform(post("/pedido/iniciar").param("pedido", objectMapper.writeValueAsString(this.pedido)))
        .andExpect(status().isOk())
        .andExpect(view().name("pedidos-novo")).andReturn();

        Map<String,Object> modelAndView = result.getModelAndView().getModel();
        boolean pedidoIniciado = (boolean)modelAndView.get("pedidoIniciado");
        assertTrue(pedidoIniciado);
    }

    @Test
    public void pedidoIniciado() throws Exception {
         mockMvc.perform(get("/pedido/pedidoiniciado"))
         .andExpect(status().isNoContent());

         //Inicia o pedido e realiza o teste novamente
         iniciarPedido();

         mockMvc.perform(get("/pedido/pedidoiniciado"))
         .andExpect(status().isOk()); 
    }


    @Test
    public void listaProdutosPedido() throws Exception {
        iniciarPedido();

        MvcResult result = mockMvc.perform(post("/produto/listar")
                .contentType(MediaType.APPLICATION_JSON)
                .content(objectMapper.writeValueAsString(this.pedido)))
                .andExpect(status().isOk())
                .andReturn();

        List<Produto> listaProduto = objectMapper.readValue(result.getResponse().getContentAsString(), new TypeReference<List<Produto>>() {});
        assertTrue(listaProduto!=null);
    }
}
    
asked by anonymous 22.03.2018 / 16:54

0 answers