jiffyshirts_spree_reviews 2.3.1.1

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 (99) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +11 -0
  5. data/Gemfile +6 -0
  6. data/Guardfile +9 -0
  7. data/LICENSE.md +26 -0
  8. data/README.md +54 -0
  9. data/Rakefile +15 -0
  10. data/app/assets/images/store/reviews/delete.gif +0 -0
  11. data/app/assets/images/store/reviews/star.gif +0 -0
  12. data/app/assets/javascripts/spree/backend/jiffyshirts_spree_reviews.js +7 -0
  13. data/app/assets/javascripts/spree/frontend/jiffyshirts_spree_reviews.js +7 -0
  14. data/app/assets/stylesheets/spree/backend/jiffyshirts_spree_reviews.css +3 -0
  15. data/app/assets/stylesheets/spree/frontend/jiffyshirts_spree_reviews.css.erb +83 -0
  16. data/app/controllers/spree/admin/feedback_reviews_controller.rb +6 -0
  17. data/app/controllers/spree/admin/review_settings_controller.rb +21 -0
  18. data/app/controllers/spree/admin/reviews_controller.rb +34 -0
  19. data/app/controllers/spree/feedback_reviews_controller.rb +41 -0
  20. data/app/controllers/spree/products_controller_decorator.rb +5 -0
  21. data/app/controllers/spree/reviews_controller.rb +48 -0
  22. data/app/helpers/spree/reviews_helper.rb +17 -0
  23. data/app/models/spree/feedback_review.rb +17 -0
  24. data/app/models/spree/product_decorator.rb +21 -0
  25. data/app/models/spree/review.rb +36 -0
  26. data/app/models/spree/reviews_ability.rb +17 -0
  27. data/app/models/spree/reviews_configuration.rb +23 -0
  28. data/app/overrides/add_reviews_after_product_properties.rb +5 -0
  29. data/app/overrides/add_reviews_tab_to_admin.rb +4 -0
  30. data/app/overrides/add_reviews_to_admin_configuration_sidebar.rb +5 -0
  31. data/app/overrides/fix_highlighting_of_products_tab.rb +5 -0
  32. data/app/views/spree/admin/feedback_reviews/index.html.erb +44 -0
  33. data/app/views/spree/admin/review_settings/edit.html.erb +40 -0
  34. data/app/views/spree/admin/reviews/_form.html.erb +22 -0
  35. data/app/views/spree/admin/reviews/edit.html.erb +26 -0
  36. data/app/views/spree/admin/reviews/index.html.erb +111 -0
  37. data/app/views/spree/feedback_reviews/_form.html.erb +13 -0
  38. data/app/views/spree/feedback_reviews/_summary.html.erb +6 -0
  39. data/app/views/spree/feedback_reviews/create.js.erb +7 -0
  40. data/app/views/spree/reviews/_form.html.erb +27 -0
  41. data/app/views/spree/reviews/_stars.html.erb +13 -0
  42. data/app/views/spree/reviews/index.html.erb +1 -0
  43. data/app/views/spree/reviews/new.html.erb +3 -0
  44. data/app/views/spree/shared/_rating.html.erb +15 -0
  45. data/app/views/spree/shared/_review.html.erb +24 -0
  46. data/app/views/spree/shared/_review_summary.html.erb +9 -0
  47. data/app/views/spree/shared/_reviews.html.erb +15 -0
  48. data/app/views/spree/shared/_shortrating.html.erb +9 -0
  49. data/config/initializers/constants.rb +1 -0
  50. data/config/initializers/load_preferences.rb +5 -0
  51. data/config/locales/de-CH.yml +67 -0
  52. data/config/locales/de.yml +67 -0
  53. data/config/locales/en-GB.yml +67 -0
  54. data/config/locales/en.yml +65 -0
  55. data/config/locales/es.yml +67 -0
  56. data/config/locales/fr.yml +67 -0
  57. data/config/locales/pl.yml +71 -0
  58. data/config/locales/pt-BR.yml +67 -0
  59. data/config/locales/pt.yml +68 -0
  60. data/config/locales/ro.yml +75 -0
  61. data/config/locales/ru.yml +73 -0
  62. data/config/locales/sv.yml +65 -0
  63. data/config/locales/tr.yml +67 -0
  64. data/config/routes.rb +17 -0
  65. data/db/migrate/20081020220724_create_reviews.rb +21 -0
  66. data/db/migrate/20101222083309_create_feedback_reviews.rb +17 -0
  67. data/db/migrate/20110406083603_add_rating_to_products.rb +21 -0
  68. data/db/migrate/20110606150524_add_user_to_reviews.rb +9 -0
  69. data/db/migrate/20110806093221_add_ip_address_to_reviews.rb +9 -0
  70. data/db/migrate/20120110172331_namespace_tables.rb +6 -0
  71. data/db/migrate/20120123141326_recalculate_ratings.rb +20 -0
  72. data/db/migrate/20120712182514_add_locale_to_reviews.rb +9 -0
  73. data/db/migrate/20120712182627_add_locale_to_feedback_reviews.rb +9 -0
  74. data/db/sample/ratings.yml +16 -0
  75. data/db/sample/reviews.yml +59 -0
  76. data/jiffyshirts_spree_reviews.gemspec +31 -0
  77. data/lib/generators/jiffyshirts_spree_reviews/install/install_generator.rb +30 -0
  78. data/lib/jiffyshirts_spree_reviews/engine.rb +23 -0
  79. data/lib/jiffyshirts_spree_reviews.rb +4 -0
  80. data/script/rails +5 -0
  81. data/spec/controllers/admin/feedback_reviews_controller_spec.rb +29 -0
  82. data/spec/controllers/admin/review_settings_controller_spec.rb +57 -0
  83. data/spec/controllers/admin/reviews_controller_spec.rb +63 -0
  84. data/spec/controllers/feedback_reviews_controller_spec.rb +71 -0
  85. data/spec/controllers/products_controller_spec.rb +9 -0
  86. data/spec/controllers/reviews_controller_spec.rb +136 -0
  87. data/spec/factories/feedback_review_factory.rb +8 -0
  88. data/spec/factories/review_factory.rb +15 -0
  89. data/spec/features/admin_spec.rb +35 -0
  90. data/spec/features/reviews_spec.rb +106 -0
  91. data/spec/helpers/review_helper_spec.rb +28 -0
  92. data/spec/models/feedback_review_spec.rb +78 -0
  93. data/spec/models/product_spec.rb +62 -0
  94. data/spec/models/review_spec.rb +169 -0
  95. data/spec/models/reviews_ability_spec.rb +46 -0
  96. data/spec/models/reviews_configuration_spec.rb +45 -0
  97. data/spec/spec_helper.rb +48 -0
  98. data/vendor/assets/javascripts/jquery.rating.js +376 -0
  99. metadata +339 -0
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'Review Admin', js: true do
4
+ stub_authorization!
5
+
6
+ given!(:review) { create(:review) }
7
+
8
+ context 'index' do
9
+ background do
10
+ visit spree.admin_reviews_path
11
+ end
12
+
13
+ scenario 'list reviews' do
14
+ expect(page).to have_text review.product.name
15
+ end
16
+
17
+ scenario 'approve reviews' do
18
+ expect(review.approved).to be false
19
+ within("tr#review_#{review.id}") do
20
+ find('.approve').click
21
+ end
22
+ expect(review.reload.approved).to be true
23
+ end
24
+
25
+ scenario 'edit reviews' do
26
+ expect(page).to have_text review.product.name
27
+ within("tr#review_#{review.id}") do
28
+ find('.edit').click
29
+ end
30
+
31
+ expect(page).to have_text 'Editing'
32
+ expect(page).to have_text review.title
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,106 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'Reviews', js: true do
4
+ given!(:someone) { create(:user, email: 'ryan@spree.com') }
5
+ given!(:review) { create(:review, :approved, user: someone) }
6
+
7
+ background do
8
+ Spree::Reviews::Config.include_unapproved_reviews = false
9
+ end
10
+
11
+ context 'product with no review' do
12
+ given!(:product_no_reviews) { create(:product) }
13
+ scenario 'informs that no reviews has been written yet' do
14
+ visit spree.product_path(product_no_reviews)
15
+ expect(page).to have_text Spree.t(:no_reviews_available)
16
+ end
17
+
18
+ # Regression test for #103
19
+ context "shows correct number of previews" do
20
+ background do
21
+ FactoryGirl.create_list :review, 3, product: product_no_reviews, approved: true
22
+ Spree::Reviews::Config[:preview_size] = 2
23
+ end
24
+
25
+ scenario "displayed reviews are limited by the set preview size" do
26
+ visit spree.product_path(product_no_reviews)
27
+ expect(page.all(".review").count).to eql(2)
28
+ end
29
+ end
30
+ end
31
+
32
+ context 'when anonymous user' do
33
+ background do
34
+ Spree::Reviews::Config.require_login = true
35
+ end
36
+
37
+ context 'visit product with review' do
38
+ background do
39
+ visit spree.product_path(review.product)
40
+ end
41
+
42
+ scenario 'should see review title' do
43
+ expect(page).to have_text review.title
44
+ end
45
+
46
+ scenario 'can not create review' do
47
+ expect(page).not_to have_text Spree.t(:write_your_own_review)
48
+ end
49
+ end
50
+ end
51
+
52
+ context 'when logged in user' do
53
+ given!(:user) { create(:user) }
54
+
55
+ background do
56
+ sign_in_as! user
57
+ end
58
+
59
+ context 'visit product with review' do
60
+ background do
61
+ visit spree.product_path(review.product)
62
+ end
63
+
64
+ scenario 'can see review title' do
65
+ expect(page).to have_text review.title
66
+ end
67
+
68
+ scenario 'can see create new review button' do
69
+ expect(page).to have_text Spree.t(:write_your_own_review)
70
+ end
71
+
72
+ scenario 'can create new review' do
73
+ click_on Spree.t(:write_your_own_review)
74
+
75
+ expect(page).to have_text Spree.t(:leave_us_a_review_for, name: review.product.name)
76
+
77
+ within '#new_review' do
78
+ click_star(3)
79
+
80
+ fill_in 'review_name', with: user.email
81
+ fill_in 'review_title', with: 'Great product!'
82
+ fill_in 'review_review', with: 'Some big review text..'
83
+ click_on 'Submit your review'
84
+ end
85
+
86
+ expect(page.find('.flash.notice', text: Spree.t(:review_successfully_submitted))).to be_truthy
87
+ expect(page).not_to have_text 'Some big review text..'
88
+ end
89
+ end
90
+ end
91
+
92
+ private
93
+
94
+ def sign_in_as!(user)
95
+ visit spree.login_path
96
+ within '#new_spree_user' do
97
+ fill_in 'Email', with: user.email
98
+ fill_in 'Password', with: user.password
99
+ end
100
+ click_button 'Login'
101
+ end
102
+
103
+ def click_star(num)
104
+ page.all(:xpath, "//a[@title='#{num} stars']")[0].click
105
+ end
106
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::ReviewsHelper do
4
+ context 'star' do
5
+ specify do
6
+ expect(star('a_class')).to eq '<span class="a_class"> &#10030; </span>'
7
+ end
8
+ end
9
+
10
+ context 'mk_stars' do
11
+ specify do
12
+ matches = mk_stars(2).scan(/unlit/)
13
+ expect(matches.length).to eq 3
14
+
15
+ end
16
+ end
17
+
18
+ context 'txt_stars' do
19
+ specify do
20
+ expect(txt_stars(2, true)).to eq '2 out of 5'
21
+ end
22
+
23
+ specify do
24
+ expect(txt_stars(3, false)).to be_a String
25
+ expect(txt_stars(3, false)).to eq('3')
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::FeedbackReview do
4
+ context 'validations' do
5
+ it 'validates by default' do
6
+ build(:feedback_review).should be_valid
7
+ end
8
+
9
+ it 'validates with a nil user' do
10
+ build(:feedback_review, user: nil).should be_valid
11
+ end
12
+
13
+ it 'does not validate with a nil review' do
14
+ build(:feedback_review, review: nil).should_not be_valid
15
+ end
16
+
17
+ context 'rating' do
18
+ it 'does not validate when no rating is specified' do
19
+ build(:feedback_review, rating: nil).should_not be_valid
20
+ end
21
+
22
+ it 'does not validate when the rating is not a number' do
23
+ build(:feedback_review, rating: 'not_a_number').should_not be_valid
24
+ end
25
+
26
+ it 'does not validate when the rating is a float' do
27
+ build(:feedback_review, rating: 2.718).should_not be_valid
28
+ end
29
+
30
+ it 'does not validate when the rating is less than 1' do
31
+ build(:feedback_review, rating: 0).should_not be_valid
32
+ build(:feedback_review, rating: -5).should_not be_valid
33
+ end
34
+
35
+ it 'does not validate when the rating is greater than 5' do
36
+ build(:feedback_review, rating: 6).should_not be_valid
37
+ build(:feedback_review, rating: 8).should_not be_valid
38
+ end
39
+
40
+ (1..5).each do |i|
41
+ it "validates when the rating is #{i}" do
42
+ build(:feedback_review, rating: i).should be_valid
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ context 'scopes' do
49
+ context 'most_recent_first' do
50
+ let!(:feedback_review_1) { create(:feedback_review, created_at: 10.days.ago) }
51
+ let!(:feedback_review_2) { create(:feedback_review, created_at: 2.days.ago) }
52
+ let!(:feedback_review_3) { create(:feedback_review, created_at: 5.days.ago) }
53
+
54
+ it 'properly runs most_recent_first queries' do
55
+ Spree::FeedbackReview.most_recent_first.to_a.should eq([feedback_review_2, feedback_review_3, feedback_review_1])
56
+ end
57
+
58
+ it 'defaults to most_recent_first queries' do
59
+ Spree::FeedbackReview.all.to_a.should eq([feedback_review_2, feedback_review_3, feedback_review_1])
60
+ end
61
+ end
62
+
63
+ context 'localized' do
64
+ let!(:en_feedback_review_1) { create(:feedback_review, locale: 'en', created_at: 10.days.ago) }
65
+ let!(:en_feedback_review_2) { create(:feedback_review, locale: 'en', created_at: 2.days.ago) }
66
+ let!(:en_feedback_review_3) { create(:feedback_review, locale: 'en', created_at: 5.days.ago) }
67
+
68
+ let!(:es_feedback_review_1) { create(:feedback_review, locale: 'es', created_at: 10.days.ago) }
69
+ let!(:fr_feedback_review_1) { create(:feedback_review, locale: 'fr', created_at: 10.days.ago) }
70
+
71
+ it 'properly runs localized queries' do
72
+ Spree::FeedbackReview.localized('en').to_a.should eq([en_feedback_review_2, en_feedback_review_3, en_feedback_review_1])
73
+ Spree::FeedbackReview.localized('es').to_a.should eq([es_feedback_review_1])
74
+ Spree::FeedbackReview.localized('fr').to_a.should eq([fr_feedback_review_1])
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,62 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Product do
4
+ it { should respond_to(:avg_rating) }
5
+ it { should respond_to(:reviews) }
6
+ it { should respond_to(:stars) }
7
+
8
+ context '#stars' do
9
+ let(:product) { build(:product) }
10
+
11
+ it 'rounds' do
12
+ product.stub(:avg_rating).and_return(3.7)
13
+ expect(product.stars).to eq(4)
14
+
15
+ product.stub(:avg_rating).and_return(2.3)
16
+ expect(product.stars).to eq(2)
17
+ end
18
+
19
+
20
+ it 'handles a nil value' do
21
+ product.stub(:avg_rating).and_return(nil)
22
+ expect {
23
+ expect(product.stars).to eq(0)
24
+ }.not_to raise_error
25
+ end
26
+ end
27
+
28
+ context '#recalculate_rating' do
29
+ let!(:product) { create(:product) }
30
+
31
+ context 'when there are approved reviews' do
32
+ let!(:approved_review_1) { create(:review, product: product, approved: true, rating: 4) }
33
+ let!(:approved_review_2) { create(:review, product: product, approved: true, rating: 5) }
34
+ let!(:unapproved_review_1) { create(:review, product: product, approved: false, rating: 4) }
35
+
36
+ it "updates the product average rating and ignores unapproved reviews" do
37
+ product.avg_rating = 0
38
+ product.reviews_count = 0
39
+ product.save!
40
+
41
+ product.recalculate_rating
42
+ product.avg_rating.should eq(4.5)
43
+ product.reviews_count.should eq(2)
44
+ end
45
+ end
46
+
47
+ context 'when no approved reviews' do
48
+ let!(:unapproved_review_1) { create(:review, product: product, approved: false, rating: 4) }
49
+
50
+ it "updates the product average rating and ignores unapproved reviews" do
51
+ product.avg_rating = 3
52
+ product.reviews_count = 20
53
+ product.save!
54
+
55
+ product.recalculate_rating
56
+ product.avg_rating.should eq(0)
57
+ product.reviews_count.should eq(0)
58
+ end
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,169 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Review do
4
+
5
+ context 'validations' do
6
+ it 'validates by default' do
7
+ build(:review).should be_valid
8
+ end
9
+
10
+ it 'validates with a nil user' do
11
+ build(:review, user: nil).should be_valid
12
+ end
13
+
14
+ it 'does not validate with a nil review' do
15
+ build(:review, review: nil).should_not be_valid
16
+ end
17
+
18
+ context 'rating' do
19
+ it 'does not validate when no rating is specified' do
20
+ build(:review, rating: nil).should_not be_valid
21
+ end
22
+
23
+ it 'doesnot validate when the rating is not a number' do
24
+ build(:review, rating: 'not_a_number').should_not be_valid
25
+ end
26
+
27
+ it 'does validate when the rating is a float' do
28
+ build(:review, rating: 2.718).should be_valid
29
+ end
30
+
31
+ it 'does not validate when the rating is less than 1' do
32
+ build(:review, rating: 0).should_not be_valid
33
+ build(:review, rating: -5).should_not be_valid
34
+ end
35
+
36
+ it 'does not validate when the rating is greater than 5' do
37
+ build(:review, rating: 6).should_not be_valid
38
+ build(:review, rating: 8).should_not be_valid
39
+ end
40
+
41
+ (1..5).each do |i|
42
+ it "validates when the rating is #{i}" do
43
+ build(:review, rating: i).should be_valid
44
+ end
45
+ end
46
+ end
47
+
48
+ context 'review body' do
49
+ it 'should not be valid without a body' do
50
+ build(:review, review: nil).should_not be_valid
51
+ end
52
+ end
53
+ end
54
+
55
+ context 'scopes' do
56
+ context 'most_recent_first' do
57
+ let!(:review_1) { create(:review, created_at: 10.days.ago) }
58
+ let!(:review_2) { create(:review, created_at: 2.days.ago) }
59
+ let!(:review_3) { create(:review, created_at: 5.days.ago) }
60
+
61
+ it 'properly runs most_recent_first queries' do
62
+ Spree::Review.most_recent_first.to_a.should eq([review_2, review_3, review_1])
63
+ end
64
+
65
+ it 'defaults to most_recent_first queries' do
66
+ Spree::Review.all.to_a.should eq([review_2, review_3, review_1])
67
+ end
68
+ end
69
+
70
+ context 'oldest_first' do
71
+ let!(:review_1) { create(:review, created_at: 10.days.ago) }
72
+ let!(:review_2) { create(:review, created_at: 2.days.ago) }
73
+ let!(:review_3) { create(:review, created_at: 5.days.ago) }
74
+ let!(:review_4) { create(:review, created_at: 1.days.ago) }
75
+
76
+ before do
77
+ reset_spree_preferences
78
+ end
79
+
80
+ it 'properly runs oldest_first queries' do
81
+ Spree::Review.oldest_first.to_a.should eq([review_1, review_3, review_2, review_4])
82
+ end
83
+
84
+ it 'uses oldest_first for preview' do
85
+ reset_spree_preferences
86
+ Spree::Review.preview.to_a.should eq([review_1, review_3, review_2])
87
+ end
88
+ end
89
+
90
+ context 'localized' do
91
+ let!(:en_review_1) { create(:review, locale: 'en', created_at: 10.days.ago) }
92
+ let!(:en_review_2) { create(:review, locale: 'en', created_at: 2.days.ago) }
93
+ let!(:en_review_3) { create(:review, locale: 'en', created_at: 5.days.ago) }
94
+
95
+ let!(:es_review_1) { create(:review, locale: 'es', created_at: 10.days.ago) }
96
+ let!(:fr_review_1) { create(:review, locale: 'fr', created_at: 10.days.ago) }
97
+
98
+ it 'properly runs localized queries' do
99
+ Spree::Review.localized('en').to_a.should eq([en_review_2, en_review_3, en_review_1])
100
+ Spree::Review.localized('es').to_a.should eq([es_review_1])
101
+ Spree::Review.localized('fr').to_a.should eq([fr_review_1])
102
+ end
103
+ end
104
+
105
+ context 'approved / not_approved / default_approval_filter' do
106
+ let!(:approved_review_1) { create(:review, approved: true, created_at: 10.days.ago) }
107
+ let!(:approved_review_2) { create(:review, approved: true, created_at: 2.days.ago) }
108
+ let!(:approved_review_3) { create(:review, approved: true, created_at: 5.days.ago) }
109
+
110
+ let!(:unapproved_review_1) { create(:review, approved: false, created_at: 7.days.ago) }
111
+ let!(:unapproved_review_2) { create(:review, approved: false, created_at: 1.days.ago) }
112
+
113
+ it 'properly runs approved and unapproved queries' do
114
+ Spree::Review.approved.to_a.should eq([approved_review_2, approved_review_3, approved_review_1])
115
+ Spree::Review.not_approved.to_a.should eq([unapproved_review_2, unapproved_review_1])
116
+
117
+ Spree::Reviews::Config[:include_unapproved_reviews] = true
118
+ Spree::Review.default_approval_filter.to_a.should eq([unapproved_review_2,
119
+ approved_review_2,
120
+ approved_review_3,
121
+ unapproved_review_1,
122
+ approved_review_1])
123
+
124
+ Spree::Reviews::Config[:include_unapproved_reviews] = false
125
+ Spree::Review.default_approval_filter.to_a.should eq([approved_review_2, approved_review_3, approved_review_1])
126
+ end
127
+ end
128
+ end
129
+
130
+ context "#recalculate_product_rating" do
131
+ let(:product) { create(:product) }
132
+ let!(:review) { create(:review, product: product) }
133
+
134
+ before { product.reviews << review }
135
+
136
+ it "if approved" do
137
+ review.should_receive(:recalculate_product_rating)
138
+ review.approved = true
139
+ review.save!
140
+ end
141
+
142
+ it "if not approved" do
143
+ review.should_not_receive(:recalculate_product_rating)
144
+ review.save!
145
+ end
146
+
147
+ it "updates the product average rating" do
148
+ review.product.should_receive(:recalculate_rating)
149
+ review.approved = true
150
+ review.save!
151
+ end
152
+ end
153
+
154
+ context "#feedback_stars" do
155
+ let!(:review) { create(:review) }
156
+ before do
157
+ 3.times do |i|
158
+ f = Spree::FeedbackReview.new
159
+ f.review = review
160
+ f.rating = (i+1)
161
+ f.save
162
+ end
163
+ end
164
+
165
+ it "should return the average rating from feedback reviews" do
166
+ review.feedback_stars.should == 2
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ require "cancan/matchers"
4
+
5
+ describe Spree::ReviewsAbility do
6
+ context '.allow_anonymous_reviews?' do
7
+ it 'should depend on Spree::Reviews::Config[:require_login]' do
8
+ Spree::Reviews::Config[:require_login] = false
9
+ Spree::ReviewsAbility.allow_anonymous_reviews?.should be true
10
+ Spree::Reviews::Config[:require_login] = true
11
+ Spree::ReviewsAbility.allow_anonymous_reviews?.should be false
12
+ end
13
+ end
14
+
15
+ context 'permissions' do
16
+ let(:user_without_email) { double(:user, email: nil) }
17
+ let(:user_with_email) { double(:user, email: 'a@b.com') }
18
+
19
+ context 'when anonymous reviews are allowed' do
20
+ before do
21
+ Spree::Reviews::Config[:require_login] = false
22
+ end
23
+
24
+ it 'lets anyone create a review or feedback review' do
25
+ [user_without_email, user_with_email].each do |u|
26
+ Spree::ReviewsAbility.new(u).should be_able_to(:create, Spree::Review.new)
27
+ Spree::ReviewsAbility.new(u).should be_able_to(:create, Spree::FeedbackReview.new)
28
+ end
29
+ end
30
+ end
31
+
32
+ context 'when anonymous reviews are not allowed' do
33
+ before do
34
+ Spree::Reviews::Config[:require_login] = true
35
+ end
36
+
37
+ it 'only allows users with an email to create a review or feedback review' do
38
+ Spree::ReviewsAbility.new(user_without_email).should_not be_able_to(:create, Spree::Review.new)
39
+ Spree::ReviewsAbility.new(user_without_email).should_not be_able_to(:create, Spree::FeedbackReview.new)
40
+
41
+ Spree::ReviewsAbility.new(user_with_email).should be_able_to(:create, Spree::Review.new)
42
+ Spree::ReviewsAbility.new(user_with_email).should be_able_to(:create, Spree::FeedbackReview.new)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::ReviewsConfiguration do
4
+ subject { Spree::ReviewsConfiguration.new }
5
+
6
+ before do
7
+ reset_spree_preferences
8
+ end
9
+
10
+ it 'should have the include_unapproved_reviews preference' do
11
+ subject.should respond_to(:preferred_include_unapproved_reviews)
12
+ subject.should respond_to(:preferred_include_unapproved_reviews=)
13
+ subject.preferred_include_unapproved_reviews.should be false
14
+ end
15
+
16
+ it 'should have the preview_size preference' do
17
+ subject.should respond_to(:preferred_preview_size)
18
+ subject.should respond_to(:preferred_preview_size=)
19
+ subject.preferred_preview_size.should eq(3)
20
+ end
21
+
22
+ it 'should have the show_email preference' do
23
+ subject.should respond_to(:preferred_show_email)
24
+ subject.should respond_to(:preferred_show_email=)
25
+ subject.preferred_show_email.should be false
26
+ end
27
+
28
+ it 'should have the feedback_rating preference' do
29
+ subject.should respond_to(:preferred_feedback_rating)
30
+ subject.should respond_to(:preferred_feedback_rating=)
31
+ subject.preferred_feedback_rating.should be false
32
+ end
33
+
34
+ it 'should have the require_login preference' do
35
+ subject.should respond_to(:preferred_require_login)
36
+ subject.should respond_to(:preferred_require_login=)
37
+ subject.preferred_require_login.should be true
38
+ end
39
+
40
+ it 'should have the track_locale preference' do
41
+ subject.should respond_to(:preferred_track_locale)
42
+ subject.should respond_to(:preferred_track_locale=)
43
+ subject.preferred_track_locale.should be false
44
+ end
45
+ end
@@ -0,0 +1,48 @@
1
+ require 'simplecov'
2
+ SimpleCov.start 'rails'
3
+
4
+ ENV["RAILS_ENV"] = "test"
5
+
6
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
7
+ require 'rspec/rails'
8
+ require 'ffaker'
9
+ require 'database_cleaner'
10
+ require 'capybara'
11
+ require 'capybara/rspec'
12
+ require 'capybara/rails'
13
+ require 'capybara/poltergeist'
14
+
15
+ Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each {|f| require f }
16
+
17
+ require 'spree/testing_support/factories'
18
+ require 'spree/testing_support/controller_requests'
19
+ require 'spree/testing_support/authorization_helpers'
20
+ require 'spree/testing_support/preferences'
21
+ require 'spree/testing_support/url_helpers'
22
+
23
+ FactoryGirl.find_definitions
24
+
25
+ RSpec.configure do |config|
26
+ config.include Spree::TestingSupport::ControllerRequests
27
+ config.include Spree::TestingSupport::Preferences
28
+ config.include FactoryGirl::Syntax::Methods
29
+ config.include Spree::TestingSupport::UrlHelpers
30
+ config.infer_spec_type_from_file_location!
31
+ config.use_transactional_fixtures = false
32
+
33
+ config.before(:suite) do
34
+ DatabaseCleaner.strategy = :transaction
35
+ DatabaseCleaner.clean_with(:truncation)
36
+ end
37
+
38
+ config.before do
39
+ DatabaseCleaner.strategy = RSpec.current_example.metadata[:js] ? :truncation : :transaction
40
+ DatabaseCleaner.start
41
+ end
42
+
43
+ config.after do
44
+ DatabaseCleaner.clean
45
+ end
46
+
47
+ Capybara.javascript_driver = :poltergeist
48
+ end