FEATURE: upgrade to Rails 4.2.4
This commit is contained in:
parent
a61765b9e4
commit
613761d1cd
|
@ -6,7 +6,6 @@ env:
|
||||||
- RUBY_GC_MALLOC_LIMIT=50000000
|
- RUBY_GC_MALLOC_LIMIT=50000000
|
||||||
matrix:
|
matrix:
|
||||||
- "RAILS_MASTER=0"
|
- "RAILS_MASTER=0"
|
||||||
- "RAILS42=1"
|
|
||||||
- "RAILS_MASTER=1"
|
- "RAILS_MASTER=1"
|
||||||
|
|
||||||
addons:
|
addons:
|
||||||
|
@ -21,7 +20,6 @@ addons:
|
||||||
matrix:
|
matrix:
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- env: "RAILS_MASTER=1"
|
- env: "RAILS_MASTER=1"
|
||||||
- env: "RAILS42=1"
|
|
||||||
- rvm: rbx-2
|
- rvm: rbx-2
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
|
|
||||||
|
@ -51,7 +49,6 @@ before_script:
|
||||||
- bundle exec rake db:create db:migrate
|
- bundle exec rake db:create db:migrate
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- bash -c "if [ '$RAILS42' == '1' ]; then bundle update --retry=3 --jobs=3 rails rails-observers; fi"
|
|
||||||
- bash -c "if [ '$RAILS_MASTER' == '1' ]; then bundle update --retry=3 --jobs=3 arel rails rails-observers seed-fu; fi"
|
- bash -c "if [ '$RAILS_MASTER' == '1' ]; then bundle update --retry=3 --jobs=3 arel rails rails-observers seed-fu; fi"
|
||||||
- bash -c "if [ '$RAILS_MASTER' == '0' ]; then bundle install --without development --deployment --retry=3 --jobs=3; fi"
|
- bash -c "if [ '$RAILS_MASTER' == '0' ]; then bundle install --without development --deployment --retry=3 --jobs=3; fi"
|
||||||
|
|
||||||
|
|
19
Gemfile
19
Gemfile
|
@ -6,30 +6,19 @@ def rails_master?
|
||||||
ENV["RAILS_MASTER"] == '1'
|
ENV["RAILS_MASTER"] == '1'
|
||||||
end
|
end
|
||||||
|
|
||||||
def rails_42?
|
|
||||||
ENV["RAILS42"] == '1'
|
|
||||||
end
|
|
||||||
|
|
||||||
if rails_master?
|
if rails_master?
|
||||||
gem 'arel', git: 'https://github.com/rails/arel.git'
|
gem 'arel', git: 'https://github.com/rails/arel.git'
|
||||||
gem 'rails', git: 'https://github.com/rails/rails.git'
|
gem 'rails', git: 'https://github.com/rails/rails.git'
|
||||||
gem 'rails-observers', git: 'https://github.com/rails/rails-observers.git'
|
gem 'rails-observers', git: 'https://github.com/rails/rails-observers.git'
|
||||||
gem 'seed-fu', git: 'https://github.com/SamSaffron/seed-fu.git', branch: 'discourse'
|
gem 'seed-fu', git: 'https://github.com/SamSaffron/seed-fu.git', branch: 'discourse'
|
||||||
elsif rails_42?
|
|
||||||
gem 'rails', '~> 4.2.1'
|
|
||||||
gem 'rails-observers', git: 'https://github.com/rails/rails-observers.git'
|
|
||||||
gem 'seed-fu', '~> 2.3.5'
|
|
||||||
else
|
else
|
||||||
gem 'rails', '~> 4.1.10'
|
gem 'rails', '~> 4.2'
|
||||||
gem 'rails-observers'
|
gem 'rails-observers'
|
||||||
gem 'seed-fu', '~> 2.3.3'
|
gem 'seed-fu', '~> 2.3.5'
|
||||||
end
|
end
|
||||||
|
|
||||||
# Rails 4.1.6+ will relax the mail gem version requirement to `~> 2.5, >= 2.5.4`.
|
gem 'mail'
|
||||||
# However, mail gem 2.6.x currently does not work with discourse because of the
|
gem 'mime-types', require: 'mime/types/columnar'
|
||||||
# reference to `Mail::RFC2822Parser` in `lib/email.rb`. This ensure discourse
|
|
||||||
# would continue to work with Rails 4.1.6+ when it is released.
|
|
||||||
gem 'mail', '~> 2.5.4'
|
|
||||||
|
|
||||||
#gem 'redis-rails'
|
#gem 'redis-rails'
|
||||||
gem 'hiredis'
|
gem 'hiredis'
|
||||||
|
|
106
Gemfile.lock
106
Gemfile.lock
|
@ -6,38 +6,47 @@ PATH
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
actionmailer (4.1.10)
|
actionmailer (4.2.4)
|
||||||
actionpack (= 4.1.10)
|
actionpack (= 4.2.4)
|
||||||
actionview (= 4.1.10)
|
actionview (= 4.2.4)
|
||||||
|
activejob (= 4.2.4)
|
||||||
mail (~> 2.5, >= 2.5.4)
|
mail (~> 2.5, >= 2.5.4)
|
||||||
actionpack (4.1.10)
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||||
actionview (= 4.1.10)
|
actionpack (4.2.4)
|
||||||
activesupport (= 4.1.10)
|
actionview (= 4.2.4)
|
||||||
rack (~> 1.5.2)
|
activesupport (= 4.2.4)
|
||||||
|
rack (~> 1.6)
|
||||||
rack-test (~> 0.6.2)
|
rack-test (~> 0.6.2)
|
||||||
actionview (4.1.10)
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||||
activesupport (= 4.1.10)
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||||
|
actionview (4.2.4)
|
||||||
|
activesupport (= 4.2.4)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
erubis (~> 2.7.0)
|
erubis (~> 2.7.0)
|
||||||
|
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||||
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||||
active_model_serializers (0.8.3)
|
active_model_serializers (0.8.3)
|
||||||
activemodel (>= 3.0)
|
activemodel (>= 3.0)
|
||||||
activemodel (4.1.10)
|
activejob (4.2.4)
|
||||||
activesupport (= 4.1.10)
|
activesupport (= 4.2.4)
|
||||||
|
globalid (>= 0.3.0)
|
||||||
|
activemodel (4.2.4)
|
||||||
|
activesupport (= 4.2.4)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
activerecord (4.1.10)
|
activerecord (4.2.4)
|
||||||
activemodel (= 4.1.10)
|
activemodel (= 4.2.4)
|
||||||
activesupport (= 4.1.10)
|
activesupport (= 4.2.4)
|
||||||
arel (~> 5.0.0)
|
arel (~> 6.0)
|
||||||
activesupport (4.1.10)
|
activesupport (4.2.4)
|
||||||
i18n (~> 0.6, >= 0.6.9)
|
i18n (~> 0.7)
|
||||||
json (~> 1.7, >= 1.7.7)
|
json (~> 1.7, >= 1.7.7)
|
||||||
minitest (~> 5.1)
|
minitest (~> 5.1)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.3, >= 0.3.4)
|
||||||
tzinfo (~> 1.1)
|
tzinfo (~> 1.1)
|
||||||
annotate (2.6.6)
|
annotate (2.6.6)
|
||||||
activerecord (>= 2.3.0)
|
activerecord (>= 2.3.0)
|
||||||
rake (~> 10.4.2, >= 10.4.2)
|
rake (~> 10.4.2, >= 10.4.2)
|
||||||
arel (5.0.1.20140414130214)
|
arel (6.0.3)
|
||||||
aws-sdk (2.0.45)
|
aws-sdk (2.0.45)
|
||||||
aws-sdk-resources (= 2.0.45)
|
aws-sdk-resources (= 2.0.45)
|
||||||
aws-sdk-core (2.0.45)
|
aws-sdk-core (2.0.45)
|
||||||
|
@ -118,6 +127,8 @@ GEM
|
||||||
gctools (0.2.3)
|
gctools (0.2.3)
|
||||||
given_core (3.5.4)
|
given_core (3.5.4)
|
||||||
sorcerer (>= 0.3.7)
|
sorcerer (>= 0.3.7)
|
||||||
|
globalid (0.3.6)
|
||||||
|
activesupport (>= 4.1.0)
|
||||||
guess_html_encoding (0.0.11)
|
guess_html_encoding (0.0.11)
|
||||||
handlebars-source (2.0.0)
|
handlebars-source (2.0.0)
|
||||||
hashie (3.4.0)
|
hashie (3.4.0)
|
||||||
|
@ -149,19 +160,20 @@ GEM
|
||||||
libv8 (3.16.14.7)
|
libv8 (3.16.14.7)
|
||||||
listen (0.7.3)
|
listen (0.7.3)
|
||||||
logster (1.0.0.3.pre)
|
logster (1.0.0.3.pre)
|
||||||
|
loofah (2.0.3)
|
||||||
|
nokogiri (>= 1.5.9)
|
||||||
lru_redux (1.1.0)
|
lru_redux (1.1.0)
|
||||||
mail (2.5.4)
|
mail (2.6.3)
|
||||||
mime-types (~> 1.16)
|
mime-types (>= 1.16, < 3)
|
||||||
treetop (~> 1.4.8)
|
|
||||||
memory_profiler (0.9.3)
|
memory_profiler (0.9.3)
|
||||||
message_bus (1.0.16)
|
message_bus (1.0.16)
|
||||||
rack (>= 1.1.3)
|
rack (>= 1.1.3)
|
||||||
redis
|
redis
|
||||||
metaclass (0.0.4)
|
metaclass (0.0.4)
|
||||||
method_source (0.8.2)
|
method_source (0.8.2)
|
||||||
mime-types (1.25.1)
|
mime-types (2.6.2)
|
||||||
mini_portile (0.6.2)
|
mini_portile (0.6.2)
|
||||||
minitest (5.6.1)
|
minitest (5.8.0)
|
||||||
mocha (1.1.0)
|
mocha (1.1.0)
|
||||||
metaclass (~> 0.0.1)
|
metaclass (~> 0.0.1)
|
||||||
mock_redis (0.14.0)
|
mock_redis (0.14.0)
|
||||||
|
@ -218,7 +230,6 @@ GEM
|
||||||
redis
|
redis
|
||||||
ruby-openid
|
ruby-openid
|
||||||
pg (0.18.1)
|
pg (0.18.1)
|
||||||
polyglot (0.3.5)
|
|
||||||
progress (3.1.0)
|
progress (3.1.0)
|
||||||
pry (0.10.1)
|
pry (0.10.1)
|
||||||
coderay (~> 1.1.0)
|
coderay (~> 1.1.0)
|
||||||
|
@ -231,7 +242,7 @@ GEM
|
||||||
puma (2.11.1)
|
puma (2.11.1)
|
||||||
rack (>= 1.1, < 2.0)
|
rack (>= 1.1, < 2.0)
|
||||||
r2 (0.2.5)
|
r2 (0.2.5)
|
||||||
rack (1.5.5)
|
rack (1.6.4)
|
||||||
rack-mini-profiler (0.9.6)
|
rack-mini-profiler (0.9.6)
|
||||||
rack (>= 1.1.3)
|
rack (>= 1.1.3)
|
||||||
rack-openid (1.3.1)
|
rack-openid (1.3.1)
|
||||||
|
@ -241,21 +252,30 @@ GEM
|
||||||
rack
|
rack
|
||||||
rack-test (0.6.3)
|
rack-test (0.6.3)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
rails (4.1.10)
|
rails (4.2.4)
|
||||||
actionmailer (= 4.1.10)
|
actionmailer (= 4.2.4)
|
||||||
actionpack (= 4.1.10)
|
actionpack (= 4.2.4)
|
||||||
actionview (= 4.1.10)
|
actionview (= 4.2.4)
|
||||||
activemodel (= 4.1.10)
|
activejob (= 4.2.4)
|
||||||
activerecord (= 4.1.10)
|
activemodel (= 4.2.4)
|
||||||
activesupport (= 4.1.10)
|
activerecord (= 4.2.4)
|
||||||
|
activesupport (= 4.2.4)
|
||||||
bundler (>= 1.3.0, < 2.0)
|
bundler (>= 1.3.0, < 2.0)
|
||||||
railties (= 4.1.10)
|
railties (= 4.2.4)
|
||||||
sprockets-rails (~> 2.0)
|
sprockets-rails
|
||||||
|
rails-deprecated_sanitizer (1.0.3)
|
||||||
|
activesupport (>= 4.2.0.alpha)
|
||||||
|
rails-dom-testing (1.0.7)
|
||||||
|
activesupport (>= 4.2.0.beta, < 5.0)
|
||||||
|
nokogiri (~> 1.6.0)
|
||||||
|
rails-deprecated_sanitizer (>= 1.0.1)
|
||||||
|
rails-html-sanitizer (1.0.2)
|
||||||
|
loofah (~> 2.0)
|
||||||
rails-observers (0.1.2)
|
rails-observers (0.1.2)
|
||||||
activemodel (~> 4.0)
|
activemodel (~> 4.0)
|
||||||
railties (4.1.10)
|
railties (4.2.4)
|
||||||
actionpack (= 4.1.10)
|
actionpack (= 4.2.4)
|
||||||
activesupport (= 4.1.10)
|
activesupport (= 4.2.4)
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
thor (>= 0.18.1, < 2.0)
|
thor (>= 0.18.1, < 2.0)
|
||||||
raindrops (0.13.0)
|
raindrops (0.13.0)
|
||||||
|
@ -374,9 +394,6 @@ GEM
|
||||||
timecop (0.7.3)
|
timecop (0.7.3)
|
||||||
timers (4.0.1)
|
timers (4.0.1)
|
||||||
hitimes
|
hitimes
|
||||||
treetop (1.4.15)
|
|
||||||
polyglot
|
|
||||||
polyglot (>= 0.3.1)
|
|
||||||
trollop (2.1.1)
|
trollop (2.1.1)
|
||||||
tzinfo (1.2.2)
|
tzinfo (1.2.2)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
|
@ -427,9 +444,10 @@ DEPENDENCIES
|
||||||
listen (= 0.7.3)
|
listen (= 0.7.3)
|
||||||
logster
|
logster
|
||||||
lru_redux
|
lru_redux
|
||||||
mail (~> 2.5.4)
|
mail
|
||||||
memory_profiler
|
memory_profiler
|
||||||
message_bus
|
message_bus
|
||||||
|
mime-types
|
||||||
minitest
|
minitest
|
||||||
mocha
|
mocha
|
||||||
mock_redis
|
mock_redis
|
||||||
|
@ -453,7 +471,7 @@ DEPENDENCIES
|
||||||
r2 (~> 0.2.5)
|
r2 (~> 0.2.5)
|
||||||
rack-mini-profiler
|
rack-mini-profiler
|
||||||
rack-protection
|
rack-protection
|
||||||
rails (~> 4.1.10)
|
rails (~> 4.2)
|
||||||
rails-observers
|
rails-observers
|
||||||
rails_multisite!
|
rails_multisite!
|
||||||
rake
|
rake
|
||||||
|
@ -473,7 +491,7 @@ DEPENDENCIES
|
||||||
sanitize
|
sanitize
|
||||||
sass
|
sass
|
||||||
sass-rails (~> 4.0.5)
|
sass-rails (~> 4.0.5)
|
||||||
seed-fu (~> 2.3.3)
|
seed-fu (~> 2.3.5)
|
||||||
shoulda
|
shoulda
|
||||||
sidekiq
|
sidekiq
|
||||||
sidekiq-statistic
|
sidekiq-statistic
|
||||||
|
|
|
@ -90,7 +90,7 @@ class Post < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def limit_posts_per_day
|
def limit_posts_per_day
|
||||||
if user.first_day_user? && post_number && post_number > 1
|
if user && user.first_day_user? && post_number && post_number > 1
|
||||||
RateLimiter.new(user, "first-day-replies-per-day", SiteSetting.max_replies_in_first_day, 1.day.to_i)
|
RateLimiter.new(user, "first-day-replies-per-day", SiteSetting.max_replies_in_first_day, 1.day.to_i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -58,7 +58,7 @@ class Report
|
||||||
if filter == :page_view_total
|
if filter == :page_view_total
|
||||||
ApplicationRequest.where(req_type: [
|
ApplicationRequest.where(req_type: [
|
||||||
ApplicationRequest.req_types.reject{|k,v| k =~ /mobile/}.map{|k,v| v if k =~ /page_view/}.compact
|
ApplicationRequest.req_types.reject{|k,v| k =~ /mobile/}.map{|k,v| v if k =~ /page_view/}.compact
|
||||||
])
|
].flatten)
|
||||||
else
|
else
|
||||||
ApplicationRequest.where(req_type: ApplicationRequest.req_types[filter])
|
ApplicationRequest.where(req_type: ApplicationRequest.req_types[filter])
|
||||||
end
|
end
|
||||||
|
|
|
@ -259,7 +259,7 @@ class Topic < ActiveRecord::Base
|
||||||
# Additional rate limits on topics: per day and private messages per day
|
# Additional rate limits on topics: per day and private messages per day
|
||||||
def limit_topics_per_day
|
def limit_topics_per_day
|
||||||
apply_per_day_rate_limit_for("topics", :max_topics_per_day)
|
apply_per_day_rate_limit_for("topics", :max_topics_per_day)
|
||||||
limit_first_day_topics_per_day if user.first_day_user?
|
limit_first_day_topics_per_day if user && user.first_day_user?
|
||||||
end
|
end
|
||||||
|
|
||||||
def limit_private_messages_per_day
|
def limit_private_messages_per_day
|
||||||
|
|
|
@ -122,10 +122,7 @@ module Discourse
|
||||||
# see: http://stackoverflow.com/questions/11894180/how-does-one-correctly-add-custom-sql-dml-in-migrations/11894420#11894420
|
# see: http://stackoverflow.com/questions/11894180/how-does-one-correctly-add-custom-sql-dml-in-migrations/11894420#11894420
|
||||||
config.active_record.schema_format = :sql
|
config.active_record.schema_format = :sql
|
||||||
|
|
||||||
if Rails.version >= "4.2.0" && Rails.version < "5.0.0"
|
config.active_record.raise_in_transactional_callbacks = true
|
||||||
# Opt-into the default behavior in Rails 5
|
|
||||||
config.active_record.raise_in_transactional_callbacks = false
|
|
||||||
end
|
|
||||||
|
|
||||||
# per https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet
|
# per https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet
|
||||||
config.pbkdf2_iterations = 64000
|
config.pbkdf2_iterations = 64000
|
||||||
|
|
|
@ -10,7 +10,7 @@ Discourse::Application.configure do
|
||||||
config.action_controller.perform_caching = true
|
config.action_controller.perform_caching = true
|
||||||
|
|
||||||
# Disable Rails's static asset server (Apache or nginx will already do this)
|
# Disable Rails's static asset server (Apache or nginx will already do this)
|
||||||
config.serve_static_assets = GlobalSetting.serve_static_assets
|
config.serve_static_files = GlobalSetting.serve_static_assets
|
||||||
|
|
||||||
config.assets.js_compressor = :uglifier
|
config.assets.js_compressor = :uglifier
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ Discourse::Application.configure do
|
||||||
config.action_controller.perform_caching = true
|
config.action_controller.perform_caching = true
|
||||||
|
|
||||||
# in profile mode we serve static assets
|
# in profile mode we serve static assets
|
||||||
config.serve_static_assets = true
|
config.serve_static_files = true
|
||||||
|
|
||||||
# Compress JavaScripts and CSS
|
# Compress JavaScripts and CSS
|
||||||
config.assets.compress = true
|
config.assets.compress = true
|
||||||
|
|
|
@ -8,7 +8,7 @@ Discourse::Application.configure do
|
||||||
config.cache_classes = true
|
config.cache_classes = true
|
||||||
|
|
||||||
# Configure static asset server for tests with Cache-Control for performance
|
# Configure static asset server for tests with Cache-Control for performance
|
||||||
config.serve_static_assets = true
|
config.serve_static_files = true
|
||||||
|
|
||||||
# Show full error reports and disable caching
|
# Show full error reports and disable caching
|
||||||
config.consider_all_requests_local = true
|
config.consider_all_requests_local = true
|
||||||
|
|
|
@ -10,13 +10,14 @@ module Email
|
||||||
|
|
||||||
return false unless String === email
|
return false unless String === email
|
||||||
|
|
||||||
parser = Mail::RFC2822Parser.new
|
parsed = Mail::Address.new(email)
|
||||||
parser.root = :addr_spec
|
|
||||||
result = parser.parse(email)
|
|
||||||
|
|
||||||
# Don't allow for a TLD by itself list (sam@localhost)
|
# Don't allow for a TLD by itself list (sam@localhost)
|
||||||
# The Grammar is: (local_part "@" domain) / local_part ... need to discard latter
|
# The Grammar is: (local_part "@" domain) / local_part ... need to discard latter
|
||||||
result && result.respond_to?(:domain) && result.domain.dot_atom_text.elements.size > 1
|
parsed.address == email && parsed.local != parsed.address && parsed.domain && parsed.domain.split(".").length > 1
|
||||||
|
rescue Mail::Field::ParseError
|
||||||
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.downcase(email)
|
def self.downcase(email)
|
||||||
|
|
|
@ -2,10 +2,17 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe UserEmailObserver do
|
describe UserEmailObserver do
|
||||||
|
|
||||||
context 'user_mentioned' do
|
# something is off with fabricator
|
||||||
|
def create_notification(type=nil, user=nil)
|
||||||
|
user ||= Fabricate(:user)
|
||||||
|
type ||= Notification.types[:mentioned]
|
||||||
|
Notification.create(data: '', user: user, notification_type: type)
|
||||||
|
end
|
||||||
|
|
||||||
let(:user) { Fabricate(:user) }
|
context 'user_mentioned' do
|
||||||
let!(:notification) { Fabricate(:notification, user: user) }
|
let!(:notification) do
|
||||||
|
create_notification
|
||||||
|
end
|
||||||
|
|
||||||
it "enqueues a job for the email" do
|
it "enqueues a job for the email" do
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_mentioned, user_id: notification.user_id, notification_id: notification.id)
|
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_mentioned, user_id: notification.user_id, notification_id: notification.id)
|
||||||
|
@ -13,19 +20,19 @@ describe UserEmailObserver do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "enqueue a delayed job for users that are online" do
|
it "enqueue a delayed job for users that are online" do
|
||||||
user.last_seen_at = 1.minute.ago
|
notification.user.last_seen_at = 1.minute.ago
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_mentioned, user_id: notification.user_id, notification_id: notification.id)
|
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_mentioned, user_id: notification.user_id, notification_id: notification.id)
|
||||||
UserEmailObserver.send(:new).after_commit(notification)
|
UserEmailObserver.send(:new).after_commit(notification)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't enqueue an email if the user has mention emails disabled" do
|
it "doesn't enqueue an email if the user has mention emails disabled" do
|
||||||
user.expects(:email_direct?).returns(false)
|
notification.user.expects(:email_direct?).returns(false)
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, has_entry(type: :user_mentioned)).never
|
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, has_entry(type: :user_mentioned)).never
|
||||||
UserEmailObserver.send(:new).after_commit(notification)
|
UserEmailObserver.send(:new).after_commit(notification)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't enqueue an email if the user account is deactivated" do
|
it "doesn't enqueue an email if the user account is deactivated" do
|
||||||
user.active = false
|
notification.user.active = false
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, has_entry(type: :user_mentioned)).never
|
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, has_entry(type: :user_mentioned)).never
|
||||||
UserEmailObserver.send(:new).after_commit(notification)
|
UserEmailObserver.send(:new).after_commit(notification)
|
||||||
end
|
end
|
||||||
|
@ -34,8 +41,8 @@ describe UserEmailObserver do
|
||||||
|
|
||||||
context 'posted' do
|
context 'posted' do
|
||||||
|
|
||||||
let(:user) { Fabricate(:user) }
|
let!(:notification) { create_notification(9) }
|
||||||
let!(:notification) { Fabricate(:notification, user: user, notification_type: 9) }
|
let(:user) { notification.user }
|
||||||
|
|
||||||
it "enqueues a job for the email" do
|
it "enqueues a job for the email" do
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_posted, user_id: notification.user_id, notification_id: notification.id)
|
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_posted, user_id: notification.user_id, notification_id: notification.id)
|
||||||
|
@ -58,8 +65,8 @@ describe UserEmailObserver do
|
||||||
|
|
||||||
context 'user_replied' do
|
context 'user_replied' do
|
||||||
|
|
||||||
let(:user) { Fabricate(:user) }
|
let!(:notification) { create_notification(2) }
|
||||||
let!(:notification) { Fabricate(:notification, user: user, notification_type: 2) }
|
let(:user) { notification.user }
|
||||||
|
|
||||||
it "enqueues a job for the email" do
|
it "enqueues a job for the email" do
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_replied, user_id: notification.user_id, notification_id: notification.id)
|
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_replied, user_id: notification.user_id, notification_id: notification.id)
|
||||||
|
@ -82,8 +89,8 @@ describe UserEmailObserver do
|
||||||
|
|
||||||
context 'user_quoted' do
|
context 'user_quoted' do
|
||||||
|
|
||||||
let(:user) { Fabricate(:user) }
|
let!(:notification) { create_notification(3) }
|
||||||
let!(:notification) { Fabricate(:notification, user: user, notification_type: 3) }
|
let(:user) { notification.user }
|
||||||
|
|
||||||
it "enqueues a job for the email" do
|
it "enqueues a job for the email" do
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_quoted, user_id: notification.user_id, notification_id: notification.id)
|
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_quoted, user_id: notification.user_id, notification_id: notification.id)
|
||||||
|
@ -106,8 +113,8 @@ describe UserEmailObserver do
|
||||||
|
|
||||||
context 'email_user_invited_to_private_message' do
|
context 'email_user_invited_to_private_message' do
|
||||||
|
|
||||||
let(:user) { Fabricate(:user) }
|
let!(:notification) { create_notification(7) }
|
||||||
let!(:notification) { Fabricate(:notification, user: user, notification_type: 7) }
|
let(:user) { notification.user }
|
||||||
|
|
||||||
it "enqueues a job for the email" do
|
it "enqueues a job for the email" do
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_invited_to_private_message, user_id: notification.user_id, notification_id: notification.id)
|
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_invited_to_private_message, user_id: notification.user_id, notification_id: notification.id)
|
||||||
|
@ -130,8 +137,8 @@ describe UserEmailObserver do
|
||||||
|
|
||||||
context 'private_message' do
|
context 'private_message' do
|
||||||
|
|
||||||
let(:user) { Fabricate(:user) }
|
let!(:notification) { create_notification(6) }
|
||||||
let!(:notification) { Fabricate(:notification, user: user, notification_type: 6) }
|
let(:user) { notification.user }
|
||||||
|
|
||||||
it "enqueues a job for the email" do
|
it "enqueues a job for the email" do
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_private_message, user_id: notification.user_id, notification_id: notification.id)
|
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_private_message, user_id: notification.user_id, notification_id: notification.id)
|
||||||
|
@ -154,8 +161,8 @@ describe UserEmailObserver do
|
||||||
|
|
||||||
context 'user_invited_to_topic' do
|
context 'user_invited_to_topic' do
|
||||||
|
|
||||||
let(:user) { Fabricate(:user) }
|
let!(:notification) { create_notification(13) }
|
||||||
let!(:notification) { Fabricate(:notification, user: user, notification_type: 13) }
|
let(:user) { notification.user }
|
||||||
|
|
||||||
it "enqueues a job for the email" do
|
it "enqueues a job for the email" do
|
||||||
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_invited_to_topic, user_id: notification.user_id, notification_id: notification.id)
|
Jobs.expects(:enqueue_in).with(SiteSetting.email_time_window_mins.minutes, :user_email, type: :user_invited_to_topic, user_id: notification.user_id, notification_id: notification.id)
|
||||||
|
|
Loading…
Reference in New Issue