solidus_reviews 1.0.0 → 1.1.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 +5 -5
- data/.rubocop.yml +322 -0
- data/.travis.yml +27 -14
- data/Gemfile +23 -8
- data/LICENSE.md +2 -2
- data/README.md +9 -11
- data/Rakefile +2 -0
- data/app/controllers/spree/admin/feedback_reviews_controller.rb +3 -1
- data/app/controllers/spree/admin/review_settings_controller.rb +3 -1
- data/app/controllers/spree/admin/reviews_controller.rb +9 -6
- data/app/controllers/spree/feedback_reviews_controller.rb +25 -19
- data/app/controllers/spree/products_controller_decorator.rb +2 -0
- data/app/controllers/spree/reviews_controller.rb +11 -7
- data/app/helpers/spree/api/api_helpers_decorator.rb +12 -0
- data/app/helpers/spree/reviews_helper.rb +15 -5
- data/app/models/spree/feedback_review.rb +5 -4
- data/app/models/spree/product_decorator.rb +5 -4
- data/app/models/spree/review.rb +28 -10
- data/app/models/spree/reviews_ability.rb +17 -3
- data/app/models/spree/reviews_configuration.rb +16 -8
- data/app/models/spree/user_decorator.rb +3 -0
- data/app/overrides/add_reviews_after_product_properties.rb +7 -5
- data/app/overrides/add_reviews_tab_to_admin.rb +12 -4
- data/app/overrides/add_reviews_to_admin_configuration_sidebar.rb +13 -5
- data/app/views/spree/admin/feedback_reviews/index.html.erb +9 -9
- data/app/views/spree/admin/review_settings/edit.html.erb +64 -35
- data/app/views/spree/admin/reviews/_form.html.erb +26 -5
- data/app/views/spree/admin/reviews/edit.html.erb +2 -2
- data/app/views/spree/admin/reviews/index.html.erb +100 -88
- data/app/views/spree/api/reviews/_review.json.jbuilder +8 -0
- data/app/views/spree/api/reviews/index.json.jbuilder +6 -0
- data/app/views/spree/api/reviews/show.json.jbuilder +3 -0
- data/app/views/spree/feedback_reviews/_form.html.erb +5 -5
- data/app/views/spree/feedback_reviews/_summary.html.erb +3 -3
- data/app/views/spree/feedback_reviews/create.js.erb +2 -2
- data/app/views/spree/reviews/_form.html.erb +15 -10
- data/app/views/spree/reviews/new.html.erb +2 -2
- data/app/views/spree/shared/_rating.html.erb +3 -3
- data/app/views/spree/shared/_review.html.erb +29 -19
- data/app/views/spree/shared/_review_summary.html.erb +3 -3
- data/app/views/spree/shared/_reviews.html.erb +6 -6
- data/app/views/spree/shared/_shortrating.html.erb +2 -2
- data/bin/rails +4 -2
- data/config/initializers/constants.rb +2 -0
- data/config/initializers/load_preferences.rb +2 -0
- data/config/locales/de-CH.yml +14 -1
- data/config/locales/de.yml +14 -1
- data/config/locales/en-GB.yml +14 -2
- data/config/locales/en.yml +14 -1
- data/config/locales/es.yml +14 -2
- data/config/locales/fr.yml +14 -2
- data/config/locales/it.yml +79 -0
- data/config/locales/pl.yml +14 -2
- data/config/locales/pt-BR.yml +14 -2
- data/config/locales/pt.yml +14 -2
- data/config/locales/ro.yml +15 -3
- data/config/locales/ru.yml +14 -2
- data/config/locales/sv.yml +14 -1
- data/config/locales/tr.yml +14 -2
- data/config/locales/uk.yml +14 -1
- data/config/locales/zh-CN.yml +14 -1
- data/config/locales/zh-TW.yml +14 -1
- data/config/routes.rb +18 -1
- data/db/migrate/20081020220724_create_reviews.rb +4 -2
- data/db/migrate/20101222083309_create_feedback_reviews.rb +5 -3
- data/db/migrate/20110406083603_add_rating_to_products.rb +7 -5
- data/db/migrate/20110606150524_add_user_to_reviews.rb +4 -2
- data/db/migrate/20110806093221_add_ip_address_to_reviews.rb +3 -1
- data/db/migrate/20120110172331_namespace_tables.rb +3 -1
- data/db/migrate/20120123141326_recalculate_ratings.rb +6 -5
- data/db/migrate/20120712182514_add_locale_to_reviews.rb +4 -2
- data/db/migrate/20120712182627_add_locale_to_feedback_reviews.rb +4 -2
- data/db/migrate/20140703200946_add_show_identifier_to_reviews.rb +3 -1
- data/db/migrate/20190613165528_add_verified_purchaser_to_reviews.rb +5 -0
- data/lib/controllers/spree/api/reviews_controller.rb +111 -0
- data/lib/generators/solidus_reviews/install/install_generator.rb +5 -4
- data/lib/solidus_reviews.rb +3 -1
- data/lib/solidus_reviews/factories.rb +3 -1
- data/lib/solidus_reviews/factories/feedback_review_factory.rb +6 -5
- data/lib/solidus_reviews/factories/review_factory.rb +19 -9
- data/lib/spree_reviews/engine.rb +7 -0
- data/solidus_reviews.gemspec +20 -18
- data/spec/controllers/admin/feedback_reviews_controller_spec.rb +9 -7
- data/spec/controllers/admin/review_settings_controller_spec.rb +18 -16
- data/spec/controllers/admin/reviews_controller_spec.rb +18 -16
- data/spec/controllers/feedback_reviews_controller_spec.rb +29 -25
- data/spec/controllers/products_controller_spec.rb +4 -2
- data/spec/controllers/reviews_controller_spec.rb +67 -40
- data/spec/controllers/spree/api/reviews_controller_spec.rb +233 -0
- data/spec/features/admin_spec.rb +3 -0
- data/spec/features/reviews_spec.rb +27 -11
- data/spec/helpers/review_helper_spec.rb +3 -2
- data/spec/models/feedback_review_spec.rb +19 -17
- data/spec/models/product_spec.rb +41 -19
- data/spec/models/review_spec.rb +100 -42
- data/spec/models/reviews_ability_spec.rb +10 -8
- data/spec/models/reviews_configuration_spec.rb +28 -19
- data/spec/spec_helper.rb +21 -35
- data/vendor/assets/javascripts/jquery.rating.js +389 -376
- metadata +108 -59
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Spree::ProductsController do
|
4
6
|
[:avg_rating, :reviews_count].each do |attrib|
|
5
7
|
it "should add #{attrib} to the set of allowed attributes" do
|
6
|
-
controller.permitted_product_attributes.
|
8
|
+
expect(controller.permitted_product_attributes).to include(attrib)
|
7
9
|
end
|
8
10
|
end
|
9
|
-
end
|
11
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Spree::ReviewsController, type: :controller do
|
@@ -8,19 +10,24 @@ describe Spree::ReviewsController, type: :controller do
|
|
8
10
|
review: { rating: 3,
|
9
11
|
name: 'Ryan Bigg',
|
10
12
|
title: 'Great Product',
|
11
|
-
review: 'Some big review text..'
|
13
|
+
review: 'Some big review text..',
|
14
|
+
images: [
|
15
|
+
fixture_file_upload(File.new(Spree::Core::Engine.root + 'spec/fixtures/thinking-cat.jpg'))
|
16
|
+
] }
|
17
|
+
}
|
12
18
|
end
|
13
19
|
|
14
20
|
before do
|
15
|
-
controller.
|
16
|
-
controller.
|
21
|
+
allow(controller).to receive(:spree_current_user).and_return(user)
|
22
|
+
allow(controller).to receive(:spree_user_signed_in?).and_return(true)
|
17
23
|
end
|
18
24
|
|
19
25
|
context '#index' do
|
20
26
|
context 'for a product that does not exist' do
|
21
27
|
it 'responds with a 404' do
|
22
|
-
|
23
|
-
|
28
|
+
expect {
|
29
|
+
get :index, params: { product_id: 'not_real' }
|
30
|
+
}.to raise_error(ActiveRecord::RecordNotFound)
|
24
31
|
end
|
25
32
|
end
|
26
33
|
|
@@ -30,8 +37,8 @@ describe Spree::ReviewsController, type: :controller do
|
|
30
37
|
create(:review, :approved, product: product),
|
31
38
|
create(:review, :approved, product: product)
|
32
39
|
]
|
33
|
-
|
34
|
-
assigns[:approved_reviews].
|
40
|
+
get :index, params: { product_id: product.slug }
|
41
|
+
expect(assigns[:approved_reviews]).to match_array approved_reviews
|
35
42
|
end
|
36
43
|
end
|
37
44
|
end
|
@@ -39,87 +46,107 @@ describe Spree::ReviewsController, type: :controller do
|
|
39
46
|
context '#new' do
|
40
47
|
context 'for a product that does not exist' do
|
41
48
|
it 'responds with a 404' do
|
42
|
-
|
43
|
-
|
49
|
+
expect {
|
50
|
+
get :new, params: { product_id: 'not_real' }
|
51
|
+
}.to raise_error(ActiveRecord::RecordNotFound)
|
44
52
|
end
|
45
53
|
end
|
46
54
|
|
47
55
|
it 'fail if the user is not authorized to create a review' do
|
48
|
-
controller.
|
56
|
+
allow(controller).to receive(:authorize!).and_raise(RuntimeError)
|
57
|
+
|
49
58
|
expect {
|
50
|
-
|
59
|
+
post :new, params: { product_id: product.slug }
|
51
60
|
assert_match 'ryanbig', response.body
|
52
|
-
}.to raise_error
|
61
|
+
}.to raise_error RuntimeError
|
53
62
|
end
|
54
63
|
|
55
64
|
it 'render the new template' do
|
56
|
-
|
57
|
-
response.status.
|
58
|
-
response.
|
65
|
+
get :new, params: { product_id: product.slug }
|
66
|
+
expect(response.status).to eq(200)
|
67
|
+
expect(response).to render_template(:new)
|
59
68
|
end
|
60
69
|
end
|
61
70
|
|
62
71
|
context '#create' do
|
63
|
-
before { controller.
|
72
|
+
before { allow(controller).to receive(:spree_current_user).and_return(user) }
|
64
73
|
|
65
74
|
context 'for a product that does not exist' do
|
66
75
|
it 'responds with a 404' do
|
67
|
-
|
68
|
-
|
76
|
+
expect {
|
77
|
+
post :create, params: { product_id: 'not_real' }
|
78
|
+
}.to raise_error(ActiveRecord::RecordNotFound)
|
69
79
|
end
|
70
80
|
end
|
71
81
|
|
72
82
|
it 'creates a new review' do
|
73
83
|
expect {
|
74
|
-
|
84
|
+
post :create, params: review_params
|
85
|
+
}.to change(Spree::Review, :count).by(1)
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'creates a rating only review' do
|
89
|
+
review_params = {
|
90
|
+
product_id: product.slug,
|
91
|
+
review: { rating: 3 }
|
92
|
+
}
|
93
|
+
|
94
|
+
expect {
|
95
|
+
post :create, params: review_params
|
75
96
|
}.to change(Spree::Review, :count).by(1)
|
76
97
|
end
|
77
98
|
|
78
99
|
it 'sets the ip-address of the remote' do
|
79
|
-
request.
|
80
|
-
|
81
|
-
assigns[:review].ip_address.
|
100
|
+
@request.env['REMOTE_ADDR'] = '127.0.0.1'
|
101
|
+
post :create, params: review_params
|
102
|
+
expect(assigns[:review].ip_address).to eq '127.0.0.1'
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'attaches the image' do
|
106
|
+
post :create, params: review_params
|
107
|
+
expect(assigns[:review].images).to be_present
|
82
108
|
end
|
83
109
|
|
84
110
|
it 'fails if the user is not authorized to create a review' do
|
85
|
-
controller.
|
111
|
+
allow(controller).to receive(:authorize!).and_raise(RuntimeError)
|
112
|
+
|
86
113
|
expect{
|
87
|
-
|
88
|
-
}.to raise_error
|
114
|
+
post :create, params: review_params
|
115
|
+
}.to raise_error RuntimeError
|
89
116
|
end
|
90
117
|
|
91
118
|
it 'flashes the notice' do
|
92
|
-
|
93
|
-
flash[:notice].
|
119
|
+
post :create, params: review_params
|
120
|
+
expect(flash[:notice]).to eq I18n.t('spree.review_successfully_submitted')
|
94
121
|
end
|
95
122
|
|
96
123
|
it 'redirects to product page' do
|
97
|
-
|
98
|
-
response.
|
124
|
+
post :create, params: review_params
|
125
|
+
expect(response).to redirect_to spree.product_path(product)
|
99
126
|
end
|
100
127
|
|
101
128
|
it 'removes all non-numbers from ratings param' do
|
102
|
-
|
103
|
-
controller.params[:review][:rating].
|
129
|
+
post :create, params: review_params
|
130
|
+
expect(controller.params[:review][:rating]).to eq '3'
|
104
131
|
end
|
105
132
|
|
106
133
|
it 'sets the current spree user as reviews user' do
|
107
|
-
|
108
|
-
review_params[:review]
|
134
|
+
post :create, params: review_params
|
135
|
+
review_params[:review][:user_id] = user.id
|
109
136
|
assigns[:review][:user_id] = user.id
|
110
|
-
assigns[:review][:user_id].
|
137
|
+
expect(assigns[:review][:user_id]).to eq user.id
|
111
138
|
end
|
112
139
|
|
113
140
|
context 'with invalid params' do
|
114
141
|
it 'renders new when review.save fails' do
|
115
|
-
Spree::Review.
|
116
|
-
|
117
|
-
response.
|
142
|
+
expect_any_instance_of(Spree::Review).to receive(:save).and_return(false)
|
143
|
+
post :create, params: review_params
|
144
|
+
expect(response).to render_template :new
|
118
145
|
end
|
119
146
|
|
120
147
|
it 'does not create a review' do
|
121
148
|
expect(Spree::Review.count).to eq 0
|
122
|
-
|
149
|
+
post :create, params: review_params.merge({ review: { rating: 'not_a_number' } })
|
123
150
|
expect(Spree::Review.count).to eq 0
|
124
151
|
end
|
125
152
|
end
|
@@ -128,8 +155,8 @@ describe Spree::ReviewsController, type: :controller do
|
|
128
155
|
context 'when config requires locale tracking:' do
|
129
156
|
it 'sets the locale' do
|
130
157
|
Spree::Reviews::Config.preferred_track_locale = true
|
131
|
-
|
132
|
-
assigns[:review].locale.
|
158
|
+
post :create, params: review_params
|
159
|
+
expect(assigns[:review].locale).to eq I18n.locale.to_s
|
133
160
|
end
|
134
161
|
end
|
135
162
|
end
|
@@ -0,0 +1,233 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Spree::Api::ReviewsController, type: :controller do
|
6
|
+
render_views
|
7
|
+
|
8
|
+
let!(:user) { create(:user) }
|
9
|
+
let!(:review) { create(:review, rating: 5) }
|
10
|
+
let!(:product) { review.product }
|
11
|
+
|
12
|
+
before do
|
13
|
+
user.generate_spree_api_key!
|
14
|
+
Array.new(3).each do
|
15
|
+
create(:review)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#index' do
|
20
|
+
context 'when given a product_id' do
|
21
|
+
subject do
|
22
|
+
get :index, params: { product_id: product.id, token: user.spree_api_key, format: 'json' }
|
23
|
+
JSON.parse(response.body)
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'there are no reviews for a product' do
|
27
|
+
it 'should return an empty array' do
|
28
|
+
expect(Spree::Review.count).to be >= 0
|
29
|
+
expect(subject["reviews"]).to be_empty
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'there are reviews for the product and other products' do
|
34
|
+
it 'returns all approved reviews for the product' do
|
35
|
+
review.update(approved: true)
|
36
|
+
review.images << create(:image)
|
37
|
+
expect(Spree::Review.count).to be >= 2
|
38
|
+
expect(subject.size).to eq(2)
|
39
|
+
expect(subject["reviews"][0]["id"]).to eq(review.id)
|
40
|
+
expect(subject["reviews"][0]["images"].count).to eq(1)
|
41
|
+
expect(subject["avg_rating"]).to eq("5.0")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'when given a user_id' do
|
47
|
+
subject do
|
48
|
+
get :index, params: { user_id: user.id, token: user.spree_api_key, format: 'json' }
|
49
|
+
JSON.parse(response.body)
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'there are no reviews for the user' do
|
53
|
+
it 'should return an empty array' do
|
54
|
+
expect(Spree::Review.count).to be >= 0
|
55
|
+
expect(subject["reviews"]).to be_empty
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'there are reviews for user' do
|
60
|
+
before { review.update(user_id: user.id) }
|
61
|
+
|
62
|
+
it 'returns all reviews for the user' do
|
63
|
+
expect(Spree::Review.count).to be >= 2
|
64
|
+
expect(subject.size).to eq(2)
|
65
|
+
expect(subject["reviews"][0]["id"]).to eq(review.id)
|
66
|
+
expect(subject["avg_rating"]).to eq(nil)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe '#show' do
|
73
|
+
subject do
|
74
|
+
get :show, params: { id: review.id, token: user.spree_api_key, format: 'json' }
|
75
|
+
JSON.parse(response.body)
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'when it is the users review' do
|
79
|
+
before { review.update(user_id: user.id) }
|
80
|
+
|
81
|
+
it 'should return the review' do
|
82
|
+
expect(subject).not_to be_empty
|
83
|
+
expect(subject["product_id"]).to eq(product.id)
|
84
|
+
expect(subject["name"]).to eq(review[:name])
|
85
|
+
expect(subject["review"]).to eq(review[:review])
|
86
|
+
expect(subject["title"]).to eq(review[:title])
|
87
|
+
expect(subject["verified_purchaser"]).to eq(false)
|
88
|
+
expect(subject["images"]).to eq([])
|
89
|
+
expect(subject["feedback_reviews"]).to eq([])
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'when it is not the users review' do
|
94
|
+
it 'should return with not authorized' do
|
95
|
+
expect(subject["error"]).not_to be_empty
|
96
|
+
expect(subject["error"]).to match(/not authorized/i)
|
97
|
+
end
|
98
|
+
|
99
|
+
context 'and it the review is approved' do
|
100
|
+
before { review.update(approved: true) }
|
101
|
+
|
102
|
+
it 'should return the review' do
|
103
|
+
expect(subject).not_to be_empty
|
104
|
+
expect(subject["product_id"]).to eq(product.id)
|
105
|
+
expect(subject["name"]).to eq(review[:name])
|
106
|
+
expect(subject["review"]).to eq(review[:review])
|
107
|
+
expect(subject["title"]).to eq(review[:title])
|
108
|
+
expect(subject["images"]).to eq([])
|
109
|
+
expect(subject["feedback_reviews"]).to eq([])
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe '#create' do
|
116
|
+
let(:review_params) do
|
117
|
+
{
|
118
|
+
"user_id": user.id,
|
119
|
+
"rating": "3 stars",
|
120
|
+
"title": "My title 2",
|
121
|
+
"name": "Full Name",
|
122
|
+
"review": "My review of the product"
|
123
|
+
}
|
124
|
+
end
|
125
|
+
|
126
|
+
subject do
|
127
|
+
params = { product_id: product.id, token: user.spree_api_key, format: 'json' }.merge(review_params)
|
128
|
+
post :create, params: params
|
129
|
+
JSON.parse(response.body)
|
130
|
+
end
|
131
|
+
|
132
|
+
context 'when user has already reviewed this product' do
|
133
|
+
before do
|
134
|
+
review.update(user_id: user.id)
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'should return with a fail' do
|
138
|
+
expect(subject["error"]).not_to be_empty
|
139
|
+
expect(subject["error"]).to match(/invalid resource/i)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
context 'when it is a users first review for the product' do
|
144
|
+
it 'should return success with review' do
|
145
|
+
expect(subject).not_to be_empty
|
146
|
+
expect(subject["product_id"]).to eq(product.id)
|
147
|
+
expect(subject["name"]).to eq(review_params[:name])
|
148
|
+
expect(subject["review"]).to eq(review_params[:review])
|
149
|
+
expect(subject["title"]).to eq(review_params[:title])
|
150
|
+
expect(subject["images"]).to eq([])
|
151
|
+
expect(subject["feedback_reviews"]).to eq([])
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
describe '#update' do
|
157
|
+
before { review.update(approved: true, user_id: user.id) }
|
158
|
+
let(:params) { { product_id: product.id, id: review.id, token: user.spree_api_key, format: 'json' }.merge(review_params) }
|
159
|
+
|
160
|
+
let(:review_params) do
|
161
|
+
{
|
162
|
+
"rating": "3 stars",
|
163
|
+
"title": "My title 2",
|
164
|
+
"name": "Full name",
|
165
|
+
"review": "My review of the product",
|
166
|
+
}
|
167
|
+
end
|
168
|
+
|
169
|
+
subject do
|
170
|
+
put :update, params: params
|
171
|
+
JSON.parse(response.body)
|
172
|
+
end
|
173
|
+
|
174
|
+
context 'when a user updates their own review' do
|
175
|
+
it 'should successfully update the review and set approved back to false' do
|
176
|
+
original = review
|
177
|
+
expect(original.approved?).to be true
|
178
|
+
expect(subject["id"]).to eq(original.id)
|
179
|
+
expect(subject["user_id"]).to eq(original.user_id)
|
180
|
+
expect(subject["product_id"]).to eq(original.product_id)
|
181
|
+
expect(subject["approved"]).to be false
|
182
|
+
expect(subject["images"]).to eq([])
|
183
|
+
expect(subject["feedback_reviews"]).to eq([])
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
context 'when a user updates another users review' do
|
188
|
+
let(:other_user) { create(:user) }
|
189
|
+
let(:params) { { product_id: product.id, id: review.id, token: other_user.spree_api_key, format: 'json' }.merge(review_params) }
|
190
|
+
|
191
|
+
before do
|
192
|
+
other_user.generate_spree_api_key!
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'should return an error' do
|
196
|
+
expect(subject["error"]).not_to be_empty
|
197
|
+
expect(subject["error"]).to match(/not authorized/i)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
describe '#destroy' do
|
203
|
+
before { review.update(approved: true, user_id: user.id) }
|
204
|
+
let(:params) { { product_id: product.id, id: review.id, token: user.spree_api_key, format: 'json' } }
|
205
|
+
|
206
|
+
subject do
|
207
|
+
delete :destroy, params: params
|
208
|
+
JSON.parse(response.body)
|
209
|
+
end
|
210
|
+
|
211
|
+
context "when a user destroys their own review" do
|
212
|
+
it 'should return the deleted review' do
|
213
|
+
expect(subject["id"]).to eq(review.id)
|
214
|
+
expect(subject["product_id"]).to eq(product.id)
|
215
|
+
expect(Spree::Review.find_by(id: review.id)).to be_falsey
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
context "when a user destroys another users review" do
|
220
|
+
let(:other_user) { create(:user) }
|
221
|
+
let(:params) { { product_id: product.id, id: review.id, token: other_user.spree_api_key, format: 'json' } }
|
222
|
+
|
223
|
+
before do
|
224
|
+
other_user.generate_spree_api_key!
|
225
|
+
end
|
226
|
+
|
227
|
+
it 'should return an error' do
|
228
|
+
expect(subject["error"]).not_to be_empty
|
229
|
+
expect(subject["error"]).to match(/not authorized/i)
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
data/spec/features/admin_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
RSpec.feature 'Review Admin' do
|
@@ -30,6 +32,7 @@ RSpec.feature 'Review Admin' do
|
|
30
32
|
|
31
33
|
expect(page).to have_text 'Editing'
|
32
34
|
expect(page).to have_text review.title
|
35
|
+
expect(page).to have_css('a', text: review.email)
|
33
36
|
end
|
34
37
|
end
|
35
38
|
end
|