solidus_frontend 1.0.2 → 1.0.3

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.

Potentially problematic release.


This version of solidus_frontend might be problematic. Click here for more details.

Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -0
  3. data/Gemfile +6 -0
  4. data/Rakefile +15 -0
  5. data/script/rails +9 -0
  6. data/solidus_frontend.gemspec +28 -0
  7. data/spec/controllers/controller_extension_spec.rb +126 -0
  8. data/spec/controllers/controller_helpers_spec.rb +26 -0
  9. data/spec/controllers/spree/checkout_controller_spec.rb +401 -0
  10. data/spec/controllers/spree/checkout_controller_with_views_spec.rb +36 -0
  11. data/spec/controllers/spree/content_controller_spec.rb +7 -0
  12. data/spec/controllers/spree/current_order_tracking_spec.rb +44 -0
  13. data/spec/controllers/spree/home_controller_spec.rb +27 -0
  14. data/spec/controllers/spree/orders_controller_ability_spec.rb +104 -0
  15. data/spec/controllers/spree/orders_controller_spec.rb +134 -0
  16. data/spec/controllers/spree/orders_controller_transitions_spec.rb +31 -0
  17. data/spec/controllers/spree/products_controller_spec.rb +36 -0
  18. data/spec/controllers/spree/taxons_controller_spec.rb +12 -0
  19. data/spec/features/address_spec.rb +76 -0
  20. data/spec/features/automatic_promotion_adjustments_spec.rb +47 -0
  21. data/spec/features/caching/products_spec.rb +55 -0
  22. data/spec/features/caching/taxons_spec.rb +22 -0
  23. data/spec/features/cart_spec.rb +81 -0
  24. data/spec/features/checkout_spec.rb +477 -0
  25. data/spec/features/checkout_unshippable_spec.rb +35 -0
  26. data/spec/features/coupon_code_spec.rb +227 -0
  27. data/spec/features/currency_spec.rb +18 -0
  28. data/spec/features/free_shipping_promotions_spec.rb +59 -0
  29. data/spec/features/locale_spec.rb +60 -0
  30. data/spec/features/order_spec.rb +73 -0
  31. data/spec/features/products_spec.rb +260 -0
  32. data/spec/features/promotion_code_invalidation_spec.rb +51 -0
  33. data/spec/features/quantity_promotions_spec.rb +128 -0
  34. data/spec/features/taxons_spec.rb +135 -0
  35. data/spec/features/template_rendering_spec.rb +19 -0
  36. data/spec/fixtures/thinking-cat.jpg +0 -0
  37. data/spec/helpers/base_helper_spec.rb +11 -0
  38. data/spec/spec_helper.rb +121 -0
  39. data/spec/support/shared_contexts/checkout_setup.rb +9 -0
  40. data/spec/support/shared_contexts/custom_products.rb +25 -0
  41. data/spec/support/shared_contexts/product_prototypes.rb +30 -0
  42. data/spec/views/spree/checkout/_summary_spec.rb +11 -0
  43. metadata +47 -6
@@ -0,0 +1,260 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe "Visiting Products", type: :feature, inaccessible: true do
5
+ include_context "custom products"
6
+
7
+ let(:store_name) do
8
+ ((first_store = Spree::Store.first) && first_store.name).to_s
9
+ end
10
+
11
+ before(:each) do
12
+ visit spree.root_path
13
+ end
14
+
15
+ it "should be able to show the shopping cart after adding a product to it" do
16
+ click_link "Ruby on Rails Ringer T-Shirt"
17
+ expect(page).to have_content("$19.99")
18
+
19
+ click_button 'add-to-cart-button'
20
+ expect(page).to have_content("Shopping Cart")
21
+ end
22
+
23
+ describe 'meta tags and title' do
24
+ let(:jersey) { Spree::Product.find_by_name('Ruby on Rails Baseball Jersey') }
25
+ let(:metas) { { :meta_description => 'Brand new Ruby on Rails Jersey', :meta_title => 'Ruby on Rails Baseball Jersey Buy High Quality Geek Apparel', :meta_keywords => 'ror, jersey, ruby' } }
26
+
27
+ it 'should return the correct title when displaying a single product' do
28
+ click_link jersey.name
29
+ expect(page).to have_title('Ruby on Rails Baseball Jersey - ' + store_name)
30
+ within('div#product-description') do
31
+ within('h1.product-title') do
32
+ expect(page).to have_content('Ruby on Rails Baseball Jersey')
33
+ end
34
+ end
35
+ end
36
+
37
+ it 'displays metas' do
38
+ jersey.update_attributes metas
39
+ click_link jersey.name
40
+ expect(page).to have_meta(:description, 'Brand new Ruby on Rails Jersey')
41
+ expect(page).to have_meta(:keywords, 'ror, jersey, ruby')
42
+ end
43
+
44
+ it 'displays title if set' do
45
+ jersey.update_attributes metas
46
+ click_link jersey.name
47
+ expect(page).to have_title('Ruby on Rails Baseball Jersey Buy High Quality Geek Apparel')
48
+ end
49
+
50
+ it "doesn't use meta_title as heading on page" do
51
+ jersey.update_attributes metas
52
+ click_link jersey.name
53
+ within("h1") do
54
+ expect(page).to have_content(jersey.name)
55
+ expect(page).not_to have_content(jersey.meta_title)
56
+ end
57
+ end
58
+
59
+ it 'uses product name in title when meta_title set to empty string' do
60
+ jersey.update_attributes meta_title: ''
61
+ click_link jersey.name
62
+ expect(page).to have_title('Ruby on Rails Baseball Jersey - ' + store_name)
63
+ end
64
+ end
65
+
66
+ context "using Russian Rubles as a currency" do
67
+ before do
68
+ Spree::Config[:currency] = "RUB"
69
+ end
70
+
71
+ let!(:product) do
72
+ product = Spree::Product.find_by_name("Ruby on Rails Ringer T-Shirt")
73
+ product.price = 19.99
74
+ product.tap(&:save)
75
+ end
76
+
77
+ # Regression tests for #2737
78
+ context "uses руб as the currency symbol" do
79
+ it "on products page" do
80
+ visit spree.root_path
81
+ within("#product_#{product.id}") do
82
+ within(".price") do
83
+ expect(page).to have_content("19.99 ₽")
84
+ end
85
+ end
86
+ end
87
+
88
+ it "on product page" do
89
+ visit spree.product_path(product)
90
+ within(".price") do
91
+ expect(page).to have_content("19.99 ₽")
92
+ end
93
+ end
94
+
95
+ it "when adding a product to the cart", :js => true do
96
+ visit spree.product_path(product)
97
+ click_button "Add To Cart"
98
+ click_link "Home"
99
+ within(".cart-info") do
100
+ expect(page).to have_content("19.99 ₽")
101
+ end
102
+ end
103
+
104
+ it "when on the 'address' state of the cart" do
105
+ visit spree.product_path(product)
106
+ click_button "Add To Cart"
107
+ click_button "Checkout"
108
+ within("tr[data-hook=item_total]") do
109
+ expect(page).to have_content("19.99 ₽")
110
+ end
111
+ end
112
+ end
113
+ end
114
+
115
+ it "should be able to search for a product" do
116
+ fill_in "keywords", :with => "shirt"
117
+ click_button "Search"
118
+
119
+ expect(page.all('ul.product-listing li').size).to eq(1)
120
+ end
121
+
122
+ context "a product with variants" do
123
+ let(:product) { Spree::Product.find_by_name("Ruby on Rails Baseball Jersey") }
124
+ let(:option_value) { create(:option_value) }
125
+ let!(:variant) { product.variants.create!(:price => 5.59) }
126
+
127
+ before do
128
+ # Need to have two images to trigger the error
129
+ image = File.open(File.expand_path('../../fixtures/thinking-cat.jpg', __FILE__))
130
+ product.images.create!(:attachment => image)
131
+ product.images.create!(:attachment => image)
132
+
133
+ product.option_types << option_value.option_type
134
+ variant.option_values << option_value
135
+ end
136
+
137
+ it "should be displayed" do
138
+ expect { click_link product.name }.to_not raise_error
139
+ end
140
+
141
+ it "displays price of first variant listed", js: true do
142
+ click_link product.name
143
+ within("#product-price") do
144
+ expect(page).to have_content variant.price
145
+ expect(page).not_to have_content Spree.t(:out_of_stock)
146
+ end
147
+ end
148
+
149
+ it "doesn't display out of stock for master product" do
150
+ product.master.stock_items.update_all count_on_hand: 0, backorderable: false
151
+
152
+ click_link product.name
153
+ within("#product-price") do
154
+ expect(page).not_to have_content Spree.t(:out_of_stock)
155
+ end
156
+ end
157
+ end
158
+
159
+ context "a product with variants, images only for the variants" do
160
+ let(:product) { Spree::Product.find_by_name("Ruby on Rails Baseball Jersey") }
161
+
162
+ before do
163
+ image = File.open(File.expand_path('../../fixtures/thinking-cat.jpg', __FILE__))
164
+ v1 = product.variants.create!(price: 9.99)
165
+ v2 = product.variants.create!(price: 10.99)
166
+ v1.images.create!(attachment: image)
167
+ v2.images.create!(attachment: image)
168
+ end
169
+
170
+ it "should not display no image available" do
171
+ visit spree.root_path
172
+ expect(page).to have_xpath("//img[contains(@src,'thinking-cat')]")
173
+ end
174
+ end
175
+
176
+ it "should be able to hide products without price" do
177
+ expect(page.all('ul.product-listing li').size).to eq(9)
178
+ Spree::Config.show_products_without_price = false
179
+ Spree::Config.currency = "CAN"
180
+ visit spree.root_path
181
+ expect(page.all('ul.product-listing li').size).to eq(0)
182
+ end
183
+
184
+
185
+ it "should be able to display products priced under 10 dollars" do
186
+ within(:css, '#taxonomies') { click_link "Ruby on Rails" }
187
+ check "Price_Range_Under_$10.00"
188
+ within(:css, '#sidebar_products_search') { click_button "Search" }
189
+ expect(page).to have_content("No products found")
190
+ end
191
+
192
+ it "should be able to display products priced between 15 and 18 dollars" do
193
+ within(:css, '#taxonomies') { click_link "Ruby on Rails" }
194
+ check "Price_Range_$15.00_-_$18.00"
195
+ within(:css, '#sidebar_products_search') { click_button "Search" }
196
+
197
+ expect(page.all('ul.product-listing li').size).to eq(3)
198
+ tmp = page.all('ul.product-listing li a').map(&:text).flatten.compact
199
+ tmp.delete("")
200
+ expect(tmp.sort!).to eq(["Ruby on Rails Mug", "Ruby on Rails Stein", "Ruby on Rails Tote"])
201
+ end
202
+
203
+ it "should be able to display products priced between 15 and 18 dollars across multiple pages" do
204
+ Spree::Config.products_per_page = 2
205
+ within(:css, '#taxonomies') { click_link "Ruby on Rails" }
206
+ check "Price_Range_$15.00_-_$18.00"
207
+ within(:css, '#sidebar_products_search') { click_button "Search" }
208
+
209
+ expect(page.all('ul.product-listing li').size).to eq(2)
210
+ products = page.all('ul.product-listing li a[itemprop=name]')
211
+ expect(products.count).to eq(2)
212
+
213
+ find('nav.pagination .next a').click
214
+ products = page.all('ul.product-listing li a[itemprop=name]')
215
+ expect(products.count).to eq(1)
216
+ end
217
+
218
+ it "should be able to display products priced 18 dollars and above" do
219
+ within(:css, '#taxonomies') { click_link "Ruby on Rails" }
220
+ check "Price_Range_$18.00_-_$20.00"
221
+ check "Price_Range_$20.00_or_over"
222
+ within(:css, '#sidebar_products_search') { click_button "Search" }
223
+
224
+ expect(page.all('ul.product-listing li').size).to eq(4)
225
+ tmp = page.all('ul.product-listing li a').map(&:text).flatten.compact
226
+ tmp.delete("")
227
+ expect(tmp.sort!).to eq(["Ruby on Rails Bag",
228
+ "Ruby on Rails Baseball Jersey",
229
+ "Ruby on Rails Jr. Spaghetti",
230
+ "Ruby on Rails Ringer T-Shirt"])
231
+ end
232
+
233
+ it "should be able to put a product without a description in the cart" do
234
+ product = FactoryGirl.create(:base_product, :description => nil, :name => 'Sample', :price => '19.99')
235
+ visit spree.product_path(product)
236
+ expect(page).to have_content "This product has no description"
237
+ click_button 'add-to-cart-button'
238
+ expect(page).to have_content "This product has no description"
239
+ end
240
+
241
+ it "shouldn't be able to put a product without a current price in the cart" do
242
+ product = FactoryGirl.create(:base_product, :description => nil, :name => 'Sample', :price => '19.99')
243
+ Spree::Config.currency = "CAN"
244
+ Spree::Config.show_products_without_price = true
245
+ visit spree.product_path(product)
246
+ expect(page).to have_content "This product is not available in the selected currency."
247
+ expect(page).not_to have_content "add-to-cart-button"
248
+ end
249
+
250
+ it "should return the correct title when displaying a single product" do
251
+ product = Spree::Product.find_by_name("Ruby on Rails Baseball Jersey")
252
+ click_link product.name
253
+
254
+ within("div#product-description") do
255
+ within("h1.product-title") do
256
+ expect(page).to have_content("Ruby on Rails Baseball Jersey")
257
+ end
258
+ end
259
+ end
260
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.feature "Promotion Code Invalidation" do
4
+ given!(:promotion) do
5
+ FactoryGirl.create(
6
+ :promotion_with_item_adjustment,
7
+ code: "PROMO",
8
+ per_code_usage_limit: 1,
9
+ adjustment_rate: 5
10
+ )
11
+ end
12
+
13
+ background do
14
+ FactoryGirl.create(:product, name: "DL-44")
15
+ FactoryGirl.create(:product, name: "E-11")
16
+
17
+ visit spree.root_path
18
+ click_link "DL-44"
19
+ click_button "Add To Cart"
20
+
21
+ visit spree.root_path
22
+ click_link "E-11"
23
+ click_button "Add To Cart"
24
+ end
25
+
26
+ scenario "adding the promotion to a cart with two applicable items" do
27
+ fill_in "Coupon code", with: "PROMO"
28
+ click_button "Update"
29
+
30
+ expect(page).to have_content("The coupon code was successfully applied to your order")
31
+
32
+ within("#cart_adjustments") do
33
+ expect(page).to have_content("-$10.00")
34
+ end
35
+
36
+ # Remove an item
37
+ fill_in "order_line_items_attributes_0_quantity", with: 0
38
+ click_button "Update"
39
+ within("#cart_adjustments") do
40
+ expect(page).to have_content("-$5.00")
41
+ end
42
+
43
+ # Add it back
44
+ visit spree.root_path
45
+ click_link "DL-44"
46
+ click_button "Add To Cart"
47
+ within("#cart_adjustments") do
48
+ expect(page).to have_content("-$10.00")
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,128 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.feature "Quantity Promotions" do
4
+ given(:action) do
5
+ Spree::Promotion::Actions::CreateQuantityAdjustments.create(
6
+ calculator: calculator,
7
+ preferred_group_size: 2
8
+ )
9
+ end
10
+
11
+ given(:promotion) { FactoryGirl.create(:promotion, code: "PROMO") }
12
+ given(:calculator) { FactoryGirl.create(:calculator, preferred_amount: 5) }
13
+
14
+ background do
15
+ FactoryGirl.create(:product, name: "DL-44")
16
+ FactoryGirl.create(:product, name: "E-11")
17
+ promotion.actions << action
18
+
19
+ visit spree.root_path
20
+ click_link "DL-44"
21
+ click_button "Add To Cart"
22
+ end
23
+
24
+ scenario "adding and removing items from the cart" do
25
+ # Attempt to use the code with too few items.
26
+ fill_in "Coupon code", with: "PROMO"
27
+ click_button "Update"
28
+ expect(page).to have_content("This coupon code could not be applied to the cart at this time")
29
+
30
+ # Add another item to our cart.
31
+ visit spree.root_path
32
+ click_link "DL-44"
33
+ click_button "Add To Cart"
34
+
35
+ # Using the code should now succeed.
36
+ fill_in "Coupon code", with: "PROMO"
37
+ click_button "Update"
38
+ expect(page).to have_content("The coupon code was successfully applied to your order")
39
+ within("#cart_adjustments") do
40
+ expect(page).to have_content("-$10.00")
41
+ end
42
+
43
+ # Reduce quantity by 1, making promotion not apply.
44
+ fill_in "order_line_items_attributes_0_quantity", with: 1
45
+ click_button "Update"
46
+ expect(page).to_not have_content("#cart_adjustments")
47
+
48
+ # Bump quantity to 3, making promotion apply "once."
49
+ fill_in "order_line_items_attributes_0_quantity", with: 3
50
+ click_button "Update"
51
+ within("#cart_adjustments") do
52
+ expect(page).to have_content("-$10.00")
53
+ end
54
+
55
+ # Bump quantity to 4, making promotion apply "twice."
56
+ fill_in "order_line_items_attributes_0_quantity", with: 4
57
+ click_button "Update"
58
+ within("#cart_adjustments") do
59
+ expect(page).to have_content("-$20.00")
60
+ end
61
+ end
62
+
63
+ # Catches an earlier issue with quantity calculation.
64
+ scenario "adding odd numbers of items to the cart" do
65
+ # Bump quantity to 3
66
+ fill_in "order_line_items_attributes_0_quantity", with: 3
67
+ click_button "Update"
68
+
69
+ # Apply the promo code and see a $10 discount (for 2 of the 3 items)
70
+ fill_in "Coupon code", with: "PROMO"
71
+ click_button "Update"
72
+ expect(page).to have_content("The coupon code was successfully applied to your order")
73
+ within("#cart_adjustments") do
74
+ expect(page).to have_content("-$10.00")
75
+ end
76
+
77
+ # Add a different product to our cart with quantity of 2.
78
+ visit spree.root_path
79
+ click_link "E-11"
80
+ fill_in "quantity", with: "2"
81
+ click_button "Add To Cart"
82
+
83
+ # We now have 5 items total, so discount should increase.
84
+ within("#cart_adjustments") do
85
+ expect(page).to have_content("-$20.00")
86
+ end
87
+ end
88
+
89
+ context "with a group size of 3" do
90
+ given(:action) do
91
+ Spree::Promotion::Actions::CreateQuantityAdjustments.create(
92
+ calculator: calculator,
93
+ preferred_group_size: 3
94
+ )
95
+ end
96
+
97
+ background { FactoryGirl.create(:product, name: "DC-15A") }
98
+
99
+ scenario "odd number of changes to quantities" do
100
+ fill_in "order_line_items_attributes_0_quantity", with: 3
101
+ click_button "Update"
102
+
103
+ # Apply the promo code and see a $15 discount
104
+ fill_in "Coupon code", with: "PROMO"
105
+ click_button "Update"
106
+ expect(page).to have_content("The coupon code was successfully applied to your order")
107
+ within("#cart_adjustments") do
108
+ expect(page).to have_content("-$15.00")
109
+ end
110
+
111
+ # Add two different products to our cart
112
+ visit spree.root_path
113
+ click_link "E-11"
114
+ click_button "Add To Cart"
115
+ within("#cart_adjustments") do
116
+ expect(page).to have_content("-$15.00")
117
+ end
118
+
119
+ # Reduce quantity of first item to 2
120
+ fill_in "order_line_items_attributes_0_quantity", with: 2
121
+ click_button "Update"
122
+ within("#cart_adjustments") do
123
+ expect(page).to have_content("-$15.00")
124
+ end
125
+ end
126
+ end
127
+ end
128
+
@@ -0,0 +1,135 @@
1
+ require 'spec_helper'
2
+
3
+ describe "viewing products", type: :feature, inaccessible: true do
4
+ let!(:taxonomy) { create(:taxonomy, :name => "Category") }
5
+ let!(:super_clothing) { taxonomy.root.children.create(:name => "Super Clothing") }
6
+ let!(:t_shirts) { super_clothing.children.create(:name => "T-Shirts") }
7
+ let!(:xxl) { t_shirts.children.create(:name => "XXL") }
8
+ let!(:product) do
9
+ product = create(:product, :name => "Superman T-Shirt")
10
+ product.taxons << t_shirts
11
+ end
12
+ let(:metas) { { :meta_description => 'Brand new Ruby on Rails TShirts', :meta_title => "Ruby On Rails TShirt", :meta_keywords => 'ror, tshirt, ruby' } }
13
+ let(:store_name) do
14
+ ((first_store = Spree::Store.first) && first_store.name).to_s
15
+ end
16
+
17
+ # Regression test for #1796
18
+ it "can see a taxon's products, even if that taxon has child taxons" do
19
+ visit '/t/category/super-clothing/t-shirts'
20
+ expect(page).to have_content("Superman T-Shirt")
21
+ end
22
+
23
+ it "shouldn't show nested taxons with a search" do
24
+ visit '/t/category/super-clothing?keywords=shirt'
25
+ expect(page).to have_content("Superman T-Shirt")
26
+ expect(page).not_to have_selector("div[data-hook='taxon_children']")
27
+ end
28
+
29
+ describe 'meta tags and title' do
30
+ it 'displays metas' do
31
+ t_shirts.update_attributes metas
32
+ visit '/t/category/super-clothing/t-shirts'
33
+ expect(page).to have_meta(:description, 'Brand new Ruby on Rails TShirts')
34
+ expect(page).to have_meta(:keywords, 'ror, tshirt, ruby')
35
+ end
36
+
37
+ it 'display title if set' do
38
+ t_shirts.update_attributes metas
39
+ visit '/t/category/super-clothing/t-shirts'
40
+ expect(page).to have_title("Ruby On Rails TShirt")
41
+ end
42
+
43
+ it 'displays title from taxon root and taxon name' do
44
+ visit '/t/category/super-clothing/t-shirts'
45
+ expect(page).to have_title('Category - T-Shirts - ' + store_name)
46
+ end
47
+
48
+ # Regression test for #2814
49
+ it "doesn't use meta_title as heading on page" do
50
+ t_shirts.update_attributes metas
51
+ visit '/t/category/super-clothing/t-shirts'
52
+ within("h1.taxon-title") do
53
+ expect(page).to have_content(t_shirts.name)
54
+ end
55
+ end
56
+
57
+ it 'uses taxon name in title when meta_title set to empty string' do
58
+ t_shirts.update_attributes meta_title: ''
59
+ visit '/t/category/super-clothing/t-shirts'
60
+ expect(page).to have_title('Category - T-Shirts - ' + store_name)
61
+ end
62
+ end
63
+
64
+ context "taxon pages" do
65
+ include_context "custom products"
66
+ before do
67
+ visit spree.root_path
68
+ end
69
+
70
+ it "should be able to visit brand Ruby on Rails" do
71
+ within(:css, '#taxonomies') { click_link "Ruby on Rails" }
72
+
73
+ expect(page.all('ul.product-listing li').size).to eq(7)
74
+ tmp = page.all('ul.product-listing li a').map(&:text).flatten.compact
75
+ tmp.delete("")
76
+ array = ["Ruby on Rails Bag",
77
+ "Ruby on Rails Baseball Jersey",
78
+ "Ruby on Rails Jr. Spaghetti",
79
+ "Ruby on Rails Mug",
80
+ "Ruby on Rails Ringer T-Shirt",
81
+ "Ruby on Rails Stein",
82
+ "Ruby on Rails Tote"]
83
+ expect(tmp.sort!).to eq(array)
84
+ end
85
+
86
+ it "should be able to visit brand Ruby" do
87
+ within(:css, '#taxonomies') { click_link "Ruby" }
88
+
89
+ expect(page.all('ul.product-listing li').size).to eq(1)
90
+ tmp = page.all('ul.product-listing li a').map(&:text).flatten.compact
91
+ tmp.delete("")
92
+ expect(tmp.sort!).to eq(["Ruby Baseball Jersey"])
93
+ end
94
+
95
+ it "should be able to visit brand Apache" do
96
+ within(:css, '#taxonomies') { click_link "Apache" }
97
+
98
+ expect(page.all('ul.product-listing li').size).to eq(1)
99
+ tmp = page.all('ul.product-listing li a').map(&:text).flatten.compact
100
+ tmp.delete("")
101
+ expect(tmp.sort!).to eq(["Apache Baseball Jersey"])
102
+ end
103
+
104
+ it "should be able to visit category Clothing" do
105
+ click_link "Clothing"
106
+
107
+ expect(page.all('ul.product-listing li').size).to eq(5)
108
+ tmp = page.all('ul.product-listing li a').map(&:text).flatten.compact
109
+ tmp.delete("")
110
+ expect(tmp.sort!).to eq(["Apache Baseball Jersey",
111
+ "Ruby Baseball Jersey",
112
+ "Ruby on Rails Baseball Jersey",
113
+ "Ruby on Rails Jr. Spaghetti",
114
+ "Ruby on Rails Ringer T-Shirt"])
115
+ end
116
+
117
+ it "should be able to visit category Mugs" do
118
+ click_link "Mugs"
119
+
120
+ expect(page.all('ul.product-listing li').size).to eq(2)
121
+ tmp = page.all('ul.product-listing li a').map(&:text).flatten.compact
122
+ tmp.delete("")
123
+ expect(tmp.sort!).to eq(["Ruby on Rails Mug", "Ruby on Rails Stein"])
124
+ end
125
+
126
+ it "should be able to visit category Bags" do
127
+ click_link "Bags"
128
+
129
+ expect(page.all('ul.product-listing li').size).to eq(2)
130
+ tmp = page.all('ul.product-listing li a').map(&:text).flatten.compact
131
+ tmp.delete("")
132
+ expect(tmp.sort!).to eq(["Ruby on Rails Bag", "Ruby on Rails Tote"])
133
+ end
134
+ end
135
+ end