Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

142 righe
3.7 KiB

  1. package controller
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "net/http"
  6. "net/http/httptest"
  7. "testing"
  8. "github.com/AFASystems/presence/internal/pkg/controller"
  9. "github.com/AFASystems/presence/internal/pkg/model"
  10. "github.com/gorilla/mux"
  11. "gorm.io/driver/sqlite"
  12. "gorm.io/gorm"
  13. )
  14. func setupTestDB(t *testing.T) *gorm.DB {
  15. db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
  16. if err != nil {
  17. t.Fatalf("Failed to open test DB: %v", err)
  18. }
  19. if err := db.AutoMigrate(&model.Gateway{}, &model.Zone{}, &model.Tracker{}, &model.TrackerZones{}, &model.Config{}, &model.Settings{}, &model.Tracks{}); err != nil {
  20. t.Fatalf("Failed to migrate: %v", err)
  21. }
  22. return db
  23. }
  24. func TestGatewayListController_Empty(t *testing.T) {
  25. db := setupTestDB(t)
  26. handler := controller.GatewayListController(db)
  27. req := httptest.NewRequest(http.MethodGet, "/gateways", nil)
  28. rec := httptest.NewRecorder()
  29. handler.ServeHTTP(rec, req)
  30. if rec.Code != http.StatusOK {
  31. t.Errorf("Expected 200, got %d", rec.Code)
  32. }
  33. var gateways []model.Gateway
  34. if err := json.NewDecoder(rec.Body).Decode(&gateways); err != nil {
  35. t.Fatalf("Failed to decode: %v", err)
  36. }
  37. if len(gateways) != 0 {
  38. t.Errorf("Expected 0 gateways, got %d", len(gateways))
  39. }
  40. }
  41. func TestGatewayAddController(t *testing.T) {
  42. db := setupTestDB(t)
  43. handler := controller.GatewayAddController(db)
  44. gateway := model.Gateway{
  45. ID: "gw-1",
  46. Name: "Gateway 1",
  47. MAC: "AA:BB:CC:DD:EE:FF",
  48. }
  49. body, _ := json.Marshal(gateway)
  50. req := httptest.NewRequest(http.MethodPost, "/gateways", bytes.NewReader(body))
  51. req.Header.Set("Content-Type", "application/json")
  52. rec := httptest.NewRecorder()
  53. handler.ServeHTTP(rec, req)
  54. if rec.Code != http.StatusOK {
  55. t.Errorf("Expected 200, got %d: %s", rec.Code, rec.Body.String())
  56. }
  57. if rec.Body.String() != "ok" {
  58. t.Errorf("Expected 'ok', got %s", rec.Body.String())
  59. }
  60. var list []model.Gateway
  61. db.Find(&list)
  62. if len(list) != 1 || list[0].Name != "Gateway 1" {
  63. t.Errorf("Expected 1 gateway in DB, got %+v", list)
  64. }
  65. }
  66. func TestGatewayDeleteController(t *testing.T) {
  67. db := setupTestDB(t)
  68. db.Create(&model.Gateway{ID: "gw-1", Name: "G1", MAC: "AA:BB:CC:DD:EE:FF"})
  69. req := httptest.NewRequest(http.MethodDelete, "/gateways/gw-1", nil)
  70. req = mux.SetURLVars(req, map[string]string{"id": "gw-1"})
  71. rec := httptest.NewRecorder()
  72. controller.GatewayDeleteController(db).ServeHTTP(rec, req)
  73. if rec.Code != http.StatusOK {
  74. t.Errorf("Expected 200, got %d", rec.Code)
  75. }
  76. var count int64
  77. db.Model(&model.Gateway{}).Where("id = ?", "gw-1").Count(&count)
  78. if count != 0 {
  79. t.Error("Expected gateway to be deleted")
  80. }
  81. }
  82. func TestTrackerListController_Empty(t *testing.T) {
  83. db := setupTestDB(t)
  84. handler := controller.TrackerList(db)
  85. req := httptest.NewRequest(http.MethodGet, "/trackers", nil)
  86. rec := httptest.NewRecorder()
  87. handler.ServeHTTP(rec, req)
  88. if rec.Code != http.StatusOK {
  89. t.Errorf("Expected 200, got %d", rec.Code)
  90. }
  91. var list []model.Tracker
  92. if err := json.NewDecoder(rec.Body).Decode(&list); err != nil {
  93. t.Fatalf("Failed to decode: %v", err)
  94. }
  95. if len(list) != 0 {
  96. t.Errorf("Expected 0 trackers, got %d", len(list))
  97. }
  98. }
  99. func TestZoneListController_Empty(t *testing.T) {
  100. db := setupTestDB(t)
  101. handler := controller.ZoneListController(db)
  102. req := httptest.NewRequest(http.MethodGet, "/zones", nil)
  103. rec := httptest.NewRecorder()
  104. handler.ServeHTTP(rec, req)
  105. if rec.Code != http.StatusOK {
  106. t.Errorf("Expected 200, got %d", rec.Code)
  107. }
  108. }
  109. func TestSettingsListController(t *testing.T) {
  110. db := setupTestDB(t)
  111. handler := controller.SettingsListController(db)
  112. req := httptest.NewRequest(http.MethodGet, "/settings", nil)
  113. rec := httptest.NewRecorder()
  114. handler.ServeHTTP(rec, req)
  115. if rec.Code != http.StatusOK {
  116. t.Errorf("Expected 200, got %d", rec.Code)
  117. }
  118. }