solidus_reviews 1.2.0 → 1.5.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 (89) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +6 -0
  3. data/.gem_release.yml +5 -0
  4. data/.gitignore +13 -6
  5. data/.rspec +1 -1
  6. data/.rubocop.yml +3 -321
  7. data/.rubocop_todo.yml +197 -0
  8. data/CHANGELOG.md +155 -0
  9. data/Gemfile +14 -17
  10. data/{LICENSE.md → LICENSE} +1 -1
  11. data/README.md +63 -41
  12. data/Rakefile +3 -20
  13. data/app/assets/stylesheets/spree/frontend/solidus_reviews.css +4 -0
  14. data/app/controllers/spree/feedback_reviews_controller.rb +2 -8
  15. data/app/controllers/spree/reviews_controller.rb +29 -2
  16. data/app/decorators/controllers/solidus_reviews/spree/{admin/products_controller_decorator.rb → products_controller_decorator.rb} +0 -4
  17. data/app/decorators/models/solidus_reviews/spree/product_decorator.rb +6 -5
  18. data/app/helpers/spree/reviews_helper.rb +6 -6
  19. data/app/models/spree/feedback_review.rb +2 -2
  20. data/app/models/spree/permission_sets/review_display.rb +11 -0
  21. data/app/models/spree/permission_sets/review_management.rb +11 -0
  22. data/app/models/spree/review.rb +25 -10
  23. data/app/models/spree/reviews_ability.rb +7 -2
  24. data/app/models/spree/reviews_configuration.rb +10 -1
  25. data/app/overrides/add_reviews_tab_to_admin.rb +12 -4
  26. data/app/overrides/add_reviews_to_admin_configuration_sidebar.rb +12 -5
  27. data/app/views/spree/admin/review_settings/edit.html.erb +7 -0
  28. data/app/views/spree/admin/reviews/edit.html.erb +4 -2
  29. data/app/views/spree/admin/reviews/index.html.erb +9 -5
  30. data/app/views/spree/api/reviews/_feedback_review.json.jbuilder +1 -1
  31. data/app/views/spree/api/reviews/_review.json.jbuilder +1 -1
  32. data/app/views/spree/reviews/_form.html.erb +6 -4
  33. data/app/views/spree/reviews/edit.html.erb +3 -0
  34. data/app/views/spree/shared/_review.html.erb +6 -4
  35. data/bin/console +17 -0
  36. data/bin/rails +5 -5
  37. data/bin/rails-engine +13 -0
  38. data/bin/rails-sandbox +16 -0
  39. data/bin/rake +7 -0
  40. data/bin/sandbox +86 -0
  41. data/bin/setup +8 -0
  42. data/config/locales/de-CH.yml +1 -1
  43. data/config/locales/de.yml +1 -1
  44. data/config/locales/en-GB.yml +2 -1
  45. data/config/locales/en.yml +2 -1
  46. data/config/locales/es.yml +2 -1
  47. data/config/locales/fr.yml +1 -1
  48. data/config/locales/it.yml +1 -1
  49. data/config/locales/pl.yml +1 -1
  50. data/config/locales/pt-BR.yml +1 -1
  51. data/config/locales/pt.yml +1 -1
  52. data/config/locales/ro.yml +1 -1
  53. data/config/locales/sv.yml +1 -1
  54. data/config/locales/tr.yml +1 -1
  55. data/config/locales/uk.yml +1 -1
  56. data/config/locales/zh-CN.yml +1 -1
  57. data/config/locales/zh-TW.yml +1 -1
  58. data/config/routes.rb +3 -1
  59. data/db/migrate/20120123141326_recalculate_ratings.rb +1 -2
  60. data/db/migrate/20190613165528_add_verified_purchaser_to_reviews.rb +2 -0
  61. data/lib/controllers/spree/api/feedback_reviews_controller.rb +91 -0
  62. data/lib/controllers/spree/api/reviews_controller.rb +16 -14
  63. data/lib/generators/solidus_reviews/install/install_generator.rb +8 -7
  64. data/lib/solidus_reviews/engine.rb +26 -0
  65. data/lib/solidus_reviews/version.rb +5 -0
  66. data/lib/solidus_reviews.rb +4 -4
  67. data/solidus_reviews.gemspec +31 -34
  68. data/spec/controllers/spree/admin/feedback_reviews_controller_spec.rb +1 -1
  69. data/spec/controllers/spree/admin/review_settings_controller_spec.rb +3 -4
  70. data/spec/controllers/spree/admin/reviews_controller_spec.rb +3 -3
  71. data/spec/controllers/spree/api/feedback_reviews_controller_spec.rb +136 -0
  72. data/spec/controllers/spree/api/reviews_controller_spec.rb +27 -25
  73. data/spec/controllers/spree/feedback_reviews_controller_spec.rb +8 -8
  74. data/spec/controllers/spree/reviews_controller_spec.rb +145 -8
  75. data/spec/features/admin_spec.rb +6 -6
  76. data/spec/features/reviews_spec.rb +33 -32
  77. data/spec/fixtures/thinking-cat.jpg +0 -0
  78. data/spec/models/feedback_review_spec.rb +13 -13
  79. data/spec/models/product_spec.rb +13 -10
  80. data/spec/models/review_spec.rb +64 -41
  81. data/spec/models/reviews_ability_spec.rb +14 -14
  82. data/spec/models/reviews_configuration_spec.rb +21 -10
  83. data/spec/spec_helper.rb +18 -13
  84. data/spec/support/config.rb +7 -0
  85. data/spec/support/factories.rb +3 -0
  86. metadata +52 -213
  87. data/CONTRIBUTING.md +0 -28
  88. data/lib/spree_reviews/engine.rb +0 -22
  89. data/spec/controllers/spree/products_controller_spec.rb +0 -11
@@ -27,11 +27,11 @@ describe Spree::FeedbackReviewsController do
27
27
  comment = ['Thanks for your review!', 'Cheers'].join("\n")
28
28
  expect {
29
29
  post :create, params: { review_id: review.id,
30
- feedback_review: {
31
- comment: comment,
32
- rating: rating
33
- },
34
- format: :js }
30
+ feedback_review: {
31
+ comment: comment,
32
+ rating: rating
33
+ },
34
+ format: :js }
35
35
  expect(response.status).to eq(200)
36
36
  expect(response).to render_template(:create)
37
37
  }.to change(Spree::Review, :count).by(1)
@@ -48,7 +48,7 @@ describe Spree::FeedbackReviewsController do
48
48
  end
49
49
 
50
50
  it 'sets locale on feedback-review if required by config' do
51
- Spree::Reviews::Config.preferred_track_locale = true
51
+ stub_spree_preferences(Spree::Reviews::Config, track_locale: true)
52
52
  post :create, params: valid_attributes
53
53
  expect(assigns[:review].locale).to eq I18n.locale.to_s
54
54
  end
@@ -58,7 +58,7 @@ describe Spree::FeedbackReviewsController do
58
58
 
59
59
  expect {
60
60
  post :create, params: valid_attributes
61
- }.to raise_error
61
+ }.to raise_error(RuntimeError)
62
62
  end
63
63
 
64
64
  it 'removes all non-numbers from ratings parameter' do
@@ -68,7 +68,7 @@ describe Spree::FeedbackReviewsController do
68
68
 
69
69
  it 'do not create feedback-review if review doesnt exist' do
70
70
  expect {
71
- post :create, params: valid_attributes.merge!({ review_id: nil })
71
+ post :create, params: valid_attributes.merge!(review_id: nil)
72
72
  }.to raise_error ActionController::UrlGenerationError
73
73
  end
74
74
  end
@@ -5,6 +5,7 @@ require 'spec_helper'
5
5
  describe Spree::ReviewsController, type: :controller do
6
6
  let(:user) { create(:user) }
7
7
  let(:product) { create(:product) }
8
+ let(:review) { create(:review, :approved, product: product, user: user) }
8
9
  let(:review_params) do
9
10
  { product_id: product.slug,
10
11
  review: { rating: 3,
@@ -12,9 +13,8 @@ describe Spree::ReviewsController, type: :controller do
12
13
  title: 'Great Product',
13
14
  review: 'Some big review text..',
14
15
  images: [
15
- fixture_file_upload(File.new(Spree::Core::Engine.root + 'spec/fixtures/thinking-cat.jpg'))
16
- ] }
17
- }
16
+ fixture_file_upload(File.new('spec/fixtures/thinking-cat.jpg'))
17
+ ] } }
18
18
  end
19
19
 
20
20
  before do
@@ -22,7 +22,7 @@ describe Spree::ReviewsController, type: :controller do
22
22
  allow(controller).to receive(:spree_user_signed_in?).and_return(true)
23
23
  end
24
24
 
25
- context '#index' do
25
+ describe '#index' do
26
26
  context 'for a product that does not exist' do
27
27
  it 'responds with a 404' do
28
28
  expect {
@@ -43,7 +43,7 @@ describe Spree::ReviewsController, type: :controller do
43
43
  end
44
44
  end
45
45
 
46
- context '#new' do
46
+ describe '#new' do
47
47
  context 'for a product that does not exist' do
48
48
  it 'responds with a 404' do
49
49
  expect {
@@ -68,7 +68,40 @@ describe Spree::ReviewsController, type: :controller do
68
68
  end
69
69
  end
70
70
 
71
- context '#create' do
71
+ describe '#edit' do
72
+ context 'for a product that does not exist' do
73
+ it 'responds with a 404' do
74
+ expect {
75
+ get :edit, params: { id: review.id, product_id: 'not_real' }
76
+ }.to raise_error(ActiveRecord::RecordNotFound)
77
+ end
78
+ end
79
+
80
+ it 'fail if the user is not authorized to edit a review' do
81
+ allow(controller).to receive(:authorize!).and_raise(RuntimeError)
82
+
83
+ expect {
84
+ post :edit, params: { id: review.id, product_id: product.slug }
85
+ assert_match 'ryanbig', response.body
86
+ }.to raise_error RuntimeError
87
+ end
88
+
89
+ it 'render the edit template' do
90
+ get :edit, params: { id: review.id, product_id: product.slug }
91
+ expect(response.status).to eq(200)
92
+ expect(response).to render_template(:edit)
93
+ end
94
+
95
+ it 'doesn\'t allow another user to update a users review' do
96
+ other_user = create(:user)
97
+ allow(controller).to receive(:spree_current_user).and_return(other_user)
98
+ get :edit, params: { id: review.id, product_id: product.slug }
99
+ expect(response).not_to render_template(:edit)
100
+ expect(flash[:error]).to eq "Authorization Failure"
101
+ end
102
+ end
103
+
104
+ describe '#create' do
72
105
  before { allow(controller).to receive(:spree_current_user).and_return(user) }
73
106
 
74
107
  context 'for a product that does not exist' do
@@ -146,7 +179,7 @@ describe Spree::ReviewsController, type: :controller do
146
179
 
147
180
  it 'does not create a review' do
148
181
  expect(Spree::Review.count).to eq 0
149
- post :create, params: review_params.merge({ review: { rating: 'not_a_number' } })
182
+ post :create, params: review_params.merge(review: { rating: 'not_a_number' })
150
183
  expect(Spree::Review.count).to eq 0
151
184
  end
152
185
  end
@@ -154,10 +187,114 @@ describe Spree::ReviewsController, type: :controller do
154
187
  # It always sets the locale so preference pointless
155
188
  context 'when config requires locale tracking:' do
156
189
  it 'sets the locale' do
157
- Spree::Reviews::Config.preferred_track_locale = true
190
+ stub_spree_preferences(Spree::Reviews::Config, track_locale: true)
158
191
  post :create, params: review_params
159
192
  expect(assigns[:review].locale).to eq I18n.locale.to_s
160
193
  end
161
194
  end
162
195
  end
196
+
197
+ describe '#update' do
198
+ before {
199
+ allow(controller).to receive(:spree_current_user).and_return(user)
200
+ @review_params = {
201
+ product_id: product.slug,
202
+ id: review.id,
203
+ review: { title: 'Amazing Product' }
204
+ }
205
+ }
206
+
207
+ context 'for a product that does not exist' do
208
+ it 'responds with a 404' do
209
+ expect {
210
+ post :update, params: { id: review.id, product_id: 'not_real' }
211
+ }.to raise_error(ActiveRecord::RecordNotFound)
212
+ end
213
+ end
214
+
215
+ it 'updates a review' do
216
+ post :update, params: @review_params
217
+
218
+ expect(assigns[:review].title).to eq 'Amazing Product'
219
+ expect(assigns[:review].product).to eq product
220
+ expect(assigns[:review].user).to eq user
221
+ end
222
+
223
+ it 'updates a review to be a rating only review' do
224
+ post :update, params: {
225
+ product_id: product.slug,
226
+ id: review.id,
227
+ review: { title: '', review: '', rating: 5 }
228
+ }
229
+
230
+ expect(assigns[:review].title).to eq ''
231
+ expect(assigns[:review].review).to eq ''
232
+ expect(assigns[:review].rating).to eq 5
233
+ end
234
+
235
+ it 'updates the attached image' do
236
+ post :update, params: {
237
+ product_id: product.slug,
238
+ id: review.id,
239
+ review: {
240
+ images: [
241
+ fixture_file_upload(File.new('spec/fixtures/thinking-cat.jpg')),
242
+ ]
243
+ }
244
+ }
245
+ expect(assigns[:review].images.count).to eq 1
246
+ end
247
+
248
+ it 'fails if the user is not authorized to create a review' do
249
+ allow(controller).to receive(:authorize!).and_raise(RuntimeError)
250
+
251
+ expect{
252
+ post :update, params: @review_params
253
+ }.to raise_error RuntimeError
254
+ end
255
+
256
+ it 'flashes the notice' do
257
+ post :update, params: @review_params
258
+
259
+ expect(flash[:notice]).to eq I18n.t('spree.review_successfully_submitted')
260
+ end
261
+
262
+ it 'redirects to product page' do
263
+ post :update, params: @review_params
264
+ review.reload
265
+ review.valid?
266
+ expect(response).to redirect_to spree.product_path(product)
267
+ end
268
+
269
+ it 'removes all non-numbers from ratings param' do
270
+ @review_params[:review][:rating] = 5
271
+ post :update, params: @review_params
272
+ expect(controller.params[:review][:rating]).to eq '5'
273
+ end
274
+
275
+ it 'doesnt change the current spree user as reviews user' do
276
+ post :update, params: @review_params
277
+ expect(assigns[:review].user_id).to eq user.id
278
+ end
279
+
280
+ context 'with invalid params' do
281
+ it 'renders edit when review.save fails' do
282
+ expect_any_instance_of(Spree::Review).to receive(:update).and_return(false)
283
+ post :update, params: @review_params
284
+ expect(response).to render_template :edit
285
+ end
286
+
287
+ it 'does not update a review' do
288
+ original_rating = review.rating
289
+ original_title = review.title
290
+ @review_params[:review][:rating] = 'not_a_number'
291
+ @review_params[:review][:title] = true
292
+ post :update, params: @review_params
293
+
294
+ review.reload
295
+ expect(review.rating).to eq original_rating
296
+ expect(review.title).to eq original_title
297
+ end
298
+ end
299
+ end
163
300
  end
@@ -2,21 +2,21 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- RSpec.feature 'Review Admin' do
5
+ RSpec.describe 'Review Admin' do
6
6
  stub_authorization!
7
7
 
8
- given!(:review) { create(:review) }
8
+ let!(:review) { create(:review) }
9
9
 
10
10
  context 'index' do
11
- background do
11
+ before do
12
12
  visit spree.admin_reviews_path
13
13
  end
14
14
 
15
- scenario 'list reviews' do
15
+ it 'list reviews' do
16
16
  expect(page).to have_text review.product.name
17
17
  end
18
18
 
19
- scenario 'approve reviews' do
19
+ it 'approve reviews' do
20
20
  expect(review.approved).to be false
21
21
  within("tr#review_#{review.id}") do
22
22
  find('.approve').click
@@ -24,7 +24,7 @@ RSpec.feature 'Review Admin' do
24
24
  expect(review.reload.approved).to be true
25
25
  end
26
26
 
27
- scenario 'edit reviews' do
27
+ it 'edit reviews' do
28
28
  expect(page).to have_text review.product.name
29
29
  within("tr#review_#{review.id}") do
30
30
  find('.edit').click
@@ -2,90 +2,91 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- feature 'Reviews', js: true do
6
- given!(:someone) { create(:user, email: 'ryan@spree.com') }
7
- given!(:review) { create(:review, :approved, user: someone) }
8
- given!(:unapproved_review) { create(:review, product: review.product) }
5
+ describe 'Reviews', js: true do
6
+ let!(:someone) { create(:user, email: 'ryan@spree.com') }
7
+ let!(:review) { create(:review, :approved, user: someone) }
8
+ let!(:unapproved_review) { create(:review, product: review.product) }
9
9
 
10
- background do
11
- Spree::Reviews::Config.include_unapproved_reviews = false
10
+ before do
11
+ stub_spree_preferences(Spree::Reviews::Config, include_unapproved_reviews: false)
12
12
  end
13
13
 
14
14
  context 'product with no review' do
15
- given!(:product_no_reviews) { create(:product) }
16
- scenario 'informs that no reviews has been written yet' do
15
+ let!(:product_no_reviews) { create(:product) }
16
+
17
+ it 'informs that no reviews has been written yet' do
17
18
  visit spree.product_path(product_no_reviews)
18
19
  expect(page).to have_text I18n.t('spree.no_reviews_available')
19
20
  end
20
21
 
21
22
  # Regression test for #103
22
23
  context "shows correct number of previews" do
23
- background do
24
+ before do
24
25
  FactoryBot.create_list :review, 3, product: product_no_reviews, approved: true
25
- Spree::Reviews::Config[:preview_size] = 2
26
+ stub_spree_preferences(Spree::Reviews::Config, preview_size: 2)
26
27
  end
27
28
 
28
- scenario "displayed reviews are limited by the set preview size" do
29
+ it "displayed reviews are limited by the set preview size" do
29
30
  visit spree.product_path(product_no_reviews)
30
- expect(page.all(".review").count).to eql(2)
31
+ expect(page.all(".review").count).to be(2)
31
32
  end
32
33
  end
33
34
  end
34
35
 
35
36
  context 'when anonymous user' do
36
- background do
37
- Spree::Reviews::Config.require_login = true
37
+ before do
38
+ stub_spree_preferences(Spree::Reviews::Config, require_login: true)
38
39
  end
39
40
 
40
41
  context 'visit product with review' do
41
- background do
42
+ before do
42
43
  visit spree.product_path(review.product)
43
44
  end
44
45
 
45
- scenario 'should see review title' do
46
+ it 'sees review title' do
46
47
  expect(page).to have_text review.title
47
48
  end
48
49
 
49
- scenario 'can not create review' do
50
+ it 'can not create review' do
50
51
  expect(page).not_to have_text I18n.t('spree.write_your_own_review')
51
52
  end
52
53
  end
53
54
  end
54
55
 
55
56
  context 'when logged in user' do
56
- given!(:user) { create(:user) }
57
+ let!(:user) { create(:user) }
57
58
 
58
- background do
59
+ before do
59
60
  sign_in_as! user
60
61
  end
61
62
 
62
63
  context 'visit product with review' do
63
- background do
64
+ before do
64
65
  visit spree.product_path(review.product)
65
66
  end
66
67
 
67
- scenario 'can see review title' do
68
+ it 'can see review title' do
68
69
  expect(page).to have_text review.title
69
70
  end
70
71
 
71
72
  context 'with unapproved content allowed' do
72
- background do
73
- Spree::Reviews::Config[:include_unapproved_reviews] = true
74
- Spree::Reviews::Config[:display_unapproved_reviews] = true
73
+ before do
74
+ stub_spree_preferences(Spree::Reviews::Config, include_unapproved_reviews: true)
75
+ stub_spree_preferences(Spree::Reviews::Config, display_unapproved_reviews: true)
75
76
  visit spree.product_path(review.product)
76
77
  end
77
78
 
78
- scenario 'can see unapproved content when allowed' do
79
+ it 'can see unapproved content when allowed' do
79
80
  expect(unapproved_review.approved?).to eq(false)
80
81
  expect(page).to have_text unapproved_review.title
81
82
  end
82
83
  end
83
84
 
84
- scenario 'can see create new review button' do
85
+ it 'can see create new review button' do
85
86
  expect(page).to have_text I18n.t('spree.write_your_own_review')
86
87
  end
87
88
 
88
- scenario 'can create new review' do
89
+ it 'can create new review' do
89
90
  click_on I18n.t('spree.write_your_own_review')
90
91
 
91
92
  expect(page).to have_text I18n.t('spree.leave_us_a_review_for', name: review.product.name)
@@ -97,7 +98,7 @@ feature 'Reviews', js: true do
97
98
  fill_in 'review_name', with: user.email
98
99
  fill_in 'review_title', with: 'Great product!'
99
100
  fill_in 'review_review', with: 'Some big review text..'
100
- attach_file 'review_images', Spree::Core::Engine.root + 'spec/fixtures/thinking-cat.jpg'
101
+ attach_file 'review_images', 'spec/fixtures/thinking-cat.jpg'
101
102
  click_on 'Submit your review'
102
103
  end
103
104
 
@@ -108,14 +109,14 @@ feature 'Reviews', js: true do
108
109
  end
109
110
 
110
111
  context 'visit product with review where show_identifier is false' do
111
- given!(:user) { create(:user) }
112
- given!(:review) { create(:review, :approved, :hide_identifier, review: 'review text', user: user) }
112
+ let!(:user) { create(:user) }
113
+ let!(:review) { create(:review, :approved, :hide_identifier, review: 'review text', user: user) }
113
114
 
114
- background do
115
+ before do
115
116
  visit spree.product_path(review.product)
116
117
  end
117
118
 
118
- scenario 'show anonymous review' do
119
+ it 'show anonymous review' do
119
120
  expect(page).to have_text I18n.t('spree.anonymous')
120
121
  expect(page).to have_text 'review text'
121
122
  end
Binary file
@@ -13,30 +13,30 @@ describe Spree::FeedbackReview do
13
13
  end
14
14
 
15
15
  it 'does not validate with a nil review' do
16
- expect(build(:feedback_review, review: nil)).to_not be_valid
16
+ expect(build(:feedback_review, review: nil)).not_to be_valid
17
17
  end
18
18
 
19
19
  context 'rating' do
20
20
  it 'does not validate when no rating is specified' do
21
- expect(build(:feedback_review, rating: nil)).to_not be_valid
21
+ expect(build(:feedback_review, rating: nil)).not_to be_valid
22
22
  end
23
23
 
24
24
  it 'does not validate when the rating is not a number' do
25
- expect(build(:feedback_review, rating: 'not_a_number')).to_not be_valid
25
+ expect(build(:feedback_review, rating: 'not_a_number')).not_to be_valid
26
26
  end
27
27
 
28
28
  it 'does not validate when the rating is a float' do
29
- expect(build(:feedback_review, rating: 2.718)).to_not be_valid
29
+ expect(build(:feedback_review, rating: 2.718)).not_to be_valid
30
30
  end
31
31
 
32
32
  it 'does not validate when the rating is less than 1' do
33
- expect(build(:feedback_review, rating: 0)).to_not be_valid
34
- expect(build(:feedback_review, rating: -5)).to_not be_valid
33
+ expect(build(:feedback_review, rating: 0)).not_to be_valid
34
+ expect(build(:feedback_review, rating: -5)).not_to be_valid
35
35
  end
36
36
 
37
37
  it 'does not validate when the rating is greater than 5' do
38
- expect(build(:feedback_review, rating: 6)).to_not be_valid
39
- expect(build(:feedback_review, rating: 8)).to_not be_valid
38
+ expect(build(:feedback_review, rating: 6)).not_to be_valid
39
+ expect(build(:feedback_review, rating: 8)).not_to be_valid
40
40
  end
41
41
 
42
42
  (1..5).each do |i|
@@ -54,11 +54,11 @@ describe Spree::FeedbackReview do
54
54
  let!(:feedback_review_3) { create(:feedback_review, created_at: 5.days.ago) }
55
55
 
56
56
  it 'properly runs most_recent_first queries' do
57
- expect(Spree::FeedbackReview.most_recent_first.to_a).to eq([feedback_review_2, feedback_review_3, feedback_review_1])
57
+ expect(described_class.most_recent_first.to_a).to eq([feedback_review_2, feedback_review_3, feedback_review_1])
58
58
  end
59
59
 
60
60
  it 'defaults to most_recent_first queries' do
61
- expect(Spree::FeedbackReview.all.to_a).to eq([feedback_review_2, feedback_review_3, feedback_review_1])
61
+ expect(described_class.all.to_a).to eq([feedback_review_2, feedback_review_3, feedback_review_1])
62
62
  end
63
63
  end
64
64
 
@@ -71,9 +71,9 @@ describe Spree::FeedbackReview do
71
71
  let!(:fr_feedback_review_1) { create(:feedback_review, locale: 'fr', created_at: 10.days.ago) }
72
72
 
73
73
  it 'properly runs localized queries' do
74
- expect(Spree::FeedbackReview.localized('en').to_a).to eq([en_feedback_review_2, en_feedback_review_3, en_feedback_review_1])
75
- expect(Spree::FeedbackReview.localized('es').to_a).to eq([es_feedback_review_1])
76
- expect(Spree::FeedbackReview.localized('fr').to_a).to eq([fr_feedback_review_1])
74
+ expect(described_class.localized('en').to_a).to eq([en_feedback_review_2, en_feedback_review_3, en_feedback_review_1])
75
+ expect(described_class.localized('es').to_a).to eq([es_feedback_review_1])
76
+ expect(described_class.localized('fr').to_a).to eq([fr_feedback_review_1])
77
77
  end
78
78
  end
79
79
  end
@@ -7,7 +7,7 @@ describe Spree::Product do
7
7
  it { is_expected.to respond_to(:reviews) }
8
8
  it { is_expected.to respond_to(:stars) }
9
9
 
10
- context '#stars' do
10
+ describe '#stars' do
11
11
  let(:product) { build(:product) }
12
12
 
13
13
  it 'rounds' do
@@ -27,7 +27,7 @@ describe Spree::Product do
27
27
  end
28
28
  end
29
29
 
30
- context '#recalculate_rating' do
30
+ describe '#recalculate_rating' do
31
31
  let!(:product) { create(:product) }
32
32
 
33
33
  context 'when there are approved reviews' do
@@ -36,11 +36,8 @@ describe Spree::Product do
36
36
  let!(:unapproved_review_1) { create(:review, product: product, approved: false, rating: 4) }
37
37
 
38
38
  context "including unapproved reviews" do
39
- before(:all) do
40
- Spree::Reviews::Config[:include_unapproved_reviews] = true
41
- end
42
- after(:all) do
43
- Spree::Reviews::Config[:include_unapproved_reviews] = false
39
+ before do
40
+ stub_spree_preferences(Spree::Reviews::Config, include_unapproved_reviews: true)
44
41
  end
45
42
 
46
43
  it "updates the product average rating and ignores unapproved reviews" do
@@ -55,6 +52,10 @@ describe Spree::Product do
55
52
  end
56
53
 
57
54
  context "only approved reviews" do
55
+ before do
56
+ stub_spree_preferences(Spree::Reviews::Config, include_unapproved_reviews: false)
57
+ end
58
+
58
59
  it "updates the product average rating and ignores unapproved reviews" do
59
60
  product.avg_rating = 0
60
61
  product.reviews_count = 0
@@ -70,10 +71,12 @@ describe Spree::Product do
70
71
  context "without unapproved reviews" do
71
72
  let!(:unapproved_review_1) { create(:review, product: product, approved: false, rating: 4) }
72
73
 
74
+ before do
75
+ stub_spree_preferences(Spree::Reviews::Config, include_unapproved_reviews: false)
76
+ end
77
+
73
78
  it "updates the product average rating and ignores unapproved reviews" do
74
- product.avg_rating = 3
75
- product.reviews_count = 20
76
- product.save!
79
+ product.update_columns(avg_rating: 3, reviews_count: 20)
77
80
 
78
81
  product.recalculate_rating
79
82
  expect(product.avg_rating).to eq(0)