bgg 1.0.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.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/.rspec +2 -0
- data/.travis.yml +6 -0
- data/Gemfile +20 -0
- data/Gemfile.lock +54 -0
- data/LICENSE.txt +20 -0
- data/README.md +73 -0
- data/Rakefile +38 -0
- data/VERSION +1 -0
- data/bgg.gemspec +122 -0
- data/lib/bgg.rb +53 -0
- data/lib/bgg/collection.rb +58 -0
- data/lib/bgg/collection_item.rb +69 -0
- data/lib/bgg/game.rb +57 -0
- data/lib/bgg/play.rb +64 -0
- data/lib/bgg/plays.rb +26 -0
- data/lib/bgg/plays_iterator.rb +64 -0
- data/lib/bgg/search.rb +34 -0
- data/lib/bgg/search_result.rb +18 -0
- data/lib/bgg/user.rb +60 -0
- data/sample_data/collection?username=texasjdl +5224 -0
- data/sample_data/collection?username=texasjdl&own=1&excludesubtype=boardgameexpansion +2606 -0
- data/sample_data/collection?username=yyyyyyy +3 -0
- data/sample_data/hot?type=boardgame +253 -0
- data/sample_data/plays?pages=9999999999999&username=ryanmacg +2 -0
- data/sample_data/plays?username=beetss&page=1 +3 -0
- data/sample_data/plays?username=ryanmacg +504 -0
- data/sample_data/plays?username=texasjdl&id=84876 +192 -0
- data/sample_data/plays?username=texasjdl&id=84876&type=thing +199 -0
- data/sample_data/plays?username=texasjdl&page=1 +717 -0
- data/sample_data/plays?username=texasjdl&page=2 +709 -0
- data/sample_data/plays?username=texasjdl&page=3 +707 -0
- data/sample_data/plays?username=yyyyyyy&page=1 +667 -0
- data/sample_data/search?query=Burgun +47 -0
- data/sample_data/search?query=Burgun&exact=1 +3 -0
- data/sample_data/search?query=Burgund&type=boardgame +12 -0
- data/sample_data/search?query=The+Castles+of+Burgundy&exact=1 +7 -0
- data/sample_data/search?query=yyyyyyy +3 -0
- data/sample_data/thing?id=10000000&type=boardgame +3 -0
- data/sample_data/thing?id=29773&type=boardgame +90 -0
- data/sample_data/thing?id=70512&type=boardgame +82 -0
- data/sample_data/thing?id=84876&type=boardgame +82 -0
- data/sample_data/user?name=texasjdl +17 -0
- data/sample_data/user?name=yyyyyyy +17 -0
- data/spec/bgg_api_spec.rb +113 -0
- data/spec/bgg_collection_item_spec.rb +259 -0
- data/spec/bgg_collection_spec.rb +83 -0
- data/spec/bgg_game_spec.rb +232 -0
- data/spec/bgg_play_spec.rb +166 -0
- data/spec/bgg_plays_iterator_spec.rb +156 -0
- data/spec/bgg_plays_spec.rb +60 -0
- data/spec/bgg_search_result_spec.rb +73 -0
- data/spec/bgg_search_spec.rb +84 -0
- data/spec/bgg_user_spec.rb +113 -0
- data/spec/spec_helper.rb +29 -0
- metadata +241 -0
@@ -0,0 +1,259 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Bgg::Collection::Item do
|
5
|
+
let(:item_data) { {'objecttype'=>'thing',
|
6
|
+
'objectid'=>'70512',
|
7
|
+
'subtype'=>'boardgame',
|
8
|
+
'collid'=>'11455824',
|
9
|
+
'name'=>[{'sortindex'=>'1', 'content'=>'Luna'}],
|
10
|
+
'yearpublished'=>['2010'],
|
11
|
+
'image'=>['http://cf.geekdo-images.com/images/pic802342.jpg'],
|
12
|
+
'thumbnail'=>['http://cf.geekdo-images.com/images/pic802342_t.jpg'],
|
13
|
+
'status'=>[{'own'=>'1', 'prevowned'=>'0', 'fortrade'=>'0', 'want'=>'0', 'wanttoplay'=>'0', 'wanttobuy'=>'0', "wishlist"=>'0', 'preordered'=>'0', 'lastmodified'=>'2007-02-18 21:20:51'}], 'numplays'=>['7'], 'comment'=>['Never played.']} }
|
14
|
+
|
15
|
+
let(:item) { Bgg::Collection::Item.new(item_data) }
|
16
|
+
|
17
|
+
describe '.id' do
|
18
|
+
it 'exists' do
|
19
|
+
expect( item ).to respond_to(:id)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'returns correct value' do
|
23
|
+
expect( item.id ).to eq(70512)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '.name' do
|
28
|
+
it 'exists' do
|
29
|
+
expect( item ).to respond_to(:name)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'returns the correct value' do
|
33
|
+
expect( item.name ).to eq('Luna')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '.collection_id' do
|
38
|
+
it 'exists' do
|
39
|
+
expect( item ).to respond_to(:collection_id)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'returns the correct value' do
|
43
|
+
expect( item.collection_id ).to eq(11455824)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '.owned?' do
|
48
|
+
it 'exists' do
|
49
|
+
expect( item ).to respond_to(:owned?)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'returns true when own == 1' do
|
53
|
+
item_data['status'][0]['own'] = '1'
|
54
|
+
expect( item.owned? ).to eq(true)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'returns true when want == 0' do
|
58
|
+
item_data['status'][0]['own'] = '0'
|
59
|
+
expect( item.owned? ).to eq(false)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '.wanted?' do
|
64
|
+
it 'exists' do
|
65
|
+
expect( item ).to respond_to(:wanted?)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'returns true when want == 0' do
|
69
|
+
item_data['status'][0]['want'] = '0'
|
70
|
+
expect( item.wanted? ).to eq(false)
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'returns true when want == 1' do
|
74
|
+
item_data['status'][0]['want'] = '1'
|
75
|
+
expect( item.wanted? ).to eq(true)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe '.for_trade?' do
|
80
|
+
it 'exists' do
|
81
|
+
expect( item ).to respond_to(:for_trade?)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'returns false when fortrade == 0' do
|
85
|
+
item_data['status'][0]['fortrade'] = '0'
|
86
|
+
expect( item.for_trade? ).to eq(false)
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'returns true when fortrade == 1' do
|
90
|
+
item_data['status'][0]['fortrade'] = '1'
|
91
|
+
expect( item.for_trade? ).to eq(true)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe '.played?' do
|
96
|
+
it 'exists' do
|
97
|
+
expect( item ).to respond_to(:played?)
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'returns true when play_count > 0' do
|
101
|
+
item_data['numplays'][0] = '7'
|
102
|
+
expect( item.played? ).to eq(true)
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'returns false when play_count == 0' do
|
106
|
+
item_data['numplays'][0] = '0'
|
107
|
+
expect( item.played? ).to eq(false)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe '.want_to_buy?' do
|
112
|
+
it 'exists' do
|
113
|
+
expect( item ).to respond_to(:want_to_buy?)
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'returns true when wanttobuy == 1' do
|
117
|
+
item_data['status'][0]['wanttobuy'] = '1'
|
118
|
+
expect( item.want_to_buy? ).to eq(true)
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'returns false when wanttobuy == 0' do
|
122
|
+
item_data['status'][0]['wanttobuy'] = '0'
|
123
|
+
expect( item.want_to_buy? ).to eq(false)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe '.preordered?' do
|
128
|
+
it 'exists' do
|
129
|
+
expect( item ).to respond_to(:preordered?)
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'returns true when preordered == 1' do
|
133
|
+
item_data['status'][0]['preordered'] = '1'
|
134
|
+
expect( item.preordered? ).to eq(true)
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'returns false when preordered == 0' do
|
138
|
+
item_data['status'][0]['preordered'] = '0'
|
139
|
+
expect( item.preordered? ).to eq(false)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe '.want_to_play?' do
|
144
|
+
it 'exists' do
|
145
|
+
expect( item ).to respond_to(:want_to_play?)
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'returns true when wanttoplay == 1' do
|
149
|
+
item_data['status'][0]['wanttoplay'] = '1'
|
150
|
+
expect( item.want_to_play? ).to eq(true)
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'returns false when wanttoplay == 0' do
|
154
|
+
item_data['status'][0]['wanttoplay'] = '0'
|
155
|
+
expect( item.want_to_play? ).to eq(false)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe '.published?' do
|
160
|
+
it 'exists' do
|
161
|
+
expect( item ).to respond_to(:published?)
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'returns true when yearpublished exists' do
|
165
|
+
expect( item.published? ).to eq(true)
|
166
|
+
end
|
167
|
+
|
168
|
+
it 'returns false when yearpublished does not exist' do
|
169
|
+
item_data.delete('yearpublished')
|
170
|
+
expect( item.published? ).to eq(false)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
describe '.type' do
|
175
|
+
it 'exists' do
|
176
|
+
expect( item ).to respond_to(:type)
|
177
|
+
end
|
178
|
+
|
179
|
+
it 'returns boardgame when it is a boardgame' do
|
180
|
+
expect( item.type ).to eq('boardgame')
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
describe '.play_count' do
|
185
|
+
it 'exists' do
|
186
|
+
expect( item ).to respond_to(:play_count)
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'returns the correct value' do
|
190
|
+
expect( item.play_count ).to eq(7)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
describe '.year_published' do
|
195
|
+
it 'exists' do
|
196
|
+
expect( item ).to respond_to(:year_published)
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'returns the correct value' do
|
200
|
+
expect( item.year_published ).to eq(2010)
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'returns 0 if it is not published' do
|
204
|
+
item_data.delete('yearpublished')
|
205
|
+
expect( item.year_published ).to eq(0)
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
describe '.thumbnail' do
|
210
|
+
it 'exists' do
|
211
|
+
expect( item ).to respond_to(:thumbnail)
|
212
|
+
end
|
213
|
+
|
214
|
+
it 'returns the correct value' do
|
215
|
+
expect( item.thumbnail ).to eq('http://cf.geekdo-images.com/images/pic802342_t.jpg')
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
describe '.image' do
|
220
|
+
it 'exists' do
|
221
|
+
expect( item ).to respond_to(:image)
|
222
|
+
end
|
223
|
+
|
224
|
+
it 'returns the correct value' do
|
225
|
+
expect( item.image ).to eq('http://cf.geekdo-images.com/images/pic802342.jpg')
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
describe '.comment' do
|
230
|
+
it 'exists' do
|
231
|
+
expect( item ).to respond_to(:comment)
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'returns the correct value' do
|
235
|
+
expect( item.comment ).to eq('Never played.')
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
describe '.game' do
|
240
|
+
it 'exists' do
|
241
|
+
expect( item ).to respond_to(:game)
|
242
|
+
end
|
243
|
+
|
244
|
+
it 'returns a Bgg::Game object corresponding to the entry' do
|
245
|
+
response_file = 'sample_data/thing?id=70512&type=boardgame'
|
246
|
+
request_url = 'http://www.boardgamegeek.com/xmlapi2/thing'
|
247
|
+
|
248
|
+
stub_request(:any, request_url).
|
249
|
+
with(query: {id: 70512, type: 'boardgame'}).
|
250
|
+
to_return(body: File.open(response_file), status: 200)
|
251
|
+
|
252
|
+
game = item.game
|
253
|
+
|
254
|
+
expect( game ).to be_instance_of(Bgg::Game)
|
255
|
+
expect( game.name ).to eq('Luna')
|
256
|
+
expect( game.designers ).to eq(['Stefan Feld'])
|
257
|
+
end
|
258
|
+
end
|
259
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Bgg::Collection do
|
5
|
+
describe 'find_by_username' do
|
6
|
+
it 'throws an ArgumentError when a number is passed in' do
|
7
|
+
expect{ Bgg::Collection.find_by_username(38383) }.to raise_error(ArgumentError)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'throws an ArgumentError when an empty string is passed in' do
|
11
|
+
expect{ Bgg::Collection.find_by_username('') }.to raise_error(ArgumentError)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'throws an ArgumentError when a string of only numbers is passed in' do
|
15
|
+
expect{ Bgg::Collection.find_by_username('38383') }.to raise_error(ArgumentError)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'throws an ArgumentError when a non-existent user is passed in' do
|
19
|
+
response_file = 'sample_data/collection?username=yyyyyyy'
|
20
|
+
request_url = 'http://www.boardgamegeek.com/xmlapi2/collection'
|
21
|
+
|
22
|
+
stub_request(:any, request_url).
|
23
|
+
with(query: {username: 'yyyyyyy'}).
|
24
|
+
to_return(body: File.open(response_file), status: 200)
|
25
|
+
|
26
|
+
expect{ Bgg::Collection.find_by_username('yyyyyyy')}.to raise_error(ArgumentError)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'creates an object for a collection that exists' do
|
30
|
+
response_file = 'sample_data/collection?username=texasjdl'
|
31
|
+
request_url = 'http://www.boardgamegeek.com/xmlapi2/collection'
|
32
|
+
|
33
|
+
stub_request(:any, request_url).
|
34
|
+
with(query: {username: 'texasjdl'}).
|
35
|
+
to_return(body: File.open(response_file), status: 200)
|
36
|
+
|
37
|
+
collection = Bgg::Collection.find_by_username('texasjdl')
|
38
|
+
|
39
|
+
expect( collection ).to be_a_kind_of(Bgg::Collection)
|
40
|
+
expect( collection.owned.first ).to be_instance_of(Bgg::Collection::Item)
|
41
|
+
expect( collection.owned.first.name ).to eq('& Cetera')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe 'instance' do
|
46
|
+
let(:collection) { Bgg::Collection.find_by_username('texasjdl') }
|
47
|
+
|
48
|
+
before do
|
49
|
+
response_file = 'sample_data/collection?username=texasjdl'
|
50
|
+
request_url = 'http://www.boardgamegeek.com/xmlapi2/collection'
|
51
|
+
|
52
|
+
stub_request(:any, request_url).
|
53
|
+
with(query: {username: 'texasjdl'}).
|
54
|
+
to_return(body: File.open(response_file), status: 200)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'has boardgames' do
|
58
|
+
expect( collection.boardgames ).to be_instance_of(Array)
|
59
|
+
expect( collection.boardgames.first ).to be_instance_of(Bgg::Collection::Item)
|
60
|
+
expect( collection.boardgames.count).to eq(604)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'has boardgame_expansions' do
|
64
|
+
expect( collection.boardgame_expansions ).to be_instance_of(Array)
|
65
|
+
expect( collection.boardgame_expansions.first ).to be_instance_of(Bgg::Collection::Item)
|
66
|
+
expect( collection.boardgame_expansions.count).to eq(37)
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'has played' do
|
70
|
+
expect( collection.played ).to be_instance_of(Array)
|
71
|
+
expect( collection.played.first ).to be_instance_of(Bgg::Collection::Item)
|
72
|
+
expect( collection.played.count).to eq(365)
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'has size' do
|
76
|
+
expect( collection.size ).to eq(604)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'has count' do
|
80
|
+
expect( collection.count ).to eq(604)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,232 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Bgg::Game do
|
5
|
+
describe 'class method' do
|
6
|
+
describe 'find_by_id' do
|
7
|
+
it 'throws an ArgumentError when a non-integer is passed in' do
|
8
|
+
expect{ Bgg::Game.find_by_id('string instead') }.to raise_error(ArgumentError, 'invalid value for Integer(): "string instead"')
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'throws an ArgumentError when a non-positive integer is passed in' do
|
12
|
+
expect{ Bgg::Game.find_by_id(0) }.to raise_error(ArgumentError, 'game_id must be greater than 0!')
|
13
|
+
expect{ Bgg::Game.find_by_id(-1) }.to raise_error(ArgumentError, 'game_id must be greater than 0!')
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'creates an object for a game that exists' do
|
17
|
+
response_file = 'sample_data/thing?id=84876&type=boardgame'
|
18
|
+
request_url = 'http://www.boardgamegeek.com/xmlapi2/thing'
|
19
|
+
|
20
|
+
stub_request(:any, request_url).with(query: {id: 84876, type: 'boardgame'}).to_return(body: File.open(response_file), status: 200)
|
21
|
+
burgund = Bgg::Game.find_by_id(84876)
|
22
|
+
|
23
|
+
expect( burgund ).to be_a_kind_of(Object)
|
24
|
+
expect( burgund.name ).to eq('The Castles of Burgundy')
|
25
|
+
expect( burgund.names ).to match_array(['The Castles of Burgundy', 'Les Châteaux de Bourgogne', 'Die Burgen von Burgund'])
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'throws an ArgumentError for a game that does not exist' do
|
29
|
+
response_file = 'sample_data/thing?id=10000000&type=boardgame'
|
30
|
+
request_url = 'http://www.boardgamegeek.com/xmlapi2/thing'
|
31
|
+
|
32
|
+
stub_request(:any, request_url).with(query: {id: 10000000, type: 'boardgame'}).to_return(body: File.open(response_file), status: 200)
|
33
|
+
|
34
|
+
expect{ Bgg::Game.find_by_id(10000000) }.to raise_error(ArgumentError, 'Game does not exist')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'instance' do
|
40
|
+
let(:burgund) { Bgg::Game.find_by_id(84876) }
|
41
|
+
|
42
|
+
before do
|
43
|
+
response_file = 'sample_data/thing?id=84876&type=boardgame'
|
44
|
+
request_url = 'http://www.boardgamegeek.com/xmlapi2/thing'
|
45
|
+
|
46
|
+
stub_request(:any, request_url).
|
47
|
+
with(query: {id: 84876, type: 'boardgame'}).
|
48
|
+
to_return(body: File.open(response_file), status: 200)
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '.id' do
|
52
|
+
it 'exists' do
|
53
|
+
expect( burgund ).to respond_to(:id)
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'returns the BGG Thing id' do
|
57
|
+
expect( burgund.id ).to eq(84876)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '.name' do
|
62
|
+
it 'exists' do
|
63
|
+
expect( burgund ).to respond_to(:name)
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'returns the primary name' do
|
67
|
+
expect( burgund.name ).to eq('The Castles of Burgundy')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe '.names' do
|
72
|
+
it 'exists' do
|
73
|
+
expect( burgund ).to respond_to(:names)
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'returns a list of all names -- primary and alternates' do
|
77
|
+
expect( burgund.names ).to match_array(['The Castles of Burgundy', 'Les Châteaux de Bourgogne', 'Die Burgen von Burgund'])
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe '.alternate_names' do
|
82
|
+
it 'exists' do
|
83
|
+
expect( burgund ).to respond_to(:alternate_names)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'returns a list of the alternate/foreign names -- without the primary name' do
|
87
|
+
expect( burgund.alternate_names ).to match_array(['Les Châteaux de Bourgogne', 'Die Burgen von Burgund'])
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe '.artists' do
|
92
|
+
it 'exists' do
|
93
|
+
expect( burgund ).to respond_to(:artists)
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'returns a list of the game artists' do
|
97
|
+
expect( burgund.artists ).to match_array(['Harald Lieske', 'Julien Delval'])
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe '.description' do
|
102
|
+
it 'exists' do
|
103
|
+
expect( burgund ).to respond_to(:description)
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'returns the text description of the game' do
|
107
|
+
expect( burgund.description ).to match(/The game is set in the Burgundy region of High Medieval France\./)
|
108
|
+
expect( burgund.description.length ).to eq(1049)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe '.designers' do
|
113
|
+
it 'exists' do
|
114
|
+
expect( burgund ).to respond_to(:designers)
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'returns a list of the designers' do
|
118
|
+
expect( burgund.designers ).to match_array(['Stefan Feld'])
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe '.image' do
|
123
|
+
it 'exists' do
|
124
|
+
expect( burgund ).to respond_to(:image)
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'returns a URL to an image for the game' do
|
128
|
+
expect( burgund.image ).to eq('http://cf.geekdo-images.com/images/pic1176894.jpg')
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
describe '.min_players' do
|
133
|
+
it 'exists' do
|
134
|
+
expect( burgund ).to respond_to(:min_players)
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'returns the minimum number of players' do
|
138
|
+
expect( burgund.min_players ).to eq(2)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
describe '.max_players' do
|
143
|
+
it 'exists' do
|
144
|
+
expect( burgund ).to respond_to(:max_players)
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'returns the maximum number of players' do
|
148
|
+
expect( burgund.max_players ).to eq(4)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
describe '.minimum_recommended_age' do
|
153
|
+
it 'exists' do
|
154
|
+
expect( burgund ).to respond_to(:recommended_minimum_age)
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'returns the recommended minimum age' do
|
158
|
+
expect( burgund.recommended_minimum_age ).to eq(12)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe '.playing_time' do
|
163
|
+
it 'exists' do
|
164
|
+
expect( burgund ).to respond_to(:playing_time)
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'has playing_time' do
|
168
|
+
expect( burgund.playing_time ).to eq(90)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
describe '.publishers' do
|
173
|
+
it 'exists' do
|
174
|
+
expect( burgund ).to respond_to(:publishers)
|
175
|
+
end
|
176
|
+
|
177
|
+
it 'returns a list of publisher names' do
|
178
|
+
expect( burgund.publishers ).to match_array(['Ravensburger', 'alea'])
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
describe '.thumbnail' do
|
183
|
+
it 'exists' do
|
184
|
+
expect( burgund ).to respond_to(:thumbnail)
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'returns a URL to a thumbnail' do
|
188
|
+
expect( burgund.thumbnail ).to eq('http://cf.geekdo-images.com/images/pic1176894_t.jpg')
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
describe '.year_published' do
|
193
|
+
it 'exists' do
|
194
|
+
expect( burgund ).to respond_to(:year_published)
|
195
|
+
end
|
196
|
+
|
197
|
+
it 'returns the only year published' do
|
198
|
+
expect( burgund.year_published ).to eq(2011)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
describe '.mechanics' do
|
203
|
+
it 'exists' do
|
204
|
+
expect( burgund ).to respond_to(:mechanics)
|
205
|
+
end
|
206
|
+
|
207
|
+
it 'returns the mechanisms used in the game' do
|
208
|
+
expect( burgund.mechanics ).to match_array(['Dice Rolling', 'Set Collection', 'Tile Placement'])
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
describe '.categories' do
|
213
|
+
it 'exists' do
|
214
|
+
expect( burgund ).to respond_to(:categories)
|
215
|
+
end
|
216
|
+
|
217
|
+
it 'returns the minimum number of players' do
|
218
|
+
expect( burgund.categories ).to match_array(['Dice', 'Medieval', 'Territory Building'])
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
describe '.families' do
|
223
|
+
it 'exists' do
|
224
|
+
expect( burgund ).to respond_to(:families)
|
225
|
+
end
|
226
|
+
|
227
|
+
it 'returns the minimum number of players' do
|
228
|
+
expect( burgund.families ).to match_array(['Alea Big Box', 'Country: France'])
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|