strava-api 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +20 -0
- data/README.rdoc +221 -0
- data/Rakefile +56 -0
- data/lib/strava-api.rb +22 -0
- data/lib/strava-api/base.rb +37 -0
- data/lib/strava-api/bike.rb +8 -0
- data/lib/strava-api/club.rb +17 -0
- data/lib/strava-api/clubs.rb +28 -0
- data/lib/strava-api/effort.rb +50 -0
- data/lib/strava-api/efforts.rb +9 -0
- data/lib/strava-api/exceptions.rb +9 -0
- data/lib/strava-api/hash_based_store.rb +52 -0
- data/lib/strava-api/member.rb +8 -0
- data/lib/strava-api/ride.rb +55 -0
- data/lib/strava-api/rides.rb +39 -0
- data/lib/strava-api/segment.rb +36 -0
- data/lib/strava-api/segments.rb +39 -0
- data/test/helper.rb +133 -0
- data/test/test_base.rb +40 -0
- data/test/test_club.rb +45 -0
- data/test/test_clubs.rb +87 -0
- data/test/test_effort.rb +31 -0
- data/test/test_hash_based_store.rb +79 -0
- data/test/test_ride.rb +49 -0
- data/test/test_rides.rb +186 -0
- data/test/test_segment.rb +63 -0
- data/test/test_segments.rb +166 -0
- data/test/test_strava.rb +36 -0
- metadata +136 -0
data/test/test_clubs.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'mocha'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
class TestClubs < Test::Unit::TestCase
|
6
|
+
###### Testing StravaApi::Base
|
7
|
+
def setup
|
8
|
+
@s = StravaApi::Base.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_clubs_no_search_string
|
12
|
+
expect_error(StravaApi::CommandError) { @s.clubs('') }
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_clubs_all_spaces_search_string
|
16
|
+
expect_error(StravaApi::CommandError) { @s.clubs(' ') }
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_clubs_index
|
20
|
+
#curl http://www.strava.com/api/v1/clubs?name=X
|
21
|
+
api_result = JSON.parse clubs_index_json
|
22
|
+
api_result.stubs(:parsed_response).returns("")
|
23
|
+
StravaApi::Base.stubs(:get).with('/clubs', {:query => {:name => 'X'}}).returns(api_result)
|
24
|
+
|
25
|
+
result = @s.clubs('X')
|
26
|
+
|
27
|
+
assert result.is_a?(Array)
|
28
|
+
|
29
|
+
result.each do |club|
|
30
|
+
assert club.is_a?(StravaApi::Club)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_clubs_index_that_returns_nothing
|
35
|
+
#curl http://www.strava.com/api/v1/clubs?name=X5678i9o90
|
36
|
+
api_result = JSON.parse '{"clubs":[]}'
|
37
|
+
api_result.stubs(:parsed_response).returns("")
|
38
|
+
StravaApi::Base.stubs(:get).with('/clubs', {:query => {:name => 'X93afadf80833'}}).returns(api_result)
|
39
|
+
|
40
|
+
result = @s.clubs('X93afadf80833')
|
41
|
+
|
42
|
+
assert result.is_a?(Array)
|
43
|
+
assert result.empty?
|
44
|
+
end
|
45
|
+
|
46
|
+
#SLO Nexus, id = 23
|
47
|
+
def test_club_show
|
48
|
+
api_result = JSON.parse club_show_json
|
49
|
+
api_result.stubs(:parsed_response).returns("")
|
50
|
+
StravaApi::Base.stubs(:get).with('/clubs/23', { :query => {} }).returns(api_result)
|
51
|
+
|
52
|
+
result = @s.club_show(23)
|
53
|
+
|
54
|
+
assert result.is_a?(StravaApi::Club)
|
55
|
+
assert result.name == "SLO Nexus"
|
56
|
+
assert result.id == 23
|
57
|
+
assert result.location == "San Luis Obispo, CA"
|
58
|
+
assert result.description == "SLO Nexus brings together people who love to ride bikes, race bikes, and promote bike riding in our community. Our fresh outlook on the local bike scene incorporates support, fun, education, and fitness and is designed to bring together the growing number"
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_club_show_bad_id
|
62
|
+
#curl http://www.strava.com/api/v1/clubs/0
|
63
|
+
api_result = JSON.parse '{"error":"Invalid clubs/0"}'
|
64
|
+
api_result.stubs(:parsed_response).returns("")
|
65
|
+
StravaApi::Base.stubs(:get).with('/clubs/0', { :query => {} }).returns(api_result)
|
66
|
+
|
67
|
+
expect_error(StravaApi::InvalidResponseError) { @s.club_show(0) }
|
68
|
+
|
69
|
+
assert @s.errors.include?("Invalid clubs/0")
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_club_members
|
73
|
+
#curl http://www.strava.com/api/v1/clubs/23/members
|
74
|
+
api_result = JSON.parse club_members_json
|
75
|
+
api_result.stubs(:parsed_response).returns("")
|
76
|
+
StravaApi::Base.stubs(:get).with('/clubs/23/members', { :query => {} }).returns(api_result)
|
77
|
+
|
78
|
+
result = @s.club_members(23)
|
79
|
+
|
80
|
+
assert result.is_a?(Array)
|
81
|
+
result.each do |member|
|
82
|
+
assert member.is_a?(StravaApi::Member)
|
83
|
+
end
|
84
|
+
|
85
|
+
assert result.first.name == "Dan Speirs"
|
86
|
+
end
|
87
|
+
end
|
data/test/test_effort.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'mocha'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
class TestEffort < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@s = StravaApi::Base.new
|
8
|
+
|
9
|
+
api_result = JSON.parse ride_efforts_json
|
10
|
+
api_result.stubs(:parsed_response).returns("")
|
11
|
+
StravaApi::Base.stubs(:get).with('/rides/77563/efforts', {:query => {}}).returns(api_result)
|
12
|
+
|
13
|
+
@effort = @s.ride_efforts(77563).first
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_show
|
17
|
+
api_result = JSON.parse effort_show_method
|
18
|
+
api_result.stubs(:parsed_response).returns("")
|
19
|
+
StravaApi::Base.stubs(:get).with('/efforts/2231990', { :query => {} }).returns(api_result)
|
20
|
+
|
21
|
+
assert @effort.athlete.nil?
|
22
|
+
assert @effort.average_speed.nil?
|
23
|
+
|
24
|
+
result = @effort.show
|
25
|
+
|
26
|
+
assert result.is_a?(StravaApi::Effort)
|
27
|
+
|
28
|
+
assert @effort.athlete.name == "Julian Bill"
|
29
|
+
assert @effort.average_speed == 20149.3205741627
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'mocha'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
class TestHashBasedStore < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@connection = :placeholder
|
9
|
+
@attribute_map = {'name' => :name, 'id' => :id }
|
10
|
+
@initial_values = {'id' => 3, 'name' => 'Fred'}
|
11
|
+
|
12
|
+
@nested_class_map = { :bike => StravaApi::Bike }
|
13
|
+
@complex_attribute_map = {'name' => :name, 'id' => :id, 'bike' => :bike }
|
14
|
+
@complex_initial_values = {'id' => 3, 'name' => 'Fred', 'bike' => {'id' => 7, 'name' => 'Cruiser'}}
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_creating
|
18
|
+
obj = StravaApi::HashBasedStore.new(@connection, @attribute_map, {}, {})
|
19
|
+
|
20
|
+
assert obj.is_a?(StravaApi::HashBasedStore)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_storing_values
|
24
|
+
obj = StravaApi::HashBasedStore.new(@connection, @attribute_map, {}, @initial_values)
|
25
|
+
|
26
|
+
assert obj[:id] == @initial_values['id']
|
27
|
+
assert obj[:name] == @initial_values['name']
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_getting_values_via_methods
|
31
|
+
obj = StravaApi::HashBasedStore.new(@connection, @attribute_map, {}, @initial_values)
|
32
|
+
|
33
|
+
assert obj.id == @initial_values['id']
|
34
|
+
assert obj.name == @initial_values['name']
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_create_with_nested_object
|
38
|
+
obj = StravaApi::HashBasedStore.new(@connection, @complex_attribute_map, @nested_class_map, @complex_initial_values)
|
39
|
+
|
40
|
+
assert obj[:id] == @complex_initial_values['id']
|
41
|
+
assert obj[:name] == @complex_initial_values['name']
|
42
|
+
|
43
|
+
assert obj[:bike].is_a?(StravaApi::Bike)
|
44
|
+
assert obj[:bike][:id] == @complex_initial_values['bike']['id']
|
45
|
+
assert obj[:bike][:name] == @complex_initial_values['bike']['name']
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_create_with_nested_object_via_methods
|
49
|
+
obj = StravaApi::HashBasedStore.new(@connection, @complex_attribute_map, @nested_class_map, @complex_initial_values)
|
50
|
+
|
51
|
+
assert obj.id == @complex_initial_values['id']
|
52
|
+
assert obj.name == @complex_initial_values['name']
|
53
|
+
|
54
|
+
assert obj.bike.is_a?(StravaApi::Bike)
|
55
|
+
assert obj.bike.id == @complex_initial_values['bike']['id']
|
56
|
+
assert obj.bike.name == @complex_initial_values['bike']['name']
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_merge
|
60
|
+
@big_attribute_map = {'name' => :name, 'id' => :id, "extra1" => :extra1, "extra2" => :extra2 }
|
61
|
+
|
62
|
+
obj1 = StravaApi::HashBasedStore.new(@connection, @big_attribute_map, {}, {'id' => 13, 'name' => 'Fred'})
|
63
|
+
assert obj1.name == 'Fred'
|
64
|
+
assert obj1.id == 13
|
65
|
+
|
66
|
+
obj2 = StravaApi::HashBasedStore.new(@connection, @big_attribute_map, {},
|
67
|
+
{'id' => 13, 'name' => 'Fred', 'extra1' => 'red', 'extra2' => 'sneaker'})
|
68
|
+
assert obj2.name == 'Fred'
|
69
|
+
assert obj2.id == 13
|
70
|
+
assert obj2.extra1 == 'red'
|
71
|
+
assert obj2.extra2 == 'sneaker'
|
72
|
+
|
73
|
+
obj1.merge(obj2)
|
74
|
+
assert obj1.name == 'Fred'
|
75
|
+
assert obj1.id == 13
|
76
|
+
assert obj1.extra1 == 'red'
|
77
|
+
assert obj1.extra2 == 'sneaker'
|
78
|
+
end
|
79
|
+
end
|
data/test/test_ride.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'mocha'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
class TestRide < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@s = StravaApi::Base.new
|
8
|
+
|
9
|
+
api_result = JSON.parse rides_index_by_club_json
|
10
|
+
api_result.stubs(:parsed_response).returns("")
|
11
|
+
StravaApi::Base.stubs(:get).with('/rides', { :query => {'clubId' => 23} }).returns(api_result)
|
12
|
+
|
13
|
+
@ride = @s.rides(:club_id => 23).first
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_show
|
17
|
+
api_result = JSON.parse ride_show_method_json
|
18
|
+
api_result.stubs(:parsed_response).returns("")
|
19
|
+
StravaApi::Base.stubs(:get).with('/rides/191846', { :query => {} }).returns(api_result)
|
20
|
+
|
21
|
+
assert @ride.id == 191846
|
22
|
+
assert @ride.name == "from SVRMC"
|
23
|
+
assert @ride.distance.nil?
|
24
|
+
assert @ride.location.nil?
|
25
|
+
|
26
|
+
result = @ride.show
|
27
|
+
assert result.is_a?(StravaApi::Ride)
|
28
|
+
|
29
|
+
assert @ride.id == 191846
|
30
|
+
assert @ride.name == "from SVRMC"
|
31
|
+
assert @ride.distance == 12958.6
|
32
|
+
assert @ride.location == "San Luis Obispo, CA"
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_efforts
|
36
|
+
api_result = JSON.parse ride_effort_method_json
|
37
|
+
api_result.stubs(:parsed_response).returns("")
|
38
|
+
StravaApi::Base.stubs(:get).with('/rides/191846/efforts', { :query => {} }).returns(api_result)
|
39
|
+
|
40
|
+
efforts = @ride.efforts
|
41
|
+
|
42
|
+
assert efforts.is_a?(Array)
|
43
|
+
assert efforts.size == 1
|
44
|
+
efforts.each do |effort|
|
45
|
+
assert effort.is_a?(StravaApi::Effort)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/test/test_rides.rb
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'mocha'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
class TestRides < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@s = StravaApi::Base.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_rides_index_no_arguments
|
11
|
+
expect_error(StravaApi::CommandError) { @s.rides }
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_rides_index_invalid_argument
|
15
|
+
expect_error(StravaApi::CommandError) { @s.rides(:invalid => true) }
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_rides_index_by_club
|
19
|
+
api_result = JSON.parse rides_index_by_club_json
|
20
|
+
api_result.stubs(:parsed_response).returns("")
|
21
|
+
StravaApi::Base.stubs(:get).with('/rides', { :query => {'clubId' => 23} }).returns(api_result)
|
22
|
+
|
23
|
+
result = @s.rides(:club_id => 23)
|
24
|
+
|
25
|
+
assert result.is_a?(Array)
|
26
|
+
|
27
|
+
result.each do |ride|
|
28
|
+
assert ride.is_a?(StravaApi::Ride)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_rides_index_by_athlete
|
33
|
+
#curl http://www.strava.com/api/v1/rides?athleteId=779
|
34
|
+
api_result = JSON.parse rides_index_by_athlete_json
|
35
|
+
api_result.stubs(:parsed_response).returns("")
|
36
|
+
StravaApi::Base.stubs(:get).with('/rides', { :query => {'athleteId' => 779} }).returns(api_result)
|
37
|
+
|
38
|
+
result = @s.rides(:athlete_id => 779)
|
39
|
+
|
40
|
+
assert result.is_a?(Array)
|
41
|
+
|
42
|
+
result.each do |ride|
|
43
|
+
assert ride.is_a?(StravaApi::Ride)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_rides_index_by_club_and_athlete
|
48
|
+
#curl "http://www.strava.com/api/v1/rides?clubId=23&athleteId=779"
|
49
|
+
api_result = JSON.parse rides_index_by_club_and_athlete_json
|
50
|
+
api_result.stubs(:parsed_response).returns("")
|
51
|
+
StravaApi::Base.stubs(:get).with('/rides', { :query => {'clubId' => 23, 'athleteId' => 779} }).returns(api_result)
|
52
|
+
|
53
|
+
result = @s.rides(:club_id => 23, :athlete_id => 779)
|
54
|
+
|
55
|
+
assert result.is_a?(Array)
|
56
|
+
|
57
|
+
result.each do |ride|
|
58
|
+
assert ride.is_a?(StravaApi::Ride)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_rides_index_with_mismatched_club_and_athlete
|
63
|
+
#curl "http://www.strava.com/api/v1/rides?clubId=24&athleteId=779"
|
64
|
+
api_result = JSON.parse '{"error":"Invalid clubId"}'
|
65
|
+
api_result.stubs(:parsed_response).returns("")
|
66
|
+
StravaApi::Base.stubs(:get).with('/rides', { :query => {'clubId' => 24, 'athleteId' => 779} }).returns(api_result)
|
67
|
+
|
68
|
+
expect_error(StravaApi::InvalidResponseError) { @s.rides(:club_id => 24, :athlete_id => 779) }
|
69
|
+
|
70
|
+
assert @s.errors.include?("Invalid clubId")
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_rides_index_ignores_invalid_parameter
|
74
|
+
#curl http://www.strava.com/api/v1/rides?athleteId=779
|
75
|
+
api_result = JSON.parse rides_index_ignores_invalid_parameter_json
|
76
|
+
api_result.stubs(:parsed_response).returns("")
|
77
|
+
StravaApi::Base.stubs(:get).with('/rides', { :query => {'athleteId' => 779} }).returns(api_result)
|
78
|
+
|
79
|
+
result = @s.rides(:athlete_id => 779, :xclub_id => 24)
|
80
|
+
|
81
|
+
assert result.is_a?(Array)
|
82
|
+
|
83
|
+
result.each do |ride|
|
84
|
+
assert ride.is_a?(StravaApi::Ride)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_rides_after_start_date
|
89
|
+
#curl "http://www.strava.com/api/v1/rides?athleteId=779&startDate=2010-09-21"
|
90
|
+
api_result = JSON.parse rides_after_start_date_json
|
91
|
+
api_result.stubs(:parsed_response).returns("")
|
92
|
+
StravaApi::Base.stubs(:get).with('/rides', { :query => {'athleteId' => 779, 'startDate' => Date.civil(2010,9,21)} }).returns(api_result)
|
93
|
+
|
94
|
+
result = @s.rides(:athlete_id => 779, :start_date => Date.civil(2010,9,21))
|
95
|
+
|
96
|
+
assert result.is_a?(Array)
|
97
|
+
|
98
|
+
result.each do |ride|
|
99
|
+
assert ride.is_a?(StravaApi::Ride)
|
100
|
+
#TODO check that each ride is after 9/21/2010
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_rides_using_offset
|
105
|
+
#curl "http://www.strava.com/api/v1/rides?athleteId=779&startDate=2010-07-1&endDate=2010_09_01"
|
106
|
+
api_result = JSON.parse rides_using_offset_json
|
107
|
+
api_result.stubs(:parsed_response).returns("")
|
108
|
+
StravaApi::Base.stubs(:get).with('/rides', { :query => {'startDate' => Date.civil(2010,7,1),
|
109
|
+
'endDate' => Date.civil(2010,7,5)} }).returns(api_result)
|
110
|
+
|
111
|
+
api_result2 = JSON.parse rides_using_offset_50_json
|
112
|
+
api_result2.stubs(:parsed_response).returns("")
|
113
|
+
StravaApi::Base.stubs(:get).with('/rides', { :query => {'startDate' => Date.civil(2010,7,1),
|
114
|
+
'endDate' => Date.civil(2010,7,5), 'offset' => 50} }).returns(api_result2)
|
115
|
+
|
116
|
+
set_1 = @s.rides(:start_date => Date.civil(2010,7,1), :end_date => Date.civil(2010,7,5))
|
117
|
+
set_2 = @s.rides(:start_date => Date.civil(2010,7,1), :end_date => Date.civil(2010,7,5), :offset => set_1.size)
|
118
|
+
|
119
|
+
assert set_1.is_a?(Array)
|
120
|
+
assert set_2.is_a?(Array)
|
121
|
+
|
122
|
+
set_1.each {|ride| assert ride.is_a?(StravaApi::Ride)}
|
123
|
+
set_2.each {|ride| assert ride.is_a?(StravaApi::Ride)}
|
124
|
+
|
125
|
+
#but there shouldn't be any overlap
|
126
|
+
set_1_ids = set_1.collect(&:id)
|
127
|
+
set_2_ids = set_2.collect(&:id)
|
128
|
+
|
129
|
+
set_1_ids.each do |set_1_id|
|
130
|
+
assert !set_2_ids.include?(set_1_id), "Error: #{set_1_id} is included in both sets"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_ride_show
|
135
|
+
#curl "http://www.strava.com/api/v1/rides/77563"
|
136
|
+
api_result = JSON.parse ride_show_json
|
137
|
+
api_result.stubs(:parsed_response).returns("")
|
138
|
+
StravaApi::Base.stubs(:get).with('/rides/77563', { :query => {} }).returns(api_result)
|
139
|
+
|
140
|
+
result = @s.ride_show(77563)
|
141
|
+
|
142
|
+
assert result.is_a?(StravaApi::Ride)
|
143
|
+
|
144
|
+
{
|
145
|
+
:time_zone_offset => -8.0,
|
146
|
+
:elevation_gain => 1441.02,
|
147
|
+
:location => "San Francisco, CA",
|
148
|
+
:elapsed_time => 14579,
|
149
|
+
:description => nil,
|
150
|
+
:name => "02/28/10 San Francisco, CA",
|
151
|
+
:moving_time => 12748,
|
152
|
+
:average_speed => 23260.8064010041,
|
153
|
+
:distance => 82369.1,
|
154
|
+
:start_date => "2010-02-28T16:31:35Z",
|
155
|
+
:average_watts => 175.112,
|
156
|
+
:start_date_local => "2010-02-28T08:31:35Z",
|
157
|
+
:id => 77563,
|
158
|
+
:maximum_speed => 64251.72
|
159
|
+
}.each do |property, value|
|
160
|
+
assert result[property] == value, "mismatch on #{property}: #{result[property]} != #{value}"
|
161
|
+
end
|
162
|
+
|
163
|
+
assert result[:athlete].is_a?(StravaApi::Member)
|
164
|
+
assert result[:athlete].username == "julianbill"
|
165
|
+
|
166
|
+
assert result[:bike].is_a?(StravaApi::Bike)
|
167
|
+
assert result[:bike].name == "Serotta Legend Ti"
|
168
|
+
end
|
169
|
+
|
170
|
+
def test_ride_efforts
|
171
|
+
#curl "http://www.strava.com/api/v1/rides/77563/efforts"
|
172
|
+
api_result = JSON.parse ride_efforts_json
|
173
|
+
api_result.stubs(:parsed_response).returns("")
|
174
|
+
StravaApi::Base.stubs(:get).with('/rides/77563/efforts', { :query => {} }).returns(api_result)
|
175
|
+
|
176
|
+
result = @s.ride_efforts(77563)
|
177
|
+
|
178
|
+
assert result.is_a?(Array)
|
179
|
+
result.each do |effort|
|
180
|
+
assert effort.is_a?(StravaApi::Effort)
|
181
|
+
end
|
182
|
+
|
183
|
+
assert result.first.segment.is_a?(StravaApi::Segment)
|
184
|
+
assert result.first.segment.name == "Panhandle to GGP"
|
185
|
+
end
|
186
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'mocha'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
class TestSegment < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@s = StravaApi::Base.new
|
8
|
+
|
9
|
+
api_result = JSON.parse segments_index_json
|
10
|
+
api_result.stubs(:parsed_response).returns("")
|
11
|
+
StravaApi::Base.stubs(:get).with('/segments', {:query => {:name => 'Hawk Hill'}}).returns(api_result)
|
12
|
+
|
13
|
+
@segment = @s.segments("Hawk Hill").first
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_show
|
17
|
+
api_result = JSON.parse segment_show_json
|
18
|
+
api_result.stubs(:parsed_response).returns("")
|
19
|
+
StravaApi::Base.stubs(:get).with('/segments/99243', { :query => {} }).returns(api_result)
|
20
|
+
|
21
|
+
assert @segment.id == 99243
|
22
|
+
assert @segment.name == "Hawk Hill Saddle"
|
23
|
+
assert @segment.elevation_gain.nil?
|
24
|
+
assert @segment.elevation_high.nil?
|
25
|
+
|
26
|
+
result = @segment.show
|
27
|
+
assert result.is_a?(StravaApi::Segment)
|
28
|
+
|
29
|
+
assert @segment.id == 99243
|
30
|
+
assert @segment.name == "Hawk Hill Saddle"
|
31
|
+
assert @segment.elevation_gain == 76.553
|
32
|
+
assert @segment.elevation_high == 172.694
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_efforts
|
36
|
+
api_result = JSON.parse segment_efforts_index_json
|
37
|
+
api_result.stubs(:parsed_response).returns("")
|
38
|
+
StravaApi::Base.stubs(:get).with('/segments/99243/efforts', { :query => {} }).returns(api_result)
|
39
|
+
|
40
|
+
efforts = @segment.efforts
|
41
|
+
|
42
|
+
assert efforts.is_a?(Array)
|
43
|
+
assert efforts.size == 3
|
44
|
+
efforts.each do |effort|
|
45
|
+
assert effort.is_a?(StravaApi::Effort)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_efforts_with_athlete_id
|
50
|
+
api_result = JSON.parse segment_efforts_index_by_athlete_id_json
|
51
|
+
api_result.stubs(:parsed_response).returns("")
|
52
|
+
StravaApi::Base.stubs(:get).with('/segments/99243/efforts', { :query => {'athleteId' => 1377} }).returns(api_result)
|
53
|
+
|
54
|
+
efforts = @segment.efforts(:athlete_id => 1377)
|
55
|
+
|
56
|
+
assert efforts.is_a?(Array)
|
57
|
+
|
58
|
+
assert efforts.size == 17
|
59
|
+
efforts.each do |effort|
|
60
|
+
assert effort.is_a?(StravaApi::Effort)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|