Skip to content
This repository was archived by the owner on Feb 14, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions activities.go
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,15 @@ func (s *ActivitiesService) ListZones(activityId int64) *ActivitiesListZonesCall
}
}

func postProcessZones(zones []*ZonesSummary) {
for _, zones := range zones {
for _, bucket := range zones.Buckets {
bucket.Max = int(bucket.MaxFloat)
bucket.Min = int(bucket.MinFloat)
}
}
}

func (c *ActivitiesListZonesCall) Do() ([]*ZonesSummary, error) {
data, err := c.service.client.run("GET", fmt.Sprintf("/activities/%d/zones", c.id), nil)
if err != nil {
Expand All @@ -359,6 +368,7 @@ func (c *ActivitiesListZonesCall) Do() ([]*ZonesSummary, error) {
if err != nil {
return nil, err
}
postProcessZones(zones)

return zones, nil
}
Expand Down
20 changes: 19 additions & 1 deletion activities_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package strava
import (
"io/ioutil"
"reflect"
"strconv"
"testing"
"time"
)
Expand Down Expand Up @@ -411,6 +412,11 @@ func TestActivitiesListPhotos(t *testing.T) {
}
}

func parseFloat(str string) float64 {
x, _ := strconv.ParseFloat(str, 64)
return x
}

func TestActivitiesListZones(t *testing.T) {
client := newCassetteClient(testToken, "activity_list_zones")
zones, err := NewActivitiesService(client).ListZones(103221154).Do()
Expand Down Expand Up @@ -443,12 +449,24 @@ func TestActivitiesListZones(t *testing.T) {
t.Fatal("Buckets not parsed")
}

expected := &ZoneBucket{Max: 143, Min: 108, Time: 910}
expected := &ZoneBucket{
Max: 143, Min: 108,
MaxFloat: parseFloat("143"), MinFloat: parseFloat("108"),
Time: 910}

if !reflect.DeepEqual(zones[0].Buckets[1], expected) {
t.Errorf("should match\n%v\n%v", zones[0].Buckets[1], expected)
}

expectedPaceBucket := &ZoneBucket{
Min: 1, Max: 2,
MinFloat: parseFloat("1.8331809410114008"), MaxFloat: parseFloat("2.156683460013413"),
Time: 67}

if !reflect.DeepEqual(zones[2].Buckets[1], expectedPaceBucket) {
t.Errorf("should match\n%v\n%v", zones[2].Buckets[1], expectedPaceBucket)
}

// from here on out just check the request parameters
s := NewActivitiesService(newStoreRequestClient())

Expand Down
2 changes: 1 addition & 1 deletion cassettes/activity_list_zones.body
Original file line number Diff line number Diff line change
@@ -1 +1 @@
[{"score":12,"distribution_buckets":[{"max":108,"min":0,"time":1918},{"max":143,"min":108,"time":910},{"max":161,"min":143,"time":8},{"max":178,"min":161,"time":0},{"max":-1,"min":178,"time":0}],"type":"heartrate","resource_state":3,"sensor_based":true,"points":0,"custom_zones":false},{"distribution_buckets":[{"max":0,"min":0,"time":322},{"max":50,"min":0,"time":121},{"max":100,"min":50,"time":187},{"max":150,"min":100,"time":850},{"max":200,"min":150,"time":1033},{"max":250,"min":200,"time":199},{"max":300,"min":250,"time":57},{"max":350,"min":300,"time":22},{"max":400,"min":350,"time":17},{"max":450,"min":400,"time":8},{"max":-1,"min":450,"time":20}],"type":"power","resource_state":3,"sensor_based":true}]
[{"score":12,"distribution_buckets":[{"max":108,"min":0,"time":1918},{"max":143,"min":108,"time":910},{"max":161,"min":143,"time":8},{"max":178,"min":161,"time":0},{"max":-1,"min":178,"time":0}],"type":"heartrate","resource_state":3,"sensor_based":true,"points":0,"custom_zones":false},{"distribution_buckets":[{"max":0,"min":0,"time":322},{"max":50,"min":0,"time":121},{"max":100,"min":50,"time":187},{"max":150,"min":100,"time":850},{"max":200,"min":150,"time":1033},{"max":250,"min":200,"time":199},{"max":300,"min":250,"time":57},{"max":350,"min":300,"time":22},{"max":400,"min":350,"time":17},{"max":450,"min":400,"time":8},{"max":-1,"min":450,"time":20}],"type":"power","resource_state":3,"sensor_based":true},{"score":42,"distribution_buckets":[{"max":1.8331809410114008,"min":0,"time":117},{"max":2.156683460013413,"min":1.8331809410114008,"time":67},{"max":2.4435539047991397,"min":2.156683460013413,"time":71},{"max":2.869924875495906,"min":2.4435539047991397,"time":121},{"max":-1,"min":2.869924875495906,"time":413}],"type":"pace","resource_state":3,"sensor_based":true}]
10 changes: 7 additions & 3 deletions zones.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@ type ZonesSummary struct {
}

type ZoneBucket struct {
Min int `json:"min"`
Max int `json:"max"`
Time int `json:"time"`
// legacy, left intact for compatibility
Min int
Max int
// precision fields
MinFloat float64 `json:"min"`
MaxFloat float64 `json:"max"`
Time int `json:"time"`
}