brickset_api 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +4 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +145 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/brickset.gemspec +30 -0
  13. data/lib/brickset.rb +55 -0
  14. data/lib/brickset/api/auth.rb +22 -0
  15. data/lib/brickset/api/collection/advanced.rb +34 -0
  16. data/lib/brickset/api/collection/minifig.rb +35 -0
  17. data/lib/brickset/api/collection/set.rb +117 -0
  18. data/lib/brickset/api/set.rb +157 -0
  19. data/lib/brickset/client.rb +56 -0
  20. data/lib/brickset/configuration.rb +9 -0
  21. data/lib/brickset/elements/additional_image.rb +13 -0
  22. data/lib/brickset/elements/collection_detail.rb +28 -0
  23. data/lib/brickset/elements/collection_total.rb +15 -0
  24. data/lib/brickset/elements/condition.rb +11 -0
  25. data/lib/brickset/elements/instruction.rb +12 -0
  26. data/lib/brickset/elements/minifig_collection.rb +15 -0
  27. data/lib/brickset/elements/review.rb +20 -0
  28. data/lib/brickset/elements/set.rb +67 -0
  29. data/lib/brickset/elements/subtheme.rb +15 -0
  30. data/lib/brickset/elements/theme.rb +15 -0
  31. data/lib/brickset/elements/user_note.rb +12 -0
  32. data/lib/brickset/elements/year.rb +13 -0
  33. data/lib/brickset/version.rb +3 -0
  34. data/spec/brickset/api/auth_spec.rb +84 -0
  35. data/spec/brickset/api/collection/advanced_spec.rb +59 -0
  36. data/spec/brickset/api/collection/minifig_spec.rb +95 -0
  37. data/spec/brickset/api/collection/set_spec.rb +350 -0
  38. data/spec/brickset/api/set_spec.rb +658 -0
  39. data/spec/brickset/client_spec.rb +155 -0
  40. data/spec/brickset/configuration_spec.rb +9 -0
  41. data/spec/brickset/elements/additional_image_spec.rb +26 -0
  42. data/spec/brickset/elements/collection_detail_spec.rb +40 -0
  43. data/spec/brickset/elements/collection_total_spec.rb +27 -0
  44. data/spec/brickset/elements/condition_spec.rb +23 -0
  45. data/spec/brickset/elements/instruction_spec.rb +24 -0
  46. data/spec/brickset/elements/minifig_collection_spec.rb +27 -0
  47. data/spec/brickset/elements/review_spec.rb +32 -0
  48. data/spec/brickset/elements/set_spec.rb +72 -0
  49. data/spec/brickset/elements/subtheme_spec.rb +27 -0
  50. data/spec/brickset/elements/theme_spec.rb +27 -0
  51. data/spec/brickset/elements/user_note_spec.rb +24 -0
  52. data/spec/brickset/elements/year_spec.rb +25 -0
  53. data/spec/brickset_spec.rb +59 -0
  54. data/spec/fixtures/api_key_invalid.xml +2 -0
  55. data/spec/fixtures/api_key_valid.xml +2 -0
  56. data/spec/fixtures/get_additional_images.xml +24 -0
  57. data/spec/fixtures/get_additional_images_no_result.xml +2 -0
  58. data/spec/fixtures/get_collection_detail.xml +23 -0
  59. data/spec/fixtures/get_collection_detail_conditions.xml +24 -0
  60. data/spec/fixtures/get_collection_detail_no_result.xml +2 -0
  61. data/spec/fixtures/get_collection_totals.xml +8 -0
  62. data/spec/fixtures/get_collection_totals_no_result.xml +8 -0
  63. data/spec/fixtures/get_instructions.xml +7 -0
  64. data/spec/fixtures/get_instructions_no_result.xml +2 -0
  65. data/spec/fixtures/get_minifig_collection.xml +31 -0
  66. data/spec/fixtures/get_minifig_collection_owned.xml +17 -0
  67. data/spec/fixtures/get_minifig_collection_wanted.xml +10 -0
  68. data/spec/fixtures/get_recently_updated_sets.xml +52 -0
  69. data/spec/fixtures/get_recently_updated_sets_invalid_key.xml +1 -0
  70. data/spec/fixtures/get_reviews.xml +28 -0
  71. data/spec/fixtures/get_reviews_no_result.xml +2 -0
  72. data/spec/fixtures/get_set.xml +52 -0
  73. data/spec/fixtures/get_set_no_result.xml +2 -0
  74. data/spec/fixtures/get_sets.xml +101 -0
  75. data/spec/fixtures/get_sets_no_result.xml +2 -0
  76. data/spec/fixtures/get_subthemes.xml +24 -0
  77. data/spec/fixtures/get_subthemes_for_user.xml +24 -0
  78. data/spec/fixtures/get_subthemes_for_user_no_result.xml +2 -0
  79. data/spec/fixtures/get_subthemes_for_user_owned.xml +24 -0
  80. data/spec/fixtures/get_subthemes_for_user_wanted.xml +31 -0
  81. data/spec/fixtures/get_subthemes_no_result.xml +2 -0
  82. data/spec/fixtures/get_themes.xml +17 -0
  83. data/spec/fixtures/get_themes_for_user.xml +17 -0
  84. data/spec/fixtures/get_themes_for_user_no_result.xml +2 -0
  85. data/spec/fixtures/get_themes_for_user_owned.xml +17 -0
  86. data/spec/fixtures/get_themes_for_user_wanted.xml +25 -0
  87. data/spec/fixtures/get_themes_no_result.xml +2 -0
  88. data/spec/fixtures/get_user_notes.xml +11 -0
  89. data/spec/fixtures/get_user_notes_no_result.xml +2 -0
  90. data/spec/fixtures/get_years.xml +18 -0
  91. data/spec/fixtures/get_years_for_user.xml +18 -0
  92. data/spec/fixtures/get_years_for_user_no_result.xml +2 -0
  93. data/spec/fixtures/get_years_for_user_owned.xml +13 -0
  94. data/spec/fixtures/get_years_for_user_wanted.xml +13 -0
  95. data/spec/fixtures/get_years_no_result.xml +2 -0
  96. data/spec/fixtures/login.xml +2 -0
  97. data/spec/fixtures/login_invalid_credentials.xml +2 -0
  98. data/spec/fixtures/login_invalid_key.xml +2 -0
  99. data/spec/fixtures/set_collection.xml +2 -0
  100. data/spec/fixtures/set_collection_invalid.xml +2 -0
  101. data/spec/fixtures/set_collection_owns.xml +2 -0
  102. data/spec/fixtures/set_collection_owns_invalid.xml +2 -0
  103. data/spec/fixtures/set_collection_qty_owned.xml +2 -0
  104. data/spec/fixtures/set_collection_qty_owned_invalid.xml +2 -0
  105. data/spec/fixtures/set_collection_user_notes.xml +2 -0
  106. data/spec/fixtures/set_collection_user_notes_invalid.xml +2 -0
  107. data/spec/fixtures/set_collection_wants.xml +2 -0
  108. data/spec/fixtures/set_collection_wants_invalid.xml +2 -0
  109. data/spec/fixtures/set_minifig_collection.xml +2 -0
  110. data/spec/fixtures/set_minifig_collection_invalid.xml +2 -0
  111. data/spec/fixtures/set_user_rating.xml +2 -0
  112. data/spec/fixtures/set_user_rating_invalid.xml +2 -0
  113. data/spec/fixtures/token_invalid.xml +2 -0
  114. data/spec/fixtures/token_valid.xml +2 -0
  115. data/spec/spec_helper.rb +43 -0
  116. metadata +355 -0
@@ -0,0 +1,155 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Brickset::Client do
4
+ it 'knows its ancestors' do
5
+ aggregate_failures do
6
+ expect(described_class.ancestors).to include HTTParty
7
+ expect(described_class.ancestors).to include ActiveModel::Validations
8
+
9
+ expect(described_class.ancestors).to include Brickset::Api::Auth
10
+ expect(described_class.ancestors).to include Brickset::Api::Set
11
+ expect(described_class.ancestors).to include Brickset::Api::Collection::Set
12
+ expect(described_class.ancestors).to include Brickset::Api::Collection::Minifig
13
+ expect(described_class.ancestors).to include Brickset::Api::Collection::Advanced
14
+ end
15
+ end
16
+
17
+ it 'knows its base_uri' do
18
+ expect(described_class.base_uri).to eq 'https://brickset.com/api/v2.asmx'
19
+ end
20
+
21
+ describe '#initialize' do
22
+ context 'when a token is specified' do
23
+ subject { described_class.new(token: 'access-token') }
24
+
25
+ it 'sets the token attribute' do
26
+ expect(subject.token).to eq 'access-token'
27
+ end
28
+ end
29
+
30
+ context 'when no token is specified' do
31
+ subject { described_class.new }
32
+
33
+ it 'does not set the token attribute' do
34
+ expect(subject.token).to be_nil
35
+ end
36
+ end
37
+ end
38
+
39
+ describe '#call' do
40
+ let(:options) do
41
+ {}
42
+ end
43
+ let(:body) { 'apiKey=super-secret' }
44
+ let(:call) { subject.send(:call, '/method', options) }
45
+
46
+ before { stub_post('/method').with(body: body).to_return body: fixture('api_key_valid.xml') }
47
+
48
+ context 'when additional options have been set' do
49
+ let(:options) do
50
+ { attribute: 'value' }
51
+ end
52
+
53
+ let(:body) { 'attribute=value&apiKey=super-secret' }
54
+
55
+ it 'makes a POST request with the additional options and default options as the body' do
56
+ expect(described_class).to receive(:post).with('/method', { body: { attribute: 'value', apiKey: 'super-secret' } }).and_call_original
57
+ call
58
+ end
59
+ end
60
+
61
+ context 'when no additional options have been set' do
62
+ it 'makes a POST request with the default options as the body' do
63
+ expect(described_class).to receive(:post).with('/method', { body: { apiKey: 'super-secret' } }).and_call_original
64
+ call
65
+ end
66
+ end
67
+
68
+ context 'when the response is OK' do
69
+ it 'returns the response body' do
70
+ expect(call).to eq "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<string xmlns=\"https://brickset.com/api/\">OK</string>\n"
71
+ end
72
+ end
73
+
74
+ context 'when the response is not OK' do
75
+ before { stub_post('/method').with(body: body).to_return body: 'Error 500: Internal Server Error', status: 500 }
76
+
77
+ it 'raises the response body' do
78
+ expect { call }.to raise_error 'Error 500: Internal Server Error'
79
+ end
80
+ end
81
+ end
82
+
83
+ describe '#handle_update' do
84
+ let(:handle_update) { subject.send(:handle_update, response) }
85
+
86
+ let(:response) { fixture('api_key_valid.xml') }
87
+
88
+ it 'parses the specified response' do
89
+ expect(HappyMapper).to receive(:parse).with(response).and_call_original
90
+ handle_update
91
+ end
92
+
93
+ context 'when the content is OK' do
94
+ it 'returns true' do
95
+ expect(handle_update).to eq true
96
+ end
97
+ end
98
+
99
+ context 'when the content is not OK' do
100
+ let(:response) { fixture('api_key_invalid.xml') }
101
+
102
+ it 'saves a reference to the error' do
103
+ handle_update
104
+ expect(subject.errors[:base]).to match_array [ 'INVALIDKEY' ]
105
+ end
106
+
107
+ it 'returns false' do
108
+ expect(handle_update).to eq false
109
+ end
110
+ end
111
+ end
112
+
113
+ describe '#extract_attributes_from_options' do
114
+ let(:extract_attributes_from_options) { subject.send(:extract_attributes_from_options, options) }
115
+
116
+ context 'when there is a known attribute in the options hash' do
117
+ let(:options) do
118
+ { owned: 0 }
119
+ end
120
+
121
+ it 'sets its value to the known attribute' do
122
+ extract_attributes_from_options
123
+ expect(subject.owned).to eq 0
124
+ end
125
+ end
126
+
127
+ context 'when there is an unknown attribute in the options hash' do
128
+ let(:options) do
129
+ { unknown: 'value' }
130
+ end
131
+
132
+ it 'raises a KeyError' do
133
+ expect { extract_attributes_from_options }.to raise_error KeyError, "Attribute key 'unknown' is not supported"
134
+ end
135
+ end
136
+ end
137
+
138
+ describe '#default_options' do
139
+ let(:default_options) { subject.send(:default_options) }
140
+
141
+ context 'when the token has not been set' do
142
+ it 'knows its default options' do
143
+ expect(default_options).to eq apiKey: 'super-secret'
144
+ end
145
+ end
146
+
147
+ context 'when the token has been set' do
148
+ subject { described_class.new(token: 'access-token') }
149
+
150
+ it 'knows its default options' do
151
+ expect(default_options).to eq apiKey: 'super-secret', userHash: 'access-token'
152
+ end
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Brickset::Configuration do
4
+ describe '#api_key' do
5
+ it 'knows its default value' do
6
+ expect(subject.api_key).to be_nil
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Brickset::Elements::AdditionalImage do
4
+
5
+ it 'knows its ancestors' do
6
+ expect(described_class.ancestors).to include HappyMapper
7
+ end
8
+
9
+ it 'knows its tag' do
10
+ expect(described_class.tag_name).to eq 'additionalImages'
11
+ end
12
+
13
+ describe '#parse' do
14
+ let(:xml) { fixture('get_additional_images.xml') }
15
+ let(:parsed) { described_class.parse(xml, single: true) }
16
+
17
+ it 'knows its attributes' do
18
+ aggregate_failures do
19
+ expect(parsed.thumbnail_url).to eq 'https://images.brickset.com/sets/AdditionalImages/10179-1/tn_10179-0000-xx-13-1_jpg.jpg'
20
+ expect(parsed.thumbnail_url).to eq 'https://images.brickset.com/sets/AdditionalImages/10179-1/tn_10179-0000-xx-13-1_jpg.jpg'
21
+ expect(parsed.image_url).to eq 'https://images.brickset.com/sets/AdditionalImages/10179-1/10179-0000-xx-13-1.jpg'
22
+ end
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Brickset::Elements::CollectionDetail do
4
+
5
+ it 'knows its ancestors' do
6
+ expect(described_class.ancestors).to include HappyMapper
7
+ end
8
+
9
+ it 'knows its tag' do
10
+ expect(described_class.tag_name).to eq 'collectionDetails'
11
+ end
12
+
13
+ describe '#parse' do
14
+ let(:xml) { fixture('get_collection_detail.xml') }
15
+ let(:parsed) { described_class.parse(xml, single: true) }
16
+
17
+ it 'knows its attributes' do
18
+ aggregate_failures do
19
+ expect(parsed.collection_id).to eq 12712521
20
+ expect(parsed.date_acquired).to eq '21-08-18'
21
+ expect(parsed.currency).to eq 'EUR'
22
+ expect(parsed.price_paid).to eq 3.0
23
+ expect(parsed.additional_price_paid).to eq 0.49
24
+ expect(parsed.current_estimated_value).to eq 3.49
25
+ expect(parsed.condition_when_acquired).to eq 'As new'
26
+ expect(parsed.acquired_from).to eq 'Mos Eisley'
27
+ expect(parsed.condition_now).to eq 'Assembled'
28
+ expect(parsed.location).to eq 'In a galaxy far, far away...'
29
+ expect(parsed.notes).to eq 'A long time ago...'
30
+ expect(parsed.parts).to eq true
31
+ expect(parsed.minifigs).to eq false
32
+ expect(parsed.instructions).to eq true
33
+ expect(parsed.box).to eq true
34
+ expect(parsed.modified).to eq true
35
+ expect(parsed.will_trade).to eq false
36
+ expect(parsed.deleted).to eq false
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Brickset::Elements::CollectionTotal do
4
+
5
+ it 'knows its ancestors' do
6
+ expect(described_class.ancestors).to include HappyMapper
7
+ end
8
+
9
+ it 'knows its tag' do
10
+ expect(described_class.tag_name).to eq 'collectionTotals'
11
+ end
12
+
13
+ describe '#parse' do
14
+ let(:xml) { fixture('get_collection_totals.xml') }
15
+ let(:parsed) { described_class.parse(xml, single: true) }
16
+
17
+ it 'knows its attributes' do
18
+ aggregate_failures do
19
+ expect(parsed.total_sets_owned).to eq 126
20
+ expect(parsed.total_sets_wanted).to eq 85
21
+ expect(parsed.total_distinct_sets_owned).to eq 121
22
+ expect(parsed.total_minifigs_owned).to eq 156
23
+ expect(parsed.total_minifigs_wanted).to eq 40
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Brickset::Elements::Condition do
4
+
5
+ it 'knows its ancestors' do
6
+ expect(described_class.ancestors).to include HappyMapper
7
+ end
8
+
9
+ it 'knows its tag' do
10
+ expect(described_class.tag_name).to eq 'conditions'
11
+ end
12
+
13
+ describe '#parse' do
14
+ let(:xml) { fixture('get_collection_detail_conditions.xml') }
15
+ let(:parsed) { described_class.parse(xml, single: true) }
16
+
17
+ it 'knows its attributes' do
18
+ aggregate_failures do
19
+ expect(parsed.condition).to eq 'Assembled'
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Brickset::Elements::Instruction do
4
+
5
+ it 'knows its ancestors' do
6
+ expect(described_class.ancestors).to include HappyMapper
7
+ end
8
+
9
+ it 'knows its tag' do
10
+ expect(described_class.tag_name).to eq 'instructions'
11
+ end
12
+
13
+ describe '#parse' do
14
+ let(:xml) { fixture('get_instructions.xml') }
15
+ let(:parsed) { described_class.parse(xml, single: true) }
16
+
17
+ it 'knows its attributes' do
18
+ aggregate_failures do
19
+ expect(parsed.url).to eq 'https://www.lego.com/biassets/bi/4525430.pdf'
20
+ expect(parsed.description).to eq 'Building instruction 10179'
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Brickset::Elements::MinifigCollection do
4
+
5
+ it 'knows its ancestors' do
6
+ expect(described_class.ancestors).to include HappyMapper
7
+ end
8
+
9
+ it 'knows its tag' do
10
+ expect(described_class.tag_name).to eq 'minifigCollection'
11
+ end
12
+
13
+ describe '#parse' do
14
+ let(:xml) { fixture('get_minifig_collection.xml') }
15
+ let(:parsed) { described_class.parse(xml, single: true) }
16
+
17
+ it 'knows its attributes' do
18
+ aggregate_failures do
19
+ expect(parsed.minifig_number).to eq '85863pb076'
20
+ expect(parsed.owned_in_sets).to eq 1
21
+ expect(parsed.owned_loose).to eq 0
22
+ expect(parsed.owned_total).to eq 1
23
+ expect(parsed.wanted).to eq true
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Brickset::Elements::Review do
4
+
5
+ it 'knows its ancestors' do
6
+ expect(described_class.ancestors).to include HappyMapper
7
+ end
8
+
9
+ it 'knows its tag' do
10
+ expect(described_class.tag_name).to eq 'reviews'
11
+ end
12
+
13
+ describe '#parse' do
14
+ let(:xml) { fixture('get_reviews.xml') }
15
+ let(:parsed) { described_class.parse(xml, single: true) }
16
+
17
+ it 'knows its attributes' do
18
+ aggregate_failures do
19
+ expect(parsed.author).to eq 'darth-vader'
20
+ expect(parsed.title).to eq 'Ultimate Collector Series Millennium Falcon'
21
+ expect(parsed.review).to match(/^A long time ago, in a Lego factory far, far away.../)
22
+ expect(parsed.date_posted).to eq Date.parse('2010-10-01')
23
+ expect(parsed.overall_rating).to eq 5
24
+ expect(parsed.parts).to eq 5
25
+ expect(parsed.building_experience).to eq 5
26
+ expect(parsed.playability).to eq 3
27
+ expect(parsed.value_for_money).to eq 4
28
+ expect(parsed.html).to eq false
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Brickset::Elements::Set do
4
+
5
+ it 'knows its ancestors' do
6
+ expect(described_class.ancestors).to include HappyMapper
7
+ end
8
+
9
+ it 'knows its tag' do
10
+ expect(described_class.tag_name).to eq 'sets'
11
+ end
12
+
13
+ describe '#parse' do
14
+ let(:xml) { fixture('get_sets.xml') }
15
+ let(:parsed) { described_class.parse(xml, single: true) }
16
+
17
+ it 'knows its attributes' do
18
+ aggregate_failures do
19
+ expect(parsed.id).to eq 5860
20
+ expect(parsed.number).to eq '10179'
21
+ expect(parsed.number_variant).to eq 1
22
+ expect(parsed.name).to eq "Ultimate Collector's Millennium Falcon"
23
+ expect(parsed.year).to eq '2007'
24
+ expect(parsed.description).to be_nil
25
+ expect(parsed.category).to eq 'Normal'
26
+ expect(parsed.theme).to eq 'Star Wars'
27
+ expect(parsed.theme_group).to eq 'Licensed'
28
+ expect(parsed.subtheme).to eq 'Ultimate Collector Series'
29
+ expect(parsed.pieces).to eq '5197'
30
+ expect(parsed.minifigs).to eq '5'
31
+ expect(parsed.image).to eq true
32
+ expect(parsed.image_url).to eq 'https://images.brickset.com/sets/images/10179-1.jpg'
33
+ expect(parsed.image_filename).to eq '10179-1'
34
+ expect(parsed.thumbnail_url).to eq 'https://images.brickset.com/sets/thumbs/tn_10179-1_jpg.jpg'
35
+ expect(parsed.thumbnail_url_large).to eq 'https://images.brickset.com/sets/small/10179-1.jpg'
36
+ expect(parsed.brickset_url).to eq 'https://brickset.com/sets/10179-1'
37
+ expect(parsed.owned_by_total).to eq 3807
38
+ expect(parsed.wanted_by_total).to eq 9349
39
+ expect(parsed.released).to eq true
40
+ expect(parsed.rating).to eq 4.76190476190476
41
+ expect(parsed.user_rating).to eq 0
42
+ expect(parsed.review_count).to eq 21
43
+ expect(parsed.instructions_count).to eq 1
44
+ expect(parsed.additional_image_count).to eq 5
45
+ expect(parsed.last_updated).to eq Date.parse('2017-08-23')
46
+ expect(parsed.age_minimum).to eq 16
47
+ expect(parsed.age_maximum).to be_nil
48
+ expect(parsed.notes).to be_nil
49
+ expect(parsed.tags).to be_nil
50
+ expect(parsed.retail_price_uk).to eq '342.49'
51
+ expect(parsed.retail_price_us).to eq '499.99'
52
+ expect(parsed.retail_price_ca).to eq ''
53
+ expect(parsed.retail_price_eu).to eq ''
54
+ expect(parsed.date_added_to_shop).to eq '2007-10-24'
55
+ expect(parsed.date_removed_from_shop).to eq '2010-05-04'
56
+ expect(parsed.packaging_type).to eq 'Box'
57
+ expect(parsed.height).to eq 0.0
58
+ expect(parsed.width).to eq 0.0
59
+ expect(parsed.depth).to eq 0.0
60
+ expect(parsed.weight).to eq 0.0
61
+ expect(parsed.availability).to eq 'LEGO exclusive'
62
+ expect(parsed.ean).to eq ''
63
+ expect(parsed.upc).to eq ''
64
+ expect(parsed.acm_data_count).to eq 0
65
+ expect(parsed.owned).to eq false
66
+ expect(parsed.wanted).to eq true
67
+ expect(parsed.number_owned).to eq 0
68
+ expect(parsed.user_notes).to eq 'A long time ago in a galaxy far, far away...'
69
+ end
70
+ end
71
+ end
72
+ end