rbrainz 0.1.1 → 0.2.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.
Files changed (85) hide show
  1. data/CHANGES +31 -0
  2. data/LICENSE +1 -1
  3. data/README +3 -2
  4. data/Rakefile +40 -22
  5. data/TODO +6 -23
  6. data/doc/README.rdoc +50 -21
  7. data/examples/getartist.rb +6 -4
  8. data/examples/getuser.rb +30 -0
  9. data/examples/searchartists.rb +35 -0
  10. data/lib/rbrainz.rb +12 -7
  11. data/lib/rbrainz/core_ext.rb +8 -0
  12. data/lib/rbrainz/core_ext/mbid.rb +30 -0
  13. data/lib/rbrainz/core_ext/net_http_digest.rb +52 -0
  14. data/lib/rbrainz/core_ext/range.rb +28 -0
  15. data/lib/rbrainz/core_ext/range/equality.rb +232 -0
  16. data/lib/rbrainz/data/countrynames.rb +7 -5
  17. data/lib/rbrainz/data/languagenames.rb +8 -5
  18. data/lib/rbrainz/data/releasetypenames.rb +34 -0
  19. data/lib/rbrainz/data/scriptnames.rb +8 -5
  20. data/lib/rbrainz/model.rb +27 -35
  21. data/lib/rbrainz/model/alias.rb +31 -7
  22. data/lib/rbrainz/model/artist.rb +30 -41
  23. data/lib/rbrainz/model/collection.rb +102 -0
  24. data/lib/rbrainz/model/default_factory.rb +78 -0
  25. data/lib/rbrainz/model/disc.rb +45 -8
  26. data/lib/rbrainz/model/entity.rb +122 -53
  27. data/lib/rbrainz/model/incomplete_date.rb +31 -47
  28. data/lib/rbrainz/model/individual.rb +103 -0
  29. data/lib/rbrainz/model/label.rb +42 -33
  30. data/lib/rbrainz/model/mbid.rb +111 -40
  31. data/lib/rbrainz/model/relation.rb +78 -14
  32. data/lib/rbrainz/model/release.rb +119 -31
  33. data/lib/rbrainz/model/release_event.rb +38 -9
  34. data/lib/rbrainz/model/scored_collection.rb +99 -0
  35. data/lib/rbrainz/model/tag.rb +39 -0
  36. data/lib/rbrainz/model/track.rb +37 -13
  37. data/lib/rbrainz/model/user.rb +48 -0
  38. data/lib/rbrainz/utils.rb +9 -0
  39. data/lib/rbrainz/utils/data.rb +78 -0
  40. data/lib/rbrainz/utils/helper.rb +22 -0
  41. data/lib/rbrainz/version.rb +15 -0
  42. data/lib/rbrainz/webservice.rb +32 -6
  43. data/lib/rbrainz/webservice/filter.rb +124 -47
  44. data/lib/rbrainz/webservice/includes.rb +49 -10
  45. data/lib/rbrainz/webservice/mbxml.rb +228 -173
  46. data/lib/rbrainz/webservice/query.rb +312 -25
  47. data/lib/rbrainz/webservice/webservice.rb +164 -27
  48. data/test/lib/mock_webservice.rb +53 -0
  49. data/test/lib/test_entity.rb +27 -8
  50. data/test/lib/test_factory.rb +47 -0
  51. data/test/lib/testing_helper.rb +7 -5
  52. data/test/test-data/invalid/artist/tags_1.xml +6 -0
  53. data/test/test-data/valid/artist/Tchaikovsky-2.xml +12 -0
  54. data/test/test-data/valid/label/Atlantic_Records_2.xml +3 -0
  55. data/test/test-data/valid/label/Atlantic_Records_3.xml +11 -0
  56. data/test/test-data/valid/release/Highway_61_Revisited_2.xml +12 -0
  57. data/test/test-data/valid/track/Silent_All_These_Years_6.xml +8 -0
  58. data/test/test_alias.rb +13 -7
  59. data/test/test_artist.rb +26 -4
  60. data/test/test_artist_filter.rb +11 -6
  61. data/test/test_artist_includes.rb +11 -6
  62. data/test/test_collection.rb +66 -0
  63. data/test/test_default_factory.rb +75 -0
  64. data/test/test_disc.rb +9 -4
  65. data/test/test_incomplete_date.rb +21 -14
  66. data/test/test_label.rb +56 -18
  67. data/test/test_label_filter.rb +10 -5
  68. data/test/test_label_includes.rb +11 -6
  69. data/test/test_mbid.rb +34 -19
  70. data/test/test_mbxml.rb +242 -72
  71. data/test/test_query.rb +92 -7
  72. data/test/test_range_equality.rb +144 -0
  73. data/test/test_relation.rb +18 -7
  74. data/test/test_release.rb +15 -4
  75. data/test/test_release_event.rb +16 -4
  76. data/test/test_release_filter.rb +11 -5
  77. data/test/test_release_includes.rb +11 -6
  78. data/test/test_scored_collection.rb +86 -0
  79. data/test/test_tag.rb +39 -0
  80. data/test/test_track.rb +15 -4
  81. data/test/test_track_filter.rb +11 -5
  82. data/test/test_track_includes.rb +11 -6
  83. data/test/test_utils.rb +41 -0
  84. data/test/test_webservice.rb +16 -17
  85. metadata +93 -57
data/test/test_query.rb CHANGED
@@ -1,24 +1,109 @@
1
- # $Id: test_query.rb 27 2007-05-28 23:15:21Z phw $
2
- # Copyright (c) 2007, Philipp Wolfer
3
- # All rights reserved.
4
- # See LICENSE for permissions.
1
+ # $Id: test_query.rb 147 2007-07-19 17:10:26Z phw $
2
+ #
3
+ # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
+ # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
5
+ # License:: RBrainz is free software distributed under a BSD style license.
6
+ # See LICENSE[file:../LICENSE.html] for permissions.
5
7
 
6
8
  require 'test/unit'
7
9
  require 'rbrainz'
10
+ require 'mock_webservice'
11
+ require 'test_factory'
8
12
  include MusicBrainz
9
13
 
10
14
  # Unit test for the Query class.
11
15
  class TestQuery < Test::Unit::TestCase
12
16
 
13
17
  def setup
18
+ @webservice = MockWebservice.new
19
+ @query = Webservice::Query.new(@webservice)
14
20
  end
15
21
 
16
22
  def teardown
17
23
  end
18
24
 
19
- # TODO: Implement a mock webservice for testing
20
- def test_not_implemented
21
- assert false, 'Unit test for ' + self.class.name + ' not implemented!'
25
+ def test_get_artist
26
+ id = 'c0b2500e-0cef-4130-869d-732b23ed9df5'
27
+ entity = @query.get_artist_by_id(id)
28
+ assert entity.is_a?(Model::Artist)
29
+ assert_equal id, entity.id.uuid
30
+ assert_equal 'Tori Amos', entity.name
31
+ end
32
+
33
+ def test_get_artists
34
+ filter = Webservice::ArtistFilter.new(:name=>'Tori Amos')
35
+ collection = @query.get_artists(filter)
36
+ assert collection.is_a?(Model::Collection)
37
+ assert_equal 3, collection.size
38
+ collection.entities.each {|e| assert e.is_a?(Model::Artist) }
39
+ end
40
+
41
+ def test_get_release
42
+ id = '290e10c5-7efc-4f60-ba2c-0dfc0208fbf5'
43
+ entity = @query.get_release_by_id(id)
44
+ assert entity.is_a?(Model::Release)
45
+ assert_equal id, entity.id.uuid
46
+ assert_equal 'Under the Pink', entity.title
47
+ end
48
+
49
+ def test_get_releases
50
+ filter = Webservice::ReleaseFilter.new(:title=>'Under the Pink')
51
+ collection = @query.get_releases(filter)
52
+ assert collection.is_a?(Model::Collection)
53
+ assert_equal 2, collection.size
54
+ collection.entities.each {|e| assert e.is_a?(Model::Release) }
55
+ end
56
+
57
+ def test_get_track
58
+ id = 'd6118046-407d-4e06-a1ba-49c399a4c42f'
59
+ entity = @query.get_track_by_id(id)
60
+ assert entity.is_a?(Model::Track)
61
+ assert_equal id, entity.id.uuid
62
+ assert_equal 'Silent All These Years', entity.title
63
+ end
64
+
65
+ def test_get_tracks
66
+ filter = Webservice::TrackFilter.new(:title=>'Little Earthquakes')
67
+ collection = @query.get_tracks(filter)
68
+ assert collection.is_a?(Model::Collection)
69
+ assert_equal 3, collection.size
70
+ collection.entities.each {|e| assert e.is_a?(Model::Track) }
71
+ end
72
+
73
+ def test_get_label
74
+ id = '50c384a2-0b44-401b-b893-8181173339c7'
75
+ entity = @query.get_label_by_id(id)
76
+ assert entity.is_a?(Model::Label)
77
+ assert_equal id, entity.id.uuid
78
+ assert_equal 'Atlantic Records', entity.name
79
+ end
80
+
81
+ def test_get_labels
82
+ filter = Webservice::LabelFilter.new(:name=>'Atlantic Records')
83
+ collection = @query.get_labels(filter)
84
+ assert collection.is_a?(Model::Collection)
85
+ assert_equal 2, collection.size
86
+ collection.entities.each {|e| assert e.is_a?(Model::Label) }
87
+ end
88
+
89
+ def test_get_user_by_name
90
+ user = @query.get_user_by_name('matt')
91
+ assert user.is_a?(Model::User)
92
+ assert_equal false, user.show_nag?
93
+ end
94
+
95
+ def test_factory
96
+ factory = MyFactory.new
97
+ query = Webservice::Query.new(@webservice, :factory=>factory)
98
+
99
+ id = '290e10c5-7efc-4f60-ba2c-0dfc0208fbf5'
100
+ entity = query.get_release_by_id(id)
101
+ assert entity.is_a?(MyRelease)
102
+ end
103
+
104
+ def test_response_error
105
+ assert_raise(Webservice::ResponseError){@query.get_artist_by_id('00000000-0000-0000-0000-000000000000')}
106
+ assert_raise(Webservice::ResponseError){@query.get_artist_by_id('11111111-1111-1111-1111-111111111111')}
22
107
  end
23
108
 
24
109
  end
@@ -0,0 +1,144 @@
1
+ # $Id: test_range_equality.rb 111 2007-07-10 14:09:52Z nigel_graham $
2
+ #
3
+ # Author:: Nigel Graham (mailto:nigel_graham@rubyforge.org)
4
+ # Copyright:: Copyright (c) 2007, Nigel Graham, Philipp Wolfer
5
+ # License:: RBrainz is free software distributed under a BSD style license.
6
+ # See LICENSE[file:../LICENSE.html] for permissions.
7
+
8
+ require 'test/unit'
9
+ require 'rbrainz'
10
+
11
+ # Unit test for range equality extension.
12
+ class TestRangeEquality < Test::Unit::TestCase
13
+ TESTSET =
14
+ [
15
+ [ 1..11, 13..30, :before?], # a before b
16
+ [ 1...12, 13...30, :before?], # a before b
17
+ [ 1..11, 13, :before?], # a before b
18
+ [ 13..30, 1..11, :after?], # a after b
19
+ [13...30, 1...12, :after?], # a after b
20
+ [ 13..30, 11, :after?], # a after b
21
+ [ 1..12, 1...13, :eql?], # a equals b
22
+ [ 1..12, 1..12, :eql?], # a equals b
23
+ [ 1...13, 1..12, :eql?], # a equals b
24
+ [ 1...13, 1...13, :eql?], # a equals b
25
+ [ 1...2, 1, :eql?], # a equals b
26
+ [ 1..1, 1, :eql?], # a equals b
27
+ [ 1...13, 13..30, :meets_beginning_of?], # a meets_beginning_of b
28
+ [ 1..12, 13..30, :meets_beginning_of?], # a meets_beginning_of b
29
+ [ 1...13, 13, :meets_beginning_of?], # a meets_beginning_of b
30
+ [ 1..12, 13, :meets_beginning_of?], # a meets_beginning_of b
31
+ [ 13..30, 1...13, :meets_end_of?], # a meets_end_of b
32
+ [ 13..30, 1..12, :meets_end_of?], # a meets_end_of b
33
+ [ 13..30, 12, :meets_end_of?], # a meets_end_of b
34
+ [ 1..13, 13..30, :overlaps_beginning_of?], # a overlaps_beginning_of b
35
+ [ 1...14, 13..30, :overlaps_beginning_of?], # a overlaps_beginning_of b
36
+ [ 1..29, 13..30, :overlaps_beginning_of?], # a overlaps_beginning_of b
37
+ [ 1...30, 13..30, :overlaps_beginning_of?], # a overlaps_beginning_of b
38
+ [ 13..30, 1..13, :overlaps_end_of?], # a overlaps_end_of b
39
+ [ 13..30, 1...14, :overlaps_end_of?], # a overlaps_end_of b
40
+ [ 13..30, 1..29, :overlaps_end_of?], # a overlaps_end_of b
41
+ [ 13..30, 1...30, :overlaps_end_of?], # a overlaps_end_of b
42
+ [ 13..30, 12..31, :during?], # a during b
43
+ [13...30, 12..30, :during?], # a during b
44
+ [13...30, 12...31, :during?], # a during b
45
+ [ 13..30, 12...32, :during?], # a during b
46
+ [ 12..31, 13..30, :contains?], # a contains b
47
+ [ 12..30, 13...30, :contains?], # a contains b
48
+ [12...31, 13...30, :contains?], # a contains b
49
+ [12...32, 13..30, :contains?], # a contains b
50
+ [12...32, 13, :contains?], # a contains b
51
+ [ 13..30, 13..31, :starts?], # a starts b
52
+ [13...30, 13..30, :starts?], # a starts b
53
+ [ 13..30, 13...32, :starts?], # a starts b
54
+ [13...30, 13...31, :starts?], # a starts b
55
+ [ 13..31, 13..30, :started_by?], # a started_by b
56
+ [ 13..30, 13...30, :started_by?], # a started_by b
57
+ [13...32, 13..30, :started_by?], # a started_by b
58
+ [13...31, 13...30, :started_by?], # a started_by b
59
+ [13...31, 13, :started_by?], # a started_by b
60
+ [ 14..30, 13..30, :finishes?], # a finishes b
61
+ [14...30, 13..29, :finishes?], # a finishes b
62
+ [ 14..30, 13...31, :finishes?], # a finishes b
63
+ [14...30, 13...30, :finishes?], # a finishes b
64
+ [ 13..30, 14..30, :finished_by?], # a finished_by b
65
+ [ 13..29, 14...30, :finished_by?], # a finished_by b
66
+ [13...31, 14..30, :finished_by?], # a finished_by b
67
+ [13...30, 14...30, :finished_by?], # a finished_by b
68
+ [13...30, 29, :finished_by?], # a finished_by b
69
+ ]
70
+ OPERATIONS = [
71
+ :before?,
72
+ :after?,
73
+ :eql?,
74
+ :meets_beginning_of?,
75
+ :meets_end_of?,
76
+ :overlaps_beginning_of?,
77
+ :overlaps_end_of?,
78
+ :during?,
79
+ :contains?,
80
+ :starts?,
81
+ :started_by?,
82
+ :finishes?,
83
+ :finished_by?,
84
+ ]
85
+
86
+ def self.make_test_method(s)
87
+ st = s.to_s.chop
88
+ class_eval %Q{
89
+ def test_#{st}
90
+ TESTSET.each do |a,b,op|
91
+ if op == #{s.inspect}
92
+ assert a.send(#{s.inspect}, b), a.inspect + ".#{s.to_s} " + b.inspect
93
+ else
94
+ assert !a.send(#{s.inspect},b), '!' + a.inspect + ".#{s.to_s} " + b.inspect
95
+ end
96
+ end
97
+ end
98
+ }, __FILE__
99
+ end
100
+
101
+ OPERATIONS.each do |op|
102
+ make_test_method(op)
103
+ end
104
+
105
+ def test_lteq
106
+ TESTSET.each do |a,b,op|
107
+ if op == :before? || op == :meets_beginning_of?
108
+ assert a <= b, a.inspect + " <= " + b.inspect
109
+ else
110
+ assert !(a <= b), '!(' + a.inspect + " <= " + b.inspect + ')'
111
+ end
112
+ end
113
+ end
114
+
115
+ def test_gteq
116
+ TESTSET.each do |a,b,op|
117
+ if op == :after? || op == :meets_end_of?
118
+ assert a >= b, a.inspect + " >= " + b.inspect
119
+ else
120
+ assert !(a >= b), '!(' + a.inspect + " >= " + b.inspect + ')'
121
+ end
122
+ end
123
+ end
124
+
125
+ def test_between
126
+ TESTSET.each do |a,b,op|
127
+ if op == :starts? || op == :during? || op == :finishes?
128
+ assert a.between?(b), a.inspect + ".between? " + b.inspect
129
+ else
130
+ assert !a.between?(b), '!' + a.inspect + ".between? " + b.inspect + ''
131
+ end
132
+ end
133
+ end
134
+
135
+ def test_include
136
+ TESTSET.each do |a,b,op|
137
+ if op == :started_by? || op == :contains? || op == :eql? || op == :finished_by?
138
+ assert a.include?(b), a.inspect + ".include? " + b.inspect
139
+ else
140
+ assert !a.include?(b), '!' + a.inspect + ".include? " + b.inspect + ''
141
+ end
142
+ end
143
+ end
144
+ end
@@ -1,7 +1,9 @@
1
- # $Id: test_relation.rb 33 2007-05-29 14:48:47Z phw $
2
- # Copyright (c) 2007, Philipp Wolfer
3
- # All rights reserved.
4
- # See LICENSE for permissions.
1
+ # $Id: test_relation.rb 120 2007-07-12 08:28:11Z phw $
2
+ #
3
+ # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
+ # Copyright:: Copyright (c) 2007, Philipp Wolfer
5
+ # License:: RBrainz is free software distributed under a BSD style license.
6
+ # See LICENSE[file:../LICENSE.html] for permissions.
5
7
 
6
8
  require 'test/unit'
7
9
  require 'rbrainz/model'
@@ -12,15 +14,24 @@ class TestRelation < Test::Unit::TestCase
12
14
 
13
15
  def setup
14
16
  @target_entity = Model::Artist.new
15
- @target_entity.id = Model::MBID.from_uuid :artist, '727ad90b-7ef4-48d2-8f16-c34016544822'
17
+ @target_entity.id = Model::MBID.parse '727ad90b-7ef4-48d2-8f16-c34016544822', :artist
16
18
  end
17
19
 
18
20
  def teardown
19
21
  end
20
22
 
21
23
  def test_new_relation
22
- disc = nil
23
- assert_nothing_raised {disc = Model::Relation.new}
24
+ relation = nil
25
+ assert_nothing_raised {relation = Model::Relation.new}
26
+
27
+ assert_nothing_raised {relation = Model::Relation.new(
28
+ 'Wikipedia',
29
+ 'http://www.example.com',
30
+ Model::Relation::DIR_FORWARD
31
+ )}
32
+ assert_equal 'Wikipedia', relation.type
33
+ assert_equal 'http://www.example.com', relation.target
34
+ assert_equal Model::Relation::DIR_FORWARD, relation.direction
24
35
  end
25
36
 
26
37
  def test_type
data/test/test_release.rb CHANGED
@@ -1,7 +1,9 @@
1
- # $Id: test_release.rb 30 2007-05-29 02:12:33Z phw $
2
- # Copyright (c) 2007, Philipp Wolfer
3
- # All rights reserved.
4
- # See LICENSE for permissions.
1
+ # $Id: test_release.rb 138 2007-07-17 09:05:01Z phw $
2
+ #
3
+ # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
+ # Copyright:: Copyright (c) 2007, Philipp Wolfer
5
+ # License:: RBrainz is free software distributed under a BSD style license.
6
+ # See LICENSE[file:../LICENSE.html] for permissions.
5
7
 
6
8
  require 'test_entity'
7
9
 
@@ -26,6 +28,14 @@ class TestRelease < Test::Unit::TestCase
26
28
  release = nil
27
29
  assert_nothing_raised {release = Model::Release.new}
28
30
  assert release.is_a?(Model::Entity)
31
+
32
+ mbid = Model::MBID.new('9d30e408-1559-448b-b491-2f8de1583ccf', release.entity_type)
33
+ assert_nothing_raised {release = Model::Release.new(
34
+ mbid,
35
+ 'Draconian Times'
36
+ )}
37
+ assert_equal mbid, release.id
38
+ assert_equal 'Draconian Times', release.title
29
39
  end
30
40
 
31
41
  def test_title
@@ -33,6 +43,7 @@ class TestRelease < Test::Unit::TestCase
33
43
  assert release.title.nil?
34
44
  assert_nothing_raised {release.title = 'Draconian Times'}
35
45
  assert_equal 'Draconian Times', release.title
46
+ assert_equal 'Draconian Times', release.to_s
36
47
  end
37
48
 
38
49
  def test_asin
@@ -1,7 +1,9 @@
1
- # $Id: test_release_event.rb 27 2007-05-28 23:15:21Z phw $
2
- # Copyright (c) 2007, Philipp Wolfer
3
- # All rights reserved.
4
- # See LICENSE for permissions.
1
+ # $Id: test_release_event.rb 120 2007-07-12 08:28:11Z phw $
2
+ #
3
+ # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
+ # Copyright:: Copyright (c) 2007, Philipp Wolfer
5
+ # License:: RBrainz is free software distributed under a BSD style license.
6
+ # See LICENSE[file:../LICENSE.html] for permissions.
5
7
 
6
8
  require 'test/unit'
7
9
  require 'rbrainz/model'
@@ -16,6 +18,16 @@ class TestReleaseEvent < Test::Unit::TestCase
16
18
  def teardown
17
19
  end
18
20
 
21
+ def test_new
22
+ event = nil
23
+ assert_nothing_raised {event = Model::ReleaseEvent.new(
24
+ 'SE',
25
+ '2007-04-18'
26
+ )}
27
+ assert_equal 'SE', event.country
28
+ assert_equal Model::IncompleteDate.new('2007-04-18'), event.date
29
+ end
30
+
19
31
  def test_date
20
32
  event = Model::ReleaseEvent.new
21
33
  date = Model::IncompleteDate.new '2007-04-18'
@@ -1,7 +1,9 @@
1
- # $Id: test_release_filter.rb 27 2007-05-28 23:15:21Z phw $
2
- # Copyright (c) 2007, Philipp Wolfer
3
- # All rights reserved.
4
- # See LICENSE for permissions.
1
+ # $Id: test_release_filter.rb 121 2007-07-12 08:56:19Z phw $
2
+ #
3
+ # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
+ # Copyright:: Copyright (c) 2007, Philipp Wolfer
5
+ # License:: RBrainz is free software distributed under a BSD style license.
6
+ # See LICENSE[file:../LICENSE.html] for permissions.
5
7
 
6
8
  require 'test/unit'
7
9
  require 'testing_helper'
@@ -23,7 +25,9 @@ class TestReleaseFilter < Test::Unit::TestCase
23
25
  :asin => 'B00004VVW9',
24
26
  :lang => 'ENG',
25
27
  :script => 'Latn',
26
- :limit => 10
28
+ :limit => 10,
29
+ :offset => 20,
30
+ :query => 'date:2000'
27
31
  }
28
32
  end
29
33
 
@@ -47,6 +51,8 @@ class TestReleaseFilter < Test::Unit::TestCase
47
51
  assert_equal @filter_hash[:lang], result_hash['lang'], filter_string
48
52
  assert_equal @filter_hash[:script], result_hash['script'], filter_string
49
53
  assert_equal @filter_hash[:limit].to_s, result_hash['limit'], filter_string
54
+ assert_equal @filter_hash[:offset].to_s, result_hash['offset'], filter_string
55
+ assert_equal @filter_hash[:query].to_s, result_hash['query'], filter_string
50
56
  end
51
57
 
52
58
  def test_empty_filter
@@ -1,7 +1,9 @@
1
- # $Id: test_release_includes.rb 27 2007-05-28 23:15:21Z phw $
2
- # Copyright (c) 2007, Philipp Wolfer
3
- # All rights reserved.
4
- # See LICENSE for permissions.
1
+ # $Id: test_release_includes.rb 118 2007-07-11 22:46:58Z phw $
2
+ #
3
+ # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
+ # Copyright:: Copyright (c) 2007, Philipp Wolfer
5
+ # License:: RBrainz is free software distributed under a BSD style license.
6
+ # See LICENSE[file:../LICENSE.html] for permissions.
5
7
 
6
8
  require 'test/unit'
7
9
  require 'rbrainz'
@@ -29,7 +31,8 @@ class TestReleaseIncludes < Test::Unit::TestCase
29
31
  :track_rels => true,
30
32
  :label_rels => true,
31
33
  :url_rels => true,
32
- :track_level_rels => true
34
+ :track_level_rels => true,
35
+ :tags => true
33
36
  )
34
37
  result_string = includes.to_s
35
38
  assert_equal 'inc=', result_string[0..3]
@@ -47,6 +50,7 @@ class TestReleaseIncludes < Test::Unit::TestCase
47
50
  assert result_array.include?('label-rels')
48
51
  assert result_array.include?('url-rels')
49
52
  assert result_array.include?('track-level-rels')
53
+ assert result_array.include?('tags')
50
54
  end
51
55
 
52
56
  def test_empty_includes
@@ -62,7 +66,8 @@ class TestReleaseIncludes < Test::Unit::TestCase
62
66
  :track_rels => false,
63
67
  :label_rels => false,
64
68
  :url_rels => false,
65
- :track_level_rels => false
69
+ :track_level_rels => false,
70
+ :tags => false
66
71
  )
67
72
  assert_equal '', includes.to_s
68
73
 
@@ -0,0 +1,86 @@
1
+ # $Id: test_collection.rb 114 2007-07-10 19:33:22Z phw $
2
+ #
3
+ # Author:: Philipp Wolfer (mailto:phw@rubyforge.org)
4
+ # Copyright:: Copyright (c) 2007, Philipp Wolfer
5
+ # License:: RBrainz is free software distributed under a BSD style license.
6
+ # See LICENSE[file:../LICENSE.html] for permissions.
7
+
8
+ require 'test/unit'
9
+ require 'rbrainz'
10
+ include MusicBrainz
11
+
12
+ # Unit test for the Collection class.
13
+ class TestScoredCollection < Test::Unit::TestCase
14
+
15
+ def setup
16
+ @artist_one = Model::Artist.new
17
+ @artist_two = Model::Artist.new
18
+ @artist_three = Model::Artist.new
19
+ end
20
+
21
+ def teardown
22
+ end
23
+
24
+ def test_scored_collection
25
+ collection = Model::ScoredCollection.new(102, 8)
26
+ assert_equal 102, collection.count
27
+ assert_equal 8, collection.offset
28
+
29
+ collection.count = 99
30
+ collection.offset=15
31
+ assert_equal 99, collection.count
32
+ assert_equal 15, collection.offset
33
+
34
+ assert collection.empty?
35
+
36
+ # Fill the collection
37
+ assert_nothing_raised {
38
+ collection << Model::ScoredCollection::Entry.new(@artist_one, 100)
39
+ collection << [@artist_two, 98]
40
+ # The score can be ignored
41
+ collection << @artist_three
42
+ }
43
+ assert_equal 3, collection.size
44
+ assert !collection.empty?
45
+
46
+ # Iterate over the collection
47
+ n = 0
48
+ collection.each {|entry|
49
+ assert entry.entity.is_a?(Model::Artist), entry.entity.inspect
50
+ assert((entry.score.is_a?(Integer) or entry.score.nil?), entry.score.inspect)
51
+ n += 1
52
+ }
53
+ assert_equal collection.size, n
54
+
55
+ # Iterate over the artists only, ignoring the scores
56
+ n = 0
57
+ collection.entities.each {|artist|
58
+ assert artist.is_a?(Model::Artist), artist.inspect
59
+ n += 1
60
+ }
61
+ assert_equal collection.size, n
62
+
63
+ # Random access
64
+ assert_equal @artist_one, collection[0].entity
65
+ assert_equal 100, collection[0].score
66
+ assert_equal @artist_two, collection[1].entity
67
+ assert_equal 98, collection[1].score
68
+ assert_equal @artist_three, collection[2].entity
69
+ assert_equal nil, collection[2].score
70
+
71
+ # Convert collection to array
72
+ array = collection.to_a
73
+ assert_equal @artist_one, array[0].entity
74
+ assert_equal 100, array[0].score
75
+ assert_equal @artist_two, array[1].entity
76
+ assert_equal 98, array[1].score
77
+ assert_equal @artist_three, array[2].entity
78
+ assert_equal nil, array[2].score
79
+
80
+ # Access the entities as an array
81
+ assert_equal @artist_one, collection.entities[0]
82
+ assert_equal @artist_two, collection.entities[1]
83
+ assert_equal @artist_three, collection.entities[2]
84
+ end
85
+
86
+ end