• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z testami kontrolera

Object Storage Arubacloud
0 głosów
107 wizyt
pytanie zadane 23 marca 2022 w Java przez Amakesh Nowicjusz (220 p.)

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());
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 23 marca 2022 przez Wiciorny Ekspert (270,170 p.)
new Gson().toJson(numberslist)

nie wiem czy sobie zdajesz z tego sprawę ale zwraca Ci liste w takim formacie 

Output:
[8,8,1,0,1,1,0,3,9,6,3]

dlatego lecą Ci błędy.  Błąd w ogóle nie jest związany z wartością Daty, gdyż to jest powiązane z błędami od strony API 
https://bugs.openjdk.java.net/browse/JDK-8196777

I dlaczego przekazujesz liste, skoro jako Validate - > endpoint poszukujesz "binding result" oraz obiektu typu Pesel? 
 

Podobne pytania

0 głosów
1 odpowiedź 198 wizyt
0 głosów
1 odpowiedź 234 wizyt
pytanie zadane 20 lipca 2018 w Java przez Kondzio Mądrala (5,230 p.)
0 głosów
0 odpowiedzi 115 wizyt
pytanie zadane 1 marca 2018 w Java przez xenonso Mądrala (5,160 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...