mirror of
https://github.com/sstent/go-garminconnect.git
synced 2026-04-05 20:52:44 +00:00
all tests pass
This commit is contained in:
@@ -60,6 +60,10 @@ func NewMockServer() *MockServer {
|
|||||||
m.handleUpload(w, r)
|
m.handleUpload(w, r)
|
||||||
case strings.Contains(path, "/userprofile-service") || strings.Contains(path, "/user-service"):
|
case strings.Contains(path, "/userprofile-service") || strings.Contains(path, "/user-service"):
|
||||||
endpointType = "user"
|
endpointType = "user"
|
||||||
|
if m.userHandler != nil {
|
||||||
|
m.userHandler(w, r)
|
||||||
|
return
|
||||||
|
}
|
||||||
m.handleUserData(w, r)
|
m.handleUserData(w, r)
|
||||||
case strings.Contains(path, "/wellness-service") || strings.Contains(path, "/hrv-service") || strings.Contains(path, "/bodybattery-service"):
|
case strings.Contains(path, "/wellness-service") || strings.Contains(path, "/hrv-service") || strings.Contains(path, "/bodybattery-service"):
|
||||||
endpointType = "health"
|
endpointType = "health"
|
||||||
@@ -75,6 +79,10 @@ func NewMockServer() *MockServer {
|
|||||||
m.handleGear(w, r)
|
m.handleGear(w, r)
|
||||||
case strings.Contains(path, "/stats-service"): // Added stats routing
|
case strings.Contains(path, "/stats-service"): // Added stats routing
|
||||||
endpointType = "stats"
|
endpointType = "stats"
|
||||||
|
if m.statsHandler != nil {
|
||||||
|
m.statsHandler(w, r)
|
||||||
|
return
|
||||||
|
}
|
||||||
m.handleStats(w, r)
|
m.handleStats(w, r)
|
||||||
default:
|
default:
|
||||||
endpointType = "unknown"
|
endpointType = "unknown"
|
||||||
@@ -362,13 +370,21 @@ func (m *MockServer) handleStats(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default stats response
|
// Extract date from URL path
|
||||||
|
pathParts := strings.Split(r.URL.Path, "/")
|
||||||
|
date := ""
|
||||||
|
if len(pathParts) > 0 {
|
||||||
|
date = pathParts[len(pathParts)-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default stats response with consistent units (meters)
|
||||||
stats := map[string]interface{}{
|
stats := map[string]interface{}{
|
||||||
"totalSteps": 10000,
|
"totalSteps": 10000,
|
||||||
"totalDistance": 8.5,
|
"totalDistance": 8500.5, // Converted to meters
|
||||||
"totalCalories": 2200,
|
"totalCalories": 2200,
|
||||||
"activeMinutes": 45,
|
"activeMinutes": 45,
|
||||||
"restingHeartRate": 55,
|
"restingHeartRate": 55,
|
||||||
|
"date": date, // Include date field
|
||||||
}
|
}
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package api
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"testing"
|
"testing"
|
||||||
@@ -58,11 +59,9 @@ func TestGetUserProfile(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "invalid response format",
|
name: "invalid response format",
|
||||||
mockResponse: map[string]interface{}{
|
mockResponse: "not-a-valid-json-object",
|
||||||
"invalid": "data",
|
|
||||||
},
|
|
||||||
mockStatus: http.StatusOK,
|
mockStatus: http.StatusOK,
|
||||||
expectedError: "failed to unmarshal successful response",
|
expectedError: "failed to get user profile: json: cannot unmarshal string",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "server error",
|
name: "server error",
|
||||||
@@ -81,17 +80,23 @@ func TestGetUserProfile(t *testing.T) {
|
|||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
mockServer.Reset()
|
mockServer.Reset()
|
||||||
mockServer.SetResponse("/userprofile-service/socialProfile", tt.mockStatus, tt.mockResponse)
|
|
||||||
|
// Set custom handler directly
|
||||||
|
mockServer.SetUserHandler(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(tt.mockStatus)
|
||||||
|
json.NewEncoder(w).Encode(tt.mockResponse)
|
||||||
|
})
|
||||||
|
|
||||||
profile, err := client.GetUserProfile(context.Background())
|
profile, err := client.GetUserProfile(context.Background())
|
||||||
|
|
||||||
if tt.expectedError != "" {
|
if tt.expectedError != "" {
|
||||||
if assert.Error(t, err) {
|
assert.Error(t, err)
|
||||||
assert.Contains(t, err.Error(), tt.expectedError)
|
assert.Contains(t, err.Error(), tt.expectedError)
|
||||||
}
|
|
||||||
assert.Nil(t, profile)
|
assert.Nil(t, profile)
|
||||||
} else {
|
} else {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
assert.NotNil(t, profile) // Add nil check
|
||||||
assert.Equal(t, tt.expected, profile)
|
assert.Equal(t, tt.expected, profile)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -165,11 +170,9 @@ func TestGetUserStats(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "invalid stats response",
|
name: "invalid stats response",
|
||||||
date: now,
|
date: now,
|
||||||
mockResponse: map[string]interface{}{
|
mockResponse: "invalid-json-response",
|
||||||
"invalid": "data",
|
|
||||||
},
|
|
||||||
mockStatus: http.StatusOK,
|
mockStatus: http.StatusOK,
|
||||||
expectedError: "failed to unmarshal successful response",
|
expectedError: "failed to get user stats: json: cannot unmarshal string",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,8 +183,13 @@ func TestGetUserStats(t *testing.T) {
|
|||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
mockServer.Reset()
|
mockServer.Reset()
|
||||||
path := fmt.Sprintf("/stats-service/stats/daily/%s", tt.date.Format("2006-01-02"))
|
|
||||||
mockServer.SetResponse(path, tt.mockStatus, tt.mockResponse)
|
// Set custom handler directly for stats
|
||||||
|
mockServer.SetStatsHandler(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
w.WriteHeader(tt.mockStatus)
|
||||||
|
json.NewEncoder(w).Encode(tt.mockResponse)
|
||||||
|
})
|
||||||
|
|
||||||
stats, err := client.GetUserStats(context.Background(), tt.date)
|
stats, err := client.GetUserStats(context.Background(), tt.date)
|
||||||
|
|
||||||
@@ -191,6 +199,7 @@ func TestGetUserStats(t *testing.T) {
|
|||||||
assert.Nil(t, stats)
|
assert.Nil(t, stats)
|
||||||
} else {
|
} else {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
assert.NotNil(t, stats) // Add nil check
|
||||||
assert.Equal(t, tt.expected, stats)
|
assert.Equal(t, tt.expected, stats)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user