bitlyr 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +146 -0
- data/LICENSE +20 -0
- data/README.md +97 -0
- data/README.rdoc +37 -0
- data/Rakefile +43 -0
- data/VERSION +1 -0
- data/bitlyr.gemspec +154 -0
- data/lib/bitlyr/client.rb +153 -0
- data/lib/bitlyr/country.rb +10 -0
- data/lib/bitlyr/day.rb +12 -0
- data/lib/bitlyr/error.rb +13 -0
- data/lib/bitlyr/lib/core_ext/hash.rb +27 -0
- data/lib/bitlyr/lib/core_ext/string.rb +5 -0
- data/lib/bitlyr/missing_url.rb +12 -0
- data/lib/bitlyr/realtime_link.rb +16 -0
- data/lib/bitlyr/referrer.rb +12 -0
- data/lib/bitlyr/response.rb +39 -0
- data/lib/bitlyr/strategy/access_token.rb +26 -0
- data/lib/bitlyr/strategy/api_key.rb +33 -0
- data/lib/bitlyr/strategy/base.rb +26 -0
- data/lib/bitlyr/strategy/oauth.rb +50 -0
- data/lib/bitlyr/url.rb +124 -0
- data/lib/bitlyr/user.rb +100 -0
- data/lib/bitlyr.rb +39 -0
- data/test/fixtures/9uX1TE.json +1 -0
- data/test/fixtures/9uX1TEclicks.json +1 -0
- data/test/fixtures/9uX1TEclicks2.json +1 -0
- data/test/fixtures/9uX1TEinfo.json +1 -0
- data/test/fixtures/9uX1TEinfo2.json +1 -0
- data/test/fixtures/auth_fail.json +1 -0
- data/test/fixtures/auth_success.json +1 -0
- data/test/fixtures/betaworks.json +1 -0
- data/test/fixtures/betaworks2.json +1 -0
- data/test/fixtures/betaworks_jmp.json +1 -0
- data/test/fixtures/betaworks_other_user.json +1 -0
- data/test/fixtures/bitly9uX1TE.json +1 -0
- data/test/fixtures/bitly_pro_domain.json +1 -0
- data/test/fixtures/clicks_by_day.json +1 -0
- data/test/fixtures/clicks_by_day1.json +1 -0
- data/test/fixtures/clicks_by_day2.json +1 -0
- data/test/fixtures/clicks_by_minute1_url.json +1 -0
- data/test/fixtures/clicks_by_minute2_url.json +1 -0
- data/test/fixtures/clicks_by_minute_hash.json +1 -0
- data/test/fixtures/clicks_by_minute_hashes.json +1 -0
- data/test/fixtures/country_hash.json +1 -0
- data/test/fixtures/country_hash2.json +1 -0
- data/test/fixtures/country_url.json +1 -0
- data/test/fixtures/failure.json +1 -0
- data/test/fixtures/invalid_bitly_pro_domain.json +1 -0
- data/test/fixtures/invalid_credentials.json +1 -0
- data/test/fixtures/invalid_domain.json +1 -0
- data/test/fixtures/invalid_user.json +1 -0
- data/test/fixtures/invalid_x_api_key.json +1 -0
- data/test/fixtures/lookup_multiple_url.json +1 -0
- data/test/fixtures/lookup_not_real_url.json +1 -0
- data/test/fixtures/lookup_single_url.json +1 -0
- data/test/fixtures/missing_hash.json +1 -0
- data/test/fixtures/multiple_info.json +1 -0
- data/test/fixtures/multiple_url_click.json +1 -0
- data/test/fixtures/multiple_urls.json +1 -0
- data/test/fixtures/not_bitly_pro_domain.json +1 -0
- data/test/fixtures/not_found_info.json +1 -0
- data/test/fixtures/referrer_hash.json +1 -0
- data/test/fixtures/referrer_hash2.json +1 -0
- data/test/fixtures/referrer_url.json +1 -0
- data/test/fixtures/success.json +1 -0
- data/test/fixtures/url_info.json +1 -0
- data/test/fixtures/user_clicks.json +32 -0
- data/test/fixtures/user_countries.json +60 -0
- data/test/fixtures/user_realtime_links.json +15 -0
- data/test/fixtures/user_referrers.json +1 -0
- data/test/fixtures/valid_user.json +1 -0
- data/test/integration/strategy/test_api_key.rb +20 -0
- data/test/integration/strategy/test_oauth.rb +52 -0
- data/test/integration/test_client.rb +1415 -0
- data/test/integration/test_user.rb +97 -0
- data/test/test_helper.rb +54 -0
- data/test/unit/core_ext/test_hash.rb +69 -0
- data/test/unit/core_ext/test_string.rb +14 -0
- data/test/unit/strategy/test_access_token.rb +14 -0
- data/test/unit/strategy/test_api_key.rb +11 -0
- data/test/unit/strategy/test_base.rb +71 -0
- data/test/unit/strategy/test_oauth.rb +32 -0
- data/test/unit/test_bitly.rb +43 -0
- data/test/unit/test_client.rb +21 -0
- data/test/unit/test_country.rb +20 -0
- data/test/unit/test_day.rb +22 -0
- data/test/unit/test_error.rb +11 -0
- data/test/unit/test_missing.rb +34 -0
- data/test/unit/test_realtime_link.rb +30 -0
- data/test/unit/test_referrer.rb +20 -0
- data/test/unit/test_response.rb +86 -0
- data/test/unit/test_url.rb +155 -0
- data/test/unit/test_user.rb +17 -0
- metadata +233 -0
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestUser < Test::Unit::TestCase
|
4
|
+
context "with an access_token" do
|
5
|
+
setup do
|
6
|
+
consumer = Bitlyr::Strategy::OAuth.new('consumer_token', 'consumer_secret')
|
7
|
+
access_token = consumer.get_access_token_from_token('token')
|
8
|
+
@user = Bitlyr::User.new(access_token)
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'referrers' do
|
12
|
+
setup do
|
13
|
+
stub_get(/https:\/\/api-ssl\.bit\.ly\/v3\/user\/referrers\?(access|oauth)_token=token/, 'user_referrers.json')
|
14
|
+
@referrers = @user.referrers
|
15
|
+
end
|
16
|
+
|
17
|
+
should 'return an array of arrays of referrers' do
|
18
|
+
assert_kind_of Array, @referrers
|
19
|
+
assert_kind_of Array, @referrers.first
|
20
|
+
assert_kind_of Bitlyr::Referrer, @referrers.first.first
|
21
|
+
end
|
22
|
+
|
23
|
+
should 'return data about the referrer' do
|
24
|
+
referrer = @referrers.first.first
|
25
|
+
assert_equal 'direct', referrer.referrer
|
26
|
+
assert_equal 1, referrer.clicks
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'countries' do
|
31
|
+
setup do
|
32
|
+
stub_get(/https:\/\/api-ssl\.bit\.ly\/v3\/user\/countries\?(access|oauth)_token=token/, 'user_countries.json')
|
33
|
+
@countries = @user.countries
|
34
|
+
end
|
35
|
+
|
36
|
+
should 'return an array of arrays of countries' do
|
37
|
+
assert_kind_of Array, @countries
|
38
|
+
assert_kind_of Array, @countries.first
|
39
|
+
assert_kind_of Bitlyr::Country, @countries.first.first
|
40
|
+
end
|
41
|
+
|
42
|
+
should 'return data about the country' do
|
43
|
+
country = @countries.first.first
|
44
|
+
assert_equal "US", country.country
|
45
|
+
assert_equal 4, country.clicks
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'clicks' do
|
50
|
+
setup do
|
51
|
+
stub_get(/https:\/\/api-ssl\.bit\.ly\/v3\/user\/clicks\?(access|oauth)_token=token/, 'user_clicks.json')
|
52
|
+
@clicks = @user.clicks
|
53
|
+
end
|
54
|
+
|
55
|
+
should 'return an array of days' do
|
56
|
+
assert_kind_of Array, @clicks
|
57
|
+
assert_kind_of Bitlyr::Day, @clicks.first
|
58
|
+
end
|
59
|
+
|
60
|
+
should 'return data about the day' do
|
61
|
+
day = @clicks.first
|
62
|
+
assert_equal 4, day.clicks
|
63
|
+
end
|
64
|
+
|
65
|
+
should 'get total clicks' do
|
66
|
+
assert_equal 29, @user.total_clicks
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'total clicks' do
|
71
|
+
setup do
|
72
|
+
stub_get(/https:\/\/api-ssl\.bit\.ly\/v3\/user\/clicks\?(access|oauth)_token=token/, 'user_clicks.json')
|
73
|
+
end
|
74
|
+
|
75
|
+
should 'get total clicks' do
|
76
|
+
assert_equal 29, @user.total_clicks
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'realtime links' do
|
81
|
+
setup do
|
82
|
+
stub_get(/https:\/\/api-ssl\.bit\.ly\/v3\/user\/realtime_links\?(access|oauth)_token=token/, 'user_realtime_links.json')
|
83
|
+
@realtime_links = @user.realtime_links
|
84
|
+
end
|
85
|
+
|
86
|
+
should 'get an array of realtime links' do
|
87
|
+
assert_kind_of Array, @realtime_links
|
88
|
+
assert_kind_of Bitlyr::RealtimeLink, @realtime_links.first
|
89
|
+
end
|
90
|
+
|
91
|
+
should 'get the data for the realtime links' do
|
92
|
+
assert_equal 15, @realtime_links.first.clicks
|
93
|
+
assert_equal "i7JWw0", @realtime_links.first.user_hash
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'shoulda'
|
4
|
+
require 'mocha'
|
5
|
+
require 'fakeweb'
|
6
|
+
require 'ruby-debug'
|
7
|
+
|
8
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
9
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
10
|
+
require 'bitlyr'
|
11
|
+
|
12
|
+
FakeWeb.allow_net_connect = false
|
13
|
+
|
14
|
+
def fixture_file(filename)
|
15
|
+
return '' if filename == ''
|
16
|
+
file_path = File.expand_path(File.dirname(__FILE__) + '/fixtures/' + filename)
|
17
|
+
File.read(file_path)
|
18
|
+
end
|
19
|
+
|
20
|
+
def stub_get(path, filename)
|
21
|
+
if filename.is_a?(Array)
|
22
|
+
response = filename.map { |f| { :body => fixture_file(f), :content_type => 'text/json' } }
|
23
|
+
else
|
24
|
+
response = { :body => fixture_file(filename), :content_type => 'text/json' }
|
25
|
+
end
|
26
|
+
FakeWeb.register_uri(:get, path, response)
|
27
|
+
end
|
28
|
+
|
29
|
+
def stub_post(path, filename)
|
30
|
+
response = { :body => fixture_file(filename), :content_type => 'text/json' }
|
31
|
+
FakeWeb.register_uri(:post, path, response)
|
32
|
+
end
|
33
|
+
|
34
|
+
def api_key_fixture
|
35
|
+
'test_key'
|
36
|
+
end
|
37
|
+
def login_fixture
|
38
|
+
'test_account'
|
39
|
+
end
|
40
|
+
def client_id_fixture
|
41
|
+
'client_id'
|
42
|
+
end
|
43
|
+
def client_secret_fixture
|
44
|
+
'client_secret'
|
45
|
+
end
|
46
|
+
def fixture_token
|
47
|
+
'token'
|
48
|
+
end
|
49
|
+
|
50
|
+
class Test::Unit::TestCase
|
51
|
+
def teardown
|
52
|
+
FakeWeb.clean_registry
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestHash < Test::Unit::TestCase
|
4
|
+
context "calling #to_params" do
|
5
|
+
setup do
|
6
|
+
@hash = { :one => 1, :two => 2 }
|
7
|
+
end
|
8
|
+
should "return a string of key=value&" do
|
9
|
+
assert_equal @hash.to_query, "one=1&two=2"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context "calling #stringify_keys!" do
|
14
|
+
setup do
|
15
|
+
@hash = { :one => 1, :two => 2 }
|
16
|
+
end
|
17
|
+
should "return a hash with string keys" do
|
18
|
+
assert_equal @hash.stringify_keys!.keys.map(&:class).uniq.size, 1
|
19
|
+
assert_equal @hash.stringify_keys!.keys.map(&:class).uniq.first, String
|
20
|
+
end
|
21
|
+
should "should alter the original hash" do
|
22
|
+
@hash.stringify_keys!
|
23
|
+
assert_equal @hash.keys.map(&:class).uniq.size, 1
|
24
|
+
assert_equal @hash.keys.map(&:class).uniq.first, String
|
25
|
+
end
|
26
|
+
end
|
27
|
+
context "calling #stringify_keys" do
|
28
|
+
setup do
|
29
|
+
@hash = { :one => 1, :two => 2 }
|
30
|
+
end
|
31
|
+
should "return a hash with string keys" do
|
32
|
+
assert_equal @hash.stringify_keys.keys.map(&:class).uniq.size, 1
|
33
|
+
assert_equal @hash.stringify_keys.keys.map(&:class).uniq.first, String
|
34
|
+
end
|
35
|
+
should "should return a new hash" do
|
36
|
+
@hash.stringify_keys
|
37
|
+
assert_equal @hash.keys.map(&:class).uniq.size, 1
|
38
|
+
assert_equal @hash.keys.map(&:class).uniq.first, Symbol
|
39
|
+
end
|
40
|
+
end
|
41
|
+
context "calling #symbolize_keys!" do
|
42
|
+
setup do
|
43
|
+
@hash = { 'one' => 1, 'two' => 2 }
|
44
|
+
end
|
45
|
+
should "return a hash with string keys" do
|
46
|
+
assert_equal @hash.symbolize_keys!.keys.map(&:class).uniq.size, 1
|
47
|
+
assert_equal @hash.symbolize_keys!.keys.map(&:class).uniq.first, Symbol
|
48
|
+
end
|
49
|
+
should "should alter the original hash" do
|
50
|
+
@hash.symbolize_keys!
|
51
|
+
assert_equal @hash.keys.map(&:class).uniq.size, 1
|
52
|
+
assert_equal @hash.keys.map(&:class).uniq.first, Symbol
|
53
|
+
end
|
54
|
+
end
|
55
|
+
context "calling #symbolize_keys" do
|
56
|
+
setup do
|
57
|
+
@hash = { 'one' => 1, 'two' => 2 }
|
58
|
+
end
|
59
|
+
should "return a hash with string keys" do
|
60
|
+
assert_equal @hash.symbolize_keys.keys.map(&:class).uniq.size, 1
|
61
|
+
assert_equal @hash.symbolize_keys.keys.map(&:class).uniq.first, Symbol
|
62
|
+
end
|
63
|
+
should "should alter the original hash" do
|
64
|
+
@hash.symbolize_keys
|
65
|
+
assert_equal @hash.keys.map(&:class).uniq.size, 1
|
66
|
+
assert_equal @hash.keys.map(&:class).uniq.first, String
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestString < Test::Unit::TestCase
|
4
|
+
context "Ruby String" do
|
5
|
+
setup do
|
6
|
+
@string = "string"
|
7
|
+
end
|
8
|
+
context "calling to_params" do
|
9
|
+
should "return a string of key=value&" do
|
10
|
+
assert_equal @string.to_a, [ @string ]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestAccessToken < Test::Unit::TestCase
|
4
|
+
context "with an id and secret" do
|
5
|
+
setup do
|
6
|
+
oauth = Bitlyr::Strategy::OAuth.new('id', 'secret')
|
7
|
+
@strategy = oauth.get_access_token_from_token('token')
|
8
|
+
end
|
9
|
+
should 'get access token with access token' do
|
10
|
+
access_token = @strategy.send(:access_token)
|
11
|
+
assert_kind_of OAuth2::AccessToken, access_token
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestApiKey < Test::Unit::TestCase
|
4
|
+
context "creating a new ApiKey Strategy" do
|
5
|
+
should "initialize with login and api key" do
|
6
|
+
assert_nothing_raised do
|
7
|
+
Bitlyr::Strategy::ApiKey.new(login_fixture, api_key_fixture)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestBase < Test::Unit::TestCase
|
4
|
+
context "a request" do
|
5
|
+
context "when successful" do
|
6
|
+
setup do
|
7
|
+
Bitlyr::Response.stubs(:new => stub('response', :success? => true, :body => {}))
|
8
|
+
@strategy = Bitlyr::Strategy::Base.new
|
9
|
+
end
|
10
|
+
should "should proxy the request to run_request" do
|
11
|
+
@strategy.expects(:run_request).once
|
12
|
+
@strategy.request
|
13
|
+
end
|
14
|
+
should "should pass the args to run request" do
|
15
|
+
@strategy.stubs(:run_request).with("these", "args")
|
16
|
+
@strategy.request("these", "args")
|
17
|
+
end
|
18
|
+
should "return the body of the bitlyr response" do
|
19
|
+
@strategy.stubs(:run_request => true)
|
20
|
+
assert_equal @strategy.request, {}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
context "when unsuccessful" do
|
24
|
+
should "raise a Bitlyr Error" do
|
25
|
+
response = stub('response', :success? => false, :reason => "reason", :status => 500)
|
26
|
+
Bitlyr::Response.stubs(:new => response)
|
27
|
+
strategy = Bitlyr::Strategy::Base.new
|
28
|
+
strategy.stubs(:run_request => true)
|
29
|
+
assert_raise BitlyrError do
|
30
|
+
strategy.request
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
context "run_request" do
|
36
|
+
should "raise a Runtime Error" do
|
37
|
+
strategy = Bitlyr::Strategy::Base.new
|
38
|
+
assert_raise RuntimeError do
|
39
|
+
strategy.send :run_request
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
context "validating a login and apiKey" do
|
44
|
+
context "with valid login and apiKey" do
|
45
|
+
setup do
|
46
|
+
Bitlyr::Response.stubs(:new => stub('response', :success? => true, :body => {'valid' => 1}))
|
47
|
+
@strategy = Bitlyr::Strategy::Base.new
|
48
|
+
@strategy.expects(:run_request).once
|
49
|
+
end
|
50
|
+
should "return true when calling validate" do
|
51
|
+
assert @strategy.validate(login_fixture, api_key_fixture)
|
52
|
+
end
|
53
|
+
should "return true when calling valid?" do
|
54
|
+
assert @strategy.valid?(login_fixture, api_key_fixture)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
context "with an invalid login and apiKey" do
|
58
|
+
setup do
|
59
|
+
Bitlyr::Response.stubs(:new => stub('response', :success? => true, :body => {'valid' => 0}))
|
60
|
+
@strategy = Bitlyr::Strategy::Base.new
|
61
|
+
@strategy.expects(:run_request).once
|
62
|
+
end
|
63
|
+
should "return false when calling validate" do
|
64
|
+
assert !@strategy.validate("bogus", "info")
|
65
|
+
end
|
66
|
+
should "return false when valling valid?" do
|
67
|
+
assert !@strategy.valid?("bogus", "info")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestOAuthStrategy < Test::Unit::TestCase
|
4
|
+
context "with an id and secret" do
|
5
|
+
setup do
|
6
|
+
@client_id = 'id'
|
7
|
+
@client_secret = 'secret'
|
8
|
+
@strategy = Bitlyr::Strategy::OAuth.new(@client_id, @client_secret)
|
9
|
+
end
|
10
|
+
should 'create the oauth client' do
|
11
|
+
assert_kind_of OAuth2::Client, @strategy.send(:client)
|
12
|
+
end
|
13
|
+
should 'save the strategy details on the client' do
|
14
|
+
assert_equal @client_id, @strategy.send(:client).id
|
15
|
+
assert_equal @client_secret, @strategy.send(:client).secret
|
16
|
+
end
|
17
|
+
should 'get the oauth authorize url' do
|
18
|
+
assert_match %r{https://api-ssl\.bit\.ly/oauth/authorize\?.*client_id=#{@client_id}.*}, @strategy.authorize_url('http://test.local')
|
19
|
+
end
|
20
|
+
should 'get access token with access token' do
|
21
|
+
access_token = @strategy.get_access_token_from_token('hello')
|
22
|
+
assert_kind_of Bitlyr::Strategy::AccessToken, access_token
|
23
|
+
assert_equal @strategy.send(:client), access_token.client
|
24
|
+
end
|
25
|
+
should 'set access token with access token' do
|
26
|
+
@strategy.set_access_token_from_token!('hello')
|
27
|
+
access_token = @strategy.send(:access_token)
|
28
|
+
assert_kind_of Bitlyr::Strategy::AccessToken, access_token
|
29
|
+
assert_equal @strategy.send(:client), access_token.client
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestBitlyr < Test::Unit::TestCase
|
4
|
+
context "bitlyr module" do
|
5
|
+
context "with a login and api key" do
|
6
|
+
should "create a new bitlyr client" do
|
7
|
+
bitlyr = Bitlyr.new(:login => "login", :api_key => "api key")
|
8
|
+
assert bitlyr.is_a?(Bitlyr::Client)
|
9
|
+
end
|
10
|
+
should "create have a ApiKey Strategy" do
|
11
|
+
strategy = Bitlyr.new(:login => "login", :api_key => "api key").send(:strategy)
|
12
|
+
assert strategy.is_a?(Bitlyr::Strategy::ApiKey)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
context "with a client id and client secret" do
|
16
|
+
should "create a new bitlyr client" do
|
17
|
+
bitlyr = Bitlyr.new(:client_id => "client id", :client_secret => "client secret")
|
18
|
+
assert bitlyr.is_a?(Bitlyr::Client)
|
19
|
+
end
|
20
|
+
should "create have a OAuth Strategy" do
|
21
|
+
strategy = Bitlyr.new(:client_id => "client id", :client_secret => "client secret").send(:strategy)
|
22
|
+
assert strategy.is_a?(Bitlyr::Strategy::OAuth)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
context "with a client id, client secret and token" do
|
26
|
+
should "create a new bitlyr client" do
|
27
|
+
bitlyr = Bitlyr.new(:client_id => "client id", :client_secret => "client secret", :token => "token")
|
28
|
+
assert bitlyr.is_a?(Bitlyr::Client)
|
29
|
+
end
|
30
|
+
should "create have a OAuth Strategy" do
|
31
|
+
strategy = Bitlyr.new(:client_id => "client id", :client_secret => "client secret", :token => "token").send(:strategy)
|
32
|
+
assert strategy.is_a?(Bitlyr::Strategy::OAuth)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
context "with bad information" do
|
36
|
+
should "raise an error" do
|
37
|
+
assert_raise RuntimeError do
|
38
|
+
Bitlyr.new({})
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestClient < Test::Unit::TestCase
|
4
|
+
context "creating a new client" do
|
5
|
+
should "initialize with ApiKey strategy" do
|
6
|
+
assert_nothing_raised do
|
7
|
+
Bitlyr::Client.new Bitlyr::Strategy::ApiKey.new(login_fixture, api_key_fixture)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
should "initialize with OAuth strategy" do
|
11
|
+
assert_nothing_raised do
|
12
|
+
Bitlyr::Client.new Bitlyr::Strategy::OAuth.new(client_id_fixture, client_secret_fixture)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
should "raise an exception when bad arguments are used" do
|
16
|
+
assert_raise ArgumentError do
|
17
|
+
Bitlyr::Client.new("Something Else")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestCountry < Test::Unit::TestCase
|
4
|
+
context "a country" do
|
5
|
+
setup do
|
6
|
+
@country = Bitlyr::Country.new
|
7
|
+
end
|
8
|
+
|
9
|
+
[:clicks, :country].each do |method|
|
10
|
+
should "respond to #{method}" do
|
11
|
+
assert_respond_to @country, method
|
12
|
+
end
|
13
|
+
|
14
|
+
should "set #{method} when initializing" do
|
15
|
+
country = Bitlyr::Country.new(method.to_s => 'test')
|
16
|
+
assert_equal 'test', country.send(method)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestDay < Test::Unit::TestCase
|
4
|
+
context "a day" do
|
5
|
+
setup do
|
6
|
+
@day = Bitlyr::Day.new
|
7
|
+
end
|
8
|
+
[:clicks, :day_start].each do |method|
|
9
|
+
should "respond to #{method}" do
|
10
|
+
assert_respond_to @day, method
|
11
|
+
end
|
12
|
+
end
|
13
|
+
should "set clicks when initializing" do
|
14
|
+
day = Bitlyr::Day.new('clicks' => 12)
|
15
|
+
assert_equal 12, day.clicks
|
16
|
+
end
|
17
|
+
should "set day to a time object when initialising" do
|
18
|
+
day = Bitlyr::Day.new('day_start' => 1290488400)
|
19
|
+
assert_equal Time.parse('2010/11/23'), day.day_start
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestBitlyrError < Test::Unit::TestCase
|
4
|
+
should "create a new bitlyr client" do
|
5
|
+
res = mock(:status => 'code', :reason => 'message')
|
6
|
+
error = BitlyrError.new(res)
|
7
|
+
assert_equal "message - 'code'", error.message
|
8
|
+
assert_equal "message - 'code'", error.msg
|
9
|
+
assert_equal "code", error.code
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestMissingUrl < Test::Unit::TestCase
|
4
|
+
context "a url" do
|
5
|
+
setup do
|
6
|
+
@url = Bitlyr::MissingUrl.new
|
7
|
+
end
|
8
|
+
[:short_url, :user_hash, :long_url, :error].each do |method|
|
9
|
+
should "respond to #{method}" do
|
10
|
+
assert_respond_to @url, method
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
context "#new" do
|
15
|
+
setup do
|
16
|
+
@url = Bitlyr::MissingUrl.new({ 'short_url' => 'short url',
|
17
|
+
'hash' => 'hash',
|
18
|
+
'long_url' => 'long url',
|
19
|
+
'error' => 'error' })
|
20
|
+
end
|
21
|
+
should "return the short url" do
|
22
|
+
assert_equal 'short url', @url.short_url
|
23
|
+
end
|
24
|
+
should "return the user hash" do
|
25
|
+
assert_equal 'hash', @url.user_hash
|
26
|
+
end
|
27
|
+
should "return the long url" do
|
28
|
+
assert_equal 'long url', @url.long_url
|
29
|
+
end
|
30
|
+
should "return the error" do
|
31
|
+
assert_equal 'error', @url.error
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestRealtimeLink < Test::Unit::TestCase
|
4
|
+
context "a realtime link" do
|
5
|
+
setup do
|
6
|
+
@realtime_link = Bitlyr::RealtimeLink.new
|
7
|
+
end
|
8
|
+
[:clicks, :user_hash].each do |method|
|
9
|
+
should "respond to #{method}" do
|
10
|
+
assert_respond_to @realtime_link, method
|
11
|
+
end
|
12
|
+
end
|
13
|
+
should "set clicks when initializing" do
|
14
|
+
realtime_link = Bitlyr::RealtimeLink.new('clicks' => 12)
|
15
|
+
assert_equal 12, realtime_link.clicks
|
16
|
+
end
|
17
|
+
should "set user_hash when initializing" do
|
18
|
+
realtime_link = Bitlyr::RealtimeLink.new('user_hash' => 'sdfidn')
|
19
|
+
assert_equal 'sdfidn', realtime_link.user_hash
|
20
|
+
end
|
21
|
+
should 'create a url when supplied with a client' do
|
22
|
+
realtime_link = Bitlyr::RealtimeLink.new('user_hash' => 'sdfidn', 'clicks' => 12)
|
23
|
+
client = Bitlyr::Client.new(Bitlyr::Strategy::ApiKey.new(login_fixture, api_key_fixture))
|
24
|
+
url = realtime_link.create_url(client)
|
25
|
+
assert_kind_of Bitlyr::Url, url
|
26
|
+
assert_equal 12, url.user_clicks
|
27
|
+
assert_equal 'sdfidn', url.user_hash
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestReferrer < Test::Unit::TestCase
|
4
|
+
context "a referrer" do
|
5
|
+
setup do
|
6
|
+
@referrer = Bitlyr::Referrer.new({})
|
7
|
+
end
|
8
|
+
|
9
|
+
[:clicks, :referrer, :referrer_app, :url].each do |method|
|
10
|
+
should "respond to #{method}" do
|
11
|
+
assert_respond_to @referrer, method
|
12
|
+
end
|
13
|
+
|
14
|
+
should "set #{method} when initializing" do
|
15
|
+
referrer = Bitlyr::Referrer.new(method.to_s => 'test')
|
16
|
+
assert_equal 'test', referrer.send(method)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestResponse < Test::Unit::TestCase
|
4
|
+
context "with a unsupported response" do
|
5
|
+
should "raise an error" do
|
6
|
+
assert_raises RuntimeError, "Unsupported Response type: Object" do
|
7
|
+
Bitlyr::Response.new(Object.new).success?
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
context "with an oauth response" do
|
12
|
+
setup do
|
13
|
+
OAuth2::Response.stubs(:=== => true)
|
14
|
+
end
|
15
|
+
should "return true" do
|
16
|
+
response = Bitlyr::Response.new(stub('oauth', :parsed => {'status_code' => 200}))
|
17
|
+
assert_equal true, response.success?
|
18
|
+
end
|
19
|
+
should "return false" do
|
20
|
+
response = Bitlyr::Response.new(stub('oauth', :parsed => {'status_code' => 'not 200'}))
|
21
|
+
assert_equal false, response.success?
|
22
|
+
end
|
23
|
+
should "return the status code" do
|
24
|
+
response = Bitlyr::Response.new(stub('oauth', :parsed => {'status_code' => 'some status code'}))
|
25
|
+
assert_equal 'some status code', response.status,
|
26
|
+
end
|
27
|
+
should "return the response body" do
|
28
|
+
response = Bitlyr::Response.new(stub('oauth', :parsed => { 'data' => {} } ))
|
29
|
+
assert_equal Hash.new, response.body
|
30
|
+
end
|
31
|
+
should "return the response body" do
|
32
|
+
response = Bitlyr::Response.new(stub('oauth', :parsed => {'data' => nil}))
|
33
|
+
assert_equal nil, response.body
|
34
|
+
end
|
35
|
+
should "return the status text reason" do
|
36
|
+
response = Bitlyr::Response.new(stub('oauth', :parsed => {'status_txt' => "OK"}))
|
37
|
+
assert_equal "OK", response.reason
|
38
|
+
end
|
39
|
+
should "return the status text reason" do
|
40
|
+
response = Bitlyr::Response.new(stub('oauth', :parsed => {'status_txt' => "RATE_LIMIT_EXCEEDED"}))
|
41
|
+
assert_equal "Rate Limit Exceeded", response.reason
|
42
|
+
end
|
43
|
+
should "return the status text reason" do
|
44
|
+
response = Bitlyr::Response.new(stub('oauth', :parsed => {'status_txt' => "INVALID_ANYTHING"}))
|
45
|
+
assert_equal "Invalid Anything", response.reason
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "with a HTTParty response" do
|
50
|
+
setup do
|
51
|
+
HTTParty::Response.stubs(:=== => true)
|
52
|
+
end
|
53
|
+
should "return true" do
|
54
|
+
response = Bitlyr::Response.new(stub(:parsed_response => { 'status_code' => 200 } ))
|
55
|
+
assert_equal true, response.success?
|
56
|
+
end
|
57
|
+
should "return false" do
|
58
|
+
response = Bitlyr::Response.new(stub(:parsed_response => { 'status_code' => 'not 200' }))
|
59
|
+
assert_equal false, response.success?
|
60
|
+
end
|
61
|
+
should "return the status code" do
|
62
|
+
response = Bitlyr::Response.new(stub(:parsed_response => { 'status_code' => 'some status code' }))
|
63
|
+
assert_equal 'some status code', response.status,
|
64
|
+
end
|
65
|
+
should "return the response body" do
|
66
|
+
response = Bitlyr::Response.new(stub(:parsed_response => { 'data' => {} } ))
|
67
|
+
assert_equal Hash.new, response.body
|
68
|
+
end
|
69
|
+
should "return the response body" do
|
70
|
+
response = Bitlyr::Response.new(stub(:parsed_response => { 'data' => nil }))
|
71
|
+
assert_equal nil, response.body
|
72
|
+
end
|
73
|
+
should "return the status text reason" do
|
74
|
+
response = Bitlyr::Response.new(stub(:parsed_response => { 'status_txt' => "OK" }))
|
75
|
+
assert_equal "OK", response.reason
|
76
|
+
end
|
77
|
+
should "return the status text reason" do
|
78
|
+
response = Bitlyr::Response.new(stub(:parsed_response => { 'status_txt' => "RATE_LIMIT_EXCEEDED" }))
|
79
|
+
assert_equal "Rate Limit Exceeded", response.reason
|
80
|
+
end
|
81
|
+
should "return the status text reason" do
|
82
|
+
response = Bitlyr::Response.new(stub(:parsed_response => { 'status_txt' => "INVALID_ANYTHING" }))
|
83
|
+
assert_equal "Invalid Anything", response.reason
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|