O teste de alteração do aluno está funcionando, ele cria o aluno, altera e no final faz o delete do mesmo no banco de dados. Porém, um comportamento inesperado também acontece, um novo aluno está sempre sendo criado no banco no final do teste.
Exemplo: Assim que executo o teste, ele cria o aluno de ID 100, altera os dados e deleta ele, porém cria também um novo aluno com o ID 101.
Não sei o que fiz de errado e o que pode estar acontecendo. Seguem os códigos da função de teste e da função do controller que executa o update do aluno
func TestUpdate(t *testing.T) {
database.Connection()
CriaAluno()
defer DeletaAluno()
r := SetupRoutes()
r.PATCH("/alunos/:id", controllers.Update)
aluno := models.Aluno{Nome: "Aluno Teste", CPF: "81087843015", RG: "509012207"}
alunoJson, _ := json.Marshal(aluno)
path := "/alunos/" + strconv.Itoa(ID)
req, _ := http.NewRequest("PATCH", path, bytes.NewBuffer(alunoJson))
resp := httptest.NewRecorder()
r.ServeHTTP(resp, req)
var alunoAlterado models.Aluno
json.Unmarshal(resp.Body.Bytes(), &alunoAlterado)
assert.Equal(t, "81087843015", alunoAlterado.CPF, "Os CPFs não são iguais")
assert.Equal(t, "509012207", alunoAlterado.RG, "Os RGs não são iguais")
assert.Equal(t, http.StatusOK, resp.Code, "Status Code não esperado")
}
func Update(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.ShouldBindJSON(&aluno); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"error": err.Error(),
})
return
}
if err := models.ValidaAluno(&aluno); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"error": err.Error(),
})
return
}
database.DB.Save(&aluno)
c.JSON(http.StatusOK, aluno)
}