update tests
This commit is contained in:
parent
583a68fd90
commit
c972d9c242
@ -38,14 +38,14 @@ func GetServersList(db *sql.DB) ([]Server, error) {
|
||||
return servers, err
|
||||
}
|
||||
|
||||
func GetServersbyID(db *sql.DB, id int64) Server {
|
||||
func GetServersbyID(db *sql.DB, id int64) (Server, error) {
|
||||
var s Server
|
||||
rows := db.QueryRow("SELECT * FROM dashboard_server WHERE id = ?", id)
|
||||
err := rows.Scan(&s.ID, &s.Hostname, &s.OsId)
|
||||
if err != nil {
|
||||
return Server{}
|
||||
return Server{}, nil
|
||||
}
|
||||
return s
|
||||
return s, err
|
||||
}
|
||||
|
||||
func GetServersbyOS(db *sql.DB, id int64) ([]Server, error) {
|
||||
|
||||
@ -52,14 +52,23 @@ func GetServersbyID(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
dbConn := db.GetDatabaseConnection()
|
||||
defer dbConn.Close()
|
||||
server = db.GetServersbyID(dbConn, int64(id))
|
||||
logRequest(t, r, status)
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
err = json.NewEncoder(w).Encode(server)
|
||||
server, err = db.GetServersbyID(dbConn, int64(id))
|
||||
if err != nil {
|
||||
log.Println("Error getting OS list")
|
||||
return
|
||||
log.Println("Error getting Server by ID", err)
|
||||
status = 500
|
||||
}
|
||||
if status != 500 {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
err = json.NewEncoder(w).Encode(server)
|
||||
if err != nil {
|
||||
log.Println("Error getting OS list")
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
logRequest(t, r, status)
|
||||
return
|
||||
}
|
||||
}
|
||||
w.WriteHeader(status)
|
||||
logRequest(t, r, status)
|
||||
}
|
||||
|
||||
func GetServersbyOS(w http.ResponseWriter, r *http.Request) {
|
||||
@ -74,9 +83,6 @@ func GetServersbyOS(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
log.Println("Error converting ID", err)
|
||||
status = 500
|
||||
logRequest(t, r, status)
|
||||
w.WriteHeader(status)
|
||||
return
|
||||
}
|
||||
dbConn := db.GetDatabaseConnection()
|
||||
defer dbConn.Close()
|
||||
@ -84,20 +90,21 @@ func GetServersbyOS(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
log.Println("Error getting servers by OS", err)
|
||||
status = 500
|
||||
logRequest(t, r, status)
|
||||
w.WriteHeader(status)
|
||||
return
|
||||
}
|
||||
if status != 500 {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
err = json.NewEncoder(w).Encode(servers)
|
||||
if err != nil {
|
||||
log.Println("Error encoding OS list")
|
||||
w.Header().Del("Content-Type")
|
||||
logRequest(t, r, status)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
}
|
||||
logRequest(t, r, status)
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
err = json.NewEncoder(w).Encode(servers)
|
||||
if err != nil {
|
||||
log.Println("Error getting OS list")
|
||||
status = 500
|
||||
logRequest(t, r, status)
|
||||
w.WriteHeader(status)
|
||||
return
|
||||
}
|
||||
w.WriteHeader(status)
|
||||
return
|
||||
}
|
||||
|
||||
func CreateServer(w http.ResponseWriter, r *http.Request) {
|
||||
@ -110,23 +117,26 @@ func CreateServer(w http.ResponseWriter, r *http.Request) {
|
||||
body, err := io.ReadAll(r.Body)
|
||||
if err != nil {
|
||||
log.Println(err.Error(), "Error reading request body")
|
||||
status = 500
|
||||
}
|
||||
|
||||
params := make(map[string]null.String)
|
||||
err = json.Unmarshal(body, ¶ms)
|
||||
if err != nil {
|
||||
log.Println(err.Error(), "Error parsing request body")
|
||||
return
|
||||
}
|
||||
server.Hostname = params["hostname"]
|
||||
server.OsId = params["os_id"]
|
||||
dbConn := db.GetDatabaseConnection()
|
||||
defer dbConn.Close()
|
||||
err = db.CreateServer(server, dbConn)
|
||||
if err != nil {
|
||||
log.Println(err.Error(), "Error creating server")
|
||||
status = 500
|
||||
}
|
||||
if status != 500 {
|
||||
server.Hostname = params["hostname"]
|
||||
server.OsId = params["os_id"]
|
||||
dbConn := db.GetDatabaseConnection()
|
||||
defer dbConn.Close()
|
||||
err = db.CreateServer(server, dbConn)
|
||||
if err != nil {
|
||||
log.Println(err.Error(), "Error creating server")
|
||||
status = 500
|
||||
}
|
||||
}
|
||||
logRequest(t, r, status)
|
||||
w.WriteHeader(status)
|
||||
}
|
||||
|
||||
@ -88,74 +88,86 @@ func TestGetServerList(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetServerbyID(t *testing.T) {
|
||||
// Créer une connexion à la base de données simulée
|
||||
dbConn, mock, err := sqlmock.New()
|
||||
mockDB, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
|
||||
if err != nil {
|
||||
t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
|
||||
}
|
||||
defer dbConn.Close()
|
||||
|
||||
// Simuler la réponse de la base de données
|
||||
mockServer := db.Server{
|
||||
ID: 1, Hostname: null.StringFrom("testsla"), OsId: null.StringFrom("8"),
|
||||
}
|
||||
|
||||
rows := sqlmock.NewRows([]string{"id", "hostname", "os_id"}).
|
||||
AddRow(1, "testsla", "8")
|
||||
|
||||
mock.ExpectQuery(regexp.QuoteMeta("SELECT * FROM dashboard_server WHERE id = ?")).WithArgs(sqlmock.AnyArg()).WillReturnRows(rows)
|
||||
|
||||
// Remplacer la fonction GetDatabaseConnection par une version mockée
|
||||
originalGetDatabaseConnection := db.GetDatabaseConnection
|
||||
defer mockDB.Close()
|
||||
db.GetDatabaseConnection = func() *sql.DB {
|
||||
return dbConn
|
||||
}
|
||||
defer func() { db.GetDatabaseConnection = originalGetDatabaseConnection }()
|
||||
|
||||
// Créer une requête HTTP
|
||||
req, err := http.NewRequest("GET", "/server/1", nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
return mockDB
|
||||
}
|
||||
|
||||
// Ajouter les paramètres de la route
|
||||
req = mux.SetURLVars(req, map[string]string{"id": "1"})
|
||||
|
||||
// Créer un ResponseRecorder pour enregistrer la réponse
|
||||
rr := httptest.NewRecorder()
|
||||
handler := http.HandlerFunc(GetServersbyID)
|
||||
|
||||
// Appeler la fonction GetServer
|
||||
handler.ServeHTTP(rr, req)
|
||||
|
||||
// Vérifier le statut de la réponse
|
||||
if status := rr.Code; status != http.StatusOK {
|
||||
t.Errorf("handler returned wrong status code: got %v want %v",
|
||||
status, http.StatusOK)
|
||||
mockServer := []db.Server{
|
||||
{ID: 1, Hostname: null.StringFrom("testsla"), OsId: null.StringFrom("8")},
|
||||
}
|
||||
|
||||
// Vérifier le type de contenu de la réponse
|
||||
expectedContentType := "application/json"
|
||||
if ct := rr.Header().Get("Content-Type"); ct != expectedContentType {
|
||||
t.Errorf("handler returned wrong content type: got %v want %v",
|
||||
ct, expectedContentType)
|
||||
tests := []struct {
|
||||
name string
|
||||
requestParam string
|
||||
mockBehavior func()
|
||||
expectedStatus int
|
||||
expectedContentType string
|
||||
}{
|
||||
{
|
||||
name: "Successfully get Server by OS ID",
|
||||
requestParam: "1",
|
||||
mockBehavior: func() {
|
||||
rows := sqlmock.NewRows([]string{"id", "hostname", "os_id"}).AddRow(1, "testsla", "8")
|
||||
mock.ExpectQuery("SELECT * FROM dashboard_server WHERE id = ?").WithArgs(sqlmock.AnyArg()).WillReturnRows(rows)
|
||||
},
|
||||
expectedStatus: http.StatusOK,
|
||||
expectedContentType: "application/json",
|
||||
},
|
||||
{
|
||||
name: "Error getting Server by ID",
|
||||
requestParam: "test",
|
||||
mockBehavior: func() {},
|
||||
expectedStatus: http.StatusInternalServerError,
|
||||
expectedContentType: "",
|
||||
},
|
||||
}
|
||||
|
||||
// Vérifier le corps de la réponse
|
||||
var responseServer db.Server
|
||||
err = json.NewDecoder(rr.Body).Decode(&responseServer)
|
||||
if err != nil {
|
||||
t.Fatal("Error decoding json request", err)
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
tt.mockBehavior()
|
||||
|
||||
if !reflect.DeepEqual(responseServer, mockServer) {
|
||||
t.Errorf("handler returned unexpected body: got %v want %v",
|
||||
responseServer, mockServer)
|
||||
}
|
||||
req, err := http.NewRequest("GET", "/server/", nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
req = mux.SetURLVars(req, map[string]string{"id": tt.requestParam})
|
||||
|
||||
// Vérifier que toutes les attentes ont été satisfaites
|
||||
if err := mock.ExpectationsWereMet(); err != nil {
|
||||
t.Errorf("there were unfulfilled expectations: %s", err)
|
||||
rr := httptest.NewRecorder()
|
||||
handler := http.HandlerFunc(GetServersbyID)
|
||||
handler.ServeHTTP(rr, req)
|
||||
|
||||
if status := rr.Code; status != tt.expectedStatus {
|
||||
t.Errorf("handler returned wrong status code: got %v want %v",
|
||||
status, tt.expectedStatus)
|
||||
}
|
||||
|
||||
if ct := rr.Header().Get("Content-Type"); ct != tt.expectedContentType {
|
||||
t.Errorf("handler returned wrong content type: got %v want %v",
|
||||
ct, tt.expectedContentType)
|
||||
}
|
||||
|
||||
var responseServer []db.Server
|
||||
if len(responseServer) > 0 {
|
||||
err = json.NewDecoder(rr.Body).Decode(&responseServer)
|
||||
if err != nil {
|
||||
t.Fatal("Error decoding json request", err)
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(responseServer, mockServer) {
|
||||
t.Errorf("handler returned unexpected body: got %v want %v",
|
||||
responseServer, mockServer)
|
||||
}
|
||||
|
||||
}
|
||||
if err := mock.ExpectationsWereMet(); err != nil {
|
||||
t.Errorf("there were unfulfilled expectations: %s", err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user