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.
Files changed (126) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +35 -0
  3. data/.gem_release.yml +5 -0
  4. data/.github/stale.yml +17 -0
  5. data/.gitignore +12 -8
  6. data/.rspec +1 -1
  7. data/.rubocop.yml +2 -0
  8. data/.rubocop_todo.yml +221 -0
  9. data/CHANGELOG.md +132 -0
  10. data/Gemfile +17 -3
  11. data/{LICENSE.md → LICENSE} +2 -2
  12. data/README.md +33 -50
  13. data/Rakefile +5 -18
  14. data/app/controllers/spree/admin/feedback_reviews_controller.rb +3 -1
  15. data/app/controllers/spree/admin/review_settings_controller.rb +3 -1
  16. data/app/controllers/spree/admin/reviews_controller.rb +9 -6
  17. data/app/controllers/spree/feedback_reviews_controller.rb +19 -19
  18. data/app/controllers/spree/reviews_controller.rb +38 -7
  19. data/app/decorators/controllers/solidus_reviews/spree/products_controller_decorator.rb +15 -0
  20. data/app/decorators/helpers/solidus_reviews/spree/api/api_helpers_decorator.rb +33 -0
  21. data/app/decorators/models/solidus_reviews/spree/product_decorator.rb +31 -0
  22. data/app/decorators/models/solidus_reviews/spree/user_decorator.rb +15 -0
  23. data/app/helpers/spree/reviews_helper.rb +15 -5
  24. data/app/models/spree/feedback_review.rb +7 -6
  25. data/app/models/spree/permission_sets/review_display.rb +11 -0
  26. data/app/models/spree/permission_sets/review_management.rb +11 -0
  27. data/app/models/spree/review.rb +46 -13
  28. data/app/models/spree/reviews_ability.rb +24 -5
  29. data/app/models/spree/reviews_configuration.rb +25 -8
  30. data/app/overrides/add_reviews_after_product_properties.rb +7 -5
  31. data/app/overrides/add_reviews_tab_to_admin.rb +20 -4
  32. data/app/overrides/add_reviews_to_admin_configuration_sidebar.rb +20 -5
  33. data/app/views/spree/admin/feedback_reviews/index.html.erb +9 -9
  34. data/app/views/spree/admin/review_settings/edit.html.erb +71 -35
  35. data/app/views/spree/admin/reviews/_form.html.erb +26 -5
  36. data/app/views/spree/admin/reviews/edit.html.erb +5 -3
  37. data/app/views/spree/admin/reviews/index.html.erb +104 -88
  38. data/app/views/spree/api/reviews/_feedback_review.json.jbuilder +5 -0
  39. data/app/views/spree/api/reviews/_review.json.jbuilder +11 -0
  40. data/app/views/spree/api/reviews/index.json.jbuilder +6 -0
  41. data/app/views/spree/api/reviews/show.json.jbuilder +3 -0
  42. data/app/views/spree/feedback_reviews/_form.html.erb +5 -5
  43. data/app/views/spree/feedback_reviews/_summary.html.erb +3 -3
  44. data/app/views/spree/feedback_reviews/create.js.erb +2 -2
  45. data/app/views/spree/reviews/_form.html.erb +17 -10
  46. data/app/views/spree/reviews/edit.html.erb +3 -0
  47. data/app/views/spree/reviews/new.html.erb +2 -2
  48. data/app/views/spree/shared/_rating.html.erb +3 -3
  49. data/app/views/spree/shared/_review.html.erb +31 -19
  50. data/app/views/spree/shared/_review_summary.html.erb +3 -3
  51. data/app/views/spree/shared/_reviews.html.erb +6 -6
  52. data/app/views/spree/shared/_shortrating.html.erb +2 -2
  53. data/bin/console +17 -0
  54. data/bin/rails +13 -3
  55. data/bin/setup +8 -0
  56. data/config/initializers/constants.rb +2 -0
  57. data/config/initializers/load_preferences.rb +2 -0
  58. data/config/locales/de-CH.yml +15 -2
  59. data/config/locales/de.yml +15 -2
  60. data/config/locales/en-GB.yml +16 -3
  61. data/config/locales/en.yml +16 -2
  62. data/config/locales/es.yml +16 -3
  63. data/config/locales/fr.yml +15 -3
  64. data/config/locales/it.yml +79 -0
  65. data/config/locales/pl.yml +15 -3
  66. data/config/locales/pt-BR.yml +15 -3
  67. data/config/locales/pt.yml +15 -3
  68. data/config/locales/ro.yml +16 -4
  69. data/config/locales/ru.yml +14 -2
  70. data/config/locales/sv.yml +15 -2
  71. data/config/locales/tr.yml +15 -3
  72. data/config/locales/uk.yml +15 -2
  73. data/config/locales/zh-CN.yml +15 -2
  74. data/config/locales/zh-TW.yml +15 -2
  75. data/config/routes.rb +21 -2
  76. data/db/migrate/20081020220724_create_reviews.rb +4 -2
  77. data/db/migrate/20101222083309_create_feedback_reviews.rb +5 -3
  78. data/db/migrate/20110406083603_add_rating_to_products.rb +7 -5
  79. data/db/migrate/20110606150524_add_user_to_reviews.rb +4 -2
  80. data/db/migrate/20110806093221_add_ip_address_to_reviews.rb +3 -1
  81. data/db/migrate/20120110172331_namespace_tables.rb +3 -1
  82. data/db/migrate/20120123141326_recalculate_ratings.rb +7 -7
  83. data/db/migrate/20120712182514_add_locale_to_reviews.rb +4 -2
  84. data/db/migrate/20120712182627_add_locale_to_feedback_reviews.rb +4 -2
  85. data/db/migrate/20140703200946_add_show_identifier_to_reviews.rb +3 -1
  86. data/db/migrate/20190613165528_add_verified_purchaser_to_reviews.rb +7 -0
  87. data/lib/controllers/spree/api/feedback_reviews_controller.rb +91 -0
  88. data/lib/controllers/spree/api/reviews_controller.rb +113 -0
  89. data/lib/generators/solidus_reviews/install/install_generator.rb +5 -4
  90. data/lib/solidus_reviews.rb +7 -5
  91. data/lib/solidus_reviews/engine.rb +26 -0
  92. data/lib/solidus_reviews/factories.rb +3 -1
  93. data/lib/solidus_reviews/factories/feedback_review_factory.rb +6 -5
  94. data/lib/solidus_reviews/factories/review_factory.rb +19 -9
  95. data/lib/solidus_reviews/version.rb +5 -0
  96. data/solidus_reviews.gemspec +32 -32
  97. data/spec/controllers/{admin → spree/admin}/feedback_reviews_controller_spec.rb +10 -8
  98. data/spec/controllers/spree/admin/review_settings_controller_spec.rb +58 -0
  99. data/spec/controllers/spree/admin/reviews_controller_spec.rb +65 -0
  100. data/spec/controllers/spree/api/feedback_reviews_controller_spec.rb +136 -0
  101. data/spec/controllers/spree/api/reviews_controller_spec.rb +238 -0
  102. data/spec/controllers/spree/feedback_reviews_controller_spec.rb +75 -0
  103. data/spec/controllers/spree/reviews_controller_spec.rb +298 -0
  104. data/spec/features/admin_spec.rb +9 -6
  105. data/spec/features/reviews_spec.rb +54 -37
  106. data/spec/helpers/review_helper_spec.rb +3 -2
  107. data/spec/models/feedback_review_spec.rb +19 -17
  108. data/spec/models/product_spec.rb +49 -24
  109. data/spec/models/review_spec.rb +133 -52
  110. data/spec/models/reviews_ability_spec.rb +16 -14
  111. data/spec/models/reviews_configuration_spec.rb +46 -26
  112. data/spec/spec_helper.rb +13 -44
  113. data/spec/support/config.rb +7 -0
  114. data/spec/support/factories.rb +3 -0
  115. data/vendor/assets/javascripts/jquery.rating.js +389 -376
  116. metadata +81 -190
  117. data/.travis.yml +0 -18
  118. data/CONTRIBUTING.md +0 -28
  119. data/app/controllers/spree/products_controller_decorator.rb +0 -5
  120. data/app/models/spree/product_decorator.rb +0 -21
  121. data/lib/spree_reviews/engine.rb +0 -17
  122. data/spec/controllers/admin/review_settings_controller_spec.rb +0 -57
  123. data/spec/controllers/admin/reviews_controller_spec.rb +0 -63
  124. data/spec/controllers/feedback_reviews_controller_spec.rb +0 -71
  125. data/spec/controllers/products_controller_spec.rb +0 -9
  126. 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", :before => /\*\//, :verbose => true
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 'Would you like to run the migrations now? [Y/n]')
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
@@ -1,6 +1,8 @@
1
- require 'sass/rails'
2
- require 'solidus'
1
+ # frozen_string_literal: true
2
+
3
+ require 'solidus_core'
4
+ require 'solidus_support'
3
5
  require 'deface'
4
- require 'solidus_auth_devise'
5
- require 'spree_reviews/engine'
6
- require 'coffee_script'
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,4 +1,6 @@
1
- require "factory_girl"
1
+ # frozen_string_literal: true
2
+
3
+ require "factory_bot"
2
4
 
3
5
  Dir["#{File.dirname(__FILE__)}/factories/**"].each do |f|
4
6
  require File.expand_path(f)
@@ -1,8 +1,9 @@
1
- FactoryGirl.define do
2
- factory :feedback_review, :class => Spree::FeedbackReview do |f|
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
- comment { generate(:random_description) }
6
- rating { rand(1..5) }
7
+ rating { rand(1..5) }
7
8
  end
8
- end
9
+ end
@@ -1,20 +1,30 @@
1
- FactoryGirl.define do
2
- factory :review, :class => Spree::Review do |f|
3
- name { generate(:random_email) }
4
- title { generate(:random_string) }
5
- review { generate(:random_description) }
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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusReviews
4
+ VERSION = '1.4.0'
5
+ end
@@ -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.platform = Gem::Platform::RUBY
3
- s.name = 'solidus_reviews'
4
- s.version = '1.0.0'
5
- s.summary = 'Basic review and ratings facility for Spree'
6
- s.authors = ['Paul Callaghan']
7
- s.description = s.summary
8
- s.required_ruby_version = '>= 1.9.3'
9
-
10
- s.authors = ['Paul Callaghan', 'Alex Blackie']
11
- s.email = 'paulcc.two@gmail.com'
12
- s.homepage = 'https://github.com/solidusio-contrib/solidus-reviews/'
13
- s.license = 'BSD-3'
14
-
15
- s.files = `git ls-files`.split("\n")
16
- s.test_files = `git ls-files -- spec/*`.split("\n")
17
- s.require_path = 'lib'
18
- s.requirements << 'none'
19
-
20
- s.add_dependency 'solidus', '~> 1.0'
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 'solidus_auth_devise', '~> 1.0'
23
-
24
- s.add_development_dependency 'ffaker'
25
- s.add_development_dependency 'capybara', '~> 2.7'
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.stub(:try_spree_current_user => user)
10
+ allow(controller).to receive(:spree_current_user).and_return(user)
9
11
  end
10
12
 
11
- context '#index' do
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
- spree_get :index, review_id: review.id
24
- response.status.should eq(200)
25
- response.should render_template(:index)
26
- assigns(:collection).should eq([feedback_review_2, feedback_review_3, feedback_review_1])
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