Não consigo compreender onde está o problema, mas meu teste de atualização de aluno está falhando.
Do que consegui apurar, ao fazer o c.ShouldBind para atualizar os valores do aluno, ele não está conseguindo buscar os dados corretamente do request e o aluno está ficando com dados vazios (e, por isso, não passa pela validação). Quando realizo o request normalmente pelo Postman, a atualização funciona. Acredito que o problema seja como o request está sendo formatado para ser enviado, porém, não consigo debugar isso, alguém enfrentou problema parecido?
Segue abaixo meu código:
func AtualizaAluno(c *gin.Context) {
var aluno models.Aluno
id := c.Params.ByName("id")
database.DB.First(&aluno, id)
if aluno.ID == 0 {
c.JSON(http.StatusNotFound, gin.H{
"error": "Aluno não encontrado",
})
return
}
if err := c.ShouldBind(&aluno); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
if err := models.ValidaDadosDeAluno(&aluno); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"error": err.Error()})
return
}
database.DB.Model(&aluno).UpdateColumns(aluno)
c.JSON(http.StatusOK, aluno)
}
func TestAtualizaAlunoPorIDHandler(t *testing.T){
database.ConectaComBancoDeDados()
CriaAlunoMock()
defer DeletaAlunoMock()
r := SetupDasRotasDeTeste()
r.PATCH("/alunos/:id", controllers.AtualizaAluno)
aluno := models.Aluno{Nome:"Aluno Teste", CPF:"47123456789", RG:"123456700"}
body, _ := json.Marshal(aluno)
path := "/alunos/" + strconv.Itoa(ID)
req, _ := http.NewRequest("PATCH", path, bytes.NewBuffer(body))
resposta := httptest.NewRecorder()
r.ServeHTTP(resposta, req)
assert.Equal(t,http.StatusOK, resposta.Code)
var alunoMock models.Aluno
json.Unmarshal(resposta.Body.Bytes(), &alunoMock)
assert.Equal(t, "Aluno Teste", alunoMock.Nome)
assert.Equal(t, "74345678912", alunoMock.CPF)
assert.Equal(t, "123456700", alunoMock.RG)
}
Resultado dos testes:
[GIN] 2023/07/24 - 15:06:00 | 200 | 95.7475ms | | PATCH "/alunos/45"
--- FAIL: TestAtualizaAlunoPorIDHandler (0.52s)
main_test.go:84:
Error Trace: G:/projetos/Go/Alura/gin/main_test.go:84
Error: Not equal:
expected: "74345678912"
actual : "12345678912"
Diff:
--- Expected
+++ Actual
@@ -1 +1 @@
-74345678912
+12345678912
Test: TestAtualizaAlunoPorIDHandler
main_test.go:85:
Error Trace: G:/projetos/Go/Alura/gin/main_test.go:85
Error: Not equal:
expected: "123456700"
actual : "123456789"
Diff:
--- Expected
+++ Actual
@@ -1 +1 @@
-123456700
+123456789
Test: TestAtualizaAlunoPorIDHandler
FAIL