shortwave 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. data/.document +5 -0
  2. data/.gitignore +10 -0
  3. data/.gitmodules +3 -0
  4. data/LICENSE +20 -0
  5. data/README.rdoc +74 -0
  6. data/Rakefile +133 -0
  7. data/VERSION +1 -0
  8. data/lib/shortwave.rb +12 -0
  9. data/lib/shortwave/authentication.rb +107 -0
  10. data/lib/shortwave/facade.rb +3 -0
  11. data/lib/shortwave/facade/build/facade_builder.rb +199 -0
  12. data/lib/shortwave/facade/build/facade_template.erb +17 -0
  13. data/lib/shortwave/facade/lastfm.rb +878 -0
  14. data/lib/shortwave/facade/remote.rb +86 -0
  15. data/lib/shortwave/model/album.rb +33 -0
  16. data/lib/shortwave/model/artist.rb +62 -0
  17. data/lib/shortwave/model/base_model.rb +112 -0
  18. data/lib/shortwave/model/chart_dates.rb +15 -0
  19. data/lib/shortwave/model/comparison.rb +15 -0
  20. data/lib/shortwave/model/event.rb +55 -0
  21. data/lib/shortwave/model/group.rb +26 -0
  22. data/lib/shortwave/model/location.rb +45 -0
  23. data/lib/shortwave/model/playlist.rb +36 -0
  24. data/lib/shortwave/model/shout.rb +21 -0
  25. data/lib/shortwave/model/tag.rb +47 -0
  26. data/lib/shortwave/model/track.rb +71 -0
  27. data/lib/shortwave/model/user.rb +70 -0
  28. data/lib/shortwave/model/venue.rb +37 -0
  29. data/lib/shortwave/model/weekly_charts.rb +31 -0
  30. data/lib/shortwave/providers.rb +161 -0
  31. data/shortwave.gemspec +178 -0
  32. data/test/authentication_test.rb +64 -0
  33. data/test/build/build_test.rb +25 -0
  34. data/test/build/data/intro.yml +2 -0
  35. data/test/build/data/screens/album_addTags.html +1238 -0
  36. data/test/build/data/screens/intro_truncated.html +426 -0
  37. data/test/build/data/screens/tasteometer_compare.html +1274 -0
  38. data/test/build/data/screens/user_getLovedTracks.html +1278 -0
  39. data/test/build/data/screens/venue_search.html +1261 -0
  40. data/test/build/facade_builder_test.rb +23 -0
  41. data/test/build/parameter_test.rb +43 -0
  42. data/test/build/remote_method_test.rb +47 -0
  43. data/test/build/ruby_class_test.rb +12 -0
  44. data/test/build/ruby_method_test.rb +137 -0
  45. data/test/helper.rb +35 -0
  46. data/test/model/album_test.rb +62 -0
  47. data/test/model/artist_test.rb +103 -0
  48. data/test/model/chart_dates_test.rb +11 -0
  49. data/test/model/comparison_test.rb +18 -0
  50. data/test/model/data/album_info.xml +38 -0
  51. data/test/model/data/album_search.xml +210 -0
  52. data/test/model/data/artist_info.xml +58 -0
  53. data/test/model/data/artist_search.xml +109 -0
  54. data/test/model/data/artist_shouts.xml +546 -0
  55. data/test/model/data/artist_top_fans.xml +405 -0
  56. data/test/model/data/event_info.xml +47 -0
  57. data/test/model/data/group_members.xml +242 -0
  58. data/test/model/data/group_weekly_album_chart.xml +1754 -0
  59. data/test/model/data/group_weekly_artist_chart.xml +604 -0
  60. data/test/model/data/group_weekly_track_chart.xml +1005 -0
  61. data/test/model/data/location_events.xml +383 -0
  62. data/test/model/data/ok.xml +2 -0
  63. data/test/model/data/playlist_fetch.xml +227 -0
  64. data/test/model/data/tag_search.xml +110 -0
  65. data/test/model/data/tag_similar.xml +254 -0
  66. data/test/model/data/tag_top_albums.xml +805 -0
  67. data/test/model/data/tag_top_artists.xml +605 -0
  68. data/test/model/data/tag_top_tags.xml +1254 -0
  69. data/test/model/data/tag_top_tracks.xml +843 -0
  70. data/test/model/data/tag_weekly_chart_list.xml +57 -0
  71. data/test/model/data/tasteometer_compare.xml +54 -0
  72. data/test/model/data/track_info.xml +53 -0
  73. data/test/model/data/track_search.xml +195 -0
  74. data/test/model/data/user_chartlist.xml +90 -0
  75. data/test/model/data/user_info.xml +16 -0
  76. data/test/model/data/user_neighbours.xml +484 -0
  77. data/test/model/data/user_playlists.xml +17 -0
  78. data/test/model/data/user_recent_tracks.xml +124 -0
  79. data/test/model/data/user_recommended_artists.xml +454 -0
  80. data/test/model/data/user_shouts.xml +9 -0
  81. data/test/model/data/user_weekly_artist_chart.xml +478 -0
  82. data/test/model/data/venue_events.xml +556 -0
  83. data/test/model/data/venue_past_events.xml +1778 -0
  84. data/test/model/data/venue_search.xml +355 -0
  85. data/test/model/event_test.rb +63 -0
  86. data/test/model/group_test.rb +45 -0
  87. data/test/model/location_test.rb +25 -0
  88. data/test/model/playlist_test.rb +51 -0
  89. data/test/model/shout_test.rb +23 -0
  90. data/test/model/tag_test.rb +39 -0
  91. data/test/model/track_test.rb +67 -0
  92. data/test/model/user_test.rb +125 -0
  93. data/test/model/venue_test.rb +60 -0
  94. data/test/provider/album_provider_test.rb +26 -0
  95. data/test/provider/artist_provider_test.rb +25 -0
  96. data/test/provider/group_provider_test.rb +9 -0
  97. data/test/provider/location_provider_test.rb +9 -0
  98. data/test/provider/playlist_provider_test.rb +12 -0
  99. data/test/provider/tag_provider_test.rb +24 -0
  100. data/test/provider/track_provider_test.rb +26 -0
  101. data/test/provider/user_provider_test.rb +11 -0
  102. data/test/provider/venue_provider_test.rb +15 -0
  103. data/test/provider_test_helper.rb +27 -0
  104. data/test/remote_test.rb +26 -0
  105. metadata +209 -0
@@ -0,0 +1,25 @@
1
+ require 'helper'
2
+
3
+ class LocationTest < Test::Unit::TestCase
4
+ include ProviderTestHelper
5
+
6
+ def setup
7
+ super
8
+ @location = StubSession.new.location.build(:country => "United Kingdom", :city => "London")
9
+ end
10
+
11
+ test "has artists" do
12
+ expect_get "method=geo.getTopArtists&country=United%20Kingdom", :artist_search
13
+ assert @location.artists.first.kind_of? Model::Artist
14
+ end
15
+
16
+ test "has tracks" do
17
+ expect_get "method=geo.getTopTracks&country=United%20Kingdom&location=London", :track_search
18
+ assert @location.tracks.first.kind_of? Model::Track
19
+ end
20
+
21
+ test "has events" do
22
+ expect_get "method=geo.getEvents&location=London", :location_events
23
+ assert @location.events.first.kind_of? Model::Event
24
+ end
25
+ end
@@ -0,0 +1,51 @@
1
+ require 'helper'
2
+
3
+ class PlaylistTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ def setup
7
+ super
8
+ @playlist = Model::Playlist.parse(xml("user_playlists"), :single => true)
9
+ end
10
+
11
+ test "has id" do
12
+ assert_equal 1011557, @playlist.id
13
+ end
14
+
15
+ test "has a title" do
16
+ assert_equal "knaveofdiamonds\342\200\231s playlist", @playlist.title
17
+ end
18
+
19
+ test "has a description" do
20
+ assert_equal "a description", @playlist.description
21
+ end
22
+
23
+ test "has a creation time" do
24
+ assert_equal Time.local(2007, 8, 23, 22, 4, 33), @playlist.created_at
25
+ end
26
+
27
+ test "has a size" do
28
+ assert_equal 27, @playlist.size
29
+ end
30
+
31
+ test "has a total duration" do
32
+ assert_equal 7487, @playlist.duration
33
+ end
34
+
35
+ test "can be streamable" do
36
+ assert ! @playlist.streamable?
37
+ end
38
+
39
+ test "has a url" do
40
+ assert_equal "http://www.last.fm/user/knaveofdiamonds/library/playlists/loit_knaveofdiamonds%25E2%2580%2599s_playlist", @playlist.url
41
+ end
42
+
43
+ test "can have tracks added to it" do
44
+ @facade.stubs(:session => stub(:playlist_facade => @facade))
45
+ @playlist.session = @facade.session
46
+ @facade.expects(:add_track).with(1011557, "Title", "Artist").returns(xml("ok"))
47
+ track = stub(:name => "Title", :artist_name => "Artist")
48
+
49
+ @playlist.add_track(track)
50
+ end
51
+ end
@@ -0,0 +1,23 @@
1
+ require 'helper'
2
+
3
+ class ShoutTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ def setup
7
+ super
8
+ @shout = Model::Shout.parse(xml("artist_shouts"), :single => true)
9
+ @shout.session = StubSession.new
10
+ end
11
+
12
+ test "has a message" do
13
+ assert @shout.message
14
+ end
15
+
16
+ test "has a time" do
17
+ assert_equal Time.local(2009, 5, 13, 3, 58, 30), @shout.time
18
+ end
19
+
20
+ test "has an author" do
21
+ assert_equal "distantfingers", @shout.user.name
22
+ end
23
+ end
@@ -0,0 +1,39 @@
1
+ require 'helper'
2
+
3
+ class TagTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ def setup
7
+ super
8
+ @tag = Model::Tag.parse("<tag><name>disco</name></tag>")
9
+ @tag.session = StubSession.new
10
+ end
11
+
12
+ test "can be parsed from xml" do
13
+ parsed = Model::Tag.parse(xml("tag_search"))
14
+ assert_equal 20, parsed.size
15
+ assert_equal 75545, parsed.first.count
16
+ assert_equal "disco", parsed.first.name
17
+ assert_equal "www.last.fm/tag/disco", parsed.first.url
18
+ end
19
+
20
+ test "has similar tags" do
21
+ expect_get "method=tag.getSimilar&tag=disco", :tag_similar
22
+ assert @tag.similar.first.kind_of? Model::Tag
23
+ end
24
+
25
+ test "has artists" do
26
+ expect_get "method=tag.getTopArtists&tag=disco", :tag_top_artists
27
+ assert @tag.artists.first.kind_of? Model::Artist
28
+ end
29
+
30
+ test "has albums" do
31
+ expect_get "method=tag.getTopAlbums&tag=disco", :tag_top_albums
32
+ assert @tag.albums.first.kind_of? Model::Album
33
+ end
34
+
35
+ test "has tracks" do
36
+ expect_get "method=tag.getTopTracks&tag=disco", :tag_top_tracks
37
+ assert @tag.tracks.first.kind_of? Model::Track
38
+ end
39
+ end
@@ -0,0 +1,67 @@
1
+ require 'helper'
2
+
3
+ class TrackTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ def setup
7
+ super
8
+ @track = Model::Track.parse(xml("track_info"), :single => true)
9
+ @track.session = StubSession.new
10
+ end
11
+
12
+ test "has a name" do
13
+ assert_equal "Stairway to Heaven", @track.name
14
+ end
15
+
16
+ test "has an id" do
17
+ assert_equal 12729, @track.id
18
+ end
19
+
20
+ test "has listeners" do
21
+ assert_equal 514346, @track.listeners
22
+ end
23
+
24
+ test "has a url" do
25
+ assert_equal "http://www.last.fm/music/Led+Zeppelin/_/Stairway+to+Heaven", @track.url
26
+ end
27
+
28
+ test "has a play count" do
29
+ assert_equal 3438976, @track.play_count
30
+ end
31
+
32
+ test "can be streamable" do
33
+ assert @track.streamable?
34
+ end
35
+
36
+ test "has a duration in milliseconds" do
37
+ assert_equal 478000, @track.duration
38
+ end
39
+
40
+ test "has an artist" do
41
+ assert_equal "Led Zeppelin", @track.artist.name
42
+ end
43
+
44
+ test "has an album" do
45
+ assert_equal "Led Zeppelin IV", @track.album.name
46
+ end
47
+
48
+ test "has user tags" do
49
+ expect_get "method=track.getTags&artist=Led%20Zeppelin&track=Stairway%20to%20Heaven", :tag_search
50
+ assert @track.my_tags.first.kind_of? Model::Tag
51
+ end
52
+
53
+ test "has similar tracks" do
54
+ expect_get "method=track.getSimilar&track=Stairway%20to%20Heaven&artist=Led%20Zeppelin", :track_search
55
+ assert @track.similar.first.kind_of? Model::Track
56
+ end
57
+
58
+ test "has fans" do
59
+ expect_get "method=track.getTopFans&track=Stairway%20to%20Heaven&artist=Led%20Zeppelin", :artist_top_fans
60
+ assert @track.fans.first.kind_of? Model::User
61
+ end
62
+
63
+ test "has tags" do
64
+ expect_get "method=track.getTopTags&track=Stairway%20to%20Heaven&artist=Led%20Zeppelin", :tag_similar
65
+ assert @track.tags.first.kind_of? Model::Tag
66
+ end
67
+ end
@@ -0,0 +1,125 @@
1
+ require 'helper'
2
+
3
+ class UserTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ def setup
7
+ super
8
+ @user = Model::User.parse(xml("user_info"), :single => true)
9
+ @user.session = StubSession.new
10
+ end
11
+
12
+ test "has a name" do
13
+ assert_equal "knaveofdiamonds", @user.name
14
+ end
15
+
16
+ test "has an id" do
17
+ assert_equal 7532711, @user.id
18
+ end
19
+
20
+ test "has a real name" do
21
+ assert_equal "Roland Swingler", @user.real_name
22
+ end
23
+
24
+ test "has a url" do
25
+ assert_equal "http://www.last.fm/user/knaveofdiamonds", @user.url
26
+ end
27
+
28
+ test "has an image" do
29
+ assert_equal "http://userserve-ak.last.fm/serve/126/10636291.jpg", @user.image
30
+ end
31
+
32
+ test "has a language" do
33
+ assert_equal "en", @user.language
34
+ end
35
+
36
+ test "has a country" do
37
+ assert_equal "UK", @user.country
38
+ end
39
+
40
+ test "can be a subscriber" do
41
+ assert_equal false, @user.subscriber
42
+ end
43
+
44
+ test "has a play count" do
45
+ assert_equal 8251, @user.play_count
46
+ end
47
+
48
+ test "has album chart" do
49
+ expect_get "method=user.getWeeklyAlbumChart&user=knaveofdiamonds", :group_weekly_album_chart
50
+ assert_equal 250, @user.album_chart.size
51
+ end
52
+
53
+ test "has artist chart" do
54
+ expect_get "method=user.getWeeklyArtistChart&user=knaveofdiamonds", :group_weekly_artist_chart
55
+ assert_equal 100, @user.artist_chart.size
56
+ end
57
+
58
+ test "has track chart" do
59
+ expect_get "method=user.getWeeklyTrackChart&user=knaveofdiamonds", :group_weekly_track_chart
60
+ assert_equal 100, @user.track_chart.size
61
+ end
62
+
63
+ test "has chart dates" do
64
+ expect_get "method=user.getWeeklyChartList&user=knaveofdiamonds", :tag_weekly_chart_list
65
+ assert_equal 53, @user.chart_dates.size
66
+ end
67
+
68
+ test "has events" do
69
+ expect_get "method=user.getEvents&user=knaveofdiamonds", :venue_events
70
+ assert @user.events.first.kind_of? Model::Event
71
+ end
72
+
73
+ test "has past events" do
74
+ expect_get "method=user.getPastEvents&user=knaveofdiamonds", :venue_events
75
+ assert @user.past_events.first.kind_of? Model::Event
76
+ end
77
+
78
+ test "has recent tracks" do
79
+ expect_get "method=user.getRecentTracks&user=knaveofdiamonds", :user_recent_tracks
80
+ assert @user.recent_tracks.first.kind_of? Model::Track
81
+ end
82
+
83
+ test "has neighbours" do
84
+ expect_get "method=user.getNeighbours&user=knaveofdiamonds", :user_neighbours
85
+ assert @user.neighbours.first.kind_of? Model::User
86
+ end
87
+
88
+ test "has friends" do
89
+ expect_get "method=user.getFriends&user=knaveofdiamonds", :user_neighbours
90
+ assert @user.friends.first.kind_of? Model::User
91
+ end
92
+
93
+ test "has loved tracks" do
94
+ expect_get "method=user.getLovedTracks&user=knaveofdiamonds", :track_search
95
+ assert @user.loved_tracks.first.kind_of? Model::Track
96
+ end
97
+
98
+ test "has playlists" do
99
+ expect_get "method=user.getPlaylists&user=knaveofdiamonds", :user_playlists
100
+ assert @user.playlists.first.kind_of? Model::Playlist
101
+ end
102
+
103
+ test "has shouts" do
104
+ expect_get "method=user.getShouts&user=knaveofdiamonds", :user_shouts
105
+ assert @user.shouts.first.kind_of? Model::Shout
106
+ end
107
+
108
+ # Logged in user only
109
+
110
+ test "has recommended events" do
111
+ expect_get "method=user.getRecommendedEvents", :venue_events
112
+ assert @user.recommended_events.first.kind_of? Model::Event
113
+ end
114
+
115
+ test "has recommended artists" do
116
+ expect_get "method=user.getRecommendedArtists", :user_recommended_artists
117
+ assert @user.recommended_artists.first.kind_of? Model::Artist
118
+ end
119
+
120
+ test "can be compared with other users" do
121
+ other = Model::User.parse("<user><name>other</name></user>")
122
+ expect_get "method=tasteometer.compare&type1=user&type2=user&value1=knaveofdiamonds&value2=other", :tasteometer_compare
123
+ assert @user.compare_with(other).kind_of? Model::Comparison
124
+ end
125
+ end
@@ -0,0 +1,60 @@
1
+ require 'helper'
2
+
3
+ class VenueTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ def setup
7
+ super
8
+ @venue = Model::Venue.parse(xml("venue_search"), :single => true)
9
+ @venue.session = StubSession.new
10
+ end
11
+
12
+ test "venue has a name" do
13
+ assert_equal "Koko", @venue.name
14
+ end
15
+
16
+ test "venue has a city" do
17
+ assert_equal "London", @venue.city
18
+ end
19
+
20
+ test "venue has a country" do
21
+ assert_equal "United Kingdom", @venue.country
22
+ end
23
+
24
+ test "venue has a street address" do
25
+ assert_equal "1a Camden High Street, Camden", @venue.street_address
26
+ end
27
+
28
+ test "venue has a post code" do
29
+ assert_equal "NW1 7JE", @venue.postcode
30
+ end
31
+
32
+ test "venue has a url" do
33
+ assert_equal "http://www.last.fm/venue/8777134", @venue.url
34
+ end
35
+
36
+ test "venue has a location" do
37
+ assert_in_delta 51.53469, @venue.location.latitude, 0.000001
38
+ assert_in_delta -0.138434, @venue.location.longitude, 0.000001
39
+ end
40
+
41
+ test "venue's location has session set" do
42
+ @venue.session = stub()
43
+ assert @venue.instance_variable_get("@session".to_sym)
44
+ assert @venue.location.instance_variable_get("@session".to_sym)
45
+ end
46
+
47
+ test "venue has an id" do
48
+ assert_equal 8777134, @venue.id
49
+ end
50
+
51
+ test "has events" do
52
+ expect_get "method=venue.getEvents&venue=8777134", :venue_events
53
+ assert @venue.events.first.kind_of? Model::Event
54
+ end
55
+
56
+ test "has past events" do
57
+ expect_get "method=venue.getPastEvents&venue=8777134", :venue_events
58
+ assert @venue.past_events.first.kind_of? Model::Event
59
+ end
60
+ end
@@ -0,0 +1,26 @@
1
+ require 'helper'
2
+
3
+ class AlbumProviderTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ test "can get an album by artist and name" do
7
+ expect_get "method=album.getInfo&artist=The%20Feelies&album=Only%20Life", :album_info
8
+ assert_equal "Only Life", StubSession.new.album.get("The Feelies", "Only Life").name
9
+ end
10
+
11
+ test "can get an album by musicbrainz id" do
12
+ expect_get "method=album.getInfo&mbid=464efacc-a133-4ae6-a9ff-7573c448eb32", :album_info
13
+ assert_equal "Only Life", StubSession.new.album.get_by_id("464efacc-a133-4ae6-a9ff-7573c448eb32").name
14
+ end
15
+
16
+ test "can get an album by RBrainz mbid model" do
17
+ expect_get "method=album.getInfo&mbid=464efacc-a133-4ae6-a9ff-7573c448eb32", :album_info
18
+ assert_equal "Only Life", StubSession.new.album.get_by_id(stub(:uuid => "464efacc-a133-4ae6-a9ff-7573c448eb32")).name
19
+ end
20
+
21
+ test "can search for albums by name" do
22
+ expect_get "method=album.search&album=Only%20Life", :album_search
23
+ assert_equal 20, StubSession.new.album.search("Only Life").size
24
+ end
25
+
26
+ end
@@ -0,0 +1,25 @@
1
+ require 'helper'
2
+
3
+ class ArtistProviderTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ test "can get an artist by name" do
7
+ expect_get "method=artist.getInfo&artist=The%20Feelies", :artist_info
8
+ assert_equal "The Feelies", StubSession.new.artist.get("The Feelies").name
9
+ end
10
+
11
+ test "can get an artist by mbid" do
12
+ expect_get "method=artist.getInfo&mbid=28c07254-aeae-42ad-beea-67f59c3c8baf", :artist_info
13
+ assert_equal "The Feelies", StubSession.new.artist.get_by_id("28c07254-aeae-42ad-beea-67f59c3c8baf").name
14
+ end
15
+
16
+ test "can get an artist by an Rbrainz MBID model via uuid attribute" do
17
+ expect_get "method=artist.getInfo&mbid=28c07254-aeae-42ad-beea-67f59c3c8baf", :artist_info
18
+ assert_equal "The Feelies", StubSession.new.artist.get_by_id(stub(:uuid => "28c07254-aeae-42ad-beea-67f59c3c8baf")).name
19
+ end
20
+
21
+ test "can search for artists by name" do
22
+ expect_get "method=artist.search&artist=The%20Feelies", :artist_search
23
+ assert_equal 11, StubSession.new.artist.search("The Feelies").size
24
+ end
25
+ end