mirror of
https://github.com/MengMengCode/VoCat.git
synced 2026-08-16 21:03:44 +08:00
73 lines
2.0 KiB
Go
73 lines
2.0 KiB
Go
package server
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
|
|
"vocat/internal/device"
|
|
"vocat/internal/modem"
|
|
"vocat/internal/store"
|
|
)
|
|
|
|
type discoverySnapshotController struct {
|
|
fakeDeviceController
|
|
entries []device.Device
|
|
discoverCalls int
|
|
}
|
|
|
|
func (controller *discoverySnapshotController) Discover(context.Context) ([]device.Device, error) {
|
|
controller.discoverCalls++
|
|
return append([]device.Device(nil), controller.entries...), nil
|
|
}
|
|
|
|
func TestDiscoveredDevicesPerformsFreshScanAndOmitsAbsentEntries(t *testing.T) {
|
|
database, err := store.Open(context.Background(), ":memory:")
|
|
if err != nil {
|
|
t.Fatalf("store.Open: %v", err)
|
|
}
|
|
t.Cleanup(func() { _ = database.Close() })
|
|
|
|
controller := &discoverySnapshotController{
|
|
fakeDeviceController: fakeDeviceController{entry: device.Device{
|
|
ID: "stale-device", Discovered: false,
|
|
Candidate: modem.Candidate{ID: "stale-device", USBPath: "1-1"},
|
|
}},
|
|
entries: []device.Device{
|
|
{
|
|
ID: "current-device", Discovered: true,
|
|
Candidate: modem.Candidate{ID: "current-device", USBPath: "2-1"},
|
|
},
|
|
{
|
|
ID: "absent-device", Discovered: false,
|
|
Candidate: modem.Candidate{ID: "absent-device", USBPath: "3-1"},
|
|
},
|
|
},
|
|
}
|
|
server := &Server{
|
|
store: database, logger: regionTestLogger(),
|
|
maxRequestBodyBytes: 4096, devices: controller,
|
|
}
|
|
request := httptest.NewRequest(http.MethodGet, "/api/devices/discovered", nil)
|
|
recorder := httptest.NewRecorder()
|
|
|
|
if !server.handleDiscoveredDevices(recorder, request) {
|
|
t.Fatal("handleDiscoveredDevices returned false")
|
|
}
|
|
if recorder.Code != http.StatusOK {
|
|
t.Fatalf("status = %d, body = %s", recorder.Code, recorder.Body.String())
|
|
}
|
|
if controller.discoverCalls != 1 {
|
|
t.Fatalf("Discover calls = %d, want 1", controller.discoverCalls)
|
|
}
|
|
body := recorder.Body.String()
|
|
if !strings.Contains(body, "current-device") {
|
|
t.Fatalf("response omits current device: %s", body)
|
|
}
|
|
if strings.Contains(body, "stale-device") || strings.Contains(body, "absent-device") {
|
|
t.Fatalf("response contains an absent device: %s", body)
|
|
}
|
|
}
|