mirror of
https://github.com/sstent/go-garminconnect.git
synced 2026-01-26 09:01:38 +00:00
garth more done
This commit is contained in:
@@ -89,12 +89,7 @@ func TestGetBodyComposition(t *testing.T) {
|
||||
}
|
||||
|
||||
// Create mock authenticator for tests
|
||||
mockAuth := &struct {
|
||||
RefreshToken func(_, _ string) (string, error)
|
||||
}{}
|
||||
mockAuth.RefreshToken = func(_, _ string) (string, error) {
|
||||
return "refreshed-token", nil
|
||||
}
|
||||
mockAuth := NewMockAuthenticator()
|
||||
client, err := NewClient(mockAuth, session, "")
|
||||
assert.NoError(t, err)
|
||||
client.HTTPClient.SetBaseURL(server.URL)
|
||||
|
||||
@@ -14,13 +14,6 @@ import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
// mockAuthImpl implements the Authenticator interface for tests
|
||||
type mockAuthImpl struct{}
|
||||
|
||||
func (m *mockAuthImpl) RefreshToken(_, _ string) (string, error) {
|
||||
return "refreshed-token", nil
|
||||
}
|
||||
|
||||
func TestGearService(t *testing.T) {
|
||||
// Create test server
|
||||
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -83,7 +76,7 @@ func TestGearService(t *testing.T) {
|
||||
|
||||
// Create client
|
||||
// Create mock authenticator for tests
|
||||
mockAuth := &mockAuthImpl{}
|
||||
mockAuth := NewMockAuthenticator()
|
||||
client, err := NewClient(mockAuth, session, "")
|
||||
assert.NoError(t, err)
|
||||
client.HTTPClient.SetBaseURL(srv.URL)
|
||||
@@ -103,7 +96,7 @@ func TestGearService(t *testing.T) {
|
||||
|
||||
// Create client
|
||||
// Create mock authenticator for tests
|
||||
mockAuth := &mockAuthImpl{}
|
||||
mockAuth := NewMockAuthenticator()
|
||||
client, err := NewClient(mockAuth, session, "")
|
||||
assert.NoError(t, err)
|
||||
client.HTTPClient.SetBaseURL(srv.URL)
|
||||
@@ -123,7 +116,7 @@ func TestGearService(t *testing.T) {
|
||||
|
||||
// Create client
|
||||
// Create mock authenticator for tests
|
||||
mockAuth := &mockAuthImpl{}
|
||||
mockAuth := NewMockAuthenticator()
|
||||
client, err := NewClient(mockAuth, session, "")
|
||||
assert.NoError(t, err)
|
||||
client.HTTPClient.SetBaseURL(srv.URL)
|
||||
|
||||
@@ -193,8 +193,9 @@ func TestGetSleepData(t *testing.T) {
|
||||
OAuth2Token: "test-token",
|
||||
ExpiresAt: time.Now().Add(8 * time.Hour),
|
||||
}
|
||||
// Pass nil authenticator for tests
|
||||
client, err := NewClient(nil, session, "")
|
||||
// Use mock authenticator
|
||||
mockAuth := NewMockAuthenticator()
|
||||
client, err := NewClient(mockAuth, session, "")
|
||||
assert.NoError(t, err)
|
||||
client.HTTPClient.SetBaseURL(mockServer.URL())
|
||||
|
||||
@@ -291,8 +292,9 @@ func TestGetHRVData(t *testing.T) {
|
||||
OAuth2Token: "test-token",
|
||||
ExpiresAt: time.Now().Add(8 * time.Hour),
|
||||
}
|
||||
// Pass nil authenticator for tests
|
||||
client, err := NewClient(nil, session, "")
|
||||
// Use mock authenticator
|
||||
mockAuth := NewMockAuthenticator()
|
||||
client, err := NewClient(mockAuth, session, "")
|
||||
assert.NoError(t, err)
|
||||
client.HTTPClient.SetBaseURL(mockServer.URL())
|
||||
|
||||
@@ -380,8 +382,9 @@ func TestGetBodyBatteryData(t *testing.T) {
|
||||
OAuth2Token: "test-token",
|
||||
ExpiresAt: time.Now().Add(8 * time.Hour),
|
||||
}
|
||||
// Pass nil authenticator for tests
|
||||
client, err := NewClient(nil, session, "")
|
||||
// Use mock authenticator
|
||||
mockAuth := NewMockAuthenticator()
|
||||
client, err := NewClient(mockAuth, session, "")
|
||||
assert.NoError(t, err)
|
||||
client.HTTPClient.SetBaseURL(mockServer.URL())
|
||||
|
||||
|
||||
@@ -81,8 +81,9 @@ func TestIntegrationHealthMetrics(t *testing.T) {
|
||||
OAuth2Token: "test-token",
|
||||
ExpiresAt: time.Now().Add(8 * time.Hour),
|
||||
}
|
||||
// For integration tests, pass nil for authenticator since we don't need token refresh
|
||||
client, err := NewClient(nil, session, "")
|
||||
// Use mock authenticator for integration tests
|
||||
mockAuth := &MockAuthenticator{}
|
||||
client, err := NewClient(mockAuth, session, "")
|
||||
assert.NoError(t, err)
|
||||
client.HTTPClient.SetBaseURL(mockServer.URL())
|
||||
|
||||
|
||||
@@ -408,13 +408,6 @@ func (m *MockServer) handleGear(w http.ResponseWriter, r *http.Request) {
|
||||
})
|
||||
}
|
||||
|
||||
// MockAuthenticator implements garth.Authenticator for testing
|
||||
type MockAuthenticator struct{}
|
||||
|
||||
func (m *MockAuthenticator) RefreshToken(_, _ string) (string, error) {
|
||||
return "refreshed-token", nil
|
||||
}
|
||||
|
||||
// NewClientWithBaseURL creates a test client that uses the mock server's URL
|
||||
func NewClientWithBaseURL(baseURL string) *Client {
|
||||
session := &garth.Session{
|
||||
@@ -423,7 +416,7 @@ func NewClientWithBaseURL(baseURL string) *Client {
|
||||
}
|
||||
|
||||
// Create mock authenticator for tests
|
||||
auth := &MockAuthenticator{}
|
||||
auth := NewMockAuthenticator()
|
||||
|
||||
client, err := NewClient(auth, session, "")
|
||||
if err != nil {
|
||||
|
||||
35
internal/api/test_helpers.go
Normal file
35
internal/api/test_helpers.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package api
|
||||
|
||||
// MockAuthenticator implements the Authenticator interface for testing
|
||||
type MockAuthenticator struct {
|
||||
// RefreshTokenFunc can be set for custom refresh behavior
|
||||
RefreshTokenFunc func(oauth1Token, oauth1Secret string) (string, error)
|
||||
|
||||
// CallCount tracks how many times RefreshToken was called
|
||||
CallCount int
|
||||
}
|
||||
|
||||
// RefreshToken implements the Authenticator interface
|
||||
func (m *MockAuthenticator) RefreshToken(oauth1Token, oauth1Secret string) (string, error) {
|
||||
m.CallCount++
|
||||
|
||||
// If custom function is provided, use it
|
||||
if m.RefreshTokenFunc != nil {
|
||||
return m.RefreshTokenFunc(oauth1Token, oauth1Secret)
|
||||
}
|
||||
|
||||
// Default behavior: return a mock token
|
||||
return "refreshed-test-token", nil
|
||||
}
|
||||
|
||||
// NewMockAuthenticator creates a new mock authenticator with default behavior
|
||||
func NewMockAuthenticator() *MockAuthenticator {
|
||||
return &MockAuthenticator{}
|
||||
}
|
||||
|
||||
// NewMockAuthenticatorWithFunc creates a mock authenticator with custom refresh behavior
|
||||
func NewMockAuthenticatorWithFunc(refreshFunc func(string, string) (string, error)) *MockAuthenticator {
|
||||
return &MockAuthenticator{
|
||||
RefreshTokenFunc: refreshFunc,
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/sstent/go-garminconnect/internal/auth/garth"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
@@ -75,7 +76,18 @@ func TestGetUserProfile(t *testing.T) {
|
||||
|
||||
mockServer := NewMockServer()
|
||||
defer mockServer.Close()
|
||||
client := NewClientWithBaseURL(mockServer.URL())
|
||||
// Create client with non-expired session
|
||||
session := &garth.Session{
|
||||
OAuth2Token: "test-token",
|
||||
ExpiresAt: time.Now().Add(8 * time.Hour),
|
||||
}
|
||||
// Use mock authenticator
|
||||
mockAuth := NewMockAuthenticator()
|
||||
client, err := NewClient(mockAuth, session, "")
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create client: %v", err)
|
||||
}
|
||||
client.HTTPClient.SetBaseURL(mockServer.URL())
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
@@ -178,7 +190,18 @@ func TestGetUserStats(t *testing.T) {
|
||||
|
||||
mockServer := NewMockServer()
|
||||
defer mockServer.Close()
|
||||
client := NewClientWithBaseURL(mockServer.URL())
|
||||
// Create client with non-expired session
|
||||
session := &garth.Session{
|
||||
OAuth2Token: "test-token",
|
||||
ExpiresAt: time.Now().Add(8 * time.Hour),
|
||||
}
|
||||
// Use mock authenticator
|
||||
mockAuth := NewMockAuthenticator()
|
||||
client, err := NewClient(mockAuth, session, "")
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create client: %v", err)
|
||||
}
|
||||
client.HTTPClient.SetBaseURL(mockServer.URL())
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user