solidus_reviews 1.2.0 → 1.3.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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +8 -318
  3. data/.rubocop_todo.yml +221 -0
  4. data/CHANGELOG.md +100 -0
  5. data/Gemfile +11 -10
  6. data/README.md +29 -44
  7. data/app/controllers/spree/feedback_reviews_controller.rb +2 -8
  8. data/app/controllers/spree/reviews_controller.rb +1 -1
  9. data/app/decorators/models/solidus_reviews/spree/product_decorator.rb +6 -5
  10. data/app/helpers/spree/reviews_helper.rb +5 -5
  11. data/app/models/spree/feedback_review.rb +1 -1
  12. data/app/models/spree/review.rb +9 -8
  13. data/app/models/spree/reviews_ability.rb +2 -2
  14. data/app/views/spree/api/reviews/_feedback_review.json.jbuilder +1 -1
  15. data/app/views/spree/api/reviews/_review.json.jbuilder +1 -1
  16. data/db/migrate/20120123141326_recalculate_ratings.rb +1 -2
  17. data/db/migrate/20190613165528_add_verified_purchaser_to_reviews.rb +2 -0
  18. data/lib/controllers/spree/api/reviews_controller.rb +16 -14
  19. data/lib/generators/solidus_reviews/install/install_generator.rb +1 -1
  20. data/lib/solidus_reviews.rb +4 -2
  21. data/lib/{spree_reviews → solidus_reviews}/engine.rb +3 -3
  22. data/lib/solidus_reviews/version.rb +5 -0
  23. data/solidus_reviews.gemspec +14 -23
  24. data/spec/controllers/spree/admin/feedback_reviews_controller_spec.rb +1 -1
  25. data/spec/controllers/spree/admin/review_settings_controller_spec.rb +3 -4
  26. data/spec/controllers/spree/admin/reviews_controller_spec.rb +3 -3
  27. data/spec/controllers/spree/api/reviews_controller_spec.rb +27 -25
  28. data/spec/controllers/spree/feedback_reviews_controller_spec.rb +7 -7
  29. data/spec/controllers/spree/products_controller_spec.rb +1 -1
  30. data/spec/controllers/spree/reviews_controller_spec.rb +6 -7
  31. data/spec/features/admin_spec.rb +6 -6
  32. data/spec/features/reviews_spec.rb +32 -31
  33. data/spec/models/feedback_review_spec.rb +13 -13
  34. data/spec/models/product_spec.rb +13 -10
  35. data/spec/models/review_spec.rb +36 -40
  36. data/spec/models/reviews_ability_spec.rb +14 -14
  37. data/spec/models/reviews_configuration_spec.rb +9 -10
  38. data/spec/spec_helper.rb +4 -19
  39. data/spec/support/config.rb +7 -0
  40. data/spec/support/factories.rb +3 -0
  41. metadata +18 -180
  42. data/CONTRIBUTING.md +0 -28
@@ -11,7 +11,7 @@ module SolidusReviews
11
11
  end
12
12
 
13
13
  def add_stylesheets
14
- inject_into_file "vendor/assets/stylesheets/spree/frontend/all.css", " *= require spree/frontend/solidus_reviews\n", before: /\*\//, verbose: true
14
+ inject_into_file "vendor/assets/stylesheets/spree/frontend/all.css", " *= require spree/frontend/solidus_reviews\n", before: %r{\*/}, verbose: true
15
15
  end
16
16
 
17
17
  def add_migrations
@@ -2,7 +2,9 @@
2
2
 
3
3
  require 'solidus'
4
4
  require 'solidus_support'
5
- require 'sass/rails'
5
+ require 'sassc/rails'
6
6
  require 'deface'
7
- require 'spree_reviews/engine'
8
7
  require 'coffee_script'
8
+
9
+ require 'solidus_reviews/engine'
10
+ require 'solidus_reviews/version'
@@ -1,16 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module SpreeReviews
3
+ module SolidusReviews
4
4
  class Engine < Rails::Engine
5
5
  require 'spree/core'
6
- isolate_namespace Spree
6
+ isolate_namespace ::Spree
7
7
  engine_name 'solidus_reviews'
8
8
 
9
9
  def self.activate
10
10
  Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
11
11
  Rails.configuration.cache_classes ? require(c) : load(c)
12
12
  end
13
- Spree::Ability.register_ability(Spree::ReviewsAbility)
13
+ ::Spree::Ability.register_ability(::Spree::ReviewsAbility)
14
14
  end
15
15
 
16
16
  if SolidusSupport.api_available?
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusReviews
4
+ VERSION = '1.3.0'
5
+ end
@@ -1,37 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ $:.push File.expand_path('lib', __dir__)
4
+ require 'solidus_reviews/version'
5
+
3
6
  Gem::Specification.new do |s|
4
- s.platform = Gem::Platform::RUBY
5
- s.name = 'solidus_reviews'
6
- s.version = '1.2.0'
7
- s.summary = 'Basic review and ratings facility for Solidus'
7
+ s.platform = Gem::Platform::RUBY
8
+ s.name = 'solidus_reviews'
9
+ s.version = SolidusReviews::VERSION
10
+ s.summary = 'Review and rating functionality for your Solidus store.'
8
11
  s.authors = ['Solidus Contrib']
9
12
  s.description = s.summary
10
13
  s.required_ruby_version = '>= 1.9.3'
11
14
 
12
- s.homepage = 'https://github.com/solidusio-contrib/solidus_reviews/'
13
- s.license = 'BSD-3'
15
+ s.homepage = 'https://github.com/solidusio-contrib/solidus_reviews'
16
+ s.license = 'BSD-3'
14
17
 
15
- s.files = `git ls-files`.split("\n")
16
- s.test_files = `git ls-files -- spec/*`.split("\n")
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- spec/*`.split("\n")
17
20
  s.require_path = 'lib'
18
21
  s.requirements << 'none'
19
22
 
20
- s.add_dependency 'deface', '~> 1'
23
+ s.add_dependency 'deface', '~> 1.0'
21
24
  s.add_dependency 'solidus', ['>= 1.4', '< 3']
22
- s.add_dependency 'solidus_support', '~> 0.1'
25
+ s.add_dependency 'solidus_support'
23
26
 
24
- s.add_development_dependency 'capybara'
25
- s.add_development_dependency 'capybara-screenshot'
26
- s.add_development_dependency 'coffee-rails'
27
- s.add_development_dependency 'database_cleaner'
28
- s.add_development_dependency 'ffaker'
29
- s.add_development_dependency 'poltergeist'
30
- s.add_development_dependency 'pry'
31
- s.add_development_dependency 'rspec-rails', '~> 4.0.0.beta2'
32
- s.add_development_dependency 'rubocop', '~> 0.53.0'
33
- s.add_development_dependency 'sass-rails'
34
- s.add_development_dependency 'selenium-webdriver'
35
- s.add_development_dependency 'simplecov'
36
- s.add_development_dependency 'sqlite3'
27
+ s.add_development_dependency 'solidus_extension_dev_tools'
37
28
  end
@@ -10,7 +10,7 @@ describe Spree::Admin::FeedbackReviewsController do
10
10
  allow(controller).to receive(:spree_current_user).and_return(user)
11
11
  end
12
12
 
13
- context '#index' do
13
+ describe '#index' do
14
14
  let!(:review) { create(:review) }
15
15
  let!(:other_review) { create(:review) }
16
16
 
@@ -10,7 +10,7 @@ describe Spree::Admin::ReviewSettingsController do
10
10
  allow(controller).to receive(:spree_current_user).and_return(user)
11
11
  end
12
12
 
13
- context '#update' do
13
+ describe '#update' do
14
14
  it 'redirects to edit-review-settings page' do
15
15
  put :update, params: { preferences: { preview_size: 4 } }
16
16
  expect(response).to redirect_to spree.edit_admin_review_settings_path
@@ -22,7 +22,6 @@ describe Spree::Admin::ReviewSettingsController do
22
22
  feedback_rating: false,
23
23
  require_login: true,
24
24
  track_locale: true' do
25
-
26
25
  it 'sets preferred_preview_size to 4' do
27
26
  put :update, params: { preferences: { preview_size: 4 } }
28
27
  expect(Spree::Reviews::Config.preferred_preview_size).to eq 4
@@ -50,8 +49,8 @@ describe Spree::Admin::ReviewSettingsController do
50
49
  end
51
50
  end
52
51
 
53
- context '#edit' do
54
- it 'should render the edit template' do
52
+ describe '#edit' do
53
+ it 'renders the edit template' do
55
54
  get :edit
56
55
  expect(response).to render_template(:edit)
57
56
  end
@@ -13,7 +13,7 @@ describe Spree::Admin::ReviewsController do
13
13
  allow(controller).to receive(:spree_current_user).and_return(user)
14
14
  end
15
15
 
16
- context '#index' do
16
+ describe '#index' do
17
17
  it 'list reviews' do
18
18
  reviews = [
19
19
  create(:review, product: product),
@@ -24,7 +24,7 @@ describe Spree::Admin::ReviewsController do
24
24
  end
25
25
  end
26
26
 
27
- context '#approve' do
27
+ describe '#approve' do
28
28
  it 'show notice message when approved' do
29
29
  review.update_attribute(:approved, true)
30
30
  get :approve, params: { id: review.id }
@@ -39,7 +39,7 @@ describe Spree::Admin::ReviewsController do
39
39
  end
40
40
  end
41
41
 
42
- context '#edit' do
42
+ describe '#edit' do
43
43
  specify do
44
44
  get :edit, params: { id: review.id }
45
45
  expect(response.status).to eq(200)
@@ -24,7 +24,7 @@ describe Spree::Api::ReviewsController, type: :controller do
24
24
  end
25
25
 
26
26
  context 'there are no reviews for a product' do
27
- it 'should return an empty array' do
27
+ it 'returns an empty array' do
28
28
  expect(Spree::Review.count).to be >= 0
29
29
  expect(subject["reviews"]).to be_empty
30
30
  end
@@ -53,7 +53,7 @@ describe Spree::Api::ReviewsController, type: :controller do
53
53
  end
54
54
 
55
55
  context 'there are no reviews for the user' do
56
- it 'should return an empty array' do
56
+ it 'returns an empty array' do
57
57
  expect(Spree::Review.count).to be >= 0
58
58
  expect(subject["reviews"]).to be_empty
59
59
  end
@@ -81,7 +81,7 @@ describe Spree::Api::ReviewsController, type: :controller do
81
81
  context 'when it is the users review' do
82
82
  before { review.update(user_id: user.id) }
83
83
 
84
- it 'should return the review' do
84
+ it 'returns the review' do
85
85
  expect(subject).not_to be_empty
86
86
  expect(subject["product_id"]).to eq(product.id)
87
87
  expect(subject["name"]).to eq(review[:name])
@@ -94,7 +94,7 @@ describe Spree::Api::ReviewsController, type: :controller do
94
94
  end
95
95
 
96
96
  context 'when it is not the users review' do
97
- it 'should return with not authorized' do
97
+ it 'returns with not authorized' do
98
98
  expect(subject["error"]).not_to be_empty
99
99
  expect(subject["error"]).to match(/not authorized/i)
100
100
  end
@@ -102,7 +102,7 @@ describe Spree::Api::ReviewsController, type: :controller do
102
102
  context 'and it the review is approved' do
103
103
  before { review.update(approved: true) }
104
104
 
105
- it 'should return the review' do
105
+ it 'returns the review' do
106
106
  expect(subject).not_to be_empty
107
107
  expect(subject["product_id"]).to eq(product.id)
108
108
  expect(subject["name"]).to eq(review[:name])
@@ -116,6 +116,12 @@ describe Spree::Api::ReviewsController, type: :controller do
116
116
  end
117
117
 
118
118
  describe '#create' do
119
+ subject do
120
+ params = { product_id: product.id, token: user.spree_api_key, format: 'json' }.merge(review_params)
121
+ post :create, params: params
122
+ JSON.parse(response.body)
123
+ end
124
+
119
125
  let(:review_params) do
120
126
  {
121
127
  "user_id": user.id,
@@ -126,25 +132,19 @@ describe Spree::Api::ReviewsController, type: :controller do
126
132
  }
127
133
  end
128
134
 
129
- subject do
130
- params = { product_id: product.id, token: user.spree_api_key, format: 'json' }.merge(review_params)
131
- post :create, params: params
132
- JSON.parse(response.body)
133
- end
134
-
135
135
  context 'when user has already reviewed this product' do
136
136
  before do
137
137
  review.update(user_id: user.id)
138
138
  end
139
139
 
140
- it 'should return with a fail' do
140
+ it 'returns with a fail' do
141
141
  expect(subject["error"]).not_to be_empty
142
142
  expect(subject["error"]).to match(/invalid resource/i)
143
143
  end
144
144
  end
145
145
 
146
146
  context 'when it is a users first review for the product' do
147
- it 'should return success with review' do
147
+ it 'returns success with review' do
148
148
  expect(subject).not_to be_empty
149
149
  expect(subject["product_id"]).to eq(product.id)
150
150
  expect(subject["name"]).to eq(review_params[:name])
@@ -157,7 +157,13 @@ describe Spree::Api::ReviewsController, type: :controller do
157
157
  end
158
158
 
159
159
  describe '#update' do
160
+ subject do
161
+ put :update, params: params
162
+ JSON.parse(response.body)
163
+ end
164
+
160
165
  before { review.update(approved: true, user_id: user.id) }
166
+
161
167
  let(:params) { { product_id: product.id, id: review.id, token: user.spree_api_key, format: 'json' }.merge(review_params) }
162
168
 
163
169
  let(:review_params) do
@@ -169,13 +175,8 @@ describe Spree::Api::ReviewsController, type: :controller do
169
175
  }
170
176
  end
171
177
 
172
- subject do
173
- put :update, params: params
174
- JSON.parse(response.body)
175
- end
176
-
177
178
  context 'when a user updates their own review' do
178
- it 'should successfully update the review and set approved back to false' do
179
+ it 'successfullies update the review and set approved back to false' do
179
180
  original = review
180
181
  expect(original.approved?).to be true
181
182
  expect(subject["id"]).to eq(original.id)
@@ -195,7 +196,7 @@ describe Spree::Api::ReviewsController, type: :controller do
195
196
  other_user.generate_spree_api_key!
196
197
  end
197
198
 
198
- it 'should return an error' do
199
+ it 'returns an error' do
199
200
  expect(subject["error"]).not_to be_empty
200
201
  expect(subject["error"]).to match(/not authorized/i)
201
202
  end
@@ -203,16 +204,17 @@ describe Spree::Api::ReviewsController, type: :controller do
203
204
  end
204
205
 
205
206
  describe '#destroy' do
206
- before { review.update(approved: true, user_id: user.id) }
207
- let(:params) { { product_id: product.id, id: review.id, token: user.spree_api_key, format: 'json' } }
208
-
209
207
  subject do
210
208
  delete :destroy, params: params
211
209
  JSON.parse(response.body)
212
210
  end
213
211
 
212
+ before { review.update(approved: true, user_id: user.id) }
213
+
214
+ let(:params) { { product_id: product.id, id: review.id, token: user.spree_api_key, format: 'json' } }
215
+
214
216
  context "when a user destroys their own review" do
215
- it 'should return the deleted review' do
217
+ it 'returns the deleted review' do
216
218
  expect(subject["id"]).to eq(review.id)
217
219
  expect(subject["product_id"]).to eq(product.id)
218
220
  expect(Spree::Review.find_by(id: review.id)).to be_falsey
@@ -227,7 +229,7 @@ describe Spree::Api::ReviewsController, type: :controller do
227
229
  other_user.generate_spree_api_key!
228
230
  end
229
231
 
230
- it 'should return an error' do
232
+ it 'returns an error' do
231
233
  expect(subject["error"]).not_to be_empty
232
234
  expect(subject["error"]).to match(/not authorized/i)
233
235
  end
@@ -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
@@ -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
@@ -4,7 +4,7 @@ require 'spec_helper'
4
4
 
5
5
  describe Spree::ProductsController do
6
6
  [:avg_rating, :reviews_count].each do |attrib|
7
- it "should add #{attrib} to the set of allowed attributes" do
7
+ it "adds #{attrib} to the set of allowed attributes" do
8
8
  expect(controller.permitted_product_attributes).to include(attrib)
9
9
  end
10
10
  end
@@ -13,8 +13,7 @@ describe Spree::ReviewsController, type: :controller do
13
13
  review: 'Some big review text..',
14
14
  images: [
15
15
  fixture_file_upload(File.new(Spree::Core::Engine.root + 'spec/fixtures/thinking-cat.jpg'))
16
- ] }
17
- }
16
+ ] } }
18
17
  end
19
18
 
20
19
  before do
@@ -22,7 +21,7 @@ describe Spree::ReviewsController, type: :controller do
22
21
  allow(controller).to receive(:spree_user_signed_in?).and_return(true)
23
22
  end
24
23
 
25
- context '#index' do
24
+ describe '#index' do
26
25
  context 'for a product that does not exist' do
27
26
  it 'responds with a 404' do
28
27
  expect {
@@ -43,7 +42,7 @@ describe Spree::ReviewsController, type: :controller do
43
42
  end
44
43
  end
45
44
 
46
- context '#new' do
45
+ describe '#new' do
47
46
  context 'for a product that does not exist' do
48
47
  it 'responds with a 404' do
49
48
  expect {
@@ -68,7 +67,7 @@ describe Spree::ReviewsController, type: :controller do
68
67
  end
69
68
  end
70
69
 
71
- context '#create' do
70
+ describe '#create' do
72
71
  before { allow(controller).to receive(:spree_current_user).and_return(user) }
73
72
 
74
73
  context 'for a product that does not exist' do
@@ -146,7 +145,7 @@ describe Spree::ReviewsController, type: :controller do
146
145
 
147
146
  it 'does not create a review' do
148
147
  expect(Spree::Review.count).to eq 0
149
- post :create, params: review_params.merge({ review: { rating: 'not_a_number' } })
148
+ post :create, params: review_params.merge(review: { rating: 'not_a_number' })
150
149
  expect(Spree::Review.count).to eq 0
151
150
  end
152
151
  end
@@ -154,7 +153,7 @@ describe Spree::ReviewsController, type: :controller do
154
153
  # It always sets the locale so preference pointless
155
154
  context 'when config requires locale tracking:' do
156
155
  it 'sets the locale' do
157
- Spree::Reviews::Config.preferred_track_locale = true
156
+ stub_spree_preferences(Spree::Reviews::Config, track_locale: true)
158
157
  post :create, params: review_params
159
158
  expect(assigns[:review].locale).to eq I18n.locale.to_s
160
159
  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