• [Java Spring] Testing a view controller


    Controller:

    @Controller
    @RequestMapping("/reservations")
    public class RoomReservationWebController {
    
        @Autowired
        private ReservationService reservationService;
    
        @GetMapping
        public String getReservations (@RequestParam(value="date", required = false) String dateString, Model model) {
            Date date = DateUtils.createDateFromDateString(dateString);
            List<RoomReservation> roomReservations = this.reservationService.getRoomReservationsForDate(date);
            model.addAttribute("roomReservations", roomReservations);
            return "reservations";
        }
    }

    Test Controller:

    package com.frankmoley.lil.learningspring.web;
    
    import com.frankmoley.lil.learningspring.busniess.domain.RoomReservation;
    import com.frankmoley.lil.learningspring.busniess.service.ReservationService;
    
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
    import org.springframework.boot.test.mock.mockito.MockBean;
    import org.springframework.test.web.servlet.MockMvc;
    
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    import static org.hamcrest.core.StringContains.containsString;
    import static org.mockito.BDDMockito.given;
    import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
    
    @WebMvcTest(RoomReservationWebController.class)
    public class RoomReservationWebControllerTest {
        @MockBean
        private ReservationService reservationService;
    
        @Autowired
        private MockMvc mockMvc;
    
        @Test
        public void getReservations() throws Exception {
            String dateString = "2020-01-01";
            Date date = DateUtils.createDateFromDateString(dateString);
            List<RoomReservation> roomReservations = new ArrayList<>();
            RoomReservation roomReservation = new RoomReservation();
    
            roomReservation.setLastName("Unit");
            roomReservation.setFirstName("Junit");
            roomReservation.setDate(date);
            roomReservation.setGuestId(1);
            roomReservation.setRoomId(1);
            roomReservation.setRoomName("Junit Room");
            roomReservation.setRoomNumber("J1");
            roomReservations.add(roomReservation);
    
            given(reservationService.getRoomReservationsForDate(date)).willReturn(roomReservations);
    
            this.mockMvc.perform(get("/reservations?date=2020-01-01")).andExpect(status().isOk()).andExpect(
                    content().string(containsString("Unit, Junit"))
            );
        }
    }

    Service:

    @Service
    public class ReservationService {
    
        private final RoomRepository roomRepository;
        private final GuestRepository guestRepository;
        private final ReservationRepository reservationRepository;
    
        /**
         * @param roomRepository
         * @param guestRepository
         * @param reservationRepository
         */
        @Autowired
        public ReservationService(final RoomRepository roomRepository, final GuestRepository guestRepository, final ReservationRepository reservationRepository) {
            this.roomRepository = roomRepository;
            this.guestRepository = guestRepository;
            this.reservationRepository = reservationRepository;
        }
    
        public List<RoomReservation> getRoomReservationsForDate(Date date) {
            Iterable<Room> rooms = this.roomRepository.findAll();
            Map<Long, RoomReservation> roomReservationMap = new HashMap();
            rooms.forEach(room -> {
                RoomReservation roomReservation = new RoomReservation();
                roomReservation.setRoomId(room.getRoomId());
                roomReservation.setRoomName(room.getRoomName());
                roomReservation.setRoomNumber(room.getRoomNumber());
                roomReservationMap.put(room.getRoomId(), roomReservation);
            });
            Iterable<Reservation> reservations = this.reservationRepository.findReservationByResDate(new java.sql.Date(date.getTime()));
            reservations.forEach(reservation -> {
                RoomReservation roomReservation = roomReservationMap.get(reservation.getRoomId());
                roomReservation.setDate(date);
                Guest guest = this.guestRepository.findById(reservation.getGuestId()).get();
                roomReservation.setFirstName(guest.getFirstName());
                roomReservation.setLastName(guest.getLastName());
                roomReservation.setGuestId(guest.getGuestId());
            });
            // Convert to a list
            List<RoomReservation> roomReservations = new ArrayList<>();
            for(Long id : roomReservationMap.keySet()) {
                roomReservations.add(roomReservationMap.get(id));
            }
            return roomReservations;
        }
    }
  • 相关阅读:
    2016工作目标
    Android简化xml sax解析
    dynamic-load-apk插件原理整理
    Spring boot 拾遗 —— Spring Cache 扩展 Duration
    Spring boot 拾遗 —— Spring Cache 使用 Jackson 与 自定义 TTL
    Spring boot 拾遗 —— 错误验证
    简化 Java 代码 ——(一)使用 PropertyMapper
    Java 开源项目 OpenFeign —— feign 结合 SpringBoot
    Java 开源项目 OpenFeign —— feign 的基本使用
    Java 定时任务 Quartz (三)—— 并发
  • 原文地址:https://www.cnblogs.com/Answer1215/p/14055202.html
Copyright © 2020-2023  润新知