25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

161 satır
3.8 KiB

  1. package httpservertest_test
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. "net/http/httptest"
  8. "os"
  9. "sync"
  10. "testing"
  11. "github.com/AFASystems/presence/internal/pkg/httpserver"
  12. "github.com/AFASystems/presence/internal/pkg/model"
  13. "github.com/boltdb/bolt"
  14. "github.com/gorilla/mux"
  15. )
  16. // Functions beaconsAddHandler, beaconsListHandler, beaconsDeleteHandler
  17. func TestBeaconCRUD(t *testing.T) {
  18. tmpfile, _ := os.CreateTemp("", "testdb-*.db")
  19. defer os.Remove(tmpfile.Name())
  20. db, err := bolt.Open(tmpfile.Name(), 0600, nil)
  21. if err != nil {
  22. t.Fatal(err)
  23. }
  24. model.Db = db
  25. ctx := model.AppContext{
  26. Beacons: model.BeaconsList{
  27. Beacons: make(map[string]model.Beacon),
  28. Lock: sync.RWMutex{},
  29. },
  30. ButtonsList: make(map[string]model.Button),
  31. }
  32. b := model.Beacon{Name: "B1", Beacon_id: "1"}
  33. body, err := json.Marshal(b)
  34. if err != nil {
  35. t.Fatal(err)
  36. }
  37. req := httptest.NewRequest("POST", "/api/beacons", bytes.NewReader(body))
  38. w := httptest.NewRecorder()
  39. httpserver.BeaconsAddHandler(&ctx.Beacons)(w, req)
  40. if w.Code != http.StatusOK {
  41. t.Fatalf("create failed: %d", w.Code)
  42. }
  43. fmt.Println("--------------------------------------------------------------")
  44. req = httptest.NewRequest("GET", "/api/beacons", nil)
  45. w = httptest.NewRecorder()
  46. httpserver.BeaconsListHandler(&ctx.Beacons)(w, req)
  47. fmt.Println("Status:", w.Code)
  48. fmt.Println("Body:", w.Body.String())
  49. fmt.Println("--------------------------------------------------------------")
  50. newB := model.Beacon{Name: "B2", Beacon_id: "2"}
  51. newBody, err := json.Marshal(newB)
  52. if err != nil {
  53. t.Fatal(err)
  54. }
  55. req = httptest.NewRequest("PUT", "/api/beacons", bytes.NewReader(newBody))
  56. w = httptest.NewRecorder()
  57. httpserver.BeaconsAddHandler(&ctx.Beacons)(w, req)
  58. if w.Code != http.StatusOK {
  59. t.Fatalf("create failed: %d", w.Code)
  60. }
  61. req = httptest.NewRequest("GET", "/api/beacons", nil)
  62. w = httptest.NewRecorder()
  63. httpserver.BeaconsListHandler(&ctx.Beacons)(w, req)
  64. fmt.Println("Status:", w.Code)
  65. fmt.Println("Body:", w.Body.String())
  66. fmt.Println("--------------------------------------------------------------")
  67. req = httptest.NewRequest("DELETE", "/api/beacons/1", nil)
  68. req = mux.SetURLVars(req, map[string]string{"beacon_id": "1"})
  69. w = httptest.NewRecorder()
  70. httpserver.BeaconsDeleteHandler(&ctx.Beacons, ctx.ButtonsList)(w, req)
  71. fmt.Println("Status: ", w.Code)
  72. fmt.Println("--------------------------------------------------------------")
  73. req = httptest.NewRequest("GET", "/api/beacons", nil)
  74. w = httptest.NewRecorder()
  75. httpserver.BeaconsListHandler(&ctx.Beacons)(w, req)
  76. fmt.Println("Status:", w.Code)
  77. fmt.Println("Body:", w.Body.String())
  78. fmt.Println("--------------------------------------------------------------")
  79. }
  80. func TestSettingsCRUD(t *testing.T) {
  81. tmpfile, _ := os.CreateTemp("", "testdb-*.db")
  82. defer os.Remove(tmpfile.Name())
  83. db, err := bolt.Open(tmpfile.Name(), 0600, nil)
  84. if err != nil {
  85. t.Fatal(err)
  86. }
  87. model.Db = db
  88. ctx := model.AppContext{
  89. Settings: model.Settings{},
  90. }
  91. settings := model.Settings{
  92. Location_confidence: 10,
  93. Last_seen_threshold: 10,
  94. Beacon_metrics_size: 10,
  95. HA_send_interval: 10,
  96. HA_send_changes_only: true,
  97. }
  98. body, err := json.Marshal(settings)
  99. if err != nil {
  100. t.Fatal(err)
  101. }
  102. req := httptest.NewRequest("POST", "/api/settings", bytes.NewReader(body))
  103. w := httptest.NewRecorder()
  104. httpserver.SettingsEditHandler(&ctx.Settings)(w, req)
  105. fmt.Println("status: ", w.Code)
  106. if w.Code != http.StatusOK {
  107. t.Fatalf("create failed: %d", w.Code)
  108. }
  109. fmt.Println("--------------------------------------------------------------")
  110. req = httptest.NewRequest("GET", "/api/settings", nil)
  111. w = httptest.NewRecorder()
  112. httpserver.SettingsListHandler(&ctx.Settings)(w, req)
  113. fmt.Println("Status:", w.Code)
  114. fmt.Println("Body:", w.Body.String())
  115. }