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.
- checksums.yaml +4 -4
- data/.rubocop.yml +8 -318
- data/.rubocop_todo.yml +221 -0
- data/CHANGELOG.md +100 -0
- data/Gemfile +11 -10
- data/README.md +29 -44
- data/app/controllers/spree/feedback_reviews_controller.rb +2 -8
- data/app/controllers/spree/reviews_controller.rb +1 -1
- data/app/decorators/models/solidus_reviews/spree/product_decorator.rb +6 -5
- data/app/helpers/spree/reviews_helper.rb +5 -5
- data/app/models/spree/feedback_review.rb +1 -1
- data/app/models/spree/review.rb +9 -8
- data/app/models/spree/reviews_ability.rb +2 -2
- data/app/views/spree/api/reviews/_feedback_review.json.jbuilder +1 -1
- data/app/views/spree/api/reviews/_review.json.jbuilder +1 -1
- data/db/migrate/20120123141326_recalculate_ratings.rb +1 -2
- data/db/migrate/20190613165528_add_verified_purchaser_to_reviews.rb +2 -0
- data/lib/controllers/spree/api/reviews_controller.rb +16 -14
- data/lib/generators/solidus_reviews/install/install_generator.rb +1 -1
- data/lib/solidus_reviews.rb +4 -2
- data/lib/{spree_reviews → solidus_reviews}/engine.rb +3 -3
- data/lib/solidus_reviews/version.rb +5 -0
- data/solidus_reviews.gemspec +14 -23
- data/spec/controllers/spree/admin/feedback_reviews_controller_spec.rb +1 -1
- data/spec/controllers/spree/admin/review_settings_controller_spec.rb +3 -4
- data/spec/controllers/spree/admin/reviews_controller_spec.rb +3 -3
- data/spec/controllers/spree/api/reviews_controller_spec.rb +27 -25
- data/spec/controllers/spree/feedback_reviews_controller_spec.rb +7 -7
- data/spec/controllers/spree/products_controller_spec.rb +1 -1
- data/spec/controllers/spree/reviews_controller_spec.rb +6 -7
- data/spec/features/admin_spec.rb +6 -6
- data/spec/features/reviews_spec.rb +32 -31
- data/spec/models/feedback_review_spec.rb +13 -13
- data/spec/models/product_spec.rb +13 -10
- data/spec/models/review_spec.rb +36 -40
- data/spec/models/reviews_ability_spec.rb +14 -14
- data/spec/models/reviews_configuration_spec.rb +9 -10
- data/spec/spec_helper.rb +4 -19
- data/spec/support/config.rb +7 -0
- data/spec/support/factories.rb +3 -0
- metadata +18 -180
- 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:
|
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
|
data/lib/solidus_reviews.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
module
|
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?
|
data/solidus_reviews.gemspec
CHANGED
@@ -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
|
5
|
-
s.name
|
6
|
-
s.version
|
7
|
-
s.summary
|
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
|
13
|
-
s.license
|
15
|
+
s.homepage = 'https://github.com/solidusio-contrib/solidus_reviews'
|
16
|
+
s.license = 'BSD-3'
|
14
17
|
|
15
|
-
s.files
|
16
|
-
s.test_files
|
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'
|
25
|
+
s.add_dependency 'solidus_support'
|
23
26
|
|
24
|
-
s.add_development_dependency '
|
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
|
-
|
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
|
-
|
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
|
-
|
54
|
-
it '
|
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
|
-
|
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
|
-
|
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
|
-
|
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 '
|
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 '
|
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 '
|
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 '
|
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 '
|
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 '
|
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 '
|
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 '
|
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 '
|
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 '
|
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 '
|
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
|
-
|
31
|
-
|
32
|
-
|
33
|
-
},
|
34
|
-
|
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
|
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!(
|
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 "
|
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
|
-
|
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
|
-
|
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
|
-
|
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(
|
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
|
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
|
data/spec/features/admin_spec.rb
CHANGED
@@ -2,21 +2,21 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
RSpec.
|
5
|
+
RSpec.describe 'Review Admin' do
|
6
6
|
stub_authorization!
|
7
7
|
|
8
|
-
|
8
|
+
let!(:review) { create(:review) }
|
9
9
|
|
10
10
|
context 'index' do
|
11
|
-
|
11
|
+
before do
|
12
12
|
visit spree.admin_reviews_path
|
13
13
|
end
|
14
14
|
|
15
|
-
|
15
|
+
it 'list reviews' do
|
16
16
|
expect(page).to have_text review.product.name
|
17
17
|
end
|
18
18
|
|
19
|
-
|
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
|
-
|
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
|