DEV: remove update_attributes which is deprecated in Rails 6

See: https://github.com/rails/rails/pull/31998

update_attributes is a relic of the past, it should no longer be used.
This commit is contained in:
Sam Saffron 2019-04-29 17:32:25 +10:00
parent 3b95f34e7b
commit 45285f1477
49 changed files with 103 additions and 103 deletions

View File

@ -32,7 +32,7 @@ class Admin::ScreenedIpAddressesController < Admin::AdminController
end end
def update def update
if @screened_ip_address.update_attributes(allowed_params) if @screened_ip_address.update(allowed_params)
render_serialized(@screened_ip_address, ScreenedIpAddressSerializer) render_serialized(@screened_ip_address, ScreenedIpAddressSerializer)
else else
render_json_error(@screened_ip_address) render_json_error(@screened_ip_address)

View File

@ -42,7 +42,7 @@ class Admin::WebHooksController < Admin::AdminController
end end
def update def update
if @web_hook.update_attributes(web_hook_params) if @web_hook.update(web_hook_params)
StaffActionLogger.new(current_user).log_web_hook(@web_hook, UserHistory.actions[:web_hook_update], changes: @web_hook.saved_changes) StaffActionLogger.new(current_user).log_web_hook(@web_hook, UserHistory.actions[:web_hook_update], changes: @web_hook.saved_changes)
render_serialized(@web_hook, AdminWebHookSerializer, root: 'web_hook') render_serialized(@web_hook, AdminWebHookSerializer, root: 'web_hook')
else else
@ -92,7 +92,7 @@ class Admin::WebHooksController < Admin::AdminController
now = Time.zone.now now = Time.zone.now
response = conn.post(headers: MultiJson.load(web_hook_event.headers), body: web_hook_event.payload) response = conn.post(headers: MultiJson.load(web_hook_event.headers), body: web_hook_event.payload)
web_hook_event.update_attributes!(status: response.status, web_hook_event.update!(status: response.status,
response_headers: MultiJson.dump(response.headers), response_headers: MultiJson.dump(response.headers),
response_body: response.body, response_body: response.body,
duration: ((Time.zone.now - now) * 1000).to_i) duration: ((Time.zone.now - now) * 1000).to_i)

View File

@ -45,7 +45,7 @@ class BadgesController < ApplicationController
if current_user if current_user
user_badge = UserBadge.find_by(user_id: current_user.id, badge_id: @badge.id) user_badge = UserBadge.find_by(user_id: current_user.id, badge_id: @badge.id)
if user_badge && user_badge.notification if user_badge && user_badge.notification
user_badge.notification.update_attributes read: true user_badge.notification.update read: true
end end
if user_badge if user_badge
@badge.has_badge = true @badge.has_badge = true

View File

@ -175,7 +175,7 @@ class CategoriesController < ApplicationController
custom_slug = params[:slug].to_s custom_slug = params[:slug].to_s
if custom_slug.present? && @category.update_attributes(slug: custom_slug) if custom_slug.present? && @category.update(slug: custom_slug)
render json: success_json render json: success_json
else else
render_json_error(@category) render_json_error(@category)

View File

@ -7,7 +7,7 @@ module Jobs
begin begin
URI.parse(featured_link) URI.parse(featured_link)
rescue URI::Error rescue URI::Error
topic.update_attributes(featured_link: URI.extract(featured_link).first) topic.update(featured_link: URI.extract(featured_link).first)
end end
end end
end end

View File

@ -518,7 +518,7 @@ class Category < ActiveRecord::Base
.pluck("topics.id") .pluck("topics.id")
.first .first
self.update_attributes(latest_topic_id: latest_topic_id, latest_post_id: latest_post_id) self.update(latest_topic_id: latest_topic_id, latest_post_id: latest_post_id)
end end
def self.query_parent_category(parent_slug) def self.query_parent_category(parent_slug)

View File

@ -520,8 +520,8 @@ class Post < ActiveRecord::Base
end end
def unhide! def unhide!
self.update_attributes(hidden: false) self.update(hidden: false)
self.topic.update_attributes(visible: true) if is_first_post? self.topic.update(visible: true) if is_first_post?
save(validate: false) save(validate: false)
publish_change_to_clients!(:acted) publish_change_to_clients!(:acted)
end end

View File

@ -761,7 +761,7 @@ class Topic < ActiveRecord::Base
increment!(:moderator_posts_count) if new_post.persisted? increment!(:moderator_posts_count) if new_post.persisted?
# If we are moving posts, we want to insert the moderator post where the previous posts were # If we are moving posts, we want to insert the moderator post where the previous posts were
# in the stream, not at the end. # in the stream, not at the end.
new_post.update_attributes!(post_number: opts[:post_number], sort_order: opts[:post_number]) if opts[:post_number].present? new_post.update!(post_number: opts[:post_number], sort_order: opts[:post_number]) if opts[:post_number].present?
# Grab any links that are present # Grab any links that are present
TopicLink.extract_from(new_post) TopicLink.extract_from(new_post)

View File

@ -53,7 +53,7 @@ class BadgeGranter
badge_title: @badge.allow_title, badge_title: @badge.allow_title,
username: @user.username }.to_json username: @user.username }.to_json
) )
user_badge.update_attributes notification_id: notification.id user_badge.update notification_id: notification.id
end end
end end
end end

View File

@ -19,7 +19,7 @@ class ColorSchemeRevisor
if has_colors if has_colors
@params[:colors].each do |c| @params[:colors].each do |c|
if existing = @color_scheme.colors_by_name[c[:name]] if existing = @color_scheme.colors_by_name[c[:name]]
existing.update_attributes(c) existing.update(c)
else else
@color_scheme.color_scheme_colors << ColorSchemeColor.new(name: c[:name], hex: c[:hex]) @color_scheme.color_scheme_colors << ColorSchemeColor.new(name: c[:name], hex: c[:hex])
end end

View File

@ -43,7 +43,7 @@ class TopicTimestampChanger
end end
def update_topic(last_posted_at) def update_topic(last_posted_at)
@topic.update_attributes( @topic.update(
created_at: @timestamp, created_at: @timestamp,
updated_at: @timestamp, updated_at: @timestamp,
bumped_at: @timestamp, bumped_at: @timestamp,
@ -52,6 +52,6 @@ class TopicTimestampChanger
end end
def update_post(post, timestamp) def update_post(post, timestamp)
post.update_attributes(created_at: timestamp, updated_at: timestamp) post.update(created_at: timestamp, updated_at: timestamp)
end end
end end

View File

@ -354,7 +354,7 @@ class UserMerger
def delete_source_user def delete_source_user
@source_user.reload @source_user.reload
@source_user.update_attributes( @source_user.update(
admin: false, admin: false,
email: "#{@source_user.username}_#{SecureRandom.hex}@no-email.invalid" email: "#{@source_user.username}_#{SecureRandom.hex}@no-email.invalid"
) )

View File

@ -125,7 +125,7 @@ module Email
end end
def set_incoming_email_rejection_message(incoming_email, message) def set_incoming_email_rejection_message(incoming_email, message)
incoming_email.update_attributes!(rejection_message: message) if incoming_email incoming_email.update!(rejection_message: message) if incoming_email
end end
def log_email_process_failure(mail_string, exception) def log_email_process_failure(mail_string, exception)

View File

@ -515,7 +515,7 @@ class PostCreator
@user.user_stat.save! @user.user_stat.save!
@user.update_attributes(last_posted_at: @post.created_at) @user.update(last_posted_at: @post.created_at)
end end
def create_post_notice def create_post_notice

View File

@ -111,7 +111,7 @@ class PostDestroyer
counts = Post.where(post_type: Post.types[:regular], topic_id: @post.topic_id).where('post_number > 1').group(:user_id).count counts = Post.where(post_type: Post.types[:regular], topic_id: @post.topic_id).where('post_number > 1').group(:user_id).count
counts.each do |user_id, count| counts.each do |user_id, count|
if user_stat = UserStat.where(user_id: user_id).first if user_stat = UserStat.where(user_id: user_id).first
user_stat.update_attributes(post_count: user_stat.post_count + count) user_stat.update(post_count: user_stat.post_count + count)
end end
end end
end end
@ -347,7 +347,7 @@ class PostDestroyer
counts = Post.where(post_type: Post.types[:regular], topic_id: @post.topic_id).where('post_number > 1').group(:user_id).count counts = Post.where(post_type: Post.types[:regular], topic_id: @post.topic_id).where('post_number > 1').group(:user_id).count
counts.each do |user_id, count| counts.each do |user_id, count|
if user_stat = UserStat.where(user_id: user_id).first if user_stat = UserStat.where(user_id: user_id).first
user_stat.update_attributes(post_count: user_stat.post_count - count) user_stat.update(post_count: user_stat.post_count - count)
end end
end end
end end

View File

@ -24,8 +24,8 @@ describe CategoryHashtag do
end end
it "should be case sensitive" do it "should be case sensitive" do
parent_category.update_attributes!(slug: "ApPlE") parent_category.update!(slug: "ApPlE")
child_category.update_attributes!(slug: "OraNGE") child_category.update!(slug: "OraNGE")
expect(Category.query_from_hashtag_slug("apple")).to eq(nil) expect(Category.query_from_hashtag_slug("apple")).to eq(nil)
expect(Category.query_from_hashtag_slug("apple#{CategoryHashtag::SEPARATOR}orange")).to eq(nil) expect(Category.query_from_hashtag_slug("apple#{CategoryHashtag::SEPARATOR}orange")).to eq(nil)

View File

@ -583,7 +583,7 @@ describe CookedPostProcessor do
end end
it "should escape the filename" do it "should escape the filename" do
upload.update_attributes!(original_filename: "><img src=x onerror=alert('haha')>.png") upload.update!(original_filename: "><img src=x onerror=alert('haha')>.png")
cpp.post_process_images cpp.post_process_images
cpp.optimize_urls cpp.optimize_urls

View File

@ -146,7 +146,7 @@ describe FileStore::S3Store do
it "removes the file from s3 with the right paths" do it "removes the file from s3 with the right paths" do
store.expects(:get_depth_for).with(upload.id).returns(0) store.expects(:get_depth_for).with(upload.id).returns(0)
s3_helper.expects(:s3_bucket).returns(s3_bucket).at_least_once s3_helper.expects(:s3_bucket).returns(s3_bucket).at_least_once
upload.update_attributes!(url: "//s3-upload-bucket.s3.dualstack.us-west-1.amazonaws.com/original/1X/#{upload.sha1}.png") upload.update!(url: "//s3-upload-bucket.s3.dualstack.us-west-1.amazonaws.com/original/1X/#{upload.sha1}.png")
s3_object = stub s3_object = stub
s3_bucket.expects(:object).with("tombstone/original/1X/#{upload.sha1}.png").returns(s3_object) s3_bucket.expects(:object).with("tombstone/original/1X/#{upload.sha1}.png").returns(s3_object)
@ -164,7 +164,7 @@ describe FileStore::S3Store do
store.expects(:get_depth_for).with(upload.id).returns(0) store.expects(:get_depth_for).with(upload.id).returns(0)
s3_helper.expects(:s3_bucket).returns(s3_bucket).at_least_once s3_helper.expects(:s3_bucket).returns(s3_bucket).at_least_once
optimized.update_attributes!(url: "//s3-upload-bucket.s3.dualstack.us-west-1.amazonaws.com/#{path}") optimized.update!(url: "//s3-upload-bucket.s3.dualstack.us-west-1.amazonaws.com/#{path}")
s3_object = stub s3_object = stub
s3_bucket.expects(:object).with("tombstone/#{path}").returns(s3_object) s3_bucket.expects(:object).with("tombstone/#{path}").returns(s3_object)
@ -183,7 +183,7 @@ describe FileStore::S3Store do
it "removes the file from s3 with the right paths" do it "removes the file from s3 with the right paths" do
store.expects(:get_depth_for).with(upload.id).returns(0) store.expects(:get_depth_for).with(upload.id).returns(0)
s3_helper.expects(:s3_bucket).returns(s3_bucket).at_least_once s3_helper.expects(:s3_bucket).returns(s3_bucket).at_least_once
upload.update_attributes!(url: "//s3-upload-bucket.s3.dualstack.us-west-1.amazonaws.com/discourse-uploads/original/1X/#{upload.sha1}.png") upload.update!(url: "//s3-upload-bucket.s3.dualstack.us-west-1.amazonaws.com/discourse-uploads/original/1X/#{upload.sha1}.png")
s3_object = stub s3_object = stub
s3_bucket.expects(:object).with("discourse-uploads/tombstone/original/1X/#{upload.sha1}.png").returns(s3_object) s3_bucket.expects(:object).with("discourse-uploads/tombstone/original/1X/#{upload.sha1}.png").returns(s3_object)

View File

@ -309,7 +309,7 @@ describe Plugin::Instance do
expect(called).to eq(1) expect(called).to eq(1)
user.update_attributes!(username: 'some_username') user.update!(username: 'some_username')
expect(called).to eq(1) expect(called).to eq(1)
end end
@ -325,7 +325,7 @@ describe Plugin::Instance do
expect(called).to eq(1) expect(called).to eq(1)
user.update_attributes!(username: 'some_username') user.update!(username: 'some_username')
expect(called).to eq(1) expect(called).to eq(1)
end end

View File

@ -35,7 +35,7 @@ describe PostMerger do
end end
it "should not allow the first post in a topic to be merged" do it "should not allow the first post in a topic to be merged" do
post.update_attributes!(user: user) post.update!(user: user)
reply1 = create_post(topic: topic, post_number: post.post_number, user: user) reply1 = create_post(topic: topic, post_number: post.post_number, user: user)
reply2 = create_post(topic: topic, post_number: post.post_number, user: user) reply2 = create_post(topic: topic, post_number: post.post_number, user: user)

View File

@ -286,7 +286,7 @@ describe Search do
end end
it "works for unlisted topics" do it "works for unlisted topics" do
topic.update_attributes(visible: false) topic.update(visible: false)
_post = new_post('discourse is awesome', topic) _post = new_post('discourse is awesome', topic)
results = Search.execute('discourse', search_context: topic) results = Search.execute('discourse', search_context: topic)
expect(results.posts.length).to eq(1) expect(results.posts.length).to eq(1)

View File

@ -150,12 +150,12 @@ describe Stylesheet::Manager do
digest1 = manager.color_scheme_digest digest1 = manager.color_scheme_digest
category2.update_attributes(uploaded_background_id: 789, updated_at: 1.day.ago) category2.update(uploaded_background_id: 789, updated_at: 1.day.ago)
digest2 = manager.color_scheme_digest digest2 = manager.color_scheme_digest
expect(digest2).to_not eq(digest1) expect(digest2).to_not eq(digest1)
category1.update_attributes(uploaded_background_id: nil, updated_at: 5.minutes.ago) category1.update(uploaded_background_id: nil, updated_at: 5.minutes.ago)
digest3 = manager.color_scheme_digest digest3 = manager.color_scheme_digest
expect(digest3).to_not eq(digest2) expect(digest3).to_not eq(digest2)

View File

@ -433,19 +433,19 @@ describe TopicQuery do
describe "category default sort order" do describe "category default sort order" do
it "can use category's default sort order" do it "can use category's default sort order" do
category.update_attributes!(sort_order: 'created', sort_ascending: true) category.update!(sort_order: 'created', sort_ascending: true)
topic_ids = TopicQuery.new(user, category: category.id).list_latest.topics.map(&:id) topic_ids = TopicQuery.new(user, category: category.id).list_latest.topics.map(&:id)
expect(topic_ids - [topic_category.id]).to eq([topic_in_cat1.id, topic_in_cat2.id]) expect(topic_ids - [topic_category.id]).to eq([topic_in_cat1.id, topic_in_cat2.id])
end end
it "ignores invalid order value" do it "ignores invalid order value" do
category.update_attributes!(sort_order: 'funny') category.update!(sort_order: 'funny')
topic_ids = TopicQuery.new(user, category: category.id).list_latest.topics.map(&:id) topic_ids = TopicQuery.new(user, category: category.id).list_latest.topics.map(&:id)
expect(topic_ids - [topic_category.id]).to eq([topic_in_cat2.id, topic_in_cat1.id]) expect(topic_ids - [topic_category.id]).to eq([topic_in_cat2.id, topic_in_cat1.id])
end end
it "can be overridden" do it "can be overridden" do
category.update_attributes!(sort_order: 'created', sort_ascending: true) category.update!(sort_order: 'created', sort_ascending: true)
topic_ids = TopicQuery.new(user, category: category.id, order: 'activity').list_latest.topics.map(&:id) topic_ids = TopicQuery.new(user, category: category.id, order: 'activity').list_latest.topics.map(&:id)
expect(topic_ids - [topic_category.id]).to eq([topic_in_cat2.id, topic_in_cat1.id]) expect(topic_ids - [topic_category.id]).to eq([topic_in_cat2.id, topic_in_cat1.id])
end end

View File

@ -634,7 +634,7 @@ describe TopicView do
context "categorized topic" do context "categorized topic" do
let(:category) { Fabricate(:category) } let(:category) { Fabricate(:category) }
before { topic.update_attributes(category_id: category.id) } before { topic.update(category_id: category.id) }
context "topic_page_title_includes_category is false" do context "topic_page_title_includes_category is false" do
before { SiteSetting.topic_page_title_includes_category = false } before { SiteSetting.topic_page_title_includes_category = false }

View File

@ -73,7 +73,7 @@ describe "category tag restrictions" do
context 'category allows other tags to be used' do context 'category allows other tags to be used' do
before do before do
category_with_tags.update_attributes!(allow_global_tags: true) category_with_tags.update!(allow_global_tags: true)
end end
it "search can show the permitted tags" do it "search can show the permitted tags" do
@ -88,7 +88,7 @@ describe "category tag restrictions" do
end end
it "works if no tags are restricted to the category" do it "works if no tags are restricted to the category" do
other_category.update_attributes!(allow_global_tags: true) other_category.update!(allow_global_tags: true)
expect(filter_allowed_tags(for_input: true, category: other_category)).to contain_exactly(tag3, tag4) expect(filter_allowed_tags(for_input: true, category: other_category)).to contain_exactly(tag3, tag4)
expect(filter_allowed_tags(for_input: true, category: other_category, selected_tags: [tag3.name])).to contain_exactly(tag4) expect(filter_allowed_tags(for_input: true, category: other_category, selected_tags: [tag3.name])).to contain_exactly(tag4)
expect(filter_allowed_tags(for_input: true, category: other_category, selected_tags: [tag3.name], term: 'tag')).to contain_exactly(tag4) expect(filter_allowed_tags(for_input: true, category: other_category, selected_tags: [tag3.name], term: 'tag')).to contain_exactly(tag4)
@ -133,7 +133,7 @@ describe "category tag restrictions" do
context 'category allows other tags to be used' do context 'category allows other tags to be used' do
before do before do
category.update_attributes!(allow_global_tags: true) category.update!(allow_global_tags: true)
end end
it 'filters tags correctly' do it 'filters tags correctly' do
@ -148,7 +148,7 @@ describe "category tag restrictions" do
end end
it "works if no tags are restricted to the category" do it "works if no tags are restricted to the category" do
other_category.update_attributes!(allow_global_tags: true) other_category.update!(allow_global_tags: true)
expect(filter_allowed_tags(for_input: true, category: other_category)).to contain_exactly(tag3, tag4) expect(filter_allowed_tags(for_input: true, category: other_category)).to contain_exactly(tag3, tag4)
tag_group1.tags = [tag2, tag3, tag4] tag_group1.tags = [tag2, tag3, tag4]
expect(filter_allowed_tags(for_input: true, category: other_category)).to contain_exactly(tag1) expect(filter_allowed_tags(for_input: true, category: other_category)).to contain_exactly(tag1)
@ -258,9 +258,9 @@ describe "category tag restrictions" do
context "limit one tag from each group" do context "limit one tag from each group" do
before do before do
makes.update_attributes(one_per_topic: true) makes.update(one_per_topic: true)
honda_group.update_attributes(one_per_topic: true) honda_group.update(one_per_topic: true)
ford_group.update_attributes(one_per_topic: true) ford_group.update(one_per_topic: true)
end end
it "can restrict one tag from each group" do it "can restrict one tag from each group" do

View File

@ -154,7 +154,7 @@ describe Jobs::CleanUpUploads do
it "does not delete profile background uploads" do it "does not delete profile background uploads" do
profile_background_upload = fabricate_upload profile_background_upload = fabricate_upload
UserProfile.last.update_attributes!(profile_background: profile_background_upload.url) UserProfile.last.update!(profile_background: profile_background_upload.url)
Jobs::CleanUpUploads.new.execute(nil) Jobs::CleanUpUploads.new.execute(nil)
@ -164,7 +164,7 @@ describe Jobs::CleanUpUploads do
it "does not delete card background uploads" do it "does not delete card background uploads" do
card_background_upload = fabricate_upload card_background_upload = fabricate_upload
UserProfile.last.update_attributes!(card_background: card_background_upload.url) UserProfile.last.update!(card_background: card_background_upload.url)
Jobs::CleanUpUploads.new.execute(nil) Jobs::CleanUpUploads.new.execute(nil)

View File

@ -30,11 +30,11 @@ describe Jobs::EnqueueDigestEmails do
expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(unapproved_user.id)).to eq(true) expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(unapproved_user.id)).to eq(true)
# As an admin # As an admin
unapproved_user.update_attributes(admin: true, moderator: false) unapproved_user.update(admin: true, moderator: false)
expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(unapproved_user.id)).to eq(true) expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(unapproved_user.id)).to eq(true)
# As an approved user # As an approved user
unapproved_user.update_attributes(admin: false, moderator: false, approved: true) unapproved_user.update(admin: false, moderator: false, approved: true)
expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(unapproved_user.id)).to eq(true) expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(unapproved_user.id)).to eq(true)
end end
end end

View File

@ -21,7 +21,7 @@ describe Jobs::ReindexSearch do
model = Fabricate(m.to_sym) model = Fabricate(m.to_sym)
# so that search data can be reindexed # so that search data can be reindexed
search_data = model.send("#{m}_search_data") search_data = model.send("#{m}_search_data")
search_data.update_attributes!(version: 0) search_data.update!(version: 0)
model.reload model.reload
subject.execute({}) subject.execute({})

View File

@ -4,7 +4,7 @@ describe Jobs::Tl3Promotions do
def create_qualifying_stats(user) def create_qualifying_stats(user)
user.create_user_stat if user.user_stat.nil? user.create_user_stat if user.user_stat.nil?
user.user_stat.update_attributes!( user.user_stat.update!(
days_visited: 1000, days_visited: 1000,
topic_reply_count: 1000, topic_reply_count: 1000,
topics_entered: 1000, topics_entered: 1000,

View File

@ -34,14 +34,14 @@ describe Jobs::UserEmail do
end end
it "doesn't call the mailer when the user is staged" do it "doesn't call the mailer when the user is staged" do
staged.update_attributes!(last_seen_at: 8.days.ago, last_emailed_at: 8.days.ago) staged.update!(last_seen_at: 8.days.ago, last_emailed_at: 8.days.ago)
Jobs::UserEmail.new.execute(type: :digest, user_id: staged.id) Jobs::UserEmail.new.execute(type: :digest, user_id: staged.id)
expect(ActionMailer::Base.deliveries).to eq([]) expect(ActionMailer::Base.deliveries).to eq([])
end end
context 'not emailed recently' do context 'not emailed recently' do
before do before do
user.update_attributes!(last_emailed_at: 8.days.ago) user.update!(last_emailed_at: 8.days.ago)
end end
it "calls the mailer when the user exists" do it "calls the mailer when the user exists" do
@ -52,8 +52,8 @@ describe Jobs::UserEmail do
context 'recently emailed' do context 'recently emailed' do
before do before do
user.update_attributes!(last_emailed_at: 2.hours.ago) user.update!(last_emailed_at: 2.hours.ago)
user.user_option.update_attributes!(digest_after_minutes: 1.day.to_i / 60) user.user_option.update!(digest_after_minutes: 1.day.to_i / 60)
end end
it 'skips sending digest email' do it 'skips sending digest email' do
@ -129,7 +129,7 @@ describe Jobs::UserEmail do
end end
it "does send an email to a user that's been recently seen but has email_level set to always" do it "does send an email to a user that's been recently seen but has email_level set to always" do
user.user_option.update_attributes(email_level: UserOption.email_level_types[:always]) user.user_option.update(email_level: UserOption.email_level_types[:always])
PostTiming.create!(topic_id: post.topic_id, post_number: post.post_number, user_id: user.id, msecs: 100) PostTiming.create!(topic_id: post.topic_id, post_number: post.post_number, user_id: user.id, msecs: 100)
Jobs::UserEmail.new.execute( Jobs::UserEmail.new.execute(
@ -158,16 +158,16 @@ describe Jobs::UserEmail do
end end
it "doesn't send a PM email to a user that's been recently seen and has email_messages_level set to never" do it "doesn't send a PM email to a user that's been recently seen and has email_messages_level set to never" do
user.user_option.update_attributes(email_messages_level: UserOption.email_level_types[:never]) user.user_option.update(email_messages_level: UserOption.email_level_types[:never])
user.user_option.update_attributes(email_level: UserOption.email_level_types[:always]) user.user_option.update(email_level: UserOption.email_level_types[:always])
Jobs::UserEmail.new.execute(type: :user_private_message, user_id: user.id, post_id: post.id) Jobs::UserEmail.new.execute(type: :user_private_message, user_id: user.id, post_id: post.id)
expect(ActionMailer::Base.deliveries).to eq([]) expect(ActionMailer::Base.deliveries).to eq([])
end end
it "doesn't send a regular post email to a user that's been recently seen and has email_level set to never" do it "doesn't send a regular post email to a user that's been recently seen and has email_level set to never" do
user.user_option.update_attributes(email_messages_level: UserOption.email_level_types[:always]) user.user_option.update(email_messages_level: UserOption.email_level_types[:always])
user.user_option.update_attributes(email_level: UserOption.email_level_types[:never]) user.user_option.update(email_level: UserOption.email_level_types[:never])
Jobs::UserEmail.new.execute(type: :user_replied, user_id: user.id, post_id: post.id) Jobs::UserEmail.new.execute(type: :user_replied, user_id: user.id, post_id: post.id)
expect(ActionMailer::Base.deliveries).to eq([]) expect(ActionMailer::Base.deliveries).to eq([])
@ -248,7 +248,7 @@ describe Jobs::UserEmail do
end end
it "doesn't send the email if user of the post has been deleted" do it "doesn't send the email if user of the post has been deleted" do
post.update_attributes!(user_id: nil) post.update!(user_id: nil)
Jobs::UserEmail.new.execute(type: :user_replied, user_id: user.id, post_id: post.id) Jobs::UserEmail.new.execute(type: :user_replied, user_id: user.id, post_id: post.id)
expect(ActionMailer::Base.deliveries).to eq([]) expect(ActionMailer::Base.deliveries).to eq([])

View File

@ -311,31 +311,31 @@ describe Category do
end end
it "renames the definition when renamed" do it "renames the definition when renamed" do
@category.update_attributes(name: 'Troutfishing') @category.update(name: 'Troutfishing')
@topic.reload @topic.reload
expect(@topic.title).to match(/Troutfishing/) expect(@topic.title).to match(/Troutfishing/)
expect(@topic.fancy_title).to match(/Troutfishing/) expect(@topic.fancy_title).to match(/Troutfishing/)
end end
it "doesn't raise an error if there is no definition topic to rename (uncategorized)" do it "doesn't raise an error if there is no definition topic to rename (uncategorized)" do
expect { @category.update_attributes(name: 'Troutfishing', topic_id: nil) }.to_not raise_error expect { @category.update(name: 'Troutfishing', topic_id: nil) }.to_not raise_error
end end
it "creates permalink when category slug is changed" do it "creates permalink when category slug is changed" do
@category.update_attributes(slug: 'new-category') @category.update(slug: 'new-category')
expect(Permalink.count).to eq(1) expect(Permalink.count).to eq(1)
end end
it "reuses existing permalink when category slug is changed" do it "reuses existing permalink when category slug is changed" do
permalink = Permalink.create!(url: "c/#{@category.slug}", category_id: 42) permalink = Permalink.create!(url: "c/#{@category.slug}", category_id: 42)
expect { @category.update_attributes(slug: 'new-slug') }.to_not change { Permalink.count } expect { @category.update(slug: 'new-slug') }.to_not change { Permalink.count }
expect(permalink.reload.category_id).to eq(@category.id) expect(permalink.reload.category_id).to eq(@category.id)
end end
it "creates permalink when sub category slug is changed" do it "creates permalink when sub category slug is changed" do
sub_category = Fabricate(:category, slug: 'sub-category', parent_category_id: @category.id) sub_category = Fabricate(:category, slug: 'sub-category', parent_category_id: @category.id)
sub_category.update_attributes(slug: 'new-sub-category') sub_category.update(slug: 'new-sub-category')
expect(Permalink.count).to eq(1) expect(Permalink.count).to eq(1)
end end
@ -356,7 +356,7 @@ describe Category do
GlobalSetting.stubs(:relative_url_root).returns('/forum') GlobalSetting.stubs(:relative_url_root).returns('/forum')
Discourse.stubs(:base_uri).returns("/forum") Discourse.stubs(:base_uri).returns("/forum")
old_url = @category.url old_url = @category.url
@category.update_attributes(slug: 'new-category') @category.update(slug: 'new-category')
permalink = Permalink.last permalink = Permalink.last
expect(permalink.url).to eq(old_url[1..-1]) expect(permalink.url).to eq(old_url[1..-1])
end end

View File

@ -26,7 +26,7 @@ RSpec.describe GroupHistory do
end end
it 'should filter by subject correctly' do it 'should filter by subject correctly' do
other_group_history.update_attributes!(subject: "test") other_group_history.update!(subject: "test")
expect(described_class.with_filters( expect(described_class.with_filters(
group_history.group, group_history.group,
@ -35,8 +35,8 @@ RSpec.describe GroupHistory do
end end
it 'should filter by multiple filters correctly' do it 'should filter by multiple filters correctly' do
group_history.update_attributes!(action: GroupHistory.actions[:remove_user_from_group]) group_history.update!(action: GroupHistory.actions[:remove_user_from_group])
other_group_history.update_attributes!(subject: "test") other_group_history.update!(subject: "test")
expect(described_class.with_filters(group_history.group, expect(described_class.with_filters(group_history.group,
action: GroupHistory.actions[3], subject: 'test' action: GroupHistory.actions[3], subject: 'test'

View File

@ -617,7 +617,7 @@ describe Group do
it 'should cook the bio' do it 'should cook the bio' do
group = Fabricate(:group) group = Fabricate(:group)
group.update_attributes!(bio_raw: 'This is a group for :unicorn: lovers') group.update!(bio_raw: 'This is a group for :unicorn: lovers')
expect(group.bio_cooked).to include("unicorn.png") expect(group.bio_cooked).to include("unicorn.png")
end end

View File

@ -13,7 +13,7 @@ describe PostReply do
expect(PostReply.new(post: post, reply: other_post)).to be_valid expect(PostReply.new(post: post, reply: other_post)).to be_valid
other_topic = Fabricate(:topic) other_topic = Fabricate(:topic)
other_post.update_attributes!(topic_id: other_topic.id) other_post.update!(topic_id: other_topic.id)
other_post.reload other_post.reload
post_reply = PostReply.new(post: post, reply: other_post) post_reply = PostReply.new(post: post, reply: other_post)

View File

@ -28,7 +28,7 @@ describe UserSearch do
Fabricate :post, user: user6, topic: topic Fabricate :post, user: user6, topic: topic
Fabricate :post, user: staged, topic: topic4 Fabricate :post, user: staged, topic: topic4
user6.update_attributes(suspended_at: 1.day.ago, suspended_till: 1.year.from_now) user6.update(suspended_at: 1.day.ago, suspended_till: 1.year.from_now)
end end
def search_for(*args) def search_for(*args)

View File

@ -1633,14 +1633,14 @@ describe User do
describe 'when first notification has been seen' do describe 'when first notification has been seen' do
it 'should return the right value' do it 'should return the right value' do
user.update_attributes!(seen_notification_id: notification.id) user.update!(seen_notification_id: notification.id)
expect(user.reload.read_first_notification?).to eq(true) expect(user.reload.read_first_notification?).to eq(true)
end end
end end
describe 'when user is trust level 1' do describe 'when user is trust level 1' do
it 'should return the right value' do it 'should return the right value' do
user.update_attributes!(trust_level: TrustLevel[1]) user.update!(trust_level: TrustLevel[1])
expect(user.read_first_notification?).to eq(false) expect(user.read_first_notification?).to eq(false)
end end
@ -1648,7 +1648,7 @@ describe User do
describe 'when user is trust level 2' do describe 'when user is trust level 2' do
it 'should return the right value' do it 'should return the right value' do
user.update_attributes!(trust_level: TrustLevel[2]) user.update!(trust_level: TrustLevel[2])
expect(user.read_first_notification?).to eq(true) expect(user.read_first_notification?).to eq(true)
end end
@ -1656,7 +1656,7 @@ describe User do
describe 'when user is an old user' do describe 'when user is an old user' do
it 'should return the right value' do it 'should return the right value' do
user.update_attributes!(first_seen_at: 1.year.ago) user.update!(first_seen_at: 1.year.ago)
expect(user.read_first_notification?).to eq(true) expect(user.read_first_notification?).to eq(true)
end end

View File

@ -63,7 +63,7 @@ RSpec.describe 'Multisite s3 uploads', type: :multisite do
upload = build_upload upload = build_upload
store.expects(:get_depth_for).with(upload.id).returns(0) store.expects(:get_depth_for).with(upload.id).returns(0)
s3_helper.expects(:s3_bucket).returns(s3_bucket).at_least_once s3_helper.expects(:s3_bucket).returns(s3_bucket).at_least_once
upload.update_attributes!(url: "//s3-upload-bucket.s3.dualstack.us-west-1.amazonaws.com/uploads/default/original/1X/#{upload.sha1}.png") upload.update!(url: "//s3-upload-bucket.s3.dualstack.us-west-1.amazonaws.com/uploads/default/original/1X/#{upload.sha1}.png")
s3_object = stub s3_object = stub
s3_bucket.expects(:object).with("uploads/tombstone/default/original/1X/#{upload.sha1}.png").returns(s3_object) s3_bucket.expects(:object).with("uploads/tombstone/default/original/1X/#{upload.sha1}.png").returns(s3_object)
@ -80,7 +80,7 @@ RSpec.describe 'Multisite s3 uploads', type: :multisite do
upload = build_upload upload = build_upload
store.expects(:get_depth_for).with(upload.id).returns(0) store.expects(:get_depth_for).with(upload.id).returns(0)
s3_helper.expects(:s3_bucket).returns(s3_bucket).at_least_once s3_helper.expects(:s3_bucket).returns(s3_bucket).at_least_once
upload.update_attributes!(url: "//s3-upload-bucket.s3.dualstack.us-west-1.amazonaws.com/uploads/second/original/1X/#{upload.sha1}.png") upload.update!(url: "//s3-upload-bucket.s3.dualstack.us-west-1.amazonaws.com/uploads/second/original/1X/#{upload.sha1}.png")
s3_object = stub s3_object = stub
s3_bucket.expects(:object).with("uploads/tombstone/second/original/1X/#{upload.sha1}.png").returns(s3_object) s3_bucket.expects(:object).with("uploads/tombstone/second/original/1X/#{upload.sha1}.png").returns(s3_object)
@ -102,7 +102,7 @@ RSpec.describe 'Multisite s3 uploads', type: :multisite do
upload = build_upload upload = build_upload
store.expects(:get_depth_for).with(upload.id).returns(0) store.expects(:get_depth_for).with(upload.id).returns(0)
s3_helper.expects(:s3_bucket).returns(s3_bucket).at_least_once s3_helper.expects(:s3_bucket).returns(s3_bucket).at_least_once
upload.update_attributes!(url: "//s3-upload-bucket.s3.dualstack.us-west-1.amazonaws.com/discourse-uploads/uploads/default/original/1X/#{upload.sha1}.png") upload.update!(url: "//s3-upload-bucket.s3.dualstack.us-west-1.amazonaws.com/discourse-uploads/uploads/default/original/1X/#{upload.sha1}.png")
s3_object = stub s3_object = stub
s3_bucket.expects(:object).with("discourse-uploads/uploads/tombstone/default/original/1X/#{upload.sha1}.png").returns(s3_object) s3_bucket.expects(:object).with("discourse-uploads/uploads/tombstone/default/original/1X/#{upload.sha1}.png").returns(s3_object)

View File

@ -346,7 +346,7 @@ RSpec.describe Admin::UsersController do
stat.posts_read_count = SiteSetting.tl1_requires_read_posts + 1 stat.posts_read_count = SiteSetting.tl1_requires_read_posts + 1
stat.time_read = SiteSetting.tl1_requires_time_spent_mins * 60 stat.time_read = SiteSetting.tl1_requires_time_spent_mins * 60
stat.save! stat.save!
another_user.update_attributes(trust_level: TrustLevel[1]) another_user.update(trust_level: TrustLevel[1])
put "/admin/users/#{another_user.id}/trust_level.json", params: { put "/admin/users/#{another_user.id}/trust_level.json", params: {
level: TrustLevel[0] level: TrustLevel[0]

View File

@ -430,7 +430,7 @@ describe GroupsController do
response_body = JSON.parse(response.body) response_body = JSON.parse(response.body)
expect(response_body["mentionable"]).to eq(false) expect(response_body["mentionable"]).to eq(false)
group.update_attributes!( group.update!(
mentionable_level: Group::ALIAS_LEVELS[:everyone], mentionable_level: Group::ALIAS_LEVELS[:everyone],
visibility_level: Group.visibility_levels[:staff] visibility_level: Group.visibility_levels[:staff]
) )
@ -561,7 +561,7 @@ describe GroupsController do
context "when user is group admin" do context "when user is group admin" do
before do before do
user.update_attributes!(admin: true) user.update!(admin: true)
sign_in(user) sign_in(user)
end end
@ -804,7 +804,7 @@ describe GroupsController do
context 'public group' do context 'public group' do
it 'should be fobidden' do it 'should be fobidden' do
group.update_attributes!( group.update!(
public_admission: true, public_admission: true,
public_exit: true public_exit: true
) )
@ -1184,7 +1184,7 @@ describe GroupsController do
describe 'when viewing a public group' do describe 'when viewing a public group' do
before do before do
group.update_attributes!( group.update!(
public_admission: true, public_admission: true,
public_exit: true public_exit: true
) )

View File

@ -26,7 +26,7 @@ describe InvitesController do
end end
it "returns error if invite has already been redeemed" do it "returns error if invite has already been redeemed" do
invite.update_attributes!(redeemed_at: 1.day.ago) invite.update!(redeemed_at: 1.day.ago)
get "/invites/#{invite.invite_key}" get "/invites/#{invite.invite_key}"
expect(response.status).to eq(200) expect(response.status).to eq(200)

View File

@ -416,7 +416,7 @@ RSpec.describe ListController do
describe "category default views" do describe "category default views" do
it "has a top default view" do it "has a top default view" do
category.update_attributes!(default_view: 'top', default_top_period: 'monthly') category.update!(default_view: 'top', default_top_period: 'monthly')
get "/c/#{category.slug}.json" get "/c/#{category.slug}.json"
expect(response.status).to eq(200) expect(response.status).to eq(200)
json = JSON.parse(response.body) json = JSON.parse(response.body)
@ -424,7 +424,7 @@ RSpec.describe ListController do
end end
it "has a default view of nil" do it "has a default view of nil" do
category.update_attributes!(default_view: nil) category.update!(default_view: nil)
get "/c/#{category.slug}.json" get "/c/#{category.slug}.json"
expect(response.status).to eq(200) expect(response.status).to eq(200)
json = JSON.parse(response.body) json = JSON.parse(response.body)
@ -432,7 +432,7 @@ RSpec.describe ListController do
end end
it "has a default view of ''" do it "has a default view of ''" do
category.update_attributes!(default_view: '') category.update!(default_view: '')
get "/c/#{category.slug}.json" get "/c/#{category.slug}.json"
expect(response.status).to eq(200) expect(response.status).to eq(200)
json = JSON.parse(response.body) json = JSON.parse(response.body)
@ -440,7 +440,7 @@ RSpec.describe ListController do
end end
it "has a default view of latest" do it "has a default view of latest" do
category.update_attributes!(default_view: 'latest') category.update!(default_view: 'latest')
get "/c/#{category.slug}.json" get "/c/#{category.slug}.json"
expect(response.status).to eq(200) expect(response.status).to eq(200)
json = JSON.parse(response.body) json = JSON.parse(response.body)

View File

@ -9,7 +9,7 @@ describe ThemeJavascriptsController do
describe '#show' do describe '#show' do
def update_digest_and_get(digest) def update_digest_and_get(digest)
# actually set digest to make sure 404 is raised by router # actually set digest to make sure 404 is raised by router
javascript_cache.update_attributes(digest: digest) javascript_cache.update(digest: digest)
get "/theme-javascripts/#{digest}.js" get "/theme-javascripts/#{digest}.js"
end end

View File

@ -1668,7 +1668,7 @@ describe UsersController do
put "/u/#{user.username}/preferences/badge_title.json", params: { user_badge_id: user_badge.id } put "/u/#{user.username}/preferences/badge_title.json", params: { user_badge_id: user_badge.id }
expect(user.reload.title).not_to eq(badge.display_name) expect(user.reload.title).not_to eq(badge.display_name)
badge.update_attributes allow_title: true badge.update allow_title: true
put "/u/#{user.username}/preferences/badge_title.json", params: { user_badge_id: user_badge.id } put "/u/#{user.username}/preferences/badge_title.json", params: { user_badge_id: user_badge.id }

View File

@ -266,7 +266,7 @@ describe BadgeGranter do
action = PostActionCreator.like(liker, post).post_action action = PostActionCreator.like(liker, post).post_action
# Nice post badge # Nice post badge
post.update_attributes like_count: 10 post.update like_count: 10
BadgeGranter.queue_badge_grant(Badge::Trigger::PostAction, post_action: action) BadgeGranter.queue_badge_grant(Badge::Trigger::PostAction, post_action: action)
BadgeGranter.process_queue! BadgeGranter.process_queue!
@ -275,19 +275,19 @@ describe BadgeGranter do
expect(UserBadge.where(user_id: user.id, badge_id: Badge::NicePost).count).to eq(1) expect(UserBadge.where(user_id: user.id, badge_id: Badge::NicePost).count).to eq(1)
# Good post badge # Good post badge
post.update_attributes like_count: 25 post.update like_count: 25
BadgeGranter.queue_badge_grant(Badge::Trigger::PostAction, post_action: action) BadgeGranter.queue_badge_grant(Badge::Trigger::PostAction, post_action: action)
BadgeGranter.process_queue! BadgeGranter.process_queue!
expect(UserBadge.find_by(user_id: user.id, badge_id: Badge::GoodPost)).not_to eq(nil) expect(UserBadge.find_by(user_id: user.id, badge_id: Badge::GoodPost)).not_to eq(nil)
# Great post badge # Great post badge
post.update_attributes like_count: 50 post.update like_count: 50
BadgeGranter.queue_badge_grant(Badge::Trigger::PostAction, post_action: action) BadgeGranter.queue_badge_grant(Badge::Trigger::PostAction, post_action: action)
BadgeGranter.process_queue! BadgeGranter.process_queue!
expect(UserBadge.find_by(user_id: user.id, badge_id: Badge::GreatPost)).not_to eq(nil) expect(UserBadge.find_by(user_id: user.id, badge_id: Badge::GreatPost)).not_to eq(nil)
# Revoke badges on unlike # Revoke badges on unlike
post.update_attributes like_count: 49 post.update like_count: 49
BadgeGranter.backfill(Badge.find(Badge::GreatPost)) BadgeGranter.backfill(Badge.find(Badge::GreatPost))
expect(UserBadge.find_by(user_id: user.id, badge_id: Badge::GreatPost)).to eq(nil) expect(UserBadge.find_by(user_id: user.id, badge_id: Badge::GreatPost)).to eq(nil)
end end

View File

@ -119,7 +119,7 @@ RSpec.describe GroupActionLogger do
describe '#log_change_group_settings' do describe '#log_change_group_settings' do
it 'should create the right record' do it 'should create the right record' do
group.update_attributes!(public_admission: true, created_at: Time.zone.now) group.update!(public_admission: true, created_at: Time.zone.now)
expect { subject.log_change_group_settings }.to change { GroupHistory.count }.by(1) expect { subject.log_change_group_settings }.to change { GroupHistory.count }.by(1)

View File

@ -75,7 +75,7 @@ describe SearchIndexer do
it 'correctly indexes a post according to version' do it 'correctly indexes a post according to version' do
# Preparing so that they can be indexed to right version # Preparing so that they can be indexed to right version
SearchIndexer.update_posts_index(post_id, "dummy", "", nil, nil) SearchIndexer.update_posts_index(post_id, "dummy", "", nil, nil)
PostSearchData.find_by(post_id: post_id).update_attributes!(version: -1) PostSearchData.find_by(post_id: post_id).update!(version: -1)
data = "<a>This</a> is a test" data = "<a>This</a> is a test"
SearchIndexer.update_posts_index(post_id, "", "", nil, data) SearchIndexer.update_posts_index(post_id, "", "", nil, data)

View File

@ -72,10 +72,10 @@ describe UserAnonymizer do
end end
it "resets profile to default values" do it "resets profile to default values" do
user.update_attributes(name: "Bibi", date_of_birth: 19.years.ago, title: "Super Star") user.update(name: "Bibi", date_of_birth: 19.years.ago, title: "Super Star")
profile = user.reload.user_profile profile = user.reload.user_profile
profile.update_attributes(location: "Moose Jaw", profile.update(location: "Moose Jaw",
website: "www.bim.com", website: "www.bim.com",
bio_raw: "I'm Bibi from Moosejaw. I sing and dance.", bio_raw: "I'm Bibi from Moosejaw. I sing and dance.",
bio_cooked: "I'm Bibi from Moosejaw. I sing and dance.", bio_cooked: "I'm Bibi from Moosejaw. I sing and dance.",
@ -114,7 +114,7 @@ describe UserAnonymizer do
it "changes name to anonymized username" do it "changes name to anonymized username" do
prev_username = user.username prev_username = user.username
user.update_attributes(name: "Bibi", date_of_birth: 19.years.ago, title: "Super Star") user.update(name: "Bibi", date_of_birth: 19.years.ago, title: "Super Star")
make_anonymous make_anonymous
user.reload user.reload

View File

@ -258,7 +258,7 @@ describe UserUpdater do
context 'badge can be used as a title' do context 'badge can be used as a title' do
before do before do
badge.update_attributes(allow_title: true) badge.update(allow_title: true)
end end
it 'can use as title, sets badge_granted_title' do it 'can use as title, sets badge_granted_title' do
@ -270,7 +270,7 @@ describe UserUpdater do
end end
it 'badge has not been granted, does not change title' do it 'badge has not been granted, does not change title' do
badge.update_attributes(allow_title: true) badge.update(allow_title: true)
updater = UserUpdater.new(user, user) updater = UserUpdater.new(user, user)
updater.update(title: badge.name) updater.update(title: badge.name)
user.reload user.reload
@ -279,8 +279,8 @@ describe UserUpdater do
end end
it 'changing to a title that is not from a badge, unsets badge_granted_title' do it 'changing to a title that is not from a badge, unsets badge_granted_title' do
user.update_attributes(title: badge.name) user.update(title: badge.name)
user.user_profile.update_attributes(badge_granted_title: true) user.user_profile.update(badge_granted_title: true)
guardian = stub guardian = stub
guardian.stubs(:can_grant_title?).with(user, 'Dancer').returns(true) guardian.stubs(:can_grant_title?).with(user, 'Dancer').returns(true)

View File

@ -45,7 +45,7 @@ RSpec.describe "Post rake tasks" do
describe 'rebake_match' do describe 'rebake_match' do
it 'rebakes matched posts' do it 'rebakes matched posts' do
post.update_attributes(cooked: '') post.update(cooked: '')
HighLine::Simulate.with('y') do HighLine::Simulate.with('y') do
Rake::Task['posts:rebake_match'].invoke('brown') Rake::Task['posts:rebake_match'].invoke('brown')