Hi Folks,
I'm having trouble setting session attributes for a test. I am using MockMvc to test calls to a controller. The session model has a member attribute on it (representing the person who has logged in). The SessionModel object is added as a session attribute. I was expecting it to be populated in the ModelMap parameter to formBacking method below, but the ModelMap is always empty.
The controller code works fine when running through the webapp, but not in the JUnit. Any idea what I could be doing wrong?
Thanks for your help!
Ash
Here is my JUnit Test
Code:@Test public void testUnitCreatePostSuccess() throws Exception { UnitCreateModel expected = new UnitCreateModel(); expected.reset(); expected.getUnit().setName("Bob"); SessionModel sm = new SessionModel(); sm.setMember(getDefaultMember()); this.mockMvc.perform( post("/units/create") .param("unit.name", "Bob") .sessionAttr(SessionModel.KEY, sm)) .andExpect(status().isOk()) .andExpect(model().attribute("unitCreateModel", expected)) .andExpect(view().name("tiles.content.unit.create")); }
and here is the controller in question
Code:@Controller @SessionAttributes({ SessionModel.KEY, UnitCreateModel.KEY }) @RequestMapping("/units") public class UnitCreateController extends ABaseController { private static final String CREATE = "tiles.content.unit.create"; @Autowired private IUnitMemberService unitMemberService; @Autowired private IUnitService unitService; @ModelAttribute public void formBacking(ModelMap model) { SessionModel instanceSessionModel = new SessionModel(); instanceSessionModel.retrieveOrCreate(model); UnitCreateModel instanceModel = new UnitCreateModel(); instanceModel.retrieveOrCreate(model); } @RequestMapping(value = "/create", method = RequestMethod.GET) public String onCreate( @ModelAttribute(UnitCreateModel.KEY) UnitCreateModel model, @ModelAttribute(SessionModel.KEY) SessionModel sessionModel) { model.reset(); return CREATE; } @RequestMapping(value = "/create", method = RequestMethod.POST) public String onCreatePost( @ModelAttribute(SessionModel.KEY) SessionModel sessionModel, @Valid @ModelAttribute(UnitCreateModel.KEY) UnitCreateModel model, BindingResult result) throws ServiceRecoverableException { if (result.hasErrors()){ return CREATE; } long memberId = sessionModel.getMember().getId(); long unitId = unitService.create(model.getUnit()); unitMemberService.addMemberToUnit(memberId, unitId, true); return CREATE; } }


Reply With Quote
