66 lines
2.5 KiB
Go
66 lines
2.5 KiB
Go
|
|
package homeassistant
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
"math/rand/v2"
|
||
|
|
"net/http"
|
||
|
|
"net/http/httptest"
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/stretchr/testify/mock"
|
||
|
|
)
|
||
|
|
|
||
|
|
type MockedHaHandler struct {
|
||
|
|
mock.Mock
|
||
|
|
}
|
||
|
|
|
||
|
|
func (m *MockedHaHandler) handlePooRecorderMsg(message haMessage) {
|
||
|
|
m.Called(message)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (m *MockedHaHandler) handleLocationRecorderMsg(message haMessage) {
|
||
|
|
m.Called(message)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (m *MockedHaHandler) handleTicktickMsg(message haMessage) {
|
||
|
|
m.Called(message)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestHandleHaMessagePooRecorder(t *testing.T) {
|
||
|
|
requestBody := `{"target": "poo_recorder", "action": "get_latest", "content": ""}`
|
||
|
|
req := httptest.NewRequest(http.MethodPost, "/homeassistant/publish", strings.NewReader(requestBody))
|
||
|
|
w := httptest.NewRecorder()
|
||
|
|
|
||
|
|
testObj := new(MockedHaHandler)
|
||
|
|
mockedHandler := HaMessageHandler{
|
||
|
|
PooRecorderHandler: testObj.handlePooRecorderMsg,
|
||
|
|
LocationRecorderHandler: testObj.handleLocationRecorderMsg,
|
||
|
|
TicktickHandler: testObj.handleTicktickMsg,
|
||
|
|
}
|
||
|
|
testObj.On("handlePooRecorderMsg", haMessage{Target: "poo_recorder", Action: "get_latest"}).Return()
|
||
|
|
mockedHandler.HandleHaMessage(w, req)
|
||
|
|
testObj.AssertCalled(t, "handlePooRecorderMsg", haMessage{Target: "poo_recorder", Action: "get_latest"})
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestHandleHaMessageLocationRecorder(t *testing.T) {
|
||
|
|
expectedLatitude := rand.Float64() * 359
|
||
|
|
expectedLongitude := rand.Float64() * 359
|
||
|
|
expectedAltitude := rand.Float64() * 10000
|
||
|
|
requestBody := fmt.Sprintf(`{"target": "location_recorder", "action": "record",
|
||
|
|
"content": "{'Person': 'Tom', 'latitude': %f, 'longitude': %f, 'altitude': %f}"}`, expectedLatitude, expectedLongitude, expectedAltitude)
|
||
|
|
req := httptest.NewRequest(http.MethodPost, "/homeassistant/publish", strings.NewReader(requestBody))
|
||
|
|
w := httptest.NewRecorder()
|
||
|
|
testobj := new(MockedHaHandler)
|
||
|
|
mockedHandler := HaMessageHandler{
|
||
|
|
PooRecorderHandler: testobj.handlePooRecorderMsg,
|
||
|
|
LocationRecorderHandler: testobj.handleLocationRecorderMsg,
|
||
|
|
TicktickHandler: testobj.handleTicktickMsg,
|
||
|
|
}
|
||
|
|
testobj.On("handleLocationRecorderMsg", haMessage{Target: "location_recorder", Action: "record",
|
||
|
|
Content: fmt.Sprintf("{'Person': 'Tom', 'latitude': %f, 'longitude': %f, 'altitude': %f}", expectedLatitude, expectedLongitude, expectedAltitude)}).Return()
|
||
|
|
mockedHandler.HandleHaMessage(w, req)
|
||
|
|
testobj.AssertCalled(t, "handleLocationRecorderMsg", haMessage{Target: "location_recorder", Action: "record",
|
||
|
|
Content: fmt.Sprintf("{'Person': 'Tom', 'latitude': %f, 'longitude': %f, 'altitude': %f}", expectedLatitude, expectedLongitude, expectedAltitude)})
|
||
|
|
}
|