open_dota_api 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,89 @@
1
+ require 'spec_helper'
2
+
3
+ describe OpenDotaApi::Client do
4
+
5
+ let(:client) { described_class.new }
6
+ let(:endpoint) { }
7
+ let(:match_id) { 3149215336 }
8
+ let(:leagues_file) { File.read('spec/data/leagues.json') }
9
+ let(:teams_file) { File.read('spec/data/teams.json') }
10
+ let(:match_file) { File.read('spec/data/match.json') }
11
+ let(:heroes_file) { File.read('spec/data/heroes.json') }
12
+ let(:data_file) { }
13
+ let(:headers) do
14
+ {
15
+ "content-type"=>["application/json; charset=utf-8"]
16
+ }
17
+ end
18
+
19
+ let(:response_json) { JSON.parse(data_file) }
20
+ let(:expected_leagues) { OpenDotaApi::League.instantiate(response_json) }
21
+ let(:expected_teams) { OpenDotaApi::Team.instantiate(response_json) }
22
+ let(:expected_match) { OpenDotaApi::Match.new(response_json) }
23
+ let(:expected_heroes) { OpenDotaApi::Hero.instantiate(response_json) }
24
+
25
+ before do
26
+ stub_request(:get, "http://api.opendota.com/api/#{endpoint}/").
27
+ with(headers: {'Accept': '*/*', 'Accept-Encoding': 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent': 'Ruby'}).
28
+ to_return(status: 200, body: data_file, headers: headers)
29
+ end
30
+
31
+ it 'returns interface' do
32
+ expect(OpenDotaApi::Client::INTERFACE).to eq 'api'
33
+ end
34
+
35
+ describe 'default attributes' do
36
+ describe '#leagues' do
37
+ let(:endpoint) { OpenDotaApi::League::ENDPOINT }
38
+ let(:data_file) { leagues_file }
39
+
40
+ it 'returns array of objects' do
41
+ expect(client.leagues.all? { |league| league.kind_of? OpenDotaApi::League }).to be_truthy
42
+ end
43
+
44
+ it 'returns list' do
45
+ expect(client.leagues.to_deep_hash).to eq expected_leagues.to_deep_hash
46
+ end
47
+ end
48
+
49
+ describe '#teams' do
50
+ let(:endpoint) { OpenDotaApi::Team::ENDPOINT }
51
+ let(:data_file) { teams_file }
52
+
53
+ it 'returns array of objects' do
54
+ expect(client.teams.all? { |team| team.kind_of? OpenDotaApi::Team }).to be_truthy
55
+ end
56
+
57
+ it 'returns list' do
58
+ expect(client.teams.to_deep_hash).to eq expected_teams.to_deep_hash
59
+ end
60
+ end
61
+
62
+ describe '#matches' do
63
+ let(:endpoint) { "#{OpenDotaApi::Match::ENDPOINT}/#{match_id}" }
64
+ let(:data_file) { match_file }
65
+
66
+ it 'returns object' do
67
+ expect(client.matches(match_id).kind_of? OpenDotaApi::Match).to be_truthy
68
+ end
69
+
70
+ it 'returns match' do
71
+ expect(client.matches(match_id).to_deep_hash).to eq expected_match.to_deep_hash
72
+ end
73
+ end
74
+
75
+
76
+ describe '#heroes' do
77
+ let(:endpoint) { "#{OpenDotaApi::Hero::ENDPOINT}" }
78
+ let(:data_file) { heroes_file }
79
+
80
+ it 'returns array of objects' do
81
+ expect(client.heroes.all? { |hero| hero.kind_of? OpenDotaApi::Hero }).to be_truthy
82
+ end
83
+
84
+ it 'returns list' do
85
+ expect(client.heroes.to_deep_hash).to eq expected_heroes.to_deep_hash
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe OpenDotaApi::Connection do
4
+ describe 'default attributes' do
5
+ let(:pathname) { '/' }
6
+
7
+ it 'includes httparty methods' do
8
+ allow(OpenDotaApi::Connection).to receive(:get)
9
+ end
10
+
11
+ it 'returns response object' do
12
+ stub_request(:get, "http://api.opendota.com/").
13
+ with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
14
+ to_return(status: 200, body: "", headers: {})
15
+
16
+ expect(OpenDotaApi::Connection.get(pathname).class).to eq HTTParty::Response
17
+ end
18
+
19
+ it 'must have the base url set to Steam endpoint' do
20
+ expect(OpenDotaApi::Connection.base_uri).to eq 'http://api.opendota.com'
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe OpenDotaApi::Hero do
4
+ let(:id) { 1 }
5
+ let(:name) { 'npc_dota_hero_antimage' }
6
+ let(:localized_name) { 'Anti-Mage' }
7
+ let(:primary_attr) { 'agi' }
8
+ let(:attack_type) { 'Melee' }
9
+ let(:roles) { %w(Carry Escape Nuker) }
10
+ let(:legs) { 2 }
11
+
12
+ let(:heroes_file) { File.read('spec/data/heroes.json') }
13
+ let(:response_json) { JSON.parse(heroes_file) }
14
+ let(:heroes) { OpenDotaApi::Hero.instantiate(response_json) }
15
+ let(:hero) { heroes.first }
16
+
17
+ it 'returns endpoint' do
18
+ expect(described_class::ENDPOINT).to eq 'heroes'
19
+ end
20
+
21
+ it 'inherits entity object' do
22
+ expect(hero).to be_a OpenDotaApi::Entity
23
+ end
24
+
25
+ it 'is instantiable' do
26
+ expect(hero).to be_a OpenDotaApi::Entities::Instantiatable
27
+ end
28
+
29
+ describe 'default attributes' do
30
+ it 'returns id' do
31
+ expect(hero.id).to eq id
32
+ end
33
+
34
+ it 'returns name' do
35
+ expect(hero.name).to eq name
36
+ end
37
+
38
+ it 'returns localized name' do
39
+ expect(hero.localized_name).to eq localized_name
40
+ end
41
+
42
+ it 'returns primary attribute' do
43
+ expect(hero.primary_attr).to eq primary_attr
44
+ end
45
+
46
+ it 'returns attack type' do
47
+ expect(hero.attack_type).to eq attack_type
48
+ end
49
+
50
+ it 'returns roles' do
51
+ expect(hero.roles).to eq roles
52
+ end
53
+
54
+ it 'returns legs' do
55
+ expect(hero.legs).to eq legs
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe OpenDotaApi::League do
4
+ let(:league_id) { 1415 }
5
+ let(:ticket) { 'econ/leagues/subscriptions_cebu' }
6
+ let(:banner) { 'econ/leagues/subscriptions_cebu_ingame' }
7
+ let(:tier) { 'amateur' }
8
+ let(:name) { 'Dota 2 Cebu League Season 5' }
9
+
10
+ let(:leagues_file) { File.read('spec/data/leagues.json') }
11
+ let(:response_json) { JSON.parse(leagues_file) }
12
+ let(:leagues) { OpenDotaApi::League.instantiate(response_json) }
13
+ let(:league) { leagues.first }
14
+
15
+ it 'returns endpoint' do
16
+ expect(described_class::ENDPOINT).to eq 'leagues'
17
+ end
18
+
19
+ it 'inherits entity object' do
20
+ expect(league).to be_a OpenDotaApi::Entity
21
+ end
22
+
23
+ it 'is instantiable' do
24
+ expect(league).to be_a OpenDotaApi::Entities::Instantiatable
25
+ end
26
+
27
+ describe 'default attributes' do
28
+ it 'returns league id' do
29
+ expect(league.league_id).to eq league_id
30
+ end
31
+
32
+ it 'returns ticket' do
33
+ expect(league.ticket).to eq ticket
34
+ end
35
+
36
+ it 'returns banner' do
37
+ expect(league.banner).to eq banner
38
+ end
39
+
40
+ it 'returns tier' do
41
+ expect(league.tier).to eq tier
42
+ end
43
+
44
+ it 'returns name' do
45
+ expect(league.name).to eq name
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,99 @@
1
+ require 'spec_helper'
2
+
3
+ describe OpenDotaApi::Match do
4
+ let(:match_id) { 3149215336 }
5
+ let(:start_time) { 1493566333 }
6
+ let(:duration) { 2109 }
7
+ let(:series_id) { 135248 }
8
+ let(:series_type) { 2 }
9
+ let(:radiant_team_id) { 2586976 }
10
+ let(:dire_team_id) { 1883502 }
11
+ let(:match_seq_num) { 2750393746 }
12
+ let(:league_id) { 5157 }
13
+ let(:first_blood_time) { 53 }
14
+ let(:winner) { :dire }
15
+ let(:cluster) { 136 }
16
+ let(:replay_salt) { 565926067 }
17
+ let(:replay_url) { 'http://replay136.valve.net/570/3149215336_565926067.dem.bz2' }
18
+ let(:players_length) { 10 }
19
+ let(:player_class) { OpenDotaApi::Match::Player }
20
+
21
+ let(:match_file) { File.read('spec/data/match.json') }
22
+ let(:response_json) { JSON.parse(match_file) }
23
+ let(:match) { OpenDotaApi::Match.new(response_json) }
24
+
25
+ it 'returns endpoint' do
26
+ expect(described_class::ENDPOINT).to eq 'matches'
27
+ end
28
+
29
+ it 'inherits entity object' do
30
+ expect(match).to be_a OpenDotaApi::Entity
31
+ end
32
+
33
+ it 'is instantiable' do
34
+ expect(match).to_not be_a OpenDotaApi::Entities::Instantiatable
35
+ end
36
+
37
+ describe 'default attributes' do
38
+ it 'returns match id' do
39
+ expect(match.match_id).to eq match_id
40
+ end
41
+
42
+ it 'returns start time' do
43
+ expect(match.start_time).to eq start_time
44
+ end
45
+
46
+ it 'returns duration' do
47
+ expect(match.duration).to eq duration
48
+ end
49
+
50
+ it 'returns series id' do
51
+ expect(match.series_id).to eq series_id
52
+ end
53
+
54
+ it 'returns series type' do
55
+ expect(match.series_type).to eq series_type
56
+ end
57
+
58
+ it 'returns radiant team id' do
59
+ expect(match.radiant_team_id).to eq radiant_team_id
60
+ end
61
+
62
+ it 'returns dire team id' do
63
+ expect(match.dire_team_id).to eq dire_team_id
64
+ end
65
+
66
+ it 'returns match sequence number' do
67
+ expect(match.match_seq_num).to eq match_seq_num
68
+ end
69
+
70
+ it 'returns league id' do
71
+ expect(match.league_id).to eq league_id
72
+ end
73
+
74
+ it 'returns first blood time' do
75
+ expect(match.first_blood_time).to eq first_blood_time
76
+ end
77
+
78
+ it 'returns winner' do
79
+ expect(match.winner).to eq winner
80
+ end
81
+
82
+ it 'returns cluster' do
83
+ expect(match.cluster).to eq cluster
84
+ end
85
+
86
+ it 'returns replay salt' do
87
+ expect(match.replay_salt).to eq replay_salt
88
+ end
89
+
90
+ it 'returns replay url' do
91
+ expect(match.replay_url).to eq replay_url
92
+ end
93
+
94
+ it 'returns players' do
95
+ expect(match.players.length).to eq players_length
96
+ expect(match.players.all? { |player| player.kind_of? player_class }).to be_truthy
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,125 @@
1
+ require 'spec_helper'
2
+
3
+ describe OpenDotaApi::Matches::Player do
4
+ let(:match_id) { 3149215336 }
5
+ let(:player_slot) { 0 }
6
+ let(:account_id) { 94155156 }
7
+ let(:assists) { 13 }
8
+ let(:camps_stacked) { 4 }
9
+ let(:deaths) { 7 }
10
+ let(:denies) { 1 }
11
+ let(:gold_per_min) { 329 }
12
+ let(:hero_id) { 110 }
13
+ let(:kills) { 6 }
14
+ let(:obs_placed) { 7 }
15
+ let(:sen_placed) { 19 }
16
+ let(:rune_pickups) { 9 }
17
+ let(:stuns) { 0 }
18
+ let(:xp_per_min) { 385 }
19
+ let(:name) { 'Fly' }
20
+ let(:side) { :radiant }
21
+ let(:kda) { 2 }
22
+ let(:tower_kills) { 0 }
23
+ let(:roshan_kills) { 0 }
24
+ let(:hero_healing) { 606 }
25
+
26
+ let(:match_file) { File.read('spec/data/match.json') }
27
+ let(:response_json) { JSON.parse(match_file) }
28
+ let(:match) { OpenDotaApi::Match.new(response_json) }
29
+ let(:players) { match.players }
30
+ let(:player) { players.first }
31
+
32
+ it 'inherits entity object' do
33
+ expect(player).to be_a OpenDotaApi::Entity
34
+ end
35
+
36
+ it 'is instantiable' do
37
+ expect(player).to_not be_a OpenDotaApi::Entities::Instantiatable
38
+ end
39
+
40
+ describe 'default attributes' do
41
+ it 'returns match id' do
42
+ expect(player.match_id).to eq match_id
43
+ end
44
+
45
+ it 'returns player slot' do
46
+ expect(player.player_slot).to eq player_slot
47
+ end
48
+
49
+ it 'returns account id' do
50
+ expect(player.account_id).to eq account_id
51
+ end
52
+
53
+ it 'returns assists' do
54
+ expect(player.assists).to eq assists
55
+ end
56
+
57
+ it 'returns camps stacked' do
58
+ expect(player.camps_stacked).to eq camps_stacked
59
+ end
60
+
61
+ it 'returns deaths' do
62
+ expect(player.deaths).to eq deaths
63
+ end
64
+
65
+ it 'returns denies' do
66
+ expect(player.denies).to eq denies
67
+ end
68
+
69
+ it 'returns gold per minute' do
70
+ expect(player.gold_per_min).to eq gold_per_min
71
+ end
72
+
73
+ it 'returns hero id' do
74
+ expect(player.hero_id).to eq hero_id
75
+ end
76
+
77
+ it 'returns kills' do
78
+ expect(player.kills).to eq kills
79
+ end
80
+
81
+ it 'returns observer wards placed' do
82
+ expect(player.obs_placed).to eq obs_placed
83
+ end
84
+
85
+ it 'returns sentry wards placed' do
86
+ expect(player.sen_placed).to eq sen_placed
87
+ end
88
+
89
+ it 'returns rune pickups' do
90
+ expect(player.rune_pickups).to eq rune_pickups
91
+ end
92
+
93
+ it 'returns stuns' do
94
+ expect(player.stuns).to eq stuns
95
+ end
96
+
97
+ it 'returns experience points per minute' do
98
+ expect(player.xp_per_min).to eq xp_per_min
99
+ end
100
+
101
+ it 'returns name' do
102
+ expect(player.name).to eq name
103
+ end
104
+
105
+ it 'returns side' do
106
+ expect(player.side).to eq side
107
+ end
108
+
109
+ it 'returns kda' do
110
+ expect(player.kda).to eq kda
111
+ end
112
+
113
+ it 'returns tower kills' do
114
+ expect(player.tower_kills).to eq tower_kills
115
+ end
116
+
117
+ it 'returns roshan kills' do
118
+ expect(player.roshan_kills).to eq roshan_kills
119
+ end
120
+
121
+ it 'returns hero healing' do
122
+ expect(player.hero_healing).to eq hero_healing
123
+ end
124
+ end
125
+ end