solidus_reviews 1.0.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.circleci/config.yml +35 -0
- data/.gem_release.yml +5 -0
- data/.github/stale.yml +17 -0
- data/.gitignore +12 -8
- data/.rspec +1 -1
- data/.rubocop.yml +2 -0
- data/.rubocop_todo.yml +221 -0
- data/CHANGELOG.md +132 -0
- data/Gemfile +17 -3
- data/{LICENSE.md → LICENSE} +2 -2
- data/README.md +33 -50
- data/Rakefile +5 -18
- 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 +19 -19
- data/app/controllers/spree/reviews_controller.rb +38 -7
- data/app/decorators/controllers/solidus_reviews/spree/products_controller_decorator.rb +15 -0
- data/app/decorators/helpers/solidus_reviews/spree/api/api_helpers_decorator.rb +33 -0
- data/app/decorators/models/solidus_reviews/spree/product_decorator.rb +31 -0
- data/app/decorators/models/solidus_reviews/spree/user_decorator.rb +15 -0
- data/app/helpers/spree/reviews_helper.rb +15 -5
- data/app/models/spree/feedback_review.rb +7 -6
- data/app/models/spree/permission_sets/review_display.rb +11 -0
- data/app/models/spree/permission_sets/review_management.rb +11 -0
- data/app/models/spree/review.rb +46 -13
- data/app/models/spree/reviews_ability.rb +24 -5
- data/app/models/spree/reviews_configuration.rb +25 -8
- data/app/overrides/add_reviews_after_product_properties.rb +7 -5
- data/app/overrides/add_reviews_tab_to_admin.rb +20 -4
- data/app/overrides/add_reviews_to_admin_configuration_sidebar.rb +20 -5
- data/app/views/spree/admin/feedback_reviews/index.html.erb +9 -9
- data/app/views/spree/admin/review_settings/edit.html.erb +71 -35
- data/app/views/spree/admin/reviews/_form.html.erb +26 -5
- data/app/views/spree/admin/reviews/edit.html.erb +5 -3
- data/app/views/spree/admin/reviews/index.html.erb +104 -88
- data/app/views/spree/api/reviews/_feedback_review.json.jbuilder +5 -0
- data/app/views/spree/api/reviews/_review.json.jbuilder +11 -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 +17 -10
- data/app/views/spree/reviews/edit.html.erb +3 -0
- 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 +31 -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/console +17 -0
- data/bin/rails +13 -3
- data/bin/setup +8 -0
- data/config/initializers/constants.rb +2 -0
- data/config/initializers/load_preferences.rb +2 -0
- data/config/locales/de-CH.yml +15 -2
- data/config/locales/de.yml +15 -2
- data/config/locales/en-GB.yml +16 -3
- data/config/locales/en.yml +16 -2
- data/config/locales/es.yml +16 -3
- data/config/locales/fr.yml +15 -3
- data/config/locales/it.yml +79 -0
- data/config/locales/pl.yml +15 -3
- data/config/locales/pt-BR.yml +15 -3
- data/config/locales/pt.yml +15 -3
- data/config/locales/ro.yml +16 -4
- data/config/locales/ru.yml +14 -2
- data/config/locales/sv.yml +15 -2
- data/config/locales/tr.yml +15 -3
- data/config/locales/uk.yml +15 -2
- data/config/locales/zh-CN.yml +15 -2
- data/config/locales/zh-TW.yml +15 -2
- data/config/routes.rb +21 -2
- 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 +7 -7
- 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 +7 -0
- data/lib/controllers/spree/api/feedback_reviews_controller.rb +91 -0
- data/lib/controllers/spree/api/reviews_controller.rb +113 -0
- data/lib/generators/solidus_reviews/install/install_generator.rb +5 -4
- data/lib/solidus_reviews.rb +7 -5
- data/lib/solidus_reviews/engine.rb +26 -0
- 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/solidus_reviews/version.rb +5 -0
- data/solidus_reviews.gemspec +32 -32
- data/spec/controllers/{admin → spree/admin}/feedback_reviews_controller_spec.rb +10 -8
- data/spec/controllers/spree/admin/review_settings_controller_spec.rb +58 -0
- data/spec/controllers/spree/admin/reviews_controller_spec.rb +65 -0
- data/spec/controllers/spree/api/feedback_reviews_controller_spec.rb +136 -0
- data/spec/controllers/spree/api/reviews_controller_spec.rb +238 -0
- data/spec/controllers/spree/feedback_reviews_controller_spec.rb +75 -0
- data/spec/controllers/spree/reviews_controller_spec.rb +298 -0
- data/spec/features/admin_spec.rb +9 -6
- data/spec/features/reviews_spec.rb +54 -37
- data/spec/helpers/review_helper_spec.rb +3 -2
- data/spec/models/feedback_review_spec.rb +19 -17
- data/spec/models/product_spec.rb +49 -24
- data/spec/models/review_spec.rb +133 -52
- data/spec/models/reviews_ability_spec.rb +16 -14
- data/spec/models/reviews_configuration_spec.rb +46 -26
- data/spec/spec_helper.rb +13 -44
- data/spec/support/config.rb +7 -0
- data/spec/support/factories.rb +3 -0
- data/vendor/assets/javascripts/jquery.rating.js +389 -376
- metadata +81 -190
- data/.travis.yml +0 -18
- data/CONTRIBUTING.md +0 -28
- data/app/controllers/spree/products_controller_decorator.rb +0 -5
- data/app/models/spree/product_decorator.rb +0 -21
- data/lib/spree_reviews/engine.rb +0 -17
- data/spec/controllers/admin/review_settings_controller_spec.rb +0 -57
- data/spec/controllers/admin/reviews_controller_spec.rb +0 -63
- data/spec/controllers/feedback_reviews_controller_spec.rb +0 -71
- data/spec/controllers/products_controller_spec.rb +0 -9
- data/spec/controllers/reviews_controller_spec.rb +0 -136
@@ -0,0 +1,113 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module Api
|
5
|
+
class ReviewsController < Spree::Api::BaseController
|
6
|
+
respond_to :json
|
7
|
+
|
8
|
+
before_action :load_review, only: [:show, :update, :destroy]
|
9
|
+
before_action :load_product, :find_review_user
|
10
|
+
before_action :sanitize_rating, only: [:create, :update]
|
11
|
+
before_action :prevent_multiple_reviews, only: [:create]
|
12
|
+
|
13
|
+
def index
|
14
|
+
@reviews = if @product
|
15
|
+
Spree::Review.default_approval_filter.where(product: @product)
|
16
|
+
else
|
17
|
+
Spree::Review.where(user: @current_api_user)
|
18
|
+
end
|
19
|
+
|
20
|
+
respond_with(@reviews)
|
21
|
+
end
|
22
|
+
|
23
|
+
def show
|
24
|
+
authorize! :read, @review
|
25
|
+
render json: @review, include: [:images, :feedback_reviews]
|
26
|
+
end
|
27
|
+
|
28
|
+
def create
|
29
|
+
return not_found if @product.nil?
|
30
|
+
|
31
|
+
@review = Spree::Review.new(review_params)
|
32
|
+
@review.product = @product
|
33
|
+
@review.user = @current_api_user
|
34
|
+
@review.ip_address = request.remote_ip
|
35
|
+
@review.locale = I18n.locale.to_s if Spree::Reviews::Config[:track_locale]
|
36
|
+
|
37
|
+
authorize! :create, @review
|
38
|
+
if @review.save
|
39
|
+
render json: @review, include: [:images, :feedback_reviews], status: :created
|
40
|
+
else
|
41
|
+
invalid_resource!(@review)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def update
|
46
|
+
authorize! :update, @review
|
47
|
+
|
48
|
+
attributes = review_params.merge(ip_address: request.remote_ip, approved: false)
|
49
|
+
|
50
|
+
if @review.update(attributes)
|
51
|
+
render json: @review, include: [:images, :feedback_reviews], status: :ok
|
52
|
+
else
|
53
|
+
invalid_resource!(@review)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def destroy
|
58
|
+
authorize! :destroy, @review
|
59
|
+
|
60
|
+
if @review.destroy
|
61
|
+
render json: @review, status: :ok
|
62
|
+
else
|
63
|
+
invalid_resource!(@review)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def permitted_review_attributes
|
70
|
+
[:product_id, :rating, :title, :review, :name, :show_identifier]
|
71
|
+
end
|
72
|
+
|
73
|
+
def review_params
|
74
|
+
params.permit(permitted_review_attributes)
|
75
|
+
end
|
76
|
+
|
77
|
+
# Loads product from product id.
|
78
|
+
def load_product
|
79
|
+
@product = if params[:product_id]
|
80
|
+
Spree::Product.friendly.find(params[:product_id])
|
81
|
+
else
|
82
|
+
@review&.product
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# Finds user based on api_key or by user_id if api_key belongs to an admin.
|
87
|
+
def find_review_user
|
88
|
+
if params[:user_id] && @current_user_roles.include?('admin')
|
89
|
+
@current_api_user = Spree.user_class.find(params[:user_id])
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Loads any review that is shared between the user and product
|
94
|
+
def load_review
|
95
|
+
@review = Spree::Review.find(params[:id])
|
96
|
+
end
|
97
|
+
|
98
|
+
# Ensures that a user can't create more than 1 review per product
|
99
|
+
def prevent_multiple_reviews
|
100
|
+
@review = @current_api_user.reviews.find_by(product: @product)
|
101
|
+
if @review.present?
|
102
|
+
invalid_resource!(@review)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# Converts rating strings like "5 units" to "5"
|
107
|
+
# Operates on params
|
108
|
+
def sanitize_rating
|
109
|
+
params[:rating].sub!(/\s*[^0-9]*\z/, '') if params[:rating].present?
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -1,8 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SolidusReviews
|
2
4
|
module Generators
|
3
5
|
class InstallGenerator < Rails::Generators::Base
|
4
|
-
|
5
|
-
class_option :auto_run_migrations, :type => :boolean, :default => false
|
6
|
+
class_option :auto_run_migrations, type: :boolean, default: false
|
6
7
|
|
7
8
|
def add_javascripts
|
8
9
|
append_file "vendor/assets/javascripts/spree/frontend/all.js", "//= require spree/frontend/solidus_reviews\n"
|
@@ -10,7 +11,7 @@ module SolidusReviews
|
|
10
11
|
end
|
11
12
|
|
12
13
|
def add_stylesheets
|
13
|
-
inject_into_file "vendor/assets/stylesheets/spree/frontend/all.css", " *= require spree/frontend/solidus_reviews\n", :
|
14
|
+
inject_into_file "vendor/assets/stylesheets/spree/frontend/all.css", " *= require spree/frontend/solidus_reviews\n", before: %r{\*/}, verbose: true
|
14
15
|
end
|
15
16
|
|
16
17
|
def add_migrations
|
@@ -18,7 +19,7 @@ module SolidusReviews
|
|
18
19
|
end
|
19
20
|
|
20
21
|
def run_migrations
|
21
|
-
run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask
|
22
|
+
run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]'))
|
22
23
|
if run_migrations
|
23
24
|
run 'bundle exec rake db:migrate'
|
24
25
|
else
|
data/lib/solidus_reviews.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'solidus_core'
|
4
|
+
require 'solidus_support'
|
3
5
|
require 'deface'
|
4
|
-
|
5
|
-
require '
|
6
|
-
require '
|
6
|
+
|
7
|
+
require 'solidus_reviews/version'
|
8
|
+
require 'solidus_reviews/engine'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spree/core'
|
4
|
+
|
5
|
+
module SolidusReviews
|
6
|
+
class Engine < Rails::Engine
|
7
|
+
include SolidusSupport::EngineExtensions
|
8
|
+
|
9
|
+
isolate_namespace Spree
|
10
|
+
|
11
|
+
engine_name 'solidus_reviews'
|
12
|
+
|
13
|
+
# use rspec for tests
|
14
|
+
config.generators do |g|
|
15
|
+
g.test_framework :rspec
|
16
|
+
end
|
17
|
+
|
18
|
+
config.to_prepare do
|
19
|
+
::Spree::Ability.register_ability(::Spree::ReviewsAbility)
|
20
|
+
end
|
21
|
+
|
22
|
+
if SolidusSupport.api_available?
|
23
|
+
paths["app/controllers"] << "lib/controllers"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,8 +1,9 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :feedback_review, class: Spree::FeedbackReview do |_f|
|
3
5
|
user
|
4
6
|
review
|
5
|
-
|
6
|
-
rating { rand(1..5) }
|
7
|
+
rating { rand(1..5) }
|
7
8
|
end
|
8
|
-
end
|
9
|
+
end
|
@@ -1,20 +1,30 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :review, class: Spree::Review do |_f|
|
5
|
+
sequence(:name) { |i| "User #{i}" }
|
6
|
+
title { FFaker::Book.title }
|
7
|
+
review { 'This product is ok!' }
|
6
8
|
rating { rand(1..5) }
|
7
|
-
approved false
|
8
|
-
show_identifier true
|
9
|
+
approved { false }
|
10
|
+
show_identifier { true }
|
9
11
|
user
|
10
12
|
product
|
11
13
|
|
12
14
|
trait :approved do
|
13
|
-
approved true
|
15
|
+
approved { true }
|
14
16
|
end
|
15
17
|
|
16
18
|
trait :hide_identifier do
|
17
|
-
show_identifier false
|
19
|
+
show_identifier { false }
|
20
|
+
end
|
21
|
+
|
22
|
+
trait :with_image do
|
23
|
+
images {
|
24
|
+
[
|
25
|
+
FactoryBot.create(:image)
|
26
|
+
]
|
27
|
+
}
|
18
28
|
end
|
19
29
|
end
|
20
30
|
end
|
data/solidus_reviews.gemspec
CHANGED
@@ -1,35 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$:.push File.expand_path('lib', __dir__)
|
4
|
+
require 'solidus_reviews/version'
|
5
|
+
|
1
6
|
Gem::Specification.new do |s|
|
2
|
-
s.
|
3
|
-
s.
|
4
|
-
s.
|
5
|
-
s.
|
6
|
-
|
7
|
-
s.
|
8
|
-
s.
|
9
|
-
|
10
|
-
s.
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
s.
|
16
|
-
|
17
|
-
s.
|
18
|
-
|
19
|
-
|
20
|
-
s.
|
7
|
+
s.name = 'solidus_reviews'
|
8
|
+
s.version = SolidusReviews::VERSION
|
9
|
+
s.summary = 'Review and rating functionality for your Solidus store.'
|
10
|
+
s.license = 'BSD-3-Clause'
|
11
|
+
|
12
|
+
s.author = 'Solidus Contrib'
|
13
|
+
s.homepage = 'https://github.com/solidusio-contrib/solidus_reviews'
|
14
|
+
|
15
|
+
if s.respond_to?(:metadata)
|
16
|
+
s.metadata["homepage_uri"] = s.homepage if s.homepage
|
17
|
+
s.metadata["source_code_uri"] = s.homepage if s.homepage
|
18
|
+
end
|
19
|
+
|
20
|
+
s.required_ruby_version = '~> 2.4'
|
21
|
+
|
22
|
+
s.files = Dir.chdir(File.expand_path(__dir__)) do
|
23
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
24
|
+
end
|
25
|
+
s.test_files = Dir['spec/**/*']
|
26
|
+
s.bindir = "exe"
|
27
|
+
s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
+
s.require_paths = ["lib"]
|
29
|
+
|
21
30
|
s.add_dependency 'deface', '~> 1.0'
|
22
|
-
s.add_dependency '
|
23
|
-
|
24
|
-
|
25
|
-
s.add_development_dependency '
|
26
|
-
s.add_development_dependency 'database_cleaner', '1.2.0'
|
27
|
-
s.add_development_dependency 'poltergeist', '~> 1.10.0'
|
28
|
-
s.add_development_dependency 'rspec-rails', '~> 3'
|
29
|
-
s.add_development_dependency 'factory_girl', '~> 4.4'
|
30
|
-
s.add_development_dependency 'sqlite3'
|
31
|
-
s.add_development_dependency 'simplecov', '~> 0.7.1'
|
32
|
-
s.add_development_dependency 'coffee-rails', '~> 4.0.0'
|
33
|
-
s.add_development_dependency 'sass-rails', '~> 5.0'
|
34
|
-
s.add_development_dependency 'pry'
|
31
|
+
s.add_dependency 'solidus_core', ['>= 2.0.0', '< 3']
|
32
|
+
s.add_dependency 'solidus_support', '~> 0.4'
|
33
|
+
|
34
|
+
s.add_development_dependency 'solidus_dev_support'
|
35
35
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Spree::Admin::FeedbackReviewsController do
|
@@ -5,11 +7,11 @@ describe Spree::Admin::FeedbackReviewsController do
|
|
5
7
|
|
6
8
|
before do
|
7
9
|
user = create(:admin_user)
|
8
|
-
controller.
|
10
|
+
allow(controller).to receive(:spree_current_user).and_return(user)
|
9
11
|
end
|
10
12
|
|
11
|
-
|
12
|
-
let!(:review) { create(:review)}
|
13
|
+
describe '#index' do
|
14
|
+
let!(:review) { create(:review) }
|
13
15
|
let!(:other_review) { create(:review) }
|
14
16
|
|
15
17
|
let!(:feedback_review_1) { create(:feedback_review, created_at: 10.days.ago, review: review) }
|
@@ -20,10 +22,10 @@ describe Spree::Admin::FeedbackReviewsController do
|
|
20
22
|
let!(:other_feedback_review_2) { create(:feedback_review, created_at: 2.days.ago, review: other_review) }
|
21
23
|
|
22
24
|
it 'looks up feedback reviews for the specified review and renders the template' do
|
23
|
-
|
24
|
-
response.status.
|
25
|
-
response.
|
26
|
-
assigns(:collection).
|
25
|
+
get :index, params: { review_id: review.id }
|
26
|
+
expect(response.status).to eq(200)
|
27
|
+
expect(response).to render_template(:index)
|
28
|
+
expect(assigns(:collection)).to eq([feedback_review_2, feedback_review_3, feedback_review_1])
|
27
29
|
end
|
28
30
|
end
|
29
|
-
end
|
31
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Spree::Admin::ReviewSettingsController do
|
6
|
+
stub_authorization!
|
7
|
+
|
8
|
+
before do
|
9
|
+
user = create(:admin_user)
|
10
|
+
allow(controller).to receive(:spree_current_user).and_return(user)
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#update' do
|
14
|
+
it 'redirects to edit-review-settings page' do
|
15
|
+
put :update, params: { preferences: { preview_size: 4 } }
|
16
|
+
expect(response).to redirect_to spree.edit_admin_review_settings_path
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'For parameters:
|
20
|
+
preview_size: 4,
|
21
|
+
show_email: false,
|
22
|
+
feedback_rating: false,
|
23
|
+
require_login: true,
|
24
|
+
track_locale: true' do
|
25
|
+
it 'sets preferred_preview_size to 4' do
|
26
|
+
put :update, params: { preferences: { preview_size: 4 } }
|
27
|
+
expect(Spree::Reviews::Config.preferred_preview_size).to eq 4
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'sets preferred_show_email to false' do
|
31
|
+
put :update, params: { preferences: { show_email: false } }
|
32
|
+
expect(Spree::Reviews::Config.preferred_show_email).to be false
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'sets preferred_feedback_rating to false' do
|
36
|
+
put :update, params: { preferences: { feedback_rating: false } }
|
37
|
+
expect(Spree::Reviews::Config.preferred_feedback_rating).to be false
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'sets preferred_require_login to true' do
|
41
|
+
put :update, params: { preferences: { require_login: true } }
|
42
|
+
expect(Spree::Reviews::Config.preferred_require_login).to be true
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'sets preferred_track_locale to true' do
|
46
|
+
put :update, params: { preferences: { track_locale: true } }
|
47
|
+
expect(Spree::Reviews::Config.preferred_track_locale).to be true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe '#edit' do
|
53
|
+
it 'renders the edit template' do
|
54
|
+
get :edit
|
55
|
+
expect(response).to render_template(:edit)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Spree::Admin::ReviewsController do
|
6
|
+
stub_authorization!
|
7
|
+
|
8
|
+
let(:product) { create(:product) }
|
9
|
+
let(:review) { create(:review, approved: false) }
|
10
|
+
|
11
|
+
before do
|
12
|
+
user = create(:admin_user)
|
13
|
+
allow(controller).to receive(:spree_current_user).and_return(user)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#index' do
|
17
|
+
it 'list reviews' do
|
18
|
+
reviews = [
|
19
|
+
create(:review, product: product),
|
20
|
+
create(:review, product: product)
|
21
|
+
]
|
22
|
+
get :index, params: { product_id: product.slug }
|
23
|
+
expect(assigns[:reviews]).to match_array reviews
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#approve' do
|
28
|
+
it 'show notice message when approved' do
|
29
|
+
review.update_attribute(:approved, true)
|
30
|
+
get :approve, params: { id: review.id }
|
31
|
+
expect(response).to redirect_to spree.admin_reviews_path
|
32
|
+
expect(flash[:success]).to eq I18n.t('spree.info_approve_review')
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'show error message when not approved' do
|
36
|
+
expect_any_instance_of(Spree::Review).to receive(:save).and_return(false)
|
37
|
+
get :approve, params: { id: review.id }
|
38
|
+
expect(flash[:error]).to eq I18n.t('spree.error_approve_review')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#edit' do
|
43
|
+
specify do
|
44
|
+
get :edit, params: { id: review.id }
|
45
|
+
expect(response.status).to eq(200)
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'when product is nil' do
|
49
|
+
before do
|
50
|
+
review.product = nil
|
51
|
+
review.save!
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'flash error' do
|
55
|
+
get :edit, params: { id: review.id }
|
56
|
+
expect(flash[:error]).to eq I18n.t('spree.error_no_product')
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'redirect to admin-reviews page' do
|
60
|
+
get :edit, params: { id: review.id }
|
61
|
+
expect(response).to redirect_to spree.admin_reviews_path
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|