jeudi 3 décembre 2020

Optional and Java Spring Testing

I have a problem with my ControllerTest. I'm not sure how to test for the Optional - does someone know how? The other test gives me a NullPointerException for the stubbing : when(couponService.getCouponById(id)).thenReturn(expectedCoupon); Would be awesome if someone could help me.

public class CouponControllerTest {

@MockBean
private CouponService couponService;

@MockBean
private UserService userService;

@Autowired
MockMvc mockMvc;

@Test
public void checkAndUpdateCoupon() throws Exception {
    int id = 1;
    int userId = 1;
    
    Coupon expectedCoupon = new Coupon(1, 1);
    when(couponService.getCouponById(id)).thenReturn(expectedCoupon);
    
    List<User> userList = new ArrayList<User>();
    when(userService.getAllUser()).thenReturn(userList);
    
    List<Coupon> couponList = new ArrayList<Coupon>();
    when(couponService.getAllCoupons()).thenReturn(couponList);
    
    mockMvc.perform(get("/checkCoupon")
            .param("id", "1")
            .param("userId", "1"))
            .andExpect(status().isOk())
            .andExpect(view().name("couponPage"))
            .andExpect(model().attribute("error", "Not correct user id or coupon id."))
            .andExpect(model().attribute("users", userList))
            .andExpect(model().attribute("coupons", couponList));
            
    
    verify(couponService).updateCoupons(id, userId);
}

}

@Controller public class CouponController {

@Autowired
CouponService couponService;

@Autowired
UserService userService;

@GetMapping("/checkCoupon")
public String checkCoupon(ModelMap model, @RequestParam Integer id, @RequestParam Integer userId, Coupon coupon) {
    Optional<Coupon> couponFromDatabase = couponService.byUserIdAndId(coupon.getUserId(), coupon.getId());
    if(couponFromDatabase.isEmpty()) {
        String error = "Not correct user id or coupon id.";
        model.addAttribute("error", error);
    } else {
        String message = couponService.updateCoupons(id, userId);
        model.addAttribute("message", message);
    }
    
    List<User> userList = userService.getAllUser();
    model.addAttribute("users", userList);
    List<Coupon> couponList = couponService.getAllCoupons();
    model.addAttribute("coupons", couponList);
    return "couponPage";

}

}

Aucun commentaire:

Enregistrer un commentaire