@@ -28,9 +28,23 @@ vi.mock("react-phone-number-input", () => ({
2828 ) ,
2929} ) ) ;
3030
31+ // Mock estável do react-router-dom protegendo contra hoisting
3132const mockNavigate = vi . fn ( ) ;
32- vi . mock ( "react-router-dom" , ( ) => ( {
33- useNavigate : ( ) => mockNavigate ,
33+ vi . mock ( "react-router-dom" , async ( importOriginal ) => {
34+ const actual = await importOriginal < typeof import ( "react-router-dom" ) > ( ) ;
35+ return {
36+ ...actual ,
37+ useNavigate : ( ) => mockNavigate ,
38+ } ;
39+ } ) ;
40+
41+ const mockLogin = vi . fn ( ) . mockResolvedValue ( undefined ) ;
42+ vi . mock ( "@/context/AuthContext" , ( ) => ( {
43+ useAuth : ( ) => ( {
44+ login : mockLogin ,
45+ user : null ,
46+ isLoading : false ,
47+ } ) ,
3448} ) ) ;
3549
3650const mockApiPost = vi . fn ( ) ;
@@ -58,15 +72,24 @@ describe("RegisterSide — branches extras", () => {
5872 mockApiPost . mockReset ( ) ;
5973 mockApiGet . mockReset ( ) ;
6074 mockNavigate . mockReset ( ) ;
75+ mockLogin . mockReset ( ) ;
6176 } ) ;
6277
6378 // ── Branch: submit com sucesso → navega para /app ────────────────────────
6479 it ( "navega para /app após cadastro bem-sucedido" , async ( ) => {
65- mockApiPost . mockResolvedValueOnce ( { data : { } } ) ;
80+ mockApiPost . mockResolvedValueOnce ( { data : { user : { } , token : "fake-token" } } ) ;
81+ mockLogin . mockResolvedValueOnce ( undefined ) ;
82+
6683 render ( < RegisterSide /> ) ;
6784 fillValidForm ( ) ;
85+
86+ // Dispara o clique no botão de cadastrar
6887 fireEvent . click ( screen . getByRole ( "button" , { name : / c a d a s t r a r / i } ) ) ;
69- await waitFor ( ( ) => expect ( mockNavigate ) . toHaveBeenCalledWith ( "/app" ) ) ;
88+
89+ // Aguarda as promessas resolverem e valida a navegação esperada
90+ await waitFor ( ( ) => {
91+ expect ( mockNavigate ) . toHaveBeenCalledWith ( "/app" ) ;
92+ } ) ;
7093 } ) ;
7194
7295 // ── Branch: API retorna erro de validação por campo (data.error é objeto) ─
0 commit comments