Witam,
mam problem z testowaniem kontrolera.
W przypadku metody getPeselNumbersTest() nie wiem jak przekazać jako parametr List<Integer>numbersList, natomiast druga metoda postPeselNumbersTest() wyrzuca mi błąd:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.time.DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 0
Pesel.java
@Data
@Component
public class Pesel { //11 cyfr
private List<@NotNull(message = "Pole nie może być puste!") @PositiveOrZero(message = "Podana wartość musi być cyfą 0-9") Integer> numbersList;
private int[] weights;
private String result;
private int control_number;
private String serial_number;
private String sex;
private int year;
private int month;
private int day;
private String birthday;
public Pesel()
{
numbersList = Lists.newArrayList(0,0,0,0,0,0,0,0,0,0,0);
weights = new int[]{1, 3, 7, 9, 1, 3, 7, 9, 1, 3};
}
}
PeselController.java
@Controller
public class PeselController {
private final PeselService peselService;
private final PeselValidationService peselValidationService;
public PeselController(PeselService peselService, PeselValidationService peselValidationService){
this.peselService = peselService;
this.peselValidationService = peselValidationService;
}
@Autowired
Pesel pesel;
@GetMapping("/pesel")
public String getPesel(Model model) {
model.addAttribute("numbersList", pesel);
return "pesel";
}
@PostMapping("/validate")
public String submitPesel(@Valid @ModelAttribute("numbersList") Pesel pesel, BindingResult bindingResult) {
// model.addAttribute("numbers", pesel);
if (bindingResult.hasErrors()) {
System.out.println("There were errors");
bindingResult.getAllErrors().forEach(error -> {
System.out.println(error.getObjectName() + " " + error.getDefaultMessage());
});
return "pesel";
}
else {
List<Integer> temp2 = pesel.getNumbersList();
Iterator<Integer> listIterator = temp2.iterator();
while(listIterator.hasNext()) {
System.out.println(listIterator.next());
}
pesel.setSerial_number(peselService.readSerial(temp2));
pesel.setBirthday(peselService.readBirthday(pesel));
pesel.setSex(peselService.readSex(pesel));
pesel.setControl_number(pesel.getNumbersList().get(10));
pesel.setResult(peselValidationService.ResultText(pesel));
return "/pesel_validate";
}
}
}
PeselControllerTest.java
@SpringBootTest
@AutoConfigureMockMvc
//@WebMvcTest(PeselController.class)
public class PeselControllerTest {
@Autowired
Pesel pesel;
@Autowired
MockMvc mockMvc;
@Autowired
ObjectMapper objectMapper;
@Test
void getPeselNumbersTest() throws Exception {
List<Integer> NumbersList = Lists.newArrayList();
MvcResult result = mockMvc.perform(get("/pesel", pesel)
// .contentType(MediaType. APPLICATION_FORM_URLENCODED) //from MediaType
.param("numbersList", NumbersList)
.andExpect(view().name("pesel"))
.andExpect(model().hasNoErrors())
.andExpect(status().isOk())
.andReturn());
}
@Test
public void postPeselNumbersTest() throws Exception {
List <Integer> numberslist = (Lists.newArrayList(8,8,1,0,1,1,0,3,9,6,3));
mockMvc.perform(post("/validate")
.contentType(MediaType.APPLICATION_JSON)
.content(new Gson().toJson(numberslist)))
.andExpect(model().hasNoErrors())
.andExpect(view().name("pesel_validate"))
.andExpect(status().isOk());
}
}