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
@@ -1,21 +0,0 @@
1
- # Add access to reviews/ratings to the product model
2
- Spree::Product.class_eval do
3
- has_many :reviews
4
-
5
- def stars
6
- avg_rating.try(:round) || 0
7
- end
8
-
9
- def recalculate_rating
10
- reviews_count = self.reviews.reload.approved.count
11
-
12
- self.reviews_count = reviews_count
13
- if reviews_count > 0
14
- self.avg_rating = self.reviews.approved.sum(:rating).to_f / reviews_count
15
- else
16
- self.avg_rating = 0
17
- end
18
- self.save
19
- end
20
-
21
- end
@@ -1,17 +0,0 @@
1
- module SpreeReviews
2
- class Engine < Rails::Engine
3
- require 'spree/core'
4
- isolate_namespace Spree
5
- engine_name 'solidus_reviews'
6
-
7
- config.autoload_paths += %W(#{config.root}/lib)
8
-
9
- def self.activate
10
- Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
11
- Rails.configuration.cache_classes ? require(c) : load(c)
12
- end
13
- Spree::Ability.register_ability(Spree::ReviewsAbility)
14
- end
15
- config.to_prepare &method(:activate).to_proc
16
- end
17
- end
@@ -1,57 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Admin::ReviewSettingsController do
4
- stub_authorization!
5
-
6
- before do
7
- user = create(:admin_user)
8
- controller.stub(:try_spree_current_user => user)
9
- end
10
-
11
- context '#update' do
12
- it 'redirects to edit-review-settings page' do
13
- spree_put :update, preferences: { preview_size: 4 }
14
- response.should redirect_to spree.edit_admin_review_settings_path
15
- end
16
-
17
- context 'For parameters:
18
- preview_size: 4,
19
- show_email: false,
20
- feedback_rating: false,
21
- require_login: true,
22
- track_locale: true' do
23
-
24
- it 'sets preferred_preview_size to 4' do
25
- spree_put :update, preferences: { preview_size: 4 }
26
- Spree::Reviews::Config.preferred_preview_size.should eq 4
27
- end
28
-
29
- it 'sets preferred_show_email to false' do
30
- spree_put :update, preferences: { show_email: false }
31
- Spree::Reviews::Config.preferred_show_email.should be false
32
- end
33
-
34
- it 'sets preferred_feedback_rating to false' do
35
- spree_put :update, preferences: { feedback_rating: false }
36
- Spree::Reviews::Config.preferred_feedback_rating.should be false
37
- end
38
-
39
- it 'sets preferred_require_login to true' do
40
- spree_put :update, preferences: { require_login: true }
41
- Spree::Reviews::Config.preferred_require_login.should be true
42
- end
43
-
44
- it 'sets preferred_track_locale to true' do
45
- spree_put :update, preferences: { track_locale: true }
46
- Spree::Reviews::Config.preferred_track_locale.should be true
47
- end
48
- end
49
- end
50
-
51
- context '#edit' do
52
- it 'should render the edit template' do
53
- spree_get :edit
54
- response.should render_template(:edit)
55
- end
56
- end
57
- end
@@ -1,63 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Admin::ReviewsController do
4
- stub_authorization!
5
-
6
- let(:product) { create(:product) }
7
- let(:review) { create(:review, approved: false) }
8
-
9
- before do
10
- user = create(:admin_user)
11
- controller.stub(try_spree_current_user: user)
12
- end
13
-
14
- context '#index' do
15
- it 'list reviews' do
16
- reviews = [
17
- create(:review, product: product),
18
- create(:review, product: product)
19
- ]
20
- spree_get :index, product_id: product.slug
21
- assigns[:reviews].should =~ reviews
22
- end
23
- end
24
-
25
- context '#approve' do
26
- it 'show notice message when approved' do
27
- review.update_attribute(:approved, true)
28
- spree_get :approve, id: review.id
29
- response.should redirect_to spree.admin_reviews_path
30
- flash[:notice].should eq Spree.t(:info_approve_review)
31
- end
32
-
33
- it 'show error message when not approved' do
34
- Spree::Review.any_instance.stub(:update_attribute).and_return(false)
35
- spree_get :approve, id: review.id
36
- flash[:error].should eq Spree.t(:error_approve_review)
37
- end
38
- end
39
-
40
- context '#edit' do
41
- specify do
42
- spree_get :edit, id: review.id
43
- response.status.should eq(200)
44
- end
45
-
46
- context 'when product is nil' do
47
- before do
48
- review.product = nil
49
- review.save!
50
- end
51
-
52
- it 'flash error' do
53
- spree_get :edit, id: review.id
54
- flash[:error].should eq Spree.t(:error_no_product)
55
- end
56
-
57
- it 'redirect to admin-reviews page' do
58
- spree_get :edit, id: review.id
59
- response.should redirect_to spree.admin_reviews_path
60
- end
61
- end
62
- end
63
- end
@@ -1,71 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::FeedbackReviewsController do
4
- let(:user) { create(:user) }
5
- let(:product) { create(:product) }
6
- let(:review) { create(:review, user: user) }
7
- let(:valid_attributes) do
8
- { review_id: review.id,
9
- user_id: user.id,
10
- feedback_review: {
11
- rating: '4 stars',
12
- comment: 'some comment'
13
- }}
14
- end
15
-
16
- before do
17
- controller.stub spree_current_user: user
18
- controller.stub spree_user_signed_in?: true
19
- request.env['HTTP_REFERER'] = '/'
20
- end
21
-
22
- describe '#create' do
23
- it 'creates a new feedback review' do
24
- rating = 4
25
- comment = FFaker::Lorem.paragraphs(3).join("\n")
26
- expect {
27
- spree_post :create, { review_id: review.id,
28
- feedback_review: { comment: comment,
29
- rating: rating },
30
- format: :js }
31
- response.status.should eq(200)
32
- response.should render_template(:create)
33
- }.to change(Spree::Review, :count).by(1)
34
- feedback_review = Spree::FeedbackReview.last
35
- feedback_review.comment.should eq(comment)
36
- feedback_review.review.should eq(review)
37
- feedback_review.rating.should eq(rating)
38
- feedback_review.user.should eq(user)
39
-
40
- end
41
-
42
- it 'redirects back to the calling page' do
43
- spree_post :create, valid_attributes
44
- response.should redirect_to '/'
45
- end
46
-
47
- it 'sets locale on feedback-review if required by config' do
48
- Spree::Reviews::Config.preferred_track_locale = true
49
- spree_post :create, valid_attributes
50
- assigns[:review].locale.should eq I18n.locale.to_s
51
- end
52
-
53
- it 'fails when user is not authorized' do
54
- controller.stub(:authorize!) { raise }
55
- expect {
56
- spree_post :create, valid_attributes
57
- }.to raise_error
58
- end
59
-
60
- it 'removes all non-numbers from ratings parameter' do
61
- spree_post :create, valid_attributes
62
- controller.params[:feedback_review][:rating].should eq '4'
63
- end
64
-
65
- it 'do not create feedback-review if review doesnt exist' do
66
- expect {
67
- spree_post :create, valid_attributes.merge!({review_id: nil})
68
- }.to raise_error
69
- end
70
- end
71
- end
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::ProductsController do
4
- [:avg_rating, :reviews_count].each do |attrib|
5
- it "should add #{attrib} to the set of allowed attributes" do
6
- controller.permitted_product_attributes.should include(attrib)
7
- end
8
- end
9
- end
@@ -1,136 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::ReviewsController, type: :controller do
4
- let(:user) { create(:user) }
5
- let(:product) { create(:product) }
6
- let(:review_params) do
7
- { product_id: product.slug,
8
- review: { rating: 3,
9
- name: 'Ryan Bigg',
10
- title: 'Great Product',
11
- review: 'Some big review text..' } }
12
- end
13
-
14
- before do
15
- controller.stub :spree_current_user => user
16
- controller.stub :spree_user_signed_in? => true
17
- end
18
-
19
- context '#index' do
20
- context 'for a product that does not exist' do
21
- it 'responds with a 404' do
22
- spree_get :index, product_id: 'not_real'
23
- response.status.should eq(404)
24
- end
25
- end
26
-
27
- context 'for a valid product' do
28
- it 'list approved reviews' do
29
- approved_reviews = [
30
- create(:review, :approved, product: product),
31
- create(:review, :approved, product: product)
32
- ]
33
- spree_get :index, product_id: product.slug
34
- assigns[:approved_reviews].should =~ approved_reviews
35
- end
36
- end
37
- end
38
-
39
- context '#new' do
40
- context 'for a product that does not exist' do
41
- it 'responds with a 404' do
42
- spree_get :new, product_id: 'not_real'
43
- response.status.should eq(404)
44
- end
45
- end
46
-
47
- it 'fail if the user is not authorized to create a review' do
48
- controller.stub(:authorize!) { raise }
49
- expect {
50
- spree_post :new, product_id: product.slug
51
- assert_match 'ryanbig', response.body
52
- }.to raise_error
53
- end
54
-
55
- it 'render the new template' do
56
- spree_get :new, product_id: product.slug
57
- response.status.should eq(200)
58
- response.should render_template(:new)
59
- end
60
- end
61
-
62
- context '#create' do
63
- before { controller.stub spree_current_user: user }
64
-
65
- context 'for a product that does not exist' do
66
- it 'responds with a 404' do
67
- spree_post :create, product_id: 'not_real'
68
- response.status.should eq(404)
69
- end
70
- end
71
-
72
- it 'creates a new review' do
73
- expect {
74
- spree_post :create, review_params
75
- }.to change(Spree::Review, :count).by(1)
76
- end
77
-
78
- it 'sets the ip-address of the remote' do
79
- request.stub(remote_ip: '127.0.0.1')
80
- spree_post :create, review_params
81
- assigns[:review].ip_address.should eq '127.0.0.1'
82
- end
83
-
84
- it 'fails if the user is not authorized to create a review' do
85
- controller.stub(:authorize!) { raise }
86
- expect{
87
- spree_post :create, review_params
88
- }.to raise_error
89
- end
90
-
91
- it 'flashes the notice' do
92
- spree_post :create, review_params
93
- flash[:notice].should eq Spree.t(:review_successfully_submitted)
94
- end
95
-
96
- it 'redirects to product page' do
97
- spree_post :create, review_params
98
- response.should redirect_to spree.product_path(product)
99
- end
100
-
101
- it 'removes all non-numbers from ratings param' do
102
- spree_post :create, review_params
103
- controller.params[:review][:rating].should eq '3'
104
- end
105
-
106
- it 'sets the current spree user as reviews user' do
107
- spree_post :create, review_params
108
- review_params[:review].merge!(user_id: user.id)
109
- assigns[:review][:user_id] = user.id
110
- assigns[:review][:user_id].should eq user.id
111
- end
112
-
113
- context 'with invalid params' do
114
- it 'renders new when review.save fails' do
115
- Spree::Review.any_instance.stub(:save).and_return(false)
116
- spree_post :create, review_params
117
- response.should render_template :new
118
- end
119
-
120
- it 'does not create a review' do
121
- expect(Spree::Review.count).to eq 0
122
- spree_post :create, review_params.merge({review: {rating: 'not_a_number'}})
123
- expect(Spree::Review.count).to eq 0
124
- end
125
- end
126
-
127
- # It always sets the locale so preference pointless
128
- context 'when config requires locale tracking:' do
129
- it 'sets the locale' do
130
- Spree::Reviews::Config.preferred_track_locale = true
131
- spree_post :create, review_params
132
- assigns[:review].locale.should eq I18n.locale.to_s
133
- end
134
- end
135
- end
136
- end