|
- package controller
-
- import (
- "bytes"
- "encoding/json"
- "net/http"
- "net/http/httptest"
- "testing"
-
- "github.com/AFASystems/presence/internal/pkg/controller"
- "github.com/AFASystems/presence/internal/pkg/model"
- "github.com/gorilla/mux"
- "gorm.io/driver/sqlite"
- "gorm.io/gorm"
- )
-
- func setupTestDB(t *testing.T) *gorm.DB {
- db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
- if err != nil {
- t.Fatalf("Failed to open test DB: %v", err)
- }
- if err := db.AutoMigrate(&model.Gateway{}, &model.Zone{}, &model.Tracker{}, &model.TrackerZones{}, &model.Config{}, &model.Settings{}, &model.Tracks{}); err != nil {
- t.Fatalf("Failed to migrate: %v", err)
- }
- return db
- }
-
- func TestGatewayListController_Empty(t *testing.T) {
- db := setupTestDB(t)
- handler := controller.GatewayListController(db)
-
- req := httptest.NewRequest(http.MethodGet, "/gateways", nil)
- rec := httptest.NewRecorder()
- handler.ServeHTTP(rec, req)
-
- if rec.Code != http.StatusOK {
- t.Errorf("Expected 200, got %d", rec.Code)
- }
- var gateways []model.Gateway
- if err := json.NewDecoder(rec.Body).Decode(&gateways); err != nil {
- t.Fatalf("Failed to decode: %v", err)
- }
- if len(gateways) != 0 {
- t.Errorf("Expected 0 gateways, got %d", len(gateways))
- }
- }
-
- func TestGatewayAddController(t *testing.T) {
- db := setupTestDB(t)
- handler := controller.GatewayAddController(db)
-
- gateway := model.Gateway{
- ID: "gw-1",
- Name: "Gateway 1",
- MAC: "AA:BB:CC:DD:EE:FF",
- }
- body, _ := json.Marshal(gateway)
- req := httptest.NewRequest(http.MethodPost, "/gateways", bytes.NewReader(body))
- req.Header.Set("Content-Type", "application/json")
- rec := httptest.NewRecorder()
- handler.ServeHTTP(rec, req)
-
- if rec.Code != http.StatusOK {
- t.Errorf("Expected 200, got %d: %s", rec.Code, rec.Body.String())
- }
- if rec.Body.String() != "ok" {
- t.Errorf("Expected 'ok', got %s", rec.Body.String())
- }
-
- var list []model.Gateway
- db.Find(&list)
- if len(list) != 1 || list[0].Name != "Gateway 1" {
- t.Errorf("Expected 1 gateway in DB, got %+v", list)
- }
- }
-
- func TestGatewayDeleteController(t *testing.T) {
- db := setupTestDB(t)
- db.Create(&model.Gateway{ID: "gw-1", Name: "G1", MAC: "AA:BB:CC:DD:EE:FF"})
-
- req := httptest.NewRequest(http.MethodDelete, "/gateways/gw-1", nil)
- req = mux.SetURLVars(req, map[string]string{"id": "gw-1"})
- rec := httptest.NewRecorder()
- controller.GatewayDeleteController(db).ServeHTTP(rec, req)
-
- if rec.Code != http.StatusOK {
- t.Errorf("Expected 200, got %d", rec.Code)
- }
-
- var count int64
- db.Model(&model.Gateway{}).Where("id = ?", "gw-1").Count(&count)
- if count != 0 {
- t.Error("Expected gateway to be deleted")
- }
- }
-
- func TestTrackerListController_Empty(t *testing.T) {
- db := setupTestDB(t)
- handler := controller.TrackerList(db)
-
- req := httptest.NewRequest(http.MethodGet, "/trackers", nil)
- rec := httptest.NewRecorder()
- handler.ServeHTTP(rec, req)
-
- if rec.Code != http.StatusOK {
- t.Errorf("Expected 200, got %d", rec.Code)
- }
- var list []model.Tracker
- if err := json.NewDecoder(rec.Body).Decode(&list); err != nil {
- t.Fatalf("Failed to decode: %v", err)
- }
- if len(list) != 0 {
- t.Errorf("Expected 0 trackers, got %d", len(list))
- }
- }
-
- func TestZoneListController_Empty(t *testing.T) {
- db := setupTestDB(t)
- handler := controller.ZoneListController(db)
-
- req := httptest.NewRequest(http.MethodGet, "/zones", nil)
- rec := httptest.NewRecorder()
- handler.ServeHTTP(rec, req)
-
- if rec.Code != http.StatusOK {
- t.Errorf("Expected 200, got %d", rec.Code)
- }
- }
-
- func TestSettingsListController(t *testing.T) {
- db := setupTestDB(t)
- handler := controller.SettingsListController(db)
-
- req := httptest.NewRequest(http.MethodGet, "/settings", nil)
- rec := httptest.NewRecorder()
- handler.ServeHTTP(rec, req)
-
- if rec.Code != http.StatusOK {
- t.Errorf("Expected 200, got %d", rec.Code)
- }
- }
|