65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
package handlers
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
"git.workflows.cl/mcabezas/testing-go-example/internal/models"
|
|
)
|
|
|
|
func TestGetBook(t *testing.T) {
|
|
handler := NewBookHandler()
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/books/1", nil)
|
|
|
|
// Configurar contexto de chi con el parámetro id
|
|
rctx := chi.NewRouteContext()
|
|
rctx.URLParams.Add("id", "1")
|
|
req = req.WithContext(context.WithValue(req.Context(), chi.RouteCtxKey, rctx))
|
|
|
|
w := httptest.NewRecorder()
|
|
|
|
handler.GetBook(w, req)
|
|
|
|
// Verificar código de estado
|
|
if w.Code != http.StatusOK {
|
|
t.Errorf("esperaba status 200, obtuvo %d", w.Code)
|
|
}
|
|
|
|
// Verificar respuesta
|
|
var book models.Book
|
|
if err := json.NewDecoder(w.Body).Decode(&book); err != nil {
|
|
t.Fatalf("error al decodificar: %v", err)
|
|
}
|
|
|
|
if book.ID != "1" {
|
|
t.Errorf("esperaba ID '1', obtuvo '%s'", book.ID)
|
|
}
|
|
|
|
if book.Title != "El Quijote" {
|
|
t.Errorf("esperaba título 'El Quijote', obtuvo '%s'", book.Title)
|
|
}
|
|
}
|
|
|
|
func TestGetBook_NotFound(t *testing.T) {
|
|
handler := NewBookHandler()
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/books/999", nil)
|
|
|
|
rctx := chi.NewRouteContext()
|
|
rctx.URLParams.Add("id", "999")
|
|
req = req.WithContext(context.WithValue(req.Context(), chi.RouteCtxKey, rctx))
|
|
|
|
w := httptest.NewRecorder()
|
|
|
|
handler.GetBook(w, req)
|
|
|
|
if w.Code != http.StatusNotFound {
|
|
t.Errorf("esperaba status 404, obtuvo %d", w.Code)
|
|
}
|
|
}
|