tf2r 0.0.1 → 0.1.0

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.
data/spec/scraper_spec.rb CHANGED
@@ -13,7 +13,9 @@ describe TF2R::Scraper do
13
13
  context 'no options are given' do
14
14
  it 'creates an agent with default user agent if none is specified' do
15
15
  scraper = TF2R::Scraper.new({})
16
- expect(scraper.instance_variable_get(:@mech).agent.user_agent).to eql("TF2R::Scraper #{TF2R::VERSION}")
16
+ expect(
17
+ scraper.instance_variable_get(:@mech).user_agent
18
+ ).to eql("TF2R::Scraper #{TF2R::VERSION}")
17
19
  end
18
20
  end
19
21
 
@@ -21,7 +23,9 @@ describe TF2R::Scraper do
21
23
  it 'creates an agent with the specified user agent' do
22
24
  custom = 'Custom User Agent'
23
25
  scraper = TF2R::Scraper.new({user_agent: custom})
24
- expect(scraper.instance_variable_get(:@mech).agent.user_agent).to eql(custom)
26
+ expect(
27
+ scraper.instance_variable_get(:@mech).user_agent
28
+ ).to eql(custom)
25
29
  end
26
30
  end
27
31
 
@@ -29,14 +33,217 @@ describe TF2R::Scraper do
29
33
  it 'stores the given cookie' do
30
34
  test_filename = File.join(File.dirname(__FILE__), 'test_cookies.txt')
31
35
  scraper = TF2R::Scraper.new({cookies_txt: File.new(test_filename)})
32
- expect(scraper.instance_variable_get(:@mech).cookie_jar.cookies[0].value).to eq("example_value")
36
+ expect(
37
+ scraper.instance_variable_get(:@mech).cookie_jar.cookies[0].value
38
+ ).to eq('example_value')
33
39
  end
34
40
  end
35
41
  end
36
42
 
37
43
  describe '#fetch' do
44
+ before(:each) do
45
+ stub_request(:get, "http://google.com/").
46
+ with(:headers => {'Accept'=>'*/*', 'Host'=>'google.com'}).
47
+ to_return(:status => 200, :body => "",
48
+ :headers => {'content_type' => 'text/html'})
49
+ end
50
+
51
+ it 'makes a request to the specified URL' do
52
+ expect(
53
+ scraper.fetch('http://google.com')
54
+ ).to have_requested(:get, 'google.com')
55
+ end
56
+
38
57
  it 'returns a Mechanize::Page' do
39
58
  expect(scraper.fetch('http://google.com')).to be_a(Mechanize::Page)
40
59
  end
41
60
  end
61
+
62
+ describe '#scrape_main_page' do
63
+ let(:result) { scraper.scrape_main_page }
64
+
65
+ before(:each) do
66
+ raffles_file = File.new(File.join(File.dirname(__FILE__), 'raffles.html'))
67
+ stub_request(:get, "http://tf2r.com/raffles.html").
68
+ with(:headers => {'Accept'=>'*/*', 'Host'=>'tf2r.com'}).
69
+ to_return(:status => 200, :body => raffles_file,
70
+ :headers => {'content_type' => 'text/html'})
71
+ end
72
+
73
+ it 'returns an Array of Strings' do
74
+ VCR.use_cassette('raffles') do
75
+ expect(result).to be_an(Array)
76
+ expect(result[0]).to be_a(String)
77
+ expect(result[-1]).to be_a(String)
78
+ end
79
+ end
80
+
81
+ it 'returns raffle links in reverse chronological order' do
82
+ # See spec/raffles.html for the hard-coded values.
83
+ expect(result[0]).to eql('http://tf2r.com/kzkp8jo.html')
84
+ expect(result[-1]).to eql('http://tf2r.com/k4jx1hz.html')
85
+ end
86
+ end
87
+
88
+ describe '#scrape_raffle_for_creator' do
89
+ let(:page) {
90
+ VCR.use_cassette('scrape_raffle_for_creator') do
91
+ scraper.fetch('http://tf2r.com/kstzcbd.html')
92
+ end
93
+ }
94
+ let(:result) { scraper.scrape_raffle_for_creator(page) }
95
+
96
+ it 'returns a Hash representation of a user' do
97
+ expect(result).to be_a(Hash)
98
+ end
99
+
100
+ # This is a terrible spec right now. The raffle tested against is one of
101
+ # my own, which is constantly updated as I use the site. If I gain or lose
102
+ # rep, if I use a new Steam Community name or avatar, the test will fail.
103
+ # TODO: Use a stagnant alt account to make a test raffle.
104
+ it 'returns correct values' do
105
+ expect(result[:steam_id]).to eql(76561198061719848)
106
+ expect(result[:colour]).to eql('70b01b')
107
+
108
+ # The following expectations are very brittle. TF2R updates the certain
109
+ # user attributes (such as name and avatar) every time the user logs in
110
+ # with new ones.
111
+ expect(result[:username]).to eql('Yulli')
112
+ expect(result[:avatar_link]).to eql('http://media.steampowered.com/steamcommunity/public/images/avatars/bc/bc9dc4302d23f2e2f37f59c59f29c27dbc8cade6_full.jpg')
113
+
114
+ # Talk about brittle.
115
+ expect(result[:posrep]).to eql(11459)
116
+ expect(result[:negrep]).to eql(0)
117
+ end
118
+ end
119
+
120
+
121
+ describe '#scrape_raffle_for_raffle' do
122
+ let(:page) {
123
+ VCR.use_cassette('scrape_raffle_for_raffle') do
124
+ scraper.fetch('http://tf2r.com/kstzcbd.html')
125
+ end
126
+ }
127
+ let(:result) { scraper.scrape_raffle_for_raffle(page) }
128
+
129
+ it 'returns a Hash representation of a raffle' do
130
+ expect(result).to be_a(Hash)
131
+ end
132
+
133
+ it 'returns correct values' do
134
+ expect(result[:link_snippet]).to eql('kstzcbd')
135
+ expect(result[:title]).to eql('Just one refined [1 hour]')
136
+ expect(result[:description]).to eql('Plain and simple.')
137
+ expect(result[:start_time]).to eql(DateTime.strptime('Mon, 29 Oct 2012 14:51:45 +0100', '%a, %d %b %Y %H:%M:%S %z').to_time)
138
+ expect(result[:end_time]).to eql(DateTime.strptime('Mon, 29 Oct 2012 14:53:01 +0100', '%a, %d %b %Y %H:%M:%S %z').to_time)
139
+ expect(result[:win_chance]).to eql(0.1)
140
+ # TODO: use a raffle where current_entries != max_entries
141
+ expect(result[:current_entries]).to eql(10)
142
+ expect(result[:max_entries]).to eql(10)
143
+ expect(result[:is_done]).to eql(true)
144
+ end
145
+ end
146
+
147
+ describe '#scrape_raffle_for_participants' do
148
+ let(:page) {
149
+ VCR.use_cassette('scrape_raffle_for_participants') do
150
+ scraper.fetch('http://tf2r.com/kstzcbd.html?full')
151
+ end
152
+ }
153
+ let(:result) { scraper.scrape_raffle_for_participants(page) }
154
+
155
+ it 'returns an Array of Hashes' do
156
+ expect(result).to be_an(Array)
157
+ expect(result[0]).to be_a(Hash)
158
+ expect(result[-1]).to be_a(Hash)
159
+ end
160
+
161
+ it 'returns correct values' do
162
+ expect(result[0][:steam_id]).to eql(76561198017461530)
163
+ expect(result[0][:username]).to eql('TheJohn')
164
+ expect(result[0][:colour]).to eql('ebe2ca')
165
+
166
+ expect(result[-1][:steam_id]).to eql(76561198029274581)
167
+ expect(result[-1][:username]).to eql('pony danza (OUT AGAIN DAMN IT)')
168
+ expect(result[-1][:colour]).to eql('cd9b1d')
169
+ end
170
+ end
171
+
172
+ describe '#scrape_user' do
173
+ context 'a real user page is given' do
174
+ let(:page) {
175
+ VCR.use_cassette('scrape_user_real') do
176
+ scraper.fetch('http://tf2r.com/user/76561198061719848.html')
177
+ end
178
+ }
179
+ let(:result) { scraper.scrape_user(page) }
180
+
181
+ it 'returns a Hash' do
182
+ expect(result).to be_a(Hash)
183
+ end
184
+
185
+ # This spec is also brittle. It relies on my user account, which is updated
186
+ # constantly.
187
+ # TODO: use a stagnant alt account
188
+ it 'returns correct values' do
189
+ expect(result[:steam_id]).to eql(76561198061719848)
190
+ expect(result[:username]).to eql('Yulli')
191
+ expect(result[:avatar_link]).to eql('http://media.steampowered.com/steamcommunity/public/images/avatars/bc/bc9dc4302d23f2e2f37f59c59f29c27dbc8cade6_full.jpg')
192
+ expect(result[:posrep]).to eql(11459)
193
+ expect(result[:negrep]).to eql(0)
194
+ expect(result[:colour]).to eql('70b01b')
195
+ end
196
+ end
197
+
198
+ context 'a user page for a non-existent user is given' do
199
+ let(:page) {
200
+ VCR.use_cassette('scrape_user_not_found') do
201
+ scraper.fetch('http://tf2r.com/user/123456.html')
202
+ end
203
+ }
204
+ let(:result) { scraper.scrape_user(page) }
205
+ it 'returns a Hash' do
206
+ expect(result).to be_a(Hash)
207
+ end
208
+
209
+ it 'returns the attempted Steam ID' do
210
+ expect(result[:steam_id]).to eql(123456)
211
+ end
212
+
213
+ it 'returns mostly nil values' do
214
+ expect(result[:username]).to be_nil
215
+ expect(result[:avatar_link]).to be_nil
216
+ expect(result[:posrep]).to be_nil
217
+ expect(result[:negrep]).to be_nil
218
+ expect(result[:colour]).to be_nil
219
+ end
220
+ end
221
+ end
222
+
223
+
224
+ describe '#scrape_ranks' do
225
+ let(:page) {
226
+ VCR.use_cassette('scrape_ranks') do
227
+ scraper.fetch('http://tf2r.com/info.html')
228
+ end
229
+ }
230
+ let(:result) { scraper.scrape_ranks(page) }
231
+
232
+ it 'returns an Array of Hashes' do
233
+ expect(result).to be_an(Array)
234
+ expect(result[0]).to be_a(Hash)
235
+ expect(result[-1]).to be_a(Hash)
236
+ end
237
+
238
+ it 'returns correct values' do
239
+ expect(result[0][:name]).to eql('User')
240
+ expect(result[0][:description]).to eql('Every new or existing user has this rank.')
241
+ expect(result[0][:colour]).to eql('ebe2ca')
242
+
243
+ # This is brittle. Every time a new rank is added, this fails.
244
+ expect(result[-1][:name]).to eql('Lense')
245
+ expect(result[-1][:description]).to eql('[ Custom donator rank ]')
246
+ expect(result[-1][:colour]).to eql('545d6c')
247
+ end
248
+ end
42
249
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,18 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
1
4
  require 'tf2r'
5
+ require 'vcr'
6
+ require 'webmock/rspec'
2
7
 
3
8
  RSpec.configure do |config|
4
9
  config.order = 'random'
5
- end
10
+ end
11
+
12
+ VCR.configure do |c|
13
+ c.cassette_library_dir = 'spec/vcr/cassettes'
14
+ c.hook_into :webmock
15
+ c.ignore_localhost = true
16
+ end
17
+
18
+ WebMock.disable_net_connect!(allow_localhost: true)
@@ -0,0 +1,243 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://tf2r.com/raffles.html
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip,deflate,identity
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - TF2R::Scraper 0.0.1
16
+ Accept-Charset:
17
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
18
+ Accept-Language:
19
+ - en-us,en;q=0.5
20
+ Host:
21
+ - tf2r.com
22
+ Connection:
23
+ - keep-alive
24
+ Keep-Alive:
25
+ - 300
26
+ response:
27
+ status:
28
+ code: 200
29
+ message: OK
30
+ headers:
31
+ Server:
32
+ - nginx/1.7.0
33
+ Date:
34
+ - Mon, 04 Aug 2014 20:26:00 GMT
35
+ Content-Type:
36
+ - text/html; charset=utf-8
37
+ Transfer-Encoding:
38
+ - chunked
39
+ Connection:
40
+ - keep-alive
41
+ Set-Cookie:
42
+ - session=kEpKJAKyNkpmUS-ZCwwc-1ILFg6; expires=Tue, 04-Aug-2015 20:26:00 GMT;
43
+ Max-Age=31536000; path=/
44
+ Expires:
45
+ - Thu, 19 Nov 1981 08:52:00 GMT
46
+ Cache-Control:
47
+ - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
48
+ Pragma:
49
+ - no-cache
50
+ Content-Encoding:
51
+ - gzip
52
+ Vary:
53
+ - Accept-Encoding
54
+ body:
55
+ encoding: ASCII-8BIT
56
+ string: !binary |-
57
+ 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
240
+ 2/8PAAD//wMAtAk2lDuwAAA=
241
+ http_version:
242
+ recorded_at: Mon, 04 Aug 2014 20:24:20 GMT
243
+ recorded_with: VCR 2.9.2