mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-27 09:36:19 -05:00
Update rspec syntax to v3
update rspec syntax to v3 change syntax to rspec v3 oops. fix typo mailers classes with rspec3 syntax helpers with rspec3 syntax jobs with rspec3 syntax serializers with rspec3 syntax views with rspec3 syntax support to rspec3 syntax category spec with rspec3 syntax
This commit is contained in:
parent
fce74e64a1
commit
b3d769ff4f
80 changed files with 1245 additions and 1247 deletions
|
@ -4,10 +4,10 @@ describe ApplicationHelper do
|
||||||
|
|
||||||
describe "escape_unicode" do
|
describe "escape_unicode" do
|
||||||
it "encodes tags" do
|
it "encodes tags" do
|
||||||
helper.escape_unicode("<tag>").should == "\u003ctag>"
|
expect(helper.escape_unicode("<tag>")).to eq("\u003ctag>")
|
||||||
end
|
end
|
||||||
it "survives junk text" do
|
it "survives junk text" do
|
||||||
helper.escape_unicode("hello \xc3\x28 world").should =~ /hello.*world/
|
expect(helper.escape_unicode("hello \xc3\x28 world")).to match(/hello.*world/)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -19,38 +19,38 @@ describe ApplicationHelper do
|
||||||
|
|
||||||
it "is true if mobile_view is '1' in the session" do
|
it "is true if mobile_view is '1' in the session" do
|
||||||
session[:mobile_view] = '1'
|
session[:mobile_view] = '1'
|
||||||
helper.mobile_view?.should == true
|
expect(helper.mobile_view?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is false if mobile_view is '0' in the session" do
|
it "is false if mobile_view is '0' in the session" do
|
||||||
session[:mobile_view] = '0'
|
session[:mobile_view] = '0'
|
||||||
helper.mobile_view?.should == false
|
expect(helper.mobile_view?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "mobile_view is not set" do
|
context "mobile_view is not set" do
|
||||||
it "is false if user agent is not mobile" do
|
it "is false if user agent is not mobile" do
|
||||||
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36')
|
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36')
|
||||||
helper.mobile_view?.should be_falsey
|
expect(helper.mobile_view?).to be_falsey
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is true for iPhone" do
|
it "is true for iPhone" do
|
||||||
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (iPhone; U; ru; CPU iPhone OS 4_2_1 like Mac OS X; ru) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148a Safari/6533.18.5')
|
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (iPhone; U; ru; CPU iPhone OS 4_2_1 like Mac OS X; ru) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148a Safari/6533.18.5')
|
||||||
helper.mobile_view?.should == true
|
expect(helper.mobile_view?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is false for iPad" do
|
it "is false for iPad" do
|
||||||
controller.request.stubs(:user_agent).returns("Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3")
|
controller.request.stubs(:user_agent).returns("Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3")
|
||||||
helper.mobile_view?.should == false
|
expect(helper.mobile_view?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is false for Nexus 10 tablet" do
|
it "is false for Nexus 10 tablet" do
|
||||||
controller.request.stubs(:user_agent).returns("Mozilla/5.0 (Linux; Android 4.2.1; Nexus 10 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19")
|
controller.request.stubs(:user_agent).returns("Mozilla/5.0 (Linux; Android 4.2.1; Nexus 10 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19")
|
||||||
helper.mobile_view?.should be_falsey
|
expect(helper.mobile_view?).to be_falsey
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is true for Nexus 7 tablet" do
|
it "is true for Nexus 7 tablet" do
|
||||||
controller.request.stubs(:user_agent).returns("Mozilla/5.0 (Linux; Android 4.1.2; Nexus 7 Build/JZ054K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19")
|
controller.request.stubs(:user_agent).returns("Mozilla/5.0 (Linux; Android 4.1.2; Nexus 7 Build/JZ054K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19")
|
||||||
helper.mobile_view?.should == true
|
expect(helper.mobile_view?).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -62,23 +62,23 @@ describe ApplicationHelper do
|
||||||
|
|
||||||
it "is false if mobile_view is '1' in the session" do
|
it "is false if mobile_view is '1' in the session" do
|
||||||
session[:mobile_view] = '1'
|
session[:mobile_view] = '1'
|
||||||
helper.mobile_view?.should == false
|
expect(helper.mobile_view?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is false if mobile_view is '0' in the session" do
|
it "is false if mobile_view is '0' in the session" do
|
||||||
session[:mobile_view] = '0'
|
session[:mobile_view] = '0'
|
||||||
helper.mobile_view?.should == false
|
expect(helper.mobile_view?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "mobile_view is not set" do
|
context "mobile_view is not set" do
|
||||||
it "is false if user agent is not mobile" do
|
it "is false if user agent is not mobile" do
|
||||||
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36')
|
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36')
|
||||||
helper.mobile_view?.should == false
|
expect(helper.mobile_view?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is false for iPhone" do
|
it "is false for iPhone" do
|
||||||
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (iPhone; U; ru; CPU iPhone OS 4_2_1 like Mac OS X; ru) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148a Safari/6533.18.5')
|
controller.request.stubs(:user_agent).returns('Mozilla/5.0 (iPhone; U; ru; CPU iPhone OS 4_2_1 like Mac OS X; ru) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148a Safari/6533.18.5')
|
||||||
helper.mobile_view?.should == false
|
expect(helper.mobile_view?).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,15 +5,15 @@ describe Jobs::BulkInvite do
|
||||||
context '.execute' do
|
context '.execute' do
|
||||||
|
|
||||||
it 'raises an error when the filename is missing' do
|
it 'raises an error when the filename is missing' do
|
||||||
lambda { Jobs::BulkInvite.new.execute(identifier: '46-discoursecsv', chunks: '1') }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::BulkInvite.new.execute(identifier: '46-discoursecsv', chunks: '1') }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'raises an error when the identifier is missing' do
|
it 'raises an error when the identifier is missing' do
|
||||||
lambda { Jobs::BulkInvite.new.execute(filename: 'discourse.csv', chunks: '1') }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::BulkInvite.new.execute(filename: 'discourse.csv', chunks: '1') }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'raises an error when the chunks is missing' do
|
it 'raises an error when the chunks is missing' do
|
||||||
lambda { Jobs::BulkInvite.new.execute(filename: 'discourse.csv', identifier: '46-discoursecsv') }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::BulkInvite.new.execute(filename: 'discourse.csv', identifier: '46-discoursecsv') }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
context '.read_csv_file' do
|
context '.read_csv_file' do
|
||||||
|
@ -24,7 +24,7 @@ describe Jobs::BulkInvite do
|
||||||
it 'reads csv file' do
|
it 'reads csv file' do
|
||||||
bulk_invite.current_user = user
|
bulk_invite.current_user = user
|
||||||
bulk_invite.read_csv_file(csv_file)
|
bulk_invite.read_csv_file(csv_file)
|
||||||
Invite.where(email: "robin@outlook.com").exists?.should == true
|
expect(Invite.where(email: "robin@outlook.com").exists?).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ describe Jobs::BulkInvite do
|
||||||
|
|
||||||
bulk_invite.current_user = user
|
bulk_invite.current_user = user
|
||||||
bulk_invite.send_invite(csv_info, 1)
|
bulk_invite.send_invite(csv_info, 1)
|
||||||
Invite.where(email: email).exists?.should == true
|
expect(Invite.where(email: email).exists?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates an invite with group' do
|
it 'creates an invite with group' do
|
||||||
|
@ -51,8 +51,8 @@ describe Jobs::BulkInvite do
|
||||||
bulk_invite.current_user = user
|
bulk_invite.current_user = user
|
||||||
bulk_invite.send_invite(csv_info, 1)
|
bulk_invite.send_invite(csv_info, 1)
|
||||||
invite = Invite.where(email: email).first
|
invite = Invite.where(email: email).first
|
||||||
invite.should be_present
|
expect(invite).to be_present
|
||||||
InvitedGroup.where(invite_id: invite.id, group_id: group.id).exists?.should == true
|
expect(InvitedGroup.where(invite_id: invite.id, group_id: group.id).exists?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates an invite with topic' do
|
it 'creates an invite with topic' do
|
||||||
|
@ -62,8 +62,8 @@ describe Jobs::BulkInvite do
|
||||||
bulk_invite.current_user = user
|
bulk_invite.current_user = user
|
||||||
bulk_invite.send_invite(csv_info, 1)
|
bulk_invite.send_invite(csv_info, 1)
|
||||||
invite = Invite.where(email: email).first
|
invite = Invite.where(email: email).first
|
||||||
invite.should be_present
|
expect(invite).to be_present
|
||||||
TopicInvite.where(invite_id: invite.id, topic_id: topic.id).exists?.should == true
|
expect(TopicInvite.where(invite_id: invite.id, topic_id: topic.id).exists?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates an invite with group and topic' do
|
it 'creates an invite with group and topic' do
|
||||||
|
@ -74,9 +74,9 @@ describe Jobs::BulkInvite do
|
||||||
bulk_invite.current_user = user
|
bulk_invite.current_user = user
|
||||||
bulk_invite.send_invite(csv_info, 1)
|
bulk_invite.send_invite(csv_info, 1)
|
||||||
invite = Invite.where(email: email).first
|
invite = Invite.where(email: email).first
|
||||||
invite.should be_present
|
expect(invite).to be_present
|
||||||
InvitedGroup.where(invite_id: invite.id, group_id: group.id).exists?.should == true
|
expect(InvitedGroup.where(invite_id: invite.id, group_id: group.id).exists?).to eq(true)
|
||||||
TopicInvite.where(invite_id: invite.id, topic_id: topic.id).exists?.should == true
|
expect(TopicInvite.where(invite_id: invite.id, topic_id: topic.id).exists?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,6 +7,6 @@ describe Jobs::CrawlTopicLink do
|
||||||
let(:job) { Jobs::CrawlTopicLink.new }
|
let(:job) { Jobs::CrawlTopicLink.new }
|
||||||
|
|
||||||
it "needs a topic_link_id" do
|
it "needs a topic_link_id" do
|
||||||
-> { job.execute({}) }.should raise_error(Discourse::InvalidParameters)
|
expect { job.execute({}) }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,7 +10,7 @@ describe Jobs::EnqueueDigestEmails do
|
||||||
let!(:user_no_digests) { Fabricate(:active_user, email_digests: false, last_emailed_at: 8.days.ago, last_seen_at: 10.days.ago) }
|
let!(:user_no_digests) { Fabricate(:active_user, email_digests: false, last_emailed_at: 8.days.ago, last_seen_at: 10.days.ago) }
|
||||||
|
|
||||||
it "doesn't return users with email disabled" do
|
it "doesn't return users with email disabled" do
|
||||||
Jobs::EnqueueDigestEmails.new.target_user_ids.include?(user_no_digests.id).should == false
|
expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(user_no_digests.id)).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ describe Jobs::EnqueueDigestEmails do
|
||||||
let!(:user_emailed_recently) { Fabricate(:active_user, last_emailed_at: 6.days.ago) }
|
let!(:user_emailed_recently) { Fabricate(:active_user, last_emailed_at: 6.days.ago) }
|
||||||
|
|
||||||
it "doesn't return users who have been emailed recently" do
|
it "doesn't return users who have been emailed recently" do
|
||||||
Jobs::EnqueueDigestEmails.new.target_user_ids.include?(user_emailed_recently.id).should == false
|
expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(user_emailed_recently.id)).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -45,7 +45,7 @@ describe Jobs::EnqueueDigestEmails do
|
||||||
let!(:inactive_user) { Fabricate(:user, active: false) }
|
let!(:inactive_user) { Fabricate(:user, active: false) }
|
||||||
|
|
||||||
it "doesn't return users who have been emailed recently" do
|
it "doesn't return users who have been emailed recently" do
|
||||||
Jobs::EnqueueDigestEmails.new.target_user_ids.include?(inactive_user.id).should == false
|
expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(inactive_user.id)).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ describe Jobs::EnqueueDigestEmails do
|
||||||
let!(:suspended_user) { Fabricate(:user, suspended_till: 1.week.from_now, suspended_at: 1.day.ago) }
|
let!(:suspended_user) { Fabricate(:user, suspended_till: 1.week.from_now, suspended_at: 1.day.ago) }
|
||||||
|
|
||||||
it "doesn't return users who are suspended" do
|
it "doesn't return users who are suspended" do
|
||||||
Jobs::EnqueueDigestEmails.new.target_user_ids.include?(suspended_user.id).should == false
|
expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(suspended_user.id)).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -63,12 +63,12 @@ describe Jobs::EnqueueDigestEmails do
|
||||||
|
|
||||||
it "doesn't return users who have been emailed recently" do
|
it "doesn't return users who have been emailed recently" do
|
||||||
user = user_visited_this_week
|
user = user_visited_this_week
|
||||||
Jobs::EnqueueDigestEmails.new.target_user_ids.include?(user.id).should == false
|
expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(user.id)).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "does return users who have been emailed recently but have email_always set" do
|
it "does return users who have been emailed recently but have email_always set" do
|
||||||
user = user_visited_this_week_email_always
|
user = user_visited_this_week_email_always
|
||||||
Jobs::EnqueueDigestEmails.new.target_user_ids.include?(user.id).should == true
|
expect(Jobs::EnqueueDigestEmails.new.target_user_ids.include?(user.id)).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ describe Jobs::EnqueueDigestEmails do
|
||||||
let!(:user) { Fabricate(:active_user) }
|
let!(:user) { Fabricate(:active_user) }
|
||||||
|
|
||||||
it "returns the user" do
|
it "returns the user" do
|
||||||
Jobs::EnqueueDigestEmails.new.target_user_ids.should == [user.id]
|
expect(Jobs::EnqueueDigestEmails.new.target_user_ids).to eq([user.id])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ describe Jobs::ExportCsvFile do
|
||||||
|
|
||||||
context '.execute' do
|
context '.execute' do
|
||||||
it 'raises an error when the entity is missing' do
|
it 'raises an error when the entity is missing' do
|
||||||
lambda { Jobs::ExportCsvFile.new.execute(user_id: "1") }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::ExportCsvFile.new.execute(user_id: "1") }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ describe Jobs::ExportCsvFile do
|
||||||
|
|
||||||
user = to_hash(user_list_export.find{|u| u[0] == user.id})
|
user = to_hash(user_list_export.find{|u| u[0] == user.id})
|
||||||
|
|
||||||
user["external_id"].should == "123"
|
expect(user["external_id"]).to eq("123")
|
||||||
user["external_email"].should == "test@test.com"
|
expect(user["external_email"]).to eq("test@test.com")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,11 +5,11 @@ require 'jobs/regular/process_post'
|
||||||
describe Jobs::FeatureTopicUsers do
|
describe Jobs::FeatureTopicUsers do
|
||||||
|
|
||||||
it "raises an error without a topic_id" do
|
it "raises an error without a topic_id" do
|
||||||
lambda { Jobs::FeatureTopicUsers.new.execute({}) }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::FeatureTopicUsers.new.execute({}) }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises an error with a missing topic_id" do
|
it "raises an error with a missing topic_id" do
|
||||||
lambda { Jobs::FeatureTopicUsers.new.execute(topic_id: 123) }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::FeatureTopicUsers.new.execute(topic_id: 123) }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with a topic' do
|
context 'with a topic' do
|
||||||
|
@ -22,22 +22,22 @@ describe Jobs::FeatureTopicUsers do
|
||||||
|
|
||||||
it "won't feature the OP" do
|
it "won't feature the OP" do
|
||||||
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id)
|
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id)
|
||||||
topic.reload.featured_user_ids.include?(topic.user_id).should == false
|
expect(topic.reload.featured_user_ids.include?(topic.user_id)).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "features the second poster" do
|
it "features the second poster" do
|
||||||
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id)
|
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id)
|
||||||
topic.reload.featured_user_ids.include?(coding_horror.id).should == true
|
expect(topic.reload.featured_user_ids.include?(coding_horror.id)).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "will not feature the second poster if we supply their post to be ignored" do
|
it "will not feature the second poster if we supply their post to be ignored" do
|
||||||
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id, except_post_id: second_post.id)
|
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id, except_post_id: second_post.id)
|
||||||
topic.reload.featured_user_ids.include?(coding_horror.id).should == false
|
expect(topic.reload.featured_user_ids.include?(coding_horror.id)).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "won't feature the last poster" do
|
it "won't feature the last poster" do
|
||||||
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id)
|
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id)
|
||||||
topic.reload.featured_user_ids.include?(evil_trout.id).should == false
|
expect(topic.reload.featured_user_ids.include?(evil_trout.id)).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -51,21 +51,21 @@ describe Jobs::FeatureTopicUsers do
|
||||||
it "it works as expected" do
|
it "it works as expected" do
|
||||||
|
|
||||||
# It has 1 participant after creation
|
# It has 1 participant after creation
|
||||||
topic.participant_count.should == 1
|
expect(topic.participant_count).to eq(1)
|
||||||
|
|
||||||
# It still has 1 after featuring
|
# It still has 1 after featuring
|
||||||
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id)
|
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id)
|
||||||
topic.reload.participant_count.should == 1
|
expect(topic.reload.participant_count).to eq(1)
|
||||||
|
|
||||||
# If the OP makes another post, it's still 1.
|
# If the OP makes another post, it's still 1.
|
||||||
create_post(topic: topic, user: post.user)
|
create_post(topic: topic, user: post.user)
|
||||||
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id)
|
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id)
|
||||||
topic.reload.participant_count.should == 1
|
expect(topic.reload.participant_count).to eq(1)
|
||||||
|
|
||||||
# If another users posts, it's 2.
|
# If another users posts, it's 2.
|
||||||
create_post(topic: topic, user: Fabricate(:evil_trout))
|
create_post(topic: topic, user: Fabricate(:evil_trout))
|
||||||
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id)
|
Jobs::FeatureTopicUsers.new.execute(topic_id: topic.id)
|
||||||
topic.reload.participant_count.should == 2
|
expect(topic.reload.participant_count).to eq(2)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ describe Jobs::InviteEmail do
|
||||||
context '.execute' do
|
context '.execute' do
|
||||||
|
|
||||||
it 'raises an error when the invite_id is missing' do
|
it 'raises an error when the invite_id is missing' do
|
||||||
lambda { Jobs::InviteEmail.new.execute({}) }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::InviteEmail.new.execute({}) }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with an invite id' do
|
context 'with an invite id' do
|
||||||
|
|
|
@ -23,7 +23,7 @@ describe Jobs::Base do
|
||||||
it 'handles correct jobs' do
|
it 'handles correct jobs' do
|
||||||
job = GoodJob.new
|
job = GoodJob.new
|
||||||
job.perform({})
|
job.perform({})
|
||||||
job.count.should == 1
|
expect(job.count).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'handles errors in multisite' do
|
it 'handles errors in multisite' do
|
||||||
|
@ -33,7 +33,7 @@ describe Jobs::Base do
|
||||||
|
|
||||||
bad = BadJob.new
|
bad = BadJob.new
|
||||||
expect{bad.perform({})}.to raise_error
|
expect{bad.perform({})}.to raise_error
|
||||||
bad.fail_count.should == 3
|
expect(bad.fail_count).to eq(3)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'delegates the process call to execute' do
|
it 'delegates the process call to execute' do
|
||||||
|
|
|
@ -84,14 +84,14 @@ describe Jobs do
|
||||||
job_to_keep2 = stub_everything(klass: 'Sidekiq::Extensions::DelayedClass', args: [YAML.dump(['Jobs::DrinkBeer', :delayed_perform, [{beer_id: 44}]])])
|
job_to_keep2 = stub_everything(klass: 'Sidekiq::Extensions::DelayedClass', args: [YAML.dump(['Jobs::DrinkBeer', :delayed_perform, [{beer_id: 44}]])])
|
||||||
job_to_keep2.expects(:delete).never
|
job_to_keep2.expects(:delete).never
|
||||||
Sidekiq::ScheduledSet.stubs(:new).returns( [job_to_keep1, job_to_delete, job_to_keep2] )
|
Sidekiq::ScheduledSet.stubs(:new).returns( [job_to_keep1, job_to_delete, job_to_keep2] )
|
||||||
Jobs.cancel_scheduled_job(:drink_beer, {beer_id: 42}).should == true
|
expect(Jobs.cancel_scheduled_job(:drink_beer, {beer_id: 42})).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns false when no matching job is scheduled' do
|
it 'returns false when no matching job is scheduled' do
|
||||||
job_to_keep = stub_everything(klass: 'Sidekiq::Extensions::DelayedClass', args: [YAML.dump(['Jobs::DrinkBeer', :delayed_perform, [{beer_id: 43}]])])
|
job_to_keep = stub_everything(klass: 'Sidekiq::Extensions::DelayedClass', args: [YAML.dump(['Jobs::DrinkBeer', :delayed_perform, [{beer_id: 43}]])])
|
||||||
job_to_keep.expects(:delete).never
|
job_to_keep.expects(:delete).never
|
||||||
Sidekiq::ScheduledSet.stubs(:new).returns( [job_to_keep] )
|
Sidekiq::ScheduledSet.stubs(:new).returns( [job_to_keep] )
|
||||||
Jobs.cancel_scheduled_job(:drink_beer, {beer_id: 42}).should == false
|
expect(Jobs.cancel_scheduled_job(:drink_beer, {beer_id: 42})).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,11 @@ require_dependency 'jobs/regular/process_post'
|
||||||
describe Jobs::NotifyMovedPosts do
|
describe Jobs::NotifyMovedPosts do
|
||||||
|
|
||||||
it "raises an error without post_ids" do
|
it "raises an error without post_ids" do
|
||||||
lambda { Jobs::NotifyMovedPosts.new.execute(moved_by_id: 1234) }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::NotifyMovedPosts.new.execute(moved_by_id: 1234) }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises an error without moved_by_id" do
|
it "raises an error without moved_by_id" do
|
||||||
lambda { Jobs::NotifyMovedPosts.new.execute(post_ids: [1,2,3]) }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::NotifyMovedPosts.new.execute(post_ids: [1,2,3]) }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,12 +22,12 @@ describe Jobs::NotifyMovedPosts do
|
||||||
let(:moved_post_notifications) { Notification.where(notification_type: Notification.types[:moved_post]) }
|
let(:moved_post_notifications) { Notification.where(notification_type: Notification.types[:moved_post]) }
|
||||||
|
|
||||||
it "should create two notifications" do
|
it "should create two notifications" do
|
||||||
lambda { Jobs::NotifyMovedPosts.new.execute(post_ids: [p1.id, p2.id, p3.id], moved_by_id: admin.id) }.should change(moved_post_notifications, :count).by(2)
|
expect { Jobs::NotifyMovedPosts.new.execute(post_ids: [p1.id, p2.id, p3.id], moved_by_id: admin.id) }.to change(moved_post_notifications, :count).by(2)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when moved by one of the posters' do
|
context 'when moved by one of the posters' do
|
||||||
it "create one notifications, because the poster is the mover" do
|
it "create one notifications, because the poster is the mover" do
|
||||||
lambda { Jobs::NotifyMovedPosts.new.execute(post_ids: [p1.id, p2.id, p3.id], moved_by_id: p1.user_id) }.should change(moved_post_notifications, :count).by(1)
|
expect { Jobs::NotifyMovedPosts.new.execute(post_ids: [p1.id, p2.id, p3.id], moved_by_id: p1.user_id) }.to change(moved_post_notifications, :count).by(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -116,13 +116,13 @@ describe Jobs::PollMailbox do
|
||||||
poller.handle_mail(email)
|
poller.handle_mail(email)
|
||||||
|
|
||||||
topic = Topic.where(category: category).where.not(id: category.topic_id).last
|
topic = Topic.where(category: category).where.not(id: category.topic_id).last
|
||||||
topic.should be_present
|
expect(topic).to be_present
|
||||||
topic.title.should == "We should have a post-by-email-feature"
|
expect(topic.title).to eq("We should have a post-by-email-feature")
|
||||||
|
|
||||||
post = topic.posts.first
|
post = topic.posts.first
|
||||||
post.cooked.strip.should == expected_post.strip
|
expect(post.cooked.strip).to eq(expected_post.strip)
|
||||||
|
|
||||||
email.should be_deleted
|
expect(email).to be_deleted
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "with insufficient trust" do
|
describe "with insufficient trust" do
|
||||||
|
@ -144,8 +144,8 @@ describe Jobs::PollMailbox do
|
||||||
expect_success
|
expect_success
|
||||||
poller.handle_mail(email)
|
poller.handle_mail(email)
|
||||||
topic = Topic.where(category: category).where.not(id: category.topic_id).last
|
topic = Topic.where(category: category).where.not(id: category.topic_id).last
|
||||||
topic.should be_present
|
expect(topic).to be_present
|
||||||
topic.title.should == "We should have a post-by-email-feature"
|
expect(topic.title).to eq("We should have a post-by-email-feature")
|
||||||
ensure
|
ensure
|
||||||
category.email_in_allow_strangers = false
|
category.email_in_allow_strangers = false
|
||||||
category.save
|
category.save
|
||||||
|
@ -179,7 +179,7 @@ describe Jobs::PollMailbox do
|
||||||
assert new_post.present?
|
assert new_post.present?
|
||||||
assert_equal expected_post.strip, new_post.cooked.strip
|
assert_equal expected_post.strip, new_post.cooked.strip
|
||||||
|
|
||||||
email.should be_deleted
|
expect(email).to be_deleted
|
||||||
end
|
end
|
||||||
|
|
||||||
it "works with multiple To addresses" do
|
it "works with multiple To addresses" do
|
||||||
|
@ -192,7 +192,7 @@ describe Jobs::PollMailbox do
|
||||||
assert new_post.present?
|
assert new_post.present?
|
||||||
assert_equal expected_post.strip, new_post.cooked.strip
|
assert_equal expected_post.strip, new_post.cooked.strip
|
||||||
|
|
||||||
email.should be_deleted
|
expect(email).to be_deleted
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "with the wrong reply key" do
|
describe "with the wrong reply key" do
|
||||||
|
@ -202,7 +202,7 @@ describe Jobs::PollMailbox do
|
||||||
expect_exception Email::Receiver::EmailLogNotFound
|
expect_exception Email::Receiver::EmailLogNotFound
|
||||||
|
|
||||||
poller.handle_mail(email)
|
poller.handle_mail(email)
|
||||||
email.should be_deleted
|
expect(email).to be_deleted
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -227,7 +227,7 @@ describe Jobs::PollMailbox do
|
||||||
expect_exception Email::Receiver::TopicClosedError
|
expect_exception Email::Receiver::TopicClosedError
|
||||||
|
|
||||||
poller.handle_mail(email)
|
poller.handle_mail(email)
|
||||||
email.should be_deleted
|
expect(email).to be_deleted
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -252,7 +252,7 @@ describe Jobs::PollMailbox do
|
||||||
expect_exception Email::Receiver::TopicNotFoundError
|
expect_exception Email::Receiver::TopicNotFoundError
|
||||||
|
|
||||||
poller.handle_mail(email)
|
poller.handle_mail(email)
|
||||||
email.should be_deleted
|
expect(email).to be_deleted
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -264,7 +264,7 @@ describe Jobs::PollMailbox do
|
||||||
expect_exception Email::Receiver::EmailLogNotFound
|
expect_exception Email::Receiver::EmailLogNotFound
|
||||||
|
|
||||||
poller.handle_mail(email)
|
poller.handle_mail(email)
|
||||||
email.should be_deleted
|
expect(email).to be_deleted
|
||||||
end
|
end
|
||||||
|
|
||||||
it "a no content reply raises an EmptyEmailError" do
|
it "a no content reply raises an EmptyEmailError" do
|
||||||
|
@ -272,7 +272,7 @@ describe Jobs::PollMailbox do
|
||||||
expect_exception Email::Receiver::EmptyEmailError
|
expect_exception Email::Receiver::EmptyEmailError
|
||||||
|
|
||||||
poller.handle_mail(email)
|
poller.handle_mail(email)
|
||||||
email.should be_deleted
|
expect(email).to be_deleted
|
||||||
end
|
end
|
||||||
|
|
||||||
it "a fully empty email raises an EmptyEmailError" do
|
it "a fully empty email raises an EmptyEmailError" do
|
||||||
|
@ -280,7 +280,7 @@ describe Jobs::PollMailbox do
|
||||||
expect_exception Email::Receiver::EmptyEmailError
|
expect_exception Email::Receiver::EmptyEmailError
|
||||||
|
|
||||||
poller.handle_mail(email)
|
poller.handle_mail(email)
|
||||||
email.should be_deleted
|
expect(email).to be_deleted
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,7 @@ require 'jobs/regular/process_post'
|
||||||
describe Jobs::ProcessPost do
|
describe Jobs::ProcessPost do
|
||||||
|
|
||||||
it "returns when the post cannot be found" do
|
it "returns when the post cannot be found" do
|
||||||
lambda { Jobs::ProcessPost.new.perform(post_id: 1, sync_exec: true) }.should_not raise_error
|
expect { Jobs::ProcessPost.new.perform(post_id: 1, sync_exec: true) }.not_to raise_error
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with a post' do
|
context 'with a post' do
|
||||||
|
@ -19,7 +19,7 @@ describe Jobs::ProcessPost do
|
||||||
cooked = post.cooked
|
cooked = post.cooked
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
post.cooked.should == cooked
|
expect(post.cooked).to eq(cooked)
|
||||||
|
|
||||||
Jobs::ProcessPost.new.execute(post_id: post.id, cook: true)
|
Jobs::ProcessPost.new.execute(post_id: post.id, cook: true)
|
||||||
end
|
end
|
||||||
|
@ -31,19 +31,19 @@ describe Jobs::ProcessPost do
|
||||||
Jobs::ProcessPost.new.execute(post_id: post.id, cook: true)
|
Jobs::ProcessPost.new.execute(post_id: post.id, cook: true)
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
post.cooked.should == cooked
|
expect(post.cooked).to eq(cooked)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'processes posts' do
|
it 'processes posts' do
|
||||||
|
|
||||||
post = Fabricate(:post, raw: "<img src='#{Discourse.base_url_no_prefix}/awesome/picture.png'>")
|
post = Fabricate(:post, raw: "<img src='#{Discourse.base_url_no_prefix}/awesome/picture.png'>")
|
||||||
post.cooked.should =~ /http/
|
expect(post.cooked).to match(/http/)
|
||||||
|
|
||||||
Jobs::ProcessPost.new.execute(post_id: post.id)
|
Jobs::ProcessPost.new.execute(post_id: post.id)
|
||||||
post.reload
|
post.reload
|
||||||
|
|
||||||
# subtle but cooked post processor strip this stuff, this ensures all the code gets a workout
|
# subtle but cooked post processor strip this stuff, this ensures all the code gets a workout
|
||||||
post.cooked.should_not =~ /http/
|
expect(post.cooked).not_to match(/http/)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,11 +4,11 @@ require 'jobs/regular/send_system_message'
|
||||||
describe Jobs::SendSystemMessage do
|
describe Jobs::SendSystemMessage do
|
||||||
|
|
||||||
it "raises an error without a user_id" do
|
it "raises an error without a user_id" do
|
||||||
lambda { Jobs::SendSystemMessage.new.execute(message_type: 'welcome_invite') }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::SendSystemMessage.new.execute(message_type: 'welcome_invite') }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises an error without a message_type" do
|
it "raises an error without a message_type" do
|
||||||
lambda { Jobs::SendSystemMessage.new.execute(user_id: 1234) }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::SendSystemMessage.new.execute(user_id: 1234) }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with valid parameters' do
|
context 'with valid parameters' do
|
||||||
|
|
|
@ -5,7 +5,7 @@ describe Jobs::TestEmail do
|
||||||
|
|
||||||
context '.execute' do
|
context '.execute' do
|
||||||
it 'raises an error when the address is missing' do
|
it 'raises an error when the address is missing' do
|
||||||
lambda { Jobs::TestEmail.new.execute({}) }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::TestEmail.new.execute({}) }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with an address' do
|
context 'with an address' do
|
||||||
|
|
|
@ -23,7 +23,7 @@ describe Jobs::Tl3Promotions do
|
||||||
def create_leader_user
|
def create_leader_user
|
||||||
user = Fabricate(:user, trust_level: TrustLevel[2])
|
user = Fabricate(:user, trust_level: TrustLevel[2])
|
||||||
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(true)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(true)
|
||||||
Promotion.new(user).review_tl2.should == true
|
expect(Promotion.new(user).review_tl2).to eq(true)
|
||||||
user
|
user
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ describe Jobs::Tl3Promotions do
|
||||||
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(false)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(false)
|
||||||
TrustLevel3Requirements.any_instance.stubs(:requirements_lost?).returns(true)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_lost?).returns(true)
|
||||||
run_job
|
run_job
|
||||||
user.reload.trust_level.should == TrustLevel[2]
|
expect(user.reload.trust_level).to eq(TrustLevel[2])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't demote if user was promoted recently" do
|
it "doesn't demote if user was promoted recently" do
|
||||||
|
@ -52,7 +52,7 @@ describe Jobs::Tl3Promotions do
|
||||||
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(false)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(false)
|
||||||
TrustLevel3Requirements.any_instance.stubs(:requirements_lost?).returns(true)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_lost?).returns(true)
|
||||||
run_job
|
run_job
|
||||||
user.reload.trust_level.should == TrustLevel[3]
|
expect(user.reload.trust_level).to eq(TrustLevel[3])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't demote if user hasn't lost requirements (low water mark)" do
|
it "doesn't demote if user hasn't lost requirements (low water mark)" do
|
||||||
|
@ -64,7 +64,7 @@ describe Jobs::Tl3Promotions do
|
||||||
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(false)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_met?).returns(false)
|
||||||
TrustLevel3Requirements.any_instance.stubs(:requirements_lost?).returns(false)
|
TrustLevel3Requirements.any_instance.stubs(:requirements_lost?).returns(false)
|
||||||
run_job
|
run_job
|
||||||
user.reload.trust_level.should == TrustLevel[3]
|
expect(user.reload.trust_level).to eq(TrustLevel[3])
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,8 +4,8 @@ describe Jobs::UpdateGravatar do
|
||||||
|
|
||||||
it "picks gravatar if system avatar is picked and gravatar was just downloaded" do
|
it "picks gravatar if system avatar is picked and gravatar was just downloaded" do
|
||||||
user = User.create!(username: "bob", name: "bob", email: "a@a.com")
|
user = User.create!(username: "bob", name: "bob", email: "a@a.com")
|
||||||
user.uploaded_avatar_id.should == nil
|
expect(user.uploaded_avatar_id).to eq(nil)
|
||||||
user.user_avatar.gravatar_upload_id.should == nil
|
expect(user.user_avatar.gravatar_upload_id).to eq(nil)
|
||||||
|
|
||||||
png = Base64.decode64("R0lGODlhAQABALMAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwICAgP8AAAD/AP//AAAA//8A/wD//wBiZCH5BAEAAA8ALAAAAAABAAEAAAQC8EUAOw==")
|
png = Base64.decode64("R0lGODlhAQABALMAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwICAgP8AAAD/AP//AAAA//8A/wD//wBiZCH5BAEAAA8ALAAAAAABAAEAAAQC8EUAOw==")
|
||||||
FakeWeb.register_uri(:get, "http://www.gravatar.com/avatar/d10ca8d11301c2f4993ac2279ce4b930.png?s=500&d=404", body: png)
|
FakeWeb.register_uri(:get, "http://www.gravatar.com/avatar/d10ca8d11301c2f4993ac2279ce4b930.png?s=500&d=404", body: png)
|
||||||
|
@ -15,7 +15,7 @@ describe Jobs::UpdateGravatar do
|
||||||
user.refresh_avatar
|
user.refresh_avatar
|
||||||
user.reload
|
user.reload
|
||||||
|
|
||||||
user.uploaded_avatar_id.should == user.user_avatar.gravatar_upload_id
|
expect(user.uploaded_avatar_id).to eq(user.user_avatar.gravatar_upload_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,15 +12,15 @@ describe Jobs::UserEmail do
|
||||||
let(:mailer) { Mail::Message.new(to: user.email) }
|
let(:mailer) { Mail::Message.new(to: user.email) }
|
||||||
|
|
||||||
it "raises an error when there is no user" do
|
it "raises an error when there is no user" do
|
||||||
lambda { Jobs::UserEmail.new.execute(type: :digest) }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::UserEmail.new.execute(type: :digest) }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises an error when there is no type" do
|
it "raises an error when there is no type" do
|
||||||
lambda { Jobs::UserEmail.new.execute(user_id: user.id) }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::UserEmail.new.execute(user_id: user.id) }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises an error when the type doesn't exist" do
|
it "raises an error when the type doesn't exist" do
|
||||||
lambda { Jobs::UserEmail.new.execute(type: :no_method, user_id: user.id) }.should raise_error(Discourse::InvalidParameters)
|
expect { Jobs::UserEmail.new.execute(type: :no_method, user_id: user.id) }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't call the mailer when the user is missing" do
|
it "doesn't call the mailer when the user is missing" do
|
||||||
|
@ -34,7 +34,7 @@ describe Jobs::UserEmail do
|
||||||
UserNotifications.expects(:authorize_email).returns(mailer)
|
UserNotifications.expects(:authorize_email).returns(mailer)
|
||||||
Email::Sender.any_instance.expects(:send)
|
Email::Sender.any_instance.expects(:send)
|
||||||
Jobs::UserEmail.new.execute(type: :authorize_email, user_id: user.id, to_address: 'jake@adventuretime.ooo')
|
Jobs::UserEmail.new.execute(type: :authorize_email, user_id: user.id, to_address: 'jake@adventuretime.ooo')
|
||||||
mailer.to.should == ['jake@adventuretime.ooo']
|
expect(mailer.to).to eq(['jake@adventuretime.ooo'])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -7,10 +7,10 @@ describe TestMailer do
|
||||||
it "works" do
|
it "works" do
|
||||||
test_mailer = TestMailer.send_test('marcheline@adventuretime.ooo')
|
test_mailer = TestMailer.send_test('marcheline@adventuretime.ooo')
|
||||||
|
|
||||||
test_mailer.from.should == [SiteSetting.notification_email]
|
expect(test_mailer.from).to eq([SiteSetting.notification_email])
|
||||||
test_mailer.to.should == ['marcheline@adventuretime.ooo']
|
expect(test_mailer.to).to eq(['marcheline@adventuretime.ooo'])
|
||||||
test_mailer.subject.should be_present
|
expect(test_mailer.subject).to be_present
|
||||||
test_mailer.body.should be_present
|
expect(test_mailer.body).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,7 +20,7 @@ describe UserNotifications do
|
||||||
reply3.hidden = true
|
reply3.hidden = true
|
||||||
reply3.save
|
reply3.save
|
||||||
|
|
||||||
UserNotifications.get_context_posts(reply4, nil).count.should == 1
|
expect(UserNotifications.get_context_posts(reply4, nil).count).to eq(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -29,10 +29,10 @@ describe UserNotifications do
|
||||||
subject { UserNotifications.signup(user) }
|
subject { UserNotifications.signup(user) }
|
||||||
|
|
||||||
it "works" do
|
it "works" do
|
||||||
subject.to.should == [user.email]
|
expect(subject.to).to eq([user.email])
|
||||||
subject.subject.should be_present
|
expect(subject.subject).to be_present
|
||||||
subject.from.should == [SiteSetting.notification_email]
|
expect(subject.from).to eq([SiteSetting.notification_email])
|
||||||
subject.body.should be_present
|
expect(subject.body).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -42,10 +42,10 @@ describe UserNotifications do
|
||||||
subject { UserNotifications.forgot_password(user) }
|
subject { UserNotifications.forgot_password(user) }
|
||||||
|
|
||||||
it "works" do
|
it "works" do
|
||||||
subject.to.should == [user.email]
|
expect(subject.to).to eq([user.email])
|
||||||
subject.subject.should be_present
|
expect(subject.subject).to be_present
|
||||||
subject.from.should == [SiteSetting.notification_email]
|
expect(subject.from).to eq([SiteSetting.notification_email])
|
||||||
subject.body.should be_present
|
expect(subject.body).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -57,7 +57,7 @@ describe UserNotifications do
|
||||||
context "without new topics" do
|
context "without new topics" do
|
||||||
|
|
||||||
it "doesn't send the email" do
|
it "doesn't send the email" do
|
||||||
subject.to.should be_blank
|
expect(subject.to).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -70,11 +70,11 @@ describe UserNotifications do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "works" do
|
it "works" do
|
||||||
subject.to.should == [user.email]
|
expect(subject.to).to eq([user.email])
|
||||||
subject.subject.should be_present
|
expect(subject.subject).to be_present
|
||||||
subject.from.should == [SiteSetting.notification_email]
|
expect(subject.from).to eq([SiteSetting.notification_email])
|
||||||
subject.html_part.body.to_s.should be_present
|
expect(subject.html_part.body.to_s).to be_present
|
||||||
subject.text_part.body.to_s.should be_present
|
expect(subject.text_part.body.to_s).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -100,32 +100,32 @@ describe UserNotifications do
|
||||||
expect(mail.subject).to match(/India/)
|
expect(mail.subject).to match(/India/)
|
||||||
|
|
||||||
# 2 respond to links cause we have 1 context post
|
# 2 respond to links cause we have 1 context post
|
||||||
mail.html_part.to_s.scan(/To respond/).count.should == 2
|
expect(mail.html_part.to_s.scan(/To respond/).count).to eq(2)
|
||||||
|
|
||||||
# 1 unsubscribe
|
# 1 unsubscribe
|
||||||
mail.html_part.to_s.scan(/To unsubscribe/).count.should == 1
|
expect(mail.html_part.to_s.scan(/To unsubscribe/).count).to eq(1)
|
||||||
|
|
||||||
# side effect, topic user is updated with post number
|
# side effect, topic user is updated with post number
|
||||||
tu = TopicUser.get(post.topic_id, response.user)
|
tu = TopicUser.get(post.topic_id, response.user)
|
||||||
tu.last_emailed_post_number.should == response.post_number
|
expect(tu.last_emailed_post_number).to eq(response.post_number)
|
||||||
|
|
||||||
# in mailing list mode user_replies is not sent through
|
# in mailing list mode user_replies is not sent through
|
||||||
response.user.mailing_list_mode = true
|
response.user.mailing_list_mode = true
|
||||||
mail = UserNotifications.user_replied(response.user, post: response, notification: notification)
|
mail = UserNotifications.user_replied(response.user, post: response, notification: notification)
|
||||||
|
|
||||||
if rails_master?
|
if rails_master?
|
||||||
mail.message.class.should == ActionMailer::Base::NullMail
|
expect(mail.message.class).to eq(ActionMailer::Base::NullMail)
|
||||||
else
|
else
|
||||||
mail.class.should == ActionMailer::Base::NullMail
|
expect(mail.class).to eq(ActionMailer::Base::NullMail)
|
||||||
end
|
end
|
||||||
|
|
||||||
response.user.mailing_list_mode = nil
|
response.user.mailing_list_mode = nil
|
||||||
mail = UserNotifications.user_replied(response.user, post: response, notification: notification)
|
mail = UserNotifications.user_replied(response.user, post: response, notification: notification)
|
||||||
|
|
||||||
if rails_master?
|
if rails_master?
|
||||||
mail.message.class.should_not == ActionMailer::Base::NullMail
|
expect(mail.message.class).not_to eq(ActionMailer::Base::NullMail)
|
||||||
else
|
else
|
||||||
mail.class.should_not == ActionMailer::Base::NullMail
|
expect(mail.class).not_to eq(ActionMailer::Base::NullMail)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -151,14 +151,14 @@ describe UserNotifications do
|
||||||
expect(mail.subject).not_to match(/Uncategorized/)
|
expect(mail.subject).not_to match(/Uncategorized/)
|
||||||
|
|
||||||
# 2 respond to links cause we have 1 context post
|
# 2 respond to links cause we have 1 context post
|
||||||
mail.html_part.to_s.scan(/To respond/).count.should == 2
|
expect(mail.html_part.to_s.scan(/To respond/).count).to eq(2)
|
||||||
|
|
||||||
# 1 unsubscribe link
|
# 1 unsubscribe link
|
||||||
mail.html_part.to_s.scan(/To unsubscribe/).count.should == 1
|
expect(mail.html_part.to_s.scan(/To unsubscribe/).count).to eq(1)
|
||||||
|
|
||||||
# side effect, topic user is updated with post number
|
# side effect, topic user is updated with post number
|
||||||
tu = TopicUser.get(post.topic_id, response.user)
|
tu = TopicUser.get(post.topic_id, response.user)
|
||||||
tu.last_emailed_post_number.should == response.post_number
|
expect(tu.last_emailed_post_number).to eq(response.post_number)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -180,14 +180,14 @@ describe UserNotifications do
|
||||||
expect(mail.subject).to match("[PM]")
|
expect(mail.subject).to match("[PM]")
|
||||||
|
|
||||||
# 1 respond to link
|
# 1 respond to link
|
||||||
mail.html_part.to_s.scan(/To respond/).count.should == 1
|
expect(mail.html_part.to_s.scan(/To respond/).count).to eq(1)
|
||||||
|
|
||||||
# 1 unsubscribe link
|
# 1 unsubscribe link
|
||||||
mail.html_part.to_s.scan(/To unsubscribe/).count.should == 1
|
expect(mail.html_part.to_s.scan(/To unsubscribe/).count).to eq(1)
|
||||||
|
|
||||||
# side effect, topic user is updated with post number
|
# side effect, topic user is updated with post number
|
||||||
tu = TopicUser.get(topic.id, response.user)
|
tu = TopicUser.get(topic.id, response.user)
|
||||||
tu.last_emailed_post_number.should == response.post_number
|
expect(tu.last_emailed_post_number).to eq(response.post_number)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ describe VersionMailer do
|
||||||
before { SiteSetting.stubs(:contact_email).returns('') }
|
before { SiteSetting.stubs(:contact_email).returns('') }
|
||||||
|
|
||||||
it "doesn't send the email" do
|
it "doesn't send the email" do
|
||||||
subject.to.should be_blank
|
expect(subject.to).to be_blank
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -15,10 +15,10 @@ describe VersionMailer do
|
||||||
before { SiteSetting.stubs(:contact_email).returns('me@example.com') }
|
before { SiteSetting.stubs(:contact_email).returns('me@example.com') }
|
||||||
|
|
||||||
it "works" do
|
it "works" do
|
||||||
subject.to.should == ['me@example.com']
|
expect(subject.to).to eq(['me@example.com'])
|
||||||
subject.subject.should be_present
|
expect(subject.subject).to be_present
|
||||||
subject.from.should == [SiteSetting.notification_email]
|
expect(subject.from).to eq([SiteSetting.notification_email])
|
||||||
subject.body.should be_present
|
expect(subject.body).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,17 +7,17 @@ describe AdminDashboardData do
|
||||||
|
|
||||||
it 'returns nil when running in production mode' do
|
it 'returns nil when running in production mode' do
|
||||||
Rails.stubs(env: ActiveSupport::StringInquirer.new('production'))
|
Rails.stubs(env: ActiveSupport::StringInquirer.new('production'))
|
||||||
subject.should == nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a string when running in development mode' do
|
it 'returns a string when running in development mode' do
|
||||||
Rails.stubs(env: ActiveSupport::StringInquirer.new('development'))
|
Rails.stubs(env: ActiveSupport::StringInquirer.new('development'))
|
||||||
subject.should_not == nil
|
expect(subject).to_not be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a string when running in test mode' do
|
it 'returns a string when running in test mode' do
|
||||||
Rails.stubs(env: ActiveSupport::StringInquirer.new('test'))
|
Rails.stubs(env: ActiveSupport::StringInquirer.new('test'))
|
||||||
subject.should_not == nil
|
expect(subject).to_not be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -26,17 +26,17 @@ describe AdminDashboardData do
|
||||||
|
|
||||||
it 'returns nil when host_names is set' do
|
it 'returns nil when host_names is set' do
|
||||||
Discourse.stubs(:current_hostname).returns('something.com')
|
Discourse.stubs(:current_hostname).returns('something.com')
|
||||||
subject.should == nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a string when host_name is localhost' do
|
it 'returns a string when host_name is localhost' do
|
||||||
Discourse.stubs(:current_hostname).returns('localhost')
|
Discourse.stubs(:current_hostname).returns('localhost')
|
||||||
subject.should_not == nil
|
expect(subject).to_not be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a string when host_name is production.localhost' do
|
it 'returns a string when host_name is production.localhost' do
|
||||||
Discourse.stubs(:current_hostname).returns('production.localhost')
|
Discourse.stubs(:current_hostname).returns('production.localhost')
|
||||||
subject.should_not == nil
|
expect(subject).to_not be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -45,12 +45,12 @@ describe AdminDashboardData do
|
||||||
|
|
||||||
it 'returns nil when gc params are set' do
|
it 'returns nil when gc params are set' do
|
||||||
ENV.stubs(:[]).with('RUBY_GC_MALLOC_LIMIT').returns(90000000)
|
ENV.stubs(:[]).with('RUBY_GC_MALLOC_LIMIT').returns(90000000)
|
||||||
subject.should == nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a string when gc params are not set' do
|
it 'returns a string when gc params are not set' do
|
||||||
ENV.stubs(:[]).with('RUBY_GC_MALLOC_LIMIT').returns(nil)
|
ENV.stubs(:[]).with('RUBY_GC_MALLOC_LIMIT').returns(nil)
|
||||||
subject.should_not == nil
|
expect(subject).to_not be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -60,31 +60,31 @@ describe AdminDashboardData do
|
||||||
it 'returns nil when sidekiq processed a job recently' do
|
it 'returns nil when sidekiq processed a job recently' do
|
||||||
Jobs.stubs(:last_job_performed_at).returns(1.minute.ago)
|
Jobs.stubs(:last_job_performed_at).returns(1.minute.ago)
|
||||||
Jobs.stubs(:queued).returns(0)
|
Jobs.stubs(:queued).returns(0)
|
||||||
subject.should == nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns nil when last job processed was a long time ago, but no jobs are queued' do
|
it 'returns nil when last job processed was a long time ago, but no jobs are queued' do
|
||||||
Jobs.stubs(:last_job_performed_at).returns(7.days.ago)
|
Jobs.stubs(:last_job_performed_at).returns(7.days.ago)
|
||||||
Jobs.stubs(:queued).returns(0)
|
Jobs.stubs(:queued).returns(0)
|
||||||
subject.should == nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns nil when no jobs have ever been processed, but no jobs are queued' do
|
it 'returns nil when no jobs have ever been processed, but no jobs are queued' do
|
||||||
Jobs.stubs(:last_job_performed_at).returns(nil)
|
Jobs.stubs(:last_job_performed_at).returns(nil)
|
||||||
Jobs.stubs(:queued).returns(0)
|
Jobs.stubs(:queued).returns(0)
|
||||||
subject.should == nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a string when no jobs were processed recently and some jobs are queued' do
|
it 'returns a string when no jobs were processed recently and some jobs are queued' do
|
||||||
Jobs.stubs(:last_job_performed_at).returns(20.minutes.ago)
|
Jobs.stubs(:last_job_performed_at).returns(20.minutes.ago)
|
||||||
Jobs.stubs(:queued).returns(1)
|
Jobs.stubs(:queued).returns(1)
|
||||||
subject.should_not == nil
|
expect(subject).to_not be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a string when no jobs have ever been processed, and some jobs are queued' do
|
it 'returns a string when no jobs have ever been processed, and some jobs are queued' do
|
||||||
Jobs.stubs(:last_job_performed_at).returns(nil)
|
Jobs.stubs(:last_job_performed_at).returns(nil)
|
||||||
Jobs.stubs(:queued).returns(1)
|
Jobs.stubs(:queued).returns(1)
|
||||||
subject.should_not == nil
|
expect(subject).to_not be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -93,17 +93,17 @@ describe AdminDashboardData do
|
||||||
|
|
||||||
it 'returns nil when total ram is 1 GB' do
|
it 'returns nil when total ram is 1 GB' do
|
||||||
MemInfo.any_instance.stubs(:mem_total).returns(1025272)
|
MemInfo.any_instance.stubs(:mem_total).returns(1025272)
|
||||||
subject.should == nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns nil when total ram cannot be determined' do
|
it 'returns nil when total ram cannot be determined' do
|
||||||
MemInfo.any_instance.stubs(:mem_total).returns(nil)
|
MemInfo.any_instance.stubs(:mem_total).returns(nil)
|
||||||
subject.should == nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a string when total ram is less than 1 GB' do
|
it 'returns a string when total ram is less than 1 GB' do
|
||||||
MemInfo.any_instance.stubs(:mem_total).returns(512636)
|
MemInfo.any_instance.stubs(:mem_total).returns(512636)
|
||||||
subject.should_not == nil
|
expect(subject).to_not be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -184,7 +184,7 @@ describe AdminDashboardData do
|
||||||
context 'when disabled' do
|
context 'when disabled' do
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
SiteSetting.stubs(enable_setting).returns(false)
|
SiteSetting.stubs(enable_setting).returns(false)
|
||||||
subject.should == nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -196,25 +196,25 @@ describe AdminDashboardData do
|
||||||
it 'returns nil key and secret are set' do
|
it 'returns nil key and secret are set' do
|
||||||
SiteSetting.stubs(key).returns('12313213')
|
SiteSetting.stubs(key).returns('12313213')
|
||||||
SiteSetting.stubs(secret).returns('12312313123')
|
SiteSetting.stubs(secret).returns('12312313123')
|
||||||
subject.should == nil
|
expect(subject).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a string when key is not set' do
|
it 'returns a string when key is not set' do
|
||||||
SiteSetting.stubs(key).returns('')
|
SiteSetting.stubs(key).returns('')
|
||||||
SiteSetting.stubs(secret).returns('12312313123')
|
SiteSetting.stubs(secret).returns('12312313123')
|
||||||
subject.should_not == nil
|
expect(subject).to_not be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a string when secret is not set' do
|
it 'returns a string when secret is not set' do
|
||||||
SiteSetting.stubs(key).returns('123123')
|
SiteSetting.stubs(key).returns('123123')
|
||||||
SiteSetting.stubs(secret).returns('')
|
SiteSetting.stubs(secret).returns('')
|
||||||
subject.should_not == nil
|
expect(subject).to_not be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a string when key and secret are not set' do
|
it 'returns a string when key and secret are not set' do
|
||||||
SiteSetting.stubs(key).returns('')
|
SiteSetting.stubs(key).returns('')
|
||||||
SiteSetting.stubs(secret).returns('')
|
SiteSetting.stubs(secret).returns('')
|
||||||
subject.should_not == nil
|
expect(subject).to_not be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,14 +3,14 @@ require 'spec_helper'
|
||||||
require_dependency 'api_key'
|
require_dependency 'api_key'
|
||||||
|
|
||||||
describe ApiKey do
|
describe ApiKey do
|
||||||
it { should belong_to :user }
|
it { is_expected.to belong_to :user }
|
||||||
it { should belong_to :created_by }
|
it { is_expected.to belong_to :created_by }
|
||||||
|
|
||||||
it { should validate_presence_of :key }
|
it { is_expected.to validate_presence_of :key }
|
||||||
|
|
||||||
pending 'validates uniqueness of user_id' do
|
pending 'validates uniqueness of user_id' do
|
||||||
Fabricate(:api_key)
|
Fabricate(:api_key)
|
||||||
should validate_uniqueness_of(:user_id)
|
is_expected.to validate_uniqueness_of(:user_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,9 +2,16 @@ require 'spec_helper'
|
||||||
require_dependency 'badge'
|
require_dependency 'badge'
|
||||||
|
|
||||||
describe Badge do
|
describe Badge do
|
||||||
|
it { is_expected.to belong_to(:badge_type) }
|
||||||
|
it { is_expected.to belong_to(:badge_grouping) }
|
||||||
|
it { is_expected.to have_many(:user_badges).dependent(:destroy) }
|
||||||
|
|
||||||
|
it { is_expected.to validate_presence_of(:name) }
|
||||||
|
it { is_expected.to validate_presence_of(:badge_type) }
|
||||||
|
it { is_expected.to validate_uniqueness_of(:name) }
|
||||||
|
|
||||||
it 'has a valid system attribute for new badges' do
|
it 'has a valid system attribute for new badges' do
|
||||||
Badge.create!(name: "test", badge_type_id: 1).system?.should == false
|
expect(Badge.create!(name: "test", badge_type_id: 1).system?).to be false
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,7 +3,7 @@ require_dependency 'badge_type'
|
||||||
|
|
||||||
describe BadgeType do
|
describe BadgeType do
|
||||||
|
|
||||||
it { should validate_presence_of :name }
|
it { is_expected.to validate_presence_of :name }
|
||||||
it { should validate_uniqueness_of :name }
|
it { is_expected.to validate_uniqueness_of :name }
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,8 +2,8 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe CategoryFeaturedTopic do
|
describe CategoryFeaturedTopic do
|
||||||
|
|
||||||
it { should belong_to :category }
|
it { is_expected.to belong_to :category }
|
||||||
it { should belong_to :topic }
|
it { is_expected.to belong_to :topic }
|
||||||
|
|
||||||
context 'feature_topics_for' do
|
context 'feature_topics_for' do
|
||||||
let(:user) { Fabricate(:user) }
|
let(:user) { Fabricate(:user) }
|
||||||
|
@ -21,7 +21,7 @@ describe CategoryFeaturedTopic do
|
||||||
_uncategorized_post = PostCreator.create(user, raw: "this is my new post 123 post", title: "hello world")
|
_uncategorized_post = PostCreator.create(user, raw: "this is my new post 123 post", title: "hello world")
|
||||||
|
|
||||||
CategoryFeaturedTopic.feature_topics_for(category)
|
CategoryFeaturedTopic.feature_topics_for(category)
|
||||||
CategoryFeaturedTopic.count.should == 1
|
expect(CategoryFeaturedTopic.count).to be(1)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ describe CategoryFeaturedTopic do
|
||||||
invisible_post = PostCreator.create(user, raw: "Don't look at this post because it's awful.", title: "not visible to anyone", category: category.id)
|
invisible_post = PostCreator.create(user, raw: "Don't look at this post because it's awful.", title: "not visible to anyone", category: category.id)
|
||||||
invisible_post.topic.update_status('visible', false, Fabricate(:admin))
|
invisible_post.topic.update_status('visible', false, Fabricate(:admin))
|
||||||
CategoryFeaturedTopic.feature_topics_for(category)
|
CategoryFeaturedTopic.feature_topics_for(category)
|
||||||
CategoryFeaturedTopic.count.should == 1
|
expect(CategoryFeaturedTopic.count).to be(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,8 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe CategoryFeaturedUser do
|
describe CategoryFeaturedUser do
|
||||||
|
|
||||||
it { should belong_to :category }
|
it { is_expected.to belong_to :category }
|
||||||
it { should belong_to :user }
|
it { is_expected.to belong_to :user }
|
||||||
|
|
||||||
|
|
||||||
context 'featuring users' do
|
context 'featuring users' do
|
||||||
|
|
||||||
|
@ -14,11 +13,11 @@ describe CategoryFeaturedUser do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'has a featured user' do
|
it 'has a featured user' do
|
||||||
CategoryFeaturedUser.count.should_not == 0
|
expect(CategoryFeaturedUser.count).to be(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns the user via the category association' do
|
it 'returns the user via the category association' do
|
||||||
@category.featured_users.should be_present
|
expect(@category.featured_users).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,26 +4,26 @@ require 'spec_helper'
|
||||||
require_dependency 'post_creator'
|
require_dependency 'post_creator'
|
||||||
|
|
||||||
describe Category do
|
describe Category do
|
||||||
it { should validate_presence_of :user_id }
|
it { is_expected.to validate_presence_of :user_id }
|
||||||
it { should validate_presence_of :name }
|
it { is_expected.to validate_presence_of :name }
|
||||||
|
|
||||||
it 'validates uniqueness of name' do
|
it 'validates uniqueness of name' do
|
||||||
Fabricate(:category)
|
Fabricate(:category)
|
||||||
should validate_uniqueness_of(:name).scoped_to(:parent_category_id)
|
is_expected.to validate_uniqueness_of(:name).scoped_to(:parent_category_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'validates uniqueness in case insensitive way' do
|
it 'validates uniqueness in case insensitive way' do
|
||||||
Fabricate(:category, name: "Cats")
|
Fabricate(:category, name: "Cats")
|
||||||
c = Fabricate.build(:category, name: "cats")
|
cats = Fabricate.build(:category, name: "cats")
|
||||||
c.should_not be_valid
|
expect(cats).to_not be_valid
|
||||||
c.errors[:name].should be_present
|
expect(cats.errors[:name]).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "last_updated_at" do
|
describe "last_updated_at" do
|
||||||
it "returns a number value of when the category was last updated" do
|
it "returns a number value of when the category was last updated" do
|
||||||
last = Category.last_updated_at
|
last = Category.last_updated_at
|
||||||
last.should be_present
|
expect(last).to be_present
|
||||||
last.to_i.should == last
|
expect(last.to_i).to eq(last)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -31,8 +31,8 @@ describe Category do
|
||||||
it "can determine read_restricted" do
|
it "can determine read_restricted" do
|
||||||
read_restricted, resolved = Category.resolve_permissions(:everyone => :full)
|
read_restricted, resolved = Category.resolve_permissions(:everyone => :full)
|
||||||
|
|
||||||
read_restricted.should == false
|
expect(read_restricted).to be false
|
||||||
resolved.should == []
|
expect(resolved).to be_blank
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -64,24 +64,24 @@ describe Category do
|
||||||
can_read_category.save
|
can_read_category.save
|
||||||
|
|
||||||
guardian = Guardian.new(admin)
|
guardian = Guardian.new(admin)
|
||||||
Category.topic_create_allowed(guardian).count.should == 5
|
expect(Category.topic_create_allowed(guardian).count).to be(5)
|
||||||
Category.post_create_allowed(guardian).count.should == 5
|
expect(Category.post_create_allowed(guardian).count).to be(5)
|
||||||
Category.secured(guardian).count.should == 5
|
expect(Category.secured(guardian).count).to be(5)
|
||||||
|
|
||||||
guardian = Guardian.new(user)
|
guardian = Guardian.new(user)
|
||||||
Category.secured(guardian).count.should == 5
|
expect(Category.secured(guardian).count).to be(5)
|
||||||
Category.post_create_allowed(guardian).count.should == 4
|
expect(Category.post_create_allowed(guardian).count).to be(4)
|
||||||
Category.topic_create_allowed(guardian).count.should == 3 # explicitly allowed once, default allowed once
|
expect(Category.topic_create_allowed(guardian).count).to be(3) # explicitly allowed once, default allowed once
|
||||||
|
|
||||||
# everyone has special semantics, test it as well
|
# everyone has special semantics, test it as well
|
||||||
can_post_category.set_permissions(:everyone => :create_post)
|
can_post_category.set_permissions(:everyone => :create_post)
|
||||||
can_post_category.save
|
can_post_category.save
|
||||||
|
|
||||||
Category.post_create_allowed(guardian).count.should == 4
|
expect(Category.post_create_allowed(guardian).count).to be(4)
|
||||||
|
|
||||||
# anonymous has permission to create no topics
|
# anonymous has permission to create no topics
|
||||||
guardian = Guardian.new(nil)
|
guardian = Guardian.new(nil)
|
||||||
Category.post_create_allowed(guardian).count.should == 0
|
expect(Category.post_create_allowed(guardian).count).to be(0)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -94,15 +94,15 @@ describe Category do
|
||||||
let(:group) { Fabricate(:group) }
|
let(:group) { Fabricate(:group) }
|
||||||
|
|
||||||
it "secures categories correctly" do
|
it "secures categories correctly" do
|
||||||
category.read_restricted?.should == false
|
expect(category.read_restricted?).to be false
|
||||||
|
|
||||||
category.set_permissions({})
|
category.set_permissions({})
|
||||||
category.read_restricted?.should == true
|
expect(category.read_restricted?).to be true
|
||||||
|
|
||||||
category.set_permissions(:everyone => :full)
|
category.set_permissions(:everyone => :full)
|
||||||
category.read_restricted?.should == false
|
expect(category.read_restricted?).to be false
|
||||||
|
|
||||||
user.secure_categories.should be_empty
|
expect(user.secure_categories).to be_empty
|
||||||
|
|
||||||
group.add(user)
|
group.add(user)
|
||||||
group.save
|
group.save
|
||||||
|
@ -111,7 +111,7 @@ describe Category do
|
||||||
category.save
|
category.save
|
||||||
|
|
||||||
user.reload
|
user.reload
|
||||||
user.secure_categories.should == [category]
|
expect(user.secure_categories).to eq([category])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "lists all secured categories correctly" do
|
it "lists all secured categories correctly" do
|
||||||
|
@ -123,48 +123,48 @@ describe Category do
|
||||||
category_2.set_permissions(group.id => :full)
|
category_2.set_permissions(group.id => :full)
|
||||||
category_2.save
|
category_2.save
|
||||||
|
|
||||||
Category.secured.should =~ [uncategorized]
|
expect(Category.secured).to match_array([uncategorized])
|
||||||
Category.secured(Guardian.new(user)).should =~ [uncategorized,category, category_2]
|
expect(Category.secured(Guardian.new(user))).to match_array([uncategorized,category, category_2])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "strips leading blanks" do
|
it "strips leading blanks" do
|
||||||
Fabricate(:category, name: " music").name.should == "music"
|
expect(Fabricate(:category, name: " music").name).to eq("music")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "strips trailing blanks" do
|
it "strips trailing blanks" do
|
||||||
Fabricate(:category, name: "bugs ").name.should == "bugs"
|
expect(Fabricate(:category, name: "bugs ").name).to eq("bugs")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "strips leading and trailing blanks" do
|
it "strips leading and trailing blanks" do
|
||||||
Fabricate(:category, name: " blanks ").name.should == "blanks"
|
expect(Fabricate(:category, name: " blanks ").name).to eq("blanks")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "sets name_lower" do
|
it "sets name_lower" do
|
||||||
Fabricate(:category, name: "Not MySQL").name_lower.should == "not mysql"
|
expect(Fabricate(:category, name: "Not MySQL").name_lower).to eq("not mysql")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "has custom fields" do
|
it "has custom fields" do
|
||||||
category = Fabricate(:category, name: " music")
|
category = Fabricate(:category, name: " music")
|
||||||
category.custom_fields["a"].should == nil
|
expect(category.custom_fields["a"]).to be_nil
|
||||||
|
|
||||||
category.custom_fields["bob"] = "marley"
|
category.custom_fields["bob"] = "marley"
|
||||||
category.custom_fields["jack"] = "black"
|
category.custom_fields["jack"] = "black"
|
||||||
category.save
|
category.save
|
||||||
|
|
||||||
category = Category.find(category.id)
|
category = Category.find(category.id)
|
||||||
category.custom_fields.should == {"bob" => "marley", "jack" => "black"}
|
expect(category.custom_fields).to eq({"bob" => "marley", "jack" => "black"})
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "short name" do
|
describe "short name" do
|
||||||
let!(:category) { Fabricate(:category, name: 'xx') }
|
let!(:category) { Fabricate(:category, name: 'xx') }
|
||||||
|
|
||||||
it "creates the category" do
|
it "creates the category" do
|
||||||
category.should be_present
|
expect(category).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'has one topic' do
|
it 'has one topic' do
|
||||||
Topic.where(category_id: category.id).count.should == 1
|
expect(Topic.where(category_id: category.id).count).to eq(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -172,14 +172,14 @@ describe Category do
|
||||||
let(:category) { Fabricate(:category, name: "测试") }
|
let(:category) { Fabricate(:category, name: "测试") }
|
||||||
|
|
||||||
it "creates a blank slug, this is OK." do
|
it "creates a blank slug, this is OK." do
|
||||||
category.slug.should be_blank
|
expect(category.slug).to be_blank
|
||||||
category.slug_for_url.should == "#{category.id}-category"
|
expect(category.slug_for_url).to eq("#{category.id}-category")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "creates a localized slug if default locale is zh_CN" do
|
it "creates a localized slug if default locale is zh_CN" do
|
||||||
SiteSetting.default_locale = 'zh_CN'
|
SiteSetting.default_locale = 'zh_CN'
|
||||||
category.slug.should_not be_blank
|
expect(category.slug).to_not be_blank
|
||||||
category.slug_for_url.should == "ce-shi"
|
expect(category.slug_for_url).to eq("ce-shi")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -187,15 +187,15 @@ describe Category do
|
||||||
let(:category) { Fabricate(:category, name: "2") }
|
let(:category) { Fabricate(:category, name: "2") }
|
||||||
|
|
||||||
it 'creates a blank slug' do
|
it 'creates a blank slug' do
|
||||||
category.slug.should be_blank
|
expect(category.slug).to be_blank
|
||||||
category.slug_for_url.should == "#{category.id}-category"
|
expect(category.slug_for_url).to eq("#{category.id}-category")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'custom slug can be provided' do
|
describe 'custom slug can be provided' do
|
||||||
it 'has the custom value' do
|
it 'has the custom value' do
|
||||||
c = Fabricate(:category, name: "Cats", slug: "cats-category")
|
c = Fabricate(:category, name: "Cats", slug: "cats-category")
|
||||||
c.slug.should eq("cats-category")
|
expect(c.slug).to eq("cats-category")
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'and be sanitized' do
|
it 'and be sanitized' do
|
||||||
|
@ -206,17 +206,17 @@ describe Category do
|
||||||
it 'fails if custom slug is duplicate with existing' do
|
it 'fails if custom slug is duplicate with existing' do
|
||||||
c1 = Fabricate(:category, name: "Cats", slug: "cats")
|
c1 = Fabricate(:category, name: "Cats", slug: "cats")
|
||||||
c2 = Fabricate.build(:category, name: "More Cats", slug: "cats")
|
c2 = Fabricate.build(:category, name: "More Cats", slug: "cats")
|
||||||
c2.should_not be_valid
|
expect(c2).to_not be_valid
|
||||||
c2.errors[:slug].should be_present
|
expect(c2.errors[:slug]).to be_present
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'description_text' do
|
describe 'description_text' do
|
||||||
it 'correctly generates text description as needed' do
|
it 'correctly generates text description as needed' do
|
||||||
c = Category.new
|
c = Category.new
|
||||||
c.description_text.should == nil
|
expect(c.description_text).to be_nil
|
||||||
c.description = "<hello <a>test</a>."
|
c.description = "<hello <a>test</a>."
|
||||||
c.description_text.should == "<hello test."
|
expect(c.description_text).to eq("<hello test.")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -227,63 +227,63 @@ describe Category do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is created correctly' do
|
it 'is created correctly' do
|
||||||
@category.slug.should == 'amazing-category'
|
expect(@category.slug).to eq('amazing-category')
|
||||||
@category.slug_for_url.should == @category.slug
|
expect(@category.slug_for_url).to eq(@category.slug)
|
||||||
|
|
||||||
@category.description.should be_blank
|
expect(@category.description).to be_blank
|
||||||
|
|
||||||
Topic.where(category_id: @category).count.should == 1
|
expect(Topic.where(category_id: @category).count).to eq(1)
|
||||||
|
|
||||||
@topic.should be_present
|
expect(@topic).to be_present
|
||||||
|
|
||||||
@topic.category.should == @category
|
expect(@topic.category).to eq(@category)
|
||||||
|
|
||||||
@topic.should be_visible
|
expect(@topic).to be_visible
|
||||||
|
|
||||||
@topic.pinned_at.should be_present
|
expect(@topic.pinned_at).to be_present
|
||||||
|
|
||||||
Guardian.new(@category.user).can_delete?(@topic).should == false
|
expect(Guardian.new(@category.user).can_delete?(@topic)).to be false
|
||||||
|
|
||||||
@topic.posts.count.should == 1
|
expect(@topic.posts.count).to eq(1)
|
||||||
|
|
||||||
@category.topic_url.should be_present
|
expect(@category.topic_url).to be_present
|
||||||
|
|
||||||
@category.posts_week.should == 0
|
expect(@category.posts_week).to eq(0)
|
||||||
@category.posts_month.should == 0
|
expect(@category.posts_month).to eq(0)
|
||||||
@category.posts_year.should == 0
|
expect(@category.posts_year).to eq(0)
|
||||||
|
|
||||||
@category.topics_week.should == 0
|
expect(@category.topics_week).to eq(0)
|
||||||
@category.topics_month.should == 0
|
expect(@category.topics_month).to eq(0)
|
||||||
@category.topics_year.should == 0
|
expect(@category.topics_year).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "renames the definition when renamed" do
|
it "renames the definition when renamed" do
|
||||||
@category.update_attributes(name: 'Troutfishing')
|
@category.update_attributes(name: 'Troutfishing')
|
||||||
@topic.reload
|
@topic.reload
|
||||||
@topic.title.should =~ /Troutfishing/
|
expect(@topic.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
|
||||||
-> { @category.update_attributes(name: 'Troutfishing', topic_id: nil) }.should_not raise_error
|
expect { @category.update_attributes(name: 'Troutfishing', topic_id: nil) }.to_not raise_error
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not set its description topic to auto-close" do
|
it "should not set its description topic to auto-close" do
|
||||||
category = Fabricate(:category, name: 'Closing Topics', auto_close_hours: 1)
|
category = Fabricate(:category, name: 'Closing Topics', auto_close_hours: 1)
|
||||||
category.topic.auto_close_at.should == nil
|
expect(category.topic.auto_close_at).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "creating a new category with the same slug" do
|
describe "creating a new category with the same slug" do
|
||||||
it "should have a blank slug if at the same level" do
|
it "should have a blank slug if at the same level" do
|
||||||
category = Fabricate(:category, name: "Amazing Categóry")
|
category = Fabricate(:category, name: "Amazing Categóry")
|
||||||
category.slug.should be_blank
|
expect(category.slug).to be_blank
|
||||||
category.slug_for_url.should == "#{category.id}-category"
|
expect(category.slug_for_url).to eq("#{category.id}-category")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't have a blank slug if not at the same level" do
|
it "doesn't have a blank slug if not at the same level" do
|
||||||
parent = Fabricate(:category, name: 'Other parent')
|
parent = Fabricate(:category, name: 'Other parent')
|
||||||
category = Fabricate(:category, name: "Amazing Categóry", parent_category_id: parent.id)
|
category = Fabricate(:category, name: "Amazing Categóry", parent_category_id: parent.id)
|
||||||
category.slug.should == 'amazing-category'
|
expect(category.slug).to eq('amazing-category')
|
||||||
category.slug_for_url.should == "amazing-category"
|
expect(category.slug_for_url).to eq("amazing-category")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -296,9 +296,9 @@ describe Category do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not cause changes' do
|
it 'does not cause changes' do
|
||||||
@category.topic_count.should == 0
|
expect(@category.topic_count).to eq(0)
|
||||||
@topic.category.should == @category
|
expect(@topic.category).to eq(@category)
|
||||||
@category.topic.should == @topic
|
expect(@category.topic).to eq(@topic)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -308,8 +308,8 @@ describe Category do
|
||||||
Fabricate(:category, slug: "the-slug")
|
Fabricate(:category, slug: "the-slug")
|
||||||
c2 = Fabricate(:category, slug: "different-slug")
|
c2 = Fabricate(:category, slug: "different-slug")
|
||||||
c2.slug = "the-slug"
|
c2.slug = "the-slug"
|
||||||
c2.should_not be_valid
|
expect(c2).to_not be_valid
|
||||||
c2.errors[:slug].should be_present
|
expect(c2.errors[:slug]).to be_present
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -322,8 +322,8 @@ describe Category do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is deleted correctly' do
|
it 'is deleted correctly' do
|
||||||
Category.exists?(id: @category_id).should == false
|
expect(Category.exists?(id: @category_id)).to be false
|
||||||
Topic.exists?(id: @topic_id).should == false
|
expect(Topic.exists?(id: @topic_id)).to be false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -333,15 +333,15 @@ describe Category do
|
||||||
post = create_post(category: category.name)
|
post = create_post(category: category.name)
|
||||||
|
|
||||||
category.reload
|
category.reload
|
||||||
category.latest_post_id.should == post.id
|
expect(category.latest_post_id).to eq(post.id)
|
||||||
category.latest_topic_id.should == post.topic_id
|
expect(category.latest_topic_id).to eq(post.topic_id)
|
||||||
|
|
||||||
post2 = create_post(category: category.name)
|
post2 = create_post(category: category.name)
|
||||||
post3 = create_post(topic_id: post.topic_id, category: category.name)
|
post3 = create_post(topic_id: post.topic_id, category: category.name)
|
||||||
|
|
||||||
category.reload
|
category.reload
|
||||||
category.latest_post_id.should == post3.id
|
expect(category.latest_post_id).to eq(post3.id)
|
||||||
category.latest_topic_id.should == post2.topic_id
|
expect(category.latest_topic_id).to eq(post2.topic_id)
|
||||||
|
|
||||||
post3.reload
|
post3.reload
|
||||||
|
|
||||||
|
@ -349,7 +349,7 @@ describe Category do
|
||||||
destroyer.destroy
|
destroyer.destroy
|
||||||
|
|
||||||
category.reload
|
category.reload
|
||||||
category.latest_post_id.should == post2.id
|
expect(category.latest_post_id).to eq(post2.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -366,14 +366,14 @@ describe Category do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'updates topic stats' do
|
it 'updates topic stats' do
|
||||||
@category.topics_week.should == 1
|
expect(@category.topics_week).to eq(1)
|
||||||
@category.topics_month.should == 1
|
expect(@category.topics_month).to eq(1)
|
||||||
@category.topics_year.should == 1
|
expect(@category.topics_year).to eq(1)
|
||||||
@category.topic_count.should == 1
|
expect(@category.topic_count).to eq(1)
|
||||||
@category.post_count.should == 1
|
expect(@category.post_count).to eq(1)
|
||||||
@category.posts_year.should == 1
|
expect(@category.posts_year).to eq(1)
|
||||||
@category.posts_month.should == 1
|
expect(@category.posts_month).to eq(1)
|
||||||
@category.posts_week.should == 1
|
expect(@category.posts_week).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -387,14 +387,14 @@ describe Category do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not count deleted topics' do
|
it 'does not count deleted topics' do
|
||||||
@category.topics_week.should == 0
|
expect(@category.topics_week).to eq(0)
|
||||||
@category.topic_count.should == 0
|
expect(@category.topic_count).to eq(0)
|
||||||
@category.topics_month.should == 0
|
expect(@category.topics_month).to eq(0)
|
||||||
@category.topics_year.should == 0
|
expect(@category.topics_year).to eq(0)
|
||||||
@category.post_count.should == 0
|
expect(@category.post_count).to eq(0)
|
||||||
@category.posts_year.should == 0
|
expect(@category.posts_year).to eq(0)
|
||||||
@category.posts_month.should == 0
|
expect(@category.posts_month).to eq(0)
|
||||||
@category.posts_week.should == 0
|
expect(@category.posts_week).to eq(0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -410,10 +410,10 @@ describe Category do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't count each version of a post" do
|
it "doesn't count each version of a post" do
|
||||||
@category.post_count.should == 1
|
expect(@category.post_count).to eq(1)
|
||||||
@category.posts_year.should == 1
|
expect(@category.posts_year).to eq(1)
|
||||||
@category.posts_month.should == 1
|
expect(@category.posts_month).to eq(1)
|
||||||
@category.posts_week.should == 1
|
expect(@category.posts_week).to eq(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -426,14 +426,14 @@ describe Category do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'updates topic stats' do
|
it 'updates topic stats' do
|
||||||
@uncategorized.topics_week.should == 1
|
expect(@uncategorized.topics_week).to eq(1)
|
||||||
@uncategorized.topics_month.should == 1
|
expect(@uncategorized.topics_month).to eq(1)
|
||||||
@uncategorized.topics_year.should == 1
|
expect(@uncategorized.topics_year).to eq(1)
|
||||||
@uncategorized.topic_count.should == 1
|
expect(@uncategorized.topic_count).to eq(1)
|
||||||
@uncategorized.post_count.should == 1
|
expect(@uncategorized.post_count).to eq(1)
|
||||||
@uncategorized.posts_year.should == 1
|
expect(@uncategorized.posts_year).to eq(1)
|
||||||
@uncategorized.posts_month.should == 1
|
expect(@uncategorized.posts_month).to eq(1)
|
||||||
@uncategorized.posts_week.should == 1
|
expect(@uncategorized.posts_week).to eq(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -458,12 +458,12 @@ describe Category do
|
||||||
let(:cat) { Category.where(id: SiteSetting.uncategorized_category_id).first }
|
let(:cat) { Category.where(id: SiteSetting.uncategorized_category_id).first }
|
||||||
|
|
||||||
it "reports as `uncategorized?`" do
|
it "reports as `uncategorized?`" do
|
||||||
cat.should be_uncategorized
|
expect(cat).to be_uncategorized
|
||||||
end
|
end
|
||||||
|
|
||||||
it "cannot have a parent category" do
|
it "cannot have a parent category" do
|
||||||
cat.parent_category_id = Fabricate(:category).id
|
cat.parent_category_id = Fabricate(:category).id
|
||||||
cat.should_not be_valid
|
expect(cat).to_not be_valid
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -473,27 +473,26 @@ describe Category do
|
||||||
|
|
||||||
it "can be associated with a parent category" do
|
it "can be associated with a parent category" do
|
||||||
sub_category = Fabricate.build(:category, parent_category_id: parent_category.id, user: user)
|
sub_category = Fabricate.build(:category, parent_category_id: parent_category.id, user: user)
|
||||||
sub_category.should be_valid
|
expect(sub_category).to be_valid
|
||||||
sub_category.parent_category.should == parent_category
|
expect(sub_category.parent_category).to eq(parent_category)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "cannot associate a category with itself" do
|
it "cannot associate a category with itself" do
|
||||||
category = Fabricate(:category, user: user)
|
category = Fabricate(:category, user: user)
|
||||||
category.parent_category_id = category.id
|
category.parent_category_id = category.id
|
||||||
category.should_not be_valid
|
expect(category).to_not be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it "cannot have a category two levels deep" do
|
it "cannot have a category two levels deep" do
|
||||||
sub_category = Fabricate(:category, parent_category_id: parent_category.id, user: user)
|
sub_category = Fabricate(:category, parent_category_id: parent_category.id, user: user)
|
||||||
nested_sub_category = Fabricate.build(:category, parent_category_id: sub_category.id, user: user)
|
nested_sub_category = Fabricate.build(:category, parent_category_id: sub_category.id, user: user)
|
||||||
nested_sub_category.should_not be_valid
|
expect(nested_sub_category).to_not be_valid
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe ".query_parent_category" do
|
describe ".query_parent_category" do
|
||||||
it "should return the parent category id given a parent slug" do
|
it "should return the parent category id given a parent slug" do
|
||||||
parent_category.name = "Amazing Category"
|
parent_category.name = "Amazing Category"
|
||||||
parent_category.id.should == Category.query_parent_category(parent_category.slug)
|
expect(parent_category.id).to eq(Category.query_parent_category(parent_category.slug))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -501,7 +500,7 @@ describe Category do
|
||||||
it "should return the category" do
|
it "should return the category" do
|
||||||
category = Fabricate(:category, name: "Amazing Category", parent_category_id: parent_category.id, user: user)
|
category = Fabricate(:category, name: "Amazing Category", parent_category_id: parent_category.id, user: user)
|
||||||
parent_category.name = "Amazing Parent Category"
|
parent_category.name = "Amazing Parent Category"
|
||||||
category.should == Category.query_category(category.slug, parent_category.id)
|
expect(category).to eq(Category.query_category(category.slug, parent_category.id))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -512,10 +511,10 @@ describe Category do
|
||||||
c1 = Fabricate(:category, email_in: 'lower@example.com')
|
c1 = Fabricate(:category, email_in: 'lower@example.com')
|
||||||
c2 = Fabricate(:category, email_in: 'UPPER@EXAMPLE.COM')
|
c2 = Fabricate(:category, email_in: 'UPPER@EXAMPLE.COM')
|
||||||
c3 = Fabricate(:category, email_in: 'Mixed.Case@Example.COM')
|
c3 = Fabricate(:category, email_in: 'Mixed.Case@Example.COM')
|
||||||
Category.find_by_email('LOWER@EXAMPLE.COM').should == c1
|
expect(Category.find_by_email('LOWER@EXAMPLE.COM')).to eq(c1)
|
||||||
Category.find_by_email('upper@example.com').should == c2
|
expect(Category.find_by_email('upper@example.com')).to eq(c2)
|
||||||
Category.find_by_email('mixed.case@example.com').should == c3
|
expect(Category.find_by_email('mixed.case@example.com')).to eq(c3)
|
||||||
Category.find_by_email('MIXED.CASE@EXAMPLE.COM').should == c3
|
expect(Category.find_by_email('MIXED.CASE@EXAMPLE.COM')).to eq(c3)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -13,13 +13,13 @@ describe CategoryUser do
|
||||||
watching = CategoryUser.where(user_id: user.id, notification_level: CategoryUser.notification_levels[:watching])
|
watching = CategoryUser.where(user_id: user.id, notification_level: CategoryUser.notification_levels[:watching])
|
||||||
|
|
||||||
CategoryUser.batch_set(user, :watching, [category1.id, category2.id])
|
CategoryUser.batch_set(user, :watching, [category1.id, category2.id])
|
||||||
watching.pluck(:category_id).sort.should == [category1.id, category2.id]
|
expect(watching.pluck(:category_id).sort).to eq [category1.id, category2.id]
|
||||||
|
|
||||||
CategoryUser.batch_set(user, :watching, [])
|
CategoryUser.batch_set(user, :watching, [])
|
||||||
watching.count.should == 0
|
expect(watching.count).to eq 0
|
||||||
|
|
||||||
CategoryUser.batch_set(user, :watching, [category2.id])
|
CategoryUser.batch_set(user, :watching, [category2.id])
|
||||||
watching.count.should == 1
|
expect(watching.count).to eq 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,14 +43,15 @@ describe CategoryUser do
|
||||||
muted_post = create_post(category: muted_category)
|
muted_post = create_post(category: muted_category)
|
||||||
tracked_post = create_post(category: tracked_category)
|
tracked_post = create_post(category: tracked_category)
|
||||||
|
|
||||||
Notification.where(user_id: user.id, topic_id: watched_post.topic_id).count.should == 1
|
expect(Notification.where(user_id: user.id, topic_id: watched_post.topic_id).count).to eq 1
|
||||||
Notification.where(user_id: user.id, topic_id: tracked_post.topic_id).count.should == 0
|
expect(Notification.where(user_id: user.id, topic_id: tracked_post.topic_id).count).to eq 0
|
||||||
|
|
||||||
tu = TopicUser.get(tracked_post.topic, user)
|
tu = TopicUser.get(tracked_post.topic, user)
|
||||||
tu.notification_level.should == TopicUser.notification_levels[:tracking]
|
expect(tu.notification_level).to eq TopicUser.notification_levels[:tracking]
|
||||||
tu.notifications_reason_id.should == TopicUser.notification_reasons[:auto_track_category]
|
expect(tu.notifications_reason_id).to eq TopicUser.notification_reasons[:auto_track_category]
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -3,13 +3,13 @@ require 'spec_helper'
|
||||||
describe ColorSchemeColor do
|
describe ColorSchemeColor do
|
||||||
def test_invalid_hex(hex)
|
def test_invalid_hex(hex)
|
||||||
c = described_class.new(hex: hex)
|
c = described_class.new(hex: hex)
|
||||||
c.should_not be_valid
|
expect(c).not_to be_valid
|
||||||
c.errors[:hex].should be_present
|
expect(c.errors[:hex]).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
it "validates hex value" do
|
it "validates hex value" do
|
||||||
['fff', 'ffffff', '333333', '333', '0BeeF0'].each do |hex|
|
['fff', 'ffffff', '333333', '333', '0BeeF0'].each do |hex|
|
||||||
described_class.new(hex: hex).should be_valid
|
expect(described_class.new(hex: hex)).to be_valid
|
||||||
end
|
end
|
||||||
['fffff', 'ffff', 'ff', 'f', '00000', '00', 'cheese', '#666666', '#666', '555 666'].each do |hex|
|
['fffff', 'ffff', 'ff', 'f', '00000', '00', 'cheese', '#666666', '#666', '555 666'].each do |hex|
|
||||||
test_invalid_hex(hex)
|
test_invalid_hex(hex)
|
||||||
|
|
|
@ -11,10 +11,10 @@ describe ColorScheme do
|
||||||
describe "new" do
|
describe "new" do
|
||||||
it "can take colors" do
|
it "can take colors" do
|
||||||
c = described_class.new(valid_params)
|
c = described_class.new(valid_params)
|
||||||
c.colors.size.should == valid_colors.size
|
expect(c.colors.size).to eq valid_colors.size
|
||||||
c.colors.first.should be_a(ColorSchemeColor)
|
expect(c.colors.first).to be_a(ColorSchemeColor)
|
||||||
expect {
|
expect {
|
||||||
c.save.should == true
|
expect(c.save).to eq true
|
||||||
}.to change { ColorSchemeColor.count }.by(valid_colors.size)
|
}.to change { ColorSchemeColor.count }.by(valid_colors.size)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -32,22 +32,22 @@ describe ColorScheme do
|
||||||
|
|
||||||
it "creates a new color scheme" do
|
it "creates a new color scheme" do
|
||||||
c = described_class.create_from_base(name: 'Yellow', colors: {first_one: 'FFFF00', third_one: 'F00D33'})
|
c = described_class.create_from_base(name: 'Yellow', colors: {first_one: 'FFFF00', third_one: 'F00D33'})
|
||||||
c.colors.size.should == base_colors.size
|
expect(c.colors.size).to eq base_colors.size
|
||||||
first = c.colors.find {|x| x.name == 'first_one'}
|
first = c.colors.find {|x| x.name == 'first_one'}
|
||||||
second = c.colors.find {|x| x.name == 'second_one'}
|
second = c.colors.find {|x| x.name == 'second_one'}
|
||||||
third = c.colors.find {|x| x.name == 'third_one'}
|
third = c.colors.find {|x| x.name == 'third_one'}
|
||||||
first.hex.should == 'FFFF00'
|
expect(first.hex).to eq 'FFFF00'
|
||||||
second.hex.should == base_colors[:second_one]
|
expect(second.hex).to eq base_colors[:second_one]
|
||||||
third.hex.should == 'F00D33'
|
expect(third.hex).to eq 'F00D33'
|
||||||
end
|
end
|
||||||
|
|
||||||
context "hex_for_name without anything enabled" do
|
context "hex_for_name without anything enabled" do
|
||||||
it "returns nil for a missing attribute" do
|
it "returns nil for a missing attribute" do
|
||||||
described_class.hex_for_name('undefined').should == nil
|
expect(described_class.hex_for_name('undefined')).to eq nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns the base color for an attribute" do
|
it "returns the base color for an attribute" do
|
||||||
described_class.hex_for_name('second_one').should == base_colors[:second_one]
|
expect(described_class.hex_for_name('second_one')).to eq base_colors[:second_one]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -65,14 +65,14 @@ describe ColorScheme do
|
||||||
|
|
||||||
describe "#enabled" do
|
describe "#enabled" do
|
||||||
it "returns nil when there is no enabled record" do
|
it "returns nil when there is no enabled record" do
|
||||||
described_class.enabled.should == nil
|
expect(described_class.enabled).to eq nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns the enabled color scheme" do
|
it "returns the enabled color scheme" do
|
||||||
described_class.hex_for_name('$primary_background_color').should == nil
|
expect(described_class.hex_for_name('$primary_background_color')).to eq nil
|
||||||
c = described_class.create(valid_params.merge(enabled: true))
|
c = described_class.create(valid_params.merge(enabled: true))
|
||||||
described_class.enabled.id.should == c.id
|
expect(described_class.enabled.id).to eq c.id
|
||||||
described_class.hex_for_name('$primary_background_color').should == "FFBB00"
|
expect(described_class.hex_for_name('$primary_background_color')).to eq "FFBB00"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,16 +3,16 @@ require 'spec_helper'
|
||||||
describe DigestEmailSiteSetting do
|
describe DigestEmailSiteSetting do
|
||||||
describe 'valid_value?' do
|
describe 'valid_value?' do
|
||||||
it 'returns true for a valid value as an int' do
|
it 'returns true for a valid value as an int' do
|
||||||
DigestEmailSiteSetting.valid_value?(1).should == true
|
expect(DigestEmailSiteSetting.valid_value?(1)).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns true for a valid value as a string' do
|
it 'returns true for a valid value as a string' do
|
||||||
DigestEmailSiteSetting.valid_value?('1').should == true
|
expect(DigestEmailSiteSetting.valid_value?('1')).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns false for an invalid value' do
|
it 'returns false for an invalid value' do
|
||||||
DigestEmailSiteSetting.valid_value?(1.5).should == false
|
expect(DigestEmailSiteSetting.valid_value?(1.5)).to eq false
|
||||||
DigestEmailSiteSetting.valid_value?('7 dogs').should == false
|
expect(DigestEmailSiteSetting.valid_value?('7 dogs')).to eq false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -25,13 +25,13 @@ describe DiscourseSingleSignOn do
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_parsed(parsed, sso)
|
def test_parsed(parsed, sso)
|
||||||
parsed.nonce.should == sso.nonce
|
expect(parsed.nonce).to eq sso.nonce
|
||||||
parsed.email.should == sso.email
|
expect(parsed.email).to eq sso.email
|
||||||
parsed.username.should == sso.username
|
expect(parsed.username).to eq sso.username
|
||||||
parsed.name.should == sso.name
|
expect(parsed.name).to eq sso.name
|
||||||
parsed.external_id.should == sso.external_id
|
expect(parsed.external_id).to eq sso.external_id
|
||||||
parsed.custom_fields["a"].should == "Aa"
|
expect(parsed.custom_fields["a"]).to eq "Aa"
|
||||||
parsed.custom_fields["b.b"].should == "B.b"
|
expect(parsed.custom_fields["b.b"]).to eq "B.b"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can do round trip parsing correctly" do
|
it "can do round trip parsing correctly" do
|
||||||
|
@ -43,9 +43,9 @@ describe DiscourseSingleSignOn do
|
||||||
|
|
||||||
sso = SingleSignOn.parse(sso.payload, "test")
|
sso = SingleSignOn.parse(sso.payload, "test")
|
||||||
|
|
||||||
sso.name.should == "sam saffron"
|
expect(sso.name).to eq "sam saffron"
|
||||||
sso.username.should == "sam"
|
expect(sso.username).to eq "sam"
|
||||||
sso.email.should == "sam@sam.com"
|
expect(sso.email).to eq "sam@sam.com"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can lookup or create user when name is blank" do
|
it "can lookup or create user when name is blank" do
|
||||||
|
@ -57,14 +57,14 @@ describe DiscourseSingleSignOn do
|
||||||
sso.email = "test@test.com"
|
sso.email = "test@test.com"
|
||||||
sso.external_id = "A"
|
sso.external_id = "A"
|
||||||
user = sso.lookup_or_create_user
|
user = sso.lookup_or_create_user
|
||||||
user.should_not == nil
|
expect(user).to_not be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can fill in data on way back" do
|
it "can fill in data on way back" do
|
||||||
sso = make_sso
|
sso = make_sso
|
||||||
|
|
||||||
url, payload = sso.to_url.split("?")
|
url, payload = sso.to_url.split("?")
|
||||||
url.should == sso.sso_url
|
expect(url).to eq sso.sso_url
|
||||||
parsed = SingleSignOn.parse(payload, "supersecret")
|
parsed = SingleSignOn.parse(payload, "supersecret")
|
||||||
|
|
||||||
test_parsed(parsed, sso)
|
test_parsed(parsed, sso)
|
||||||
|
@ -74,10 +74,10 @@ describe DiscourseSingleSignOn do
|
||||||
sso = make_sso
|
sso = make_sso
|
||||||
sso.sso_url = "http://tcdev7.wpengine.com/?action=showlogin"
|
sso.sso_url = "http://tcdev7.wpengine.com/?action=showlogin"
|
||||||
|
|
||||||
sso.to_url.split('?').size.should == 2
|
expect(sso.to_url.split('?').size).to eq 2
|
||||||
|
|
||||||
url, payload = sso.to_url.split("?")
|
url, payload = sso.to_url.split("?")
|
||||||
url.should == "http://tcdev7.wpengine.com/"
|
expect(url).to eq "http://tcdev7.wpengine.com/"
|
||||||
parsed = SingleSignOn.parse(payload, "supersecret")
|
parsed = SingleSignOn.parse(payload, "supersecret")
|
||||||
|
|
||||||
test_parsed(parsed, sso)
|
test_parsed(parsed, sso)
|
||||||
|
@ -87,20 +87,20 @@ describe DiscourseSingleSignOn do
|
||||||
_ , payload = DiscourseSingleSignOn.generate_url.split("?")
|
_ , payload = DiscourseSingleSignOn.generate_url.split("?")
|
||||||
|
|
||||||
sso = DiscourseSingleSignOn.parse(payload)
|
sso = DiscourseSingleSignOn.parse(payload)
|
||||||
sso.nonce_valid?.should == true
|
expect(sso.nonce_valid?).to eq true
|
||||||
|
|
||||||
sso.expire_nonce!
|
sso.expire_nonce!
|
||||||
|
|
||||||
sso.nonce_valid?.should == false
|
expect(sso.nonce_valid?).to eq false
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "generates a correct sso url" do
|
it "generates a correct sso url" do
|
||||||
|
|
||||||
url, payload = DiscourseSingleSignOn.generate_url.split("?")
|
url, payload = DiscourseSingleSignOn.generate_url.split("?")
|
||||||
url.should == @sso_url
|
expect(url).to eq @sso_url
|
||||||
|
|
||||||
sso = DiscourseSingleSignOn.parse(payload)
|
sso = DiscourseSingleSignOn.parse(payload)
|
||||||
sso.nonce.should_not == nil
|
expect(sso.nonce).to_not be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,12 +3,12 @@ require 'spec_helper'
|
||||||
describe DraftSequence do
|
describe DraftSequence do
|
||||||
it 'should produce next sequence for a key' do
|
it 'should produce next sequence for a key' do
|
||||||
u = Fabricate(:user)
|
u = Fabricate(:user)
|
||||||
DraftSequence.next!(u, 'test').should == 1
|
expect(DraftSequence.next!(u, 'test')).to eq 1
|
||||||
DraftSequence.next!(u, 'test').should == 2
|
expect(DraftSequence.next!(u, 'test')).to eq 2
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return 0 by default' do
|
it 'should return 0 by default' do
|
||||||
u = Fabricate(:user)
|
u = Fabricate(:user)
|
||||||
DraftSequence.current(u, 'test').should == 0
|
expect(DraftSequence.current(u, 'test')).to eq 0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,32 +6,32 @@ describe Draft do
|
||||||
end
|
end
|
||||||
it "can get a draft by user" do
|
it "can get a draft by user" do
|
||||||
Draft.set(@user, "test", 0, "data")
|
Draft.set(@user, "test", 0, "data")
|
||||||
Draft.get(@user, "test", 0).should == "data"
|
expect(Draft.get(@user, "test", 0)).to eq "data"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "uses the user id and key correctly" do
|
it "uses the user id and key correctly" do
|
||||||
Draft.set(@user, "test", 0,"data")
|
Draft.set(@user, "test", 0,"data")
|
||||||
Draft.get(Fabricate.build(:coding_horror), "test", 0).should == nil
|
expect(Draft.get(Fabricate.build(:coding_horror), "test", 0)).to eq nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should overwrite draft data correctly" do
|
it "should overwrite draft data correctly" do
|
||||||
Draft.set(@user, "test", 0, "data")
|
Draft.set(@user, "test", 0, "data")
|
||||||
Draft.set(@user, "test", 0, "new data")
|
Draft.set(@user, "test", 0, "new data")
|
||||||
Draft.get(@user, "test", 0).should == "new data"
|
expect(Draft.get(@user, "test", 0)).to eq "new data"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should clear drafts on request" do
|
it "should clear drafts on request" do
|
||||||
Draft.set(@user, "test", 0, "data")
|
Draft.set(@user, "test", 0, "data")
|
||||||
Draft.clear(@user, "test", 0)
|
Draft.clear(@user, "test", 0)
|
||||||
Draft.get(@user, "test", 0).should == nil
|
expect(Draft.get(@user, "test", 0)).to eq nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should disregard old draft if sequence decreases" do
|
it "should disregard old draft if sequence decreases" do
|
||||||
Draft.set(@user, "test", 0, "data")
|
Draft.set(@user, "test", 0, "data")
|
||||||
Draft.set(@user, "test", 1, "hello")
|
Draft.set(@user, "test", 1, "hello")
|
||||||
Draft.set(@user, "test", 0, "foo")
|
Draft.set(@user, "test", 0, "foo")
|
||||||
Draft.get(@user, "test", 0).should == nil
|
expect(Draft.get(@user, "test", 0)).to eq nil
|
||||||
Draft.get(@user, "test", 1).should == "hello"
|
expect(Draft.get(@user, "test", 1)).to eq "hello"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ describe Draft do
|
||||||
Draft.set(u, Draft::NEW_TOPIC, 0, 'my draft')
|
Draft.set(u, Draft::NEW_TOPIC, 0, 'my draft')
|
||||||
_t = Fabricate(:topic, user: u)
|
_t = Fabricate(:topic, user: u)
|
||||||
s = DraftSequence.current(u, Draft::NEW_TOPIC)
|
s = DraftSequence.current(u, Draft::NEW_TOPIC)
|
||||||
Draft.get(u, Draft::NEW_TOPIC, s).should == nil
|
expect(Draft.get(u, Draft::NEW_TOPIC, s)).to eq nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'nukes new pm draft after a pm is created' do
|
it 'nukes new pm draft after a pm is created' do
|
||||||
|
@ -49,7 +49,7 @@ describe Draft do
|
||||||
Draft.set(u, Draft::NEW_PRIVATE_MESSAGE, 0, 'my draft')
|
Draft.set(u, Draft::NEW_PRIVATE_MESSAGE, 0, 'my draft')
|
||||||
t = Fabricate(:topic, user: u, archetype: Archetype.private_message, category_id: nil)
|
t = Fabricate(:topic, user: u, archetype: Archetype.private_message, category_id: nil)
|
||||||
s = DraftSequence.current(t.user, Draft::NEW_PRIVATE_MESSAGE)
|
s = DraftSequence.current(t.user, Draft::NEW_PRIVATE_MESSAGE)
|
||||||
Draft.get(u, Draft::NEW_PRIVATE_MESSAGE, s).should == nil
|
expect(Draft.get(u, Draft::NEW_PRIVATE_MESSAGE, s)).to eq nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not nuke new topic draft after a pm is created' do
|
it 'does not nuke new topic draft after a pm is created' do
|
||||||
|
@ -57,7 +57,7 @@ describe Draft do
|
||||||
Draft.set(u, Draft::NEW_TOPIC, 0, 'my draft')
|
Draft.set(u, Draft::NEW_TOPIC, 0, 'my draft')
|
||||||
t = Fabricate(:topic, user: u, archetype: Archetype.private_message, category_id: nil)
|
t = Fabricate(:topic, user: u, archetype: Archetype.private_message, category_id: nil)
|
||||||
s = DraftSequence.current(t.user, Draft::NEW_TOPIC)
|
s = DraftSequence.current(t.user, Draft::NEW_TOPIC)
|
||||||
Draft.get(u, Draft::NEW_TOPIC, s).should == 'my draft'
|
expect(Draft.get(u, Draft::NEW_TOPIC, s)).to eq 'my draft'
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'nukes the post draft when a post is created' do
|
it 'nukes the post draft when a post is created' do
|
||||||
|
@ -67,7 +67,7 @@ describe Draft do
|
||||||
Draft.set(p.user, p.topic.draft_key, 0,'hello')
|
Draft.set(p.user, p.topic.draft_key, 0,'hello')
|
||||||
|
|
||||||
PostCreator.new(user, raw: Fabricate.build(:post).raw).create
|
PostCreator.new(user, raw: Fabricate.build(:post).raw).create
|
||||||
Draft.get(p.user, p.topic.draft_key, DraftSequence.current(p.user, p.topic.draft_key)).should == nil
|
expect(Draft.get(p.user, p.topic.draft_key, DraftSequence.current(p.user, p.topic.draft_key))).to eq nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'nukes the post draft when a post is revised' do
|
it 'nukes the post draft when a post is revised' do
|
||||||
|
@ -75,10 +75,9 @@ describe Draft do
|
||||||
Draft.set(p.user, p.topic.draft_key, 0,'hello')
|
Draft.set(p.user, p.topic.draft_key, 0,'hello')
|
||||||
p.revise(p.user, { raw: 'another test' })
|
p.revise(p.user, { raw: 'another test' })
|
||||||
s = DraftSequence.current(p.user, p.topic.draft_key)
|
s = DraftSequence.current(p.user, p.topic.draft_key)
|
||||||
Draft.get(p.user, p.topic.draft_key, s).should == nil
|
expect(Draft.get(p.user, p.topic.draft_key, s)).to eq nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'increases the sequence number when a post is revised' do
|
it 'increases the sequence number when a post is revised'
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,19 +2,19 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe EmailLog do
|
describe EmailLog do
|
||||||
|
|
||||||
it { should belong_to :user }
|
it { is_expected.to belong_to :user }
|
||||||
it { should validate_presence_of :to_address }
|
it { is_expected.to validate_presence_of :to_address }
|
||||||
it { should validate_presence_of :email_type }
|
it { is_expected.to validate_presence_of :email_type }
|
||||||
|
|
||||||
let(:user) { Fabricate(:user) }
|
let(:user) { Fabricate(:user) }
|
||||||
|
|
||||||
context 'after_create' do
|
context 'after_create' do
|
||||||
context 'with user' do
|
context 'with user' do
|
||||||
it 'updates the last_emailed_at value for the user' do
|
it 'updates the last_emailed_at value for the user' do
|
||||||
lambda {
|
expect {
|
||||||
user.email_logs.create(email_type: 'blah', to_address: user.email)
|
user.email_logs.create(email_type: 'blah', to_address: user.email)
|
||||||
user.reload
|
user.reload
|
||||||
}.should change(user, :last_emailed_at)
|
}.to change(user, :last_emailed_at)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't update last_emailed_at if skipped is true" do
|
it "doesn't update last_emailed_at if skipped is true" do
|
||||||
|
@ -30,7 +30,7 @@ describe EmailLog do
|
||||||
it "counts sent emails" do
|
it "counts sent emails" do
|
||||||
user.email_logs.create(email_type: 'blah', to_address: user.email)
|
user.email_logs.create(email_type: 'blah', to_address: user.email)
|
||||||
user.email_logs.create(email_type: 'blah', to_address: user.email, skipped: true)
|
user.email_logs.create(email_type: 'blah', to_address: user.email, skipped: true)
|
||||||
described_class.count_per_day(1.day.ago, Time.now).first[1].should == 1
|
expect(described_class.count_per_day(1.day.ago, Time.now).first[1]).to eq 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,9 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe EmailToken do
|
describe EmailToken do
|
||||||
|
|
||||||
it { should validate_presence_of :user_id }
|
it { is_expected.to validate_presence_of :user_id }
|
||||||
it { should validate_presence_of :email }
|
it { is_expected.to validate_presence_of :email }
|
||||||
it { should belong_to :user }
|
it { is_expected.to belong_to :user }
|
||||||
|
|
||||||
|
|
||||||
context '#create' do
|
context '#create' do
|
||||||
|
@ -13,64 +13,62 @@ describe EmailToken do
|
||||||
let!(:email_token) { user.email_tokens.create(email: 'bubblegum@adevnturetime.ooo') }
|
let!(:email_token) { user.email_tokens.create(email: 'bubblegum@adevnturetime.ooo') }
|
||||||
|
|
||||||
it 'should create the email token' do
|
it 'should create the email token' do
|
||||||
email_token.should be_present
|
expect(email_token).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should downcase the email' do
|
it 'should downcase the email' do
|
||||||
token = user.email_tokens.create(email: "UpperCaseSoWoW@GMail.com")
|
token = user.email_tokens.create(email: "UpperCaseSoWoW@GMail.com")
|
||||||
token.email.should == "uppercasesowow@gmail.com"
|
expect(token.email).to eq "uppercasesowow@gmail.com"
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is valid' do
|
it 'is valid' do
|
||||||
email_token.should be_valid
|
expect(email_token).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'has a token' do
|
it 'has a token' do
|
||||||
email_token.token.should be_present
|
expect(email_token.token).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is not confirmed' do
|
it 'is not confirmed' do
|
||||||
email_token.should_not be_confirmed
|
expect(email_token).to_not be_confirmed
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is not expired' do
|
it 'is not expired' do
|
||||||
email_token.should_not be_expired
|
expect(email_token).to_not be_expired
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'marks the older token as expired' do
|
it 'marks the older token as expired' do
|
||||||
original_token.reload
|
original_token.reload
|
||||||
original_token.should be_expired
|
expect(original_token).to be_expired
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
context '#confirm' do
|
context '#confirm' do
|
||||||
|
|
||||||
let(:user) { Fabricate(:user, active: false) }
|
let(:user) { Fabricate(:user, active: false) }
|
||||||
let(:email_token) { user.email_tokens.first }
|
let(:email_token) { user.email_tokens.first }
|
||||||
|
|
||||||
it 'returns nil with a nil token' do
|
it 'returns nil with a nil token' do
|
||||||
EmailToken.confirm(nil).should be_blank
|
expect(EmailToken.confirm(nil)).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns nil with a made up token' do
|
it 'returns nil with a made up token' do
|
||||||
EmailToken.confirm(EmailToken.generate_token).should be_blank
|
expect(EmailToken.confirm(EmailToken.generate_token)).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns nil unless the token is the right length' do
|
it 'returns nil unless the token is the right length' do
|
||||||
EmailToken.confirm('a').should be_blank
|
expect(EmailToken.confirm('a')).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns nil when a token is expired' do
|
it 'returns nil when a token is expired' do
|
||||||
email_token.update_column(:expired, true)
|
email_token.update_column(:expired, true)
|
||||||
EmailToken.confirm(email_token.token).should be_blank
|
expect(EmailToken.confirm(email_token.token)).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns nil when a token is older than a specific time' do
|
it 'returns nil when a token is older than a specific time' do
|
||||||
SiteSetting.email_token_valid_hours = 10
|
SiteSetting.email_token_valid_hours = 10
|
||||||
email_token.update_column(:created_at, 11.hours.ago)
|
email_token.update_column(:created_at, 11.hours.ago)
|
||||||
EmailToken.confirm(email_token.token).should be_blank
|
expect(EmailToken.confirm(email_token.token)).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'taken email address' do
|
context 'taken email address' do
|
||||||
|
@ -81,7 +79,7 @@ describe EmailToken do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns nil when the email has been taken since the token has been generated' do
|
it 'returns nil when the email has been taken since the token has been generated' do
|
||||||
EmailToken.confirm(email_token.token).should be_blank
|
expect(EmailToken.confirm(email_token.token)).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -89,7 +87,7 @@ describe EmailToken do
|
||||||
context 'welcome message' do
|
context 'welcome message' do
|
||||||
it 'sends a welcome message when the user is activated' do
|
it 'sends a welcome message when the user is activated' do
|
||||||
user = EmailToken.confirm(email_token.token)
|
user = EmailToken.confirm(email_token.token)
|
||||||
user.send_welcome_message.should == true
|
expect(user.send_welcome_message).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when using the code a second time" do
|
context "when using the code a second time" do
|
||||||
|
@ -98,7 +96,7 @@ describe EmailToken do
|
||||||
SiteSetting.email_token_grace_period_hours = 1
|
SiteSetting.email_token_grace_period_hours = 1
|
||||||
EmailToken.confirm(email_token.token)
|
EmailToken.confirm(email_token.token)
|
||||||
user = EmailToken.confirm(email_token.token)
|
user = EmailToken.confirm(email_token.token)
|
||||||
user.send_welcome_message.should == false
|
expect(user.send_welcome_message).to eq false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -109,34 +107,30 @@ describe EmailToken do
|
||||||
let!(:confirmed_user) { EmailToken.confirm(email_token.token) }
|
let!(:confirmed_user) { EmailToken.confirm(email_token.token) }
|
||||||
|
|
||||||
it "returns the correct user" do
|
it "returns the correct user" do
|
||||||
confirmed_user.should == user
|
expect(confirmed_user).to eq user
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'marks the user as active' do
|
it 'marks the user as active' do
|
||||||
confirmed_user.reload
|
confirmed_user.reload
|
||||||
confirmed_user.should be_active
|
expect(confirmed_user).to be_active
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'marks the token as confirmed' do
|
it 'marks the token as confirmed' do
|
||||||
email_token.reload
|
email_token.reload
|
||||||
email_token.should be_confirmed
|
expect(email_token).to be_confirmed
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can be confirmed again" do
|
it "can be confirmed again" do
|
||||||
EmailToken.stubs(:confirm_valid_after).returns(1.hour.ago)
|
EmailToken.stubs(:confirm_valid_after).returns(1.hour.ago)
|
||||||
|
|
||||||
EmailToken.confirm(email_token.token).should == user
|
expect(EmailToken.confirm(email_token.token)).to eq user
|
||||||
|
|
||||||
# Unless `confirm_valid_after` has passed
|
# Unless `confirm_valid_after` has passed
|
||||||
EmailToken.stubs(:confirm_valid_after).returns(1.hour.from_now)
|
EmailToken.stubs(:confirm_valid_after).returns(1.hour.from_now)
|
||||||
EmailToken.confirm(email_token.token).should be_blank
|
expect(EmailToken.confirm(email_token.token)).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ describe ErrorLog do
|
||||||
it "creates a non empty file on first call" do
|
it "creates a non empty file on first call" do
|
||||||
ErrorLog.clear_all!
|
ErrorLog.clear_all!
|
||||||
ErrorLog.add_row!(hello: "world")
|
ErrorLog.add_row!(hello: "world")
|
||||||
File.exists?(ErrorLog.filename).should == true
|
expect(File.exists?(ErrorLog.filename)).to eq true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ describe ErrorLog do
|
||||||
ErrorLog.each do |h|
|
ErrorLog.each do |h|
|
||||||
i += 1
|
i += 1
|
||||||
end
|
end
|
||||||
i.should == 2
|
expect(i).to eq 2
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is able to skip rows" do
|
it "is able to skip rows" do
|
||||||
|
@ -51,7 +51,7 @@ describe ErrorLog do
|
||||||
ErrorLog.skip(3) do |h|
|
ErrorLog.skip(3) do |h|
|
||||||
i += 1
|
i += 1
|
||||||
end
|
end
|
||||||
i.should == 1
|
expect(i).to eq 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ require 'tempfile'
|
||||||
describe GlobalSetting::EnvProvider do
|
describe GlobalSetting::EnvProvider do
|
||||||
it "can detect keys from env" do
|
it "can detect keys from env" do
|
||||||
ENV['DISCOURSE_BLA'] = '1'
|
ENV['DISCOURSE_BLA'] = '1'
|
||||||
GlobalSetting::EnvProvider.new.keys.should include(:bla)
|
expect(GlobalSetting::EnvProvider.new.keys).to include(:bla)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
describe GlobalSetting::FileProvider do
|
describe GlobalSetting::FileProvider do
|
||||||
|
@ -20,13 +20,13 @@ describe GlobalSetting::FileProvider do
|
||||||
|
|
||||||
provider = GlobalSetting::FileProvider.from(f.path)
|
provider = GlobalSetting::FileProvider.from(f.path)
|
||||||
|
|
||||||
provider.lookup(:a,"").should == 1000
|
expect(provider.lookup(:a,"")).to eq 1000
|
||||||
provider.lookup(:b,"").should == "10 # = 00"
|
expect(provider.lookup(:b,"")).to eq "10 # = 00"
|
||||||
provider.lookup(:c,"").should == "10 # = 00"
|
expect(provider.lookup(:c,"")).to eq "10 # = 00"
|
||||||
provider.lookup(:d,"bob").should == nil
|
expect(provider.lookup(:d,"bob")).to eq nil
|
||||||
provider.lookup(:e,"bob").should == "bob"
|
expect(provider.lookup(:e,"bob")).to eq "bob"
|
||||||
|
|
||||||
provider.keys.sort.should == [:a, :b, :c, :d]
|
expect(provider.keys.sort).to eq [:a, :b, :c, :d]
|
||||||
|
|
||||||
f.unlink
|
f.unlink
|
||||||
end
|
end
|
||||||
|
@ -38,7 +38,7 @@ describe GlobalSetting::FileProvider do
|
||||||
|
|
||||||
provider = GlobalSetting::FileProvider.from(f.path)
|
provider = GlobalSetting::FileProvider.from(f.path)
|
||||||
|
|
||||||
provider.lookup(:a,"").should == 500
|
expect(provider.lookup(:a,"")).to eq 500
|
||||||
|
|
||||||
f.unlink
|
f.unlink
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,23 +15,23 @@ describe Group do
|
||||||
|
|
||||||
it "is invalid for blank" do
|
it "is invalid for blank" do
|
||||||
group.name = ""
|
group.name = ""
|
||||||
group.valid?.should == false
|
expect(group.valid?).to eq false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is valid for a longer name" do
|
it "is valid for a longer name" do
|
||||||
group.name = "this_is_a_name"
|
group.name = "this_is_a_name"
|
||||||
group.valid?.should == true
|
expect(group.valid?).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is invalid for non names" do
|
it "is invalid for non names" do
|
||||||
group.name = "this is_a_name"
|
group.name = "this is_a_name"
|
||||||
group.valid?.should == false
|
expect(group.valid?).to eq false
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is invalid for case-insensitive existing names" do
|
it "is invalid for case-insensitive existing names" do
|
||||||
build(:group, name: 'this_is_a_name').save
|
build(:group, name: 'this_is_a_name').save
|
||||||
group.name = 'This_Is_A_Name'
|
group.name = 'This_Is_A_Name'
|
||||||
group.valid?.should == false
|
expect(group.valid?).to eq false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -54,52 +54,52 @@ describe Group do
|
||||||
|
|
||||||
Group.refresh_automatic_groups!(:admins, :staff, :moderators)
|
Group.refresh_automatic_groups!(:admins, :staff, :moderators)
|
||||||
|
|
||||||
real_admins.should == [admin.id]
|
expect(real_admins).to eq [admin.id]
|
||||||
real_moderators.should == [moderator.id]
|
expect(real_moderators).to eq [moderator.id]
|
||||||
real_staff.sort.should == [moderator.id,admin.id].sort
|
expect(real_staff.sort).to eq [moderator.id,admin.id].sort
|
||||||
|
|
||||||
admin.admin = false
|
admin.admin = false
|
||||||
admin.save
|
admin.save
|
||||||
|
|
||||||
Group.refresh_automatic_group!(:admins)
|
Group.refresh_automatic_group!(:admins)
|
||||||
real_admins.should == []
|
expect(real_admins).to be_empty
|
||||||
|
|
||||||
moderator.revoke_moderation!
|
moderator.revoke_moderation!
|
||||||
|
|
||||||
admin.grant_admin!
|
admin.grant_admin!
|
||||||
real_admins.should == [admin.id]
|
expect(real_admins).to eq [admin.id]
|
||||||
real_staff.should == [admin.id]
|
expect(real_staff).to eq [admin.id]
|
||||||
|
|
||||||
admin.revoke_admin!
|
admin.revoke_admin!
|
||||||
real_admins.should == []
|
expect(real_admins).to be_empty
|
||||||
real_staff.should == []
|
expect(real_staff).to be_empty
|
||||||
|
|
||||||
admin.grant_moderation!
|
admin.grant_moderation!
|
||||||
real_moderators.should == [admin.id]
|
expect(real_moderators).to eq [admin.id]
|
||||||
real_staff.should == [admin.id]
|
expect(real_staff).to eq [admin.id]
|
||||||
|
|
||||||
admin.revoke_moderation!
|
admin.revoke_moderation!
|
||||||
real_admins.should == []
|
expect(real_admins).to be_empty
|
||||||
real_staff.should == []
|
expect(real_staff).to eq []
|
||||||
end
|
end
|
||||||
|
|
||||||
it "Correctly updates automatic trust level groups" do
|
it "Correctly updates automatic trust level groups" do
|
||||||
user = Fabricate(:user)
|
user = Fabricate(:user)
|
||||||
Group[:trust_level_0].user_ids.should include user.id
|
expect(Group[:trust_level_0].user_ids).to include user.id
|
||||||
|
|
||||||
user.change_trust_level!(TrustLevel[1])
|
user.change_trust_level!(TrustLevel[1])
|
||||||
|
|
||||||
Group[:trust_level_1].user_ids.should include user.id
|
expect(Group[:trust_level_1].user_ids).to include user.id
|
||||||
|
|
||||||
user.change_trust_level!(TrustLevel[2])
|
user.change_trust_level!(TrustLevel[2])
|
||||||
|
|
||||||
Group[:trust_level_1].user_ids.should include user.id
|
expect(Group[:trust_level_1].user_ids).to include user.id
|
||||||
Group[:trust_level_2].user_ids.should include user.id
|
expect(Group[:trust_level_2].user_ids).to include user.id
|
||||||
|
|
||||||
user2 = Fabricate(:coding_horror)
|
user2 = Fabricate(:coding_horror)
|
||||||
user2.change_trust_level!(TrustLevel[3])
|
user2.change_trust_level!(TrustLevel[3])
|
||||||
|
|
||||||
Group[:trust_level_2].user_ids.sort.should == [-1, user.id, user2.id].sort
|
expect(Group[:trust_level_2].user_ids.sort).to eq [-1, user.id, user2.id].sort
|
||||||
end
|
end
|
||||||
|
|
||||||
it "Correctly updates all automatic groups upon request" do
|
it "Correctly updates all automatic groups upon request" do
|
||||||
|
@ -112,26 +112,25 @@ describe Group do
|
||||||
Group.refresh_automatic_groups!
|
Group.refresh_automatic_groups!
|
||||||
|
|
||||||
groups = Group.includes(:users).to_a
|
groups = Group.includes(:users).to_a
|
||||||
groups.count.should == Group::AUTO_GROUPS.count
|
expect(groups.count).to eq Group::AUTO_GROUPS.count
|
||||||
|
|
||||||
g = groups.find{|g| g.id == Group::AUTO_GROUPS[:admins]}
|
g = groups.find{|g| g.id == Group::AUTO_GROUPS[:admins]}
|
||||||
g.users.count.should == 2
|
expect(g.users.count).to eq 2
|
||||||
g.user_count.should == 2
|
expect(g.user_count).to eq 2
|
||||||
|
|
||||||
g = groups.find{|g| g.id == Group::AUTO_GROUPS[:staff]}
|
g = groups.find{|g| g.id == Group::AUTO_GROUPS[:staff]}
|
||||||
g.users.count.should == 2
|
expect(g.users.count).to eq 2
|
||||||
g.user_count.should == 2
|
expect(g.user_count).to eq 2
|
||||||
|
|
||||||
|
|
||||||
g = groups.find{|g| g.id == Group::AUTO_GROUPS[:trust_level_1]}
|
g = groups.find{|g| g.id == Group::AUTO_GROUPS[:trust_level_1]}
|
||||||
# admin, system and user
|
# admin, system and user
|
||||||
g.users.count.should == 3
|
expect(g.users.count).to eq 3
|
||||||
g.user_count.should == 3
|
expect(g.user_count).to eq 3
|
||||||
|
|
||||||
g = groups.find{|g| g.id == Group::AUTO_GROUPS[:trust_level_2]}
|
g = groups.find{|g| g.id == Group::AUTO_GROUPS[:trust_level_2]}
|
||||||
# system and user
|
# system and user
|
||||||
g.users.count.should == 2
|
expect(g.users.count).to eq 2
|
||||||
g.user_count.should == 2
|
expect(g.user_count).to eq 2
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -149,12 +148,12 @@ describe Group do
|
||||||
# no side effects please
|
# no side effects please
|
||||||
g.usernames = usernames
|
g.usernames = usernames
|
||||||
g.reload
|
g.reload
|
||||||
g.users.count.should == 1
|
expect(g.users.count).to eq 1
|
||||||
|
|
||||||
g.usernames = usernames
|
g.usernames = usernames
|
||||||
g.save!
|
g.save!
|
||||||
|
|
||||||
g.usernames.split(",").sort.should == usernames.split(",").sort
|
expect(g.usernames.split(",").sort).to eq usernames.split(",").sort
|
||||||
end
|
end
|
||||||
|
|
||||||
it "correctly destroys groups" do
|
it "correctly destroys groups" do
|
||||||
|
@ -166,31 +165,31 @@ describe Group do
|
||||||
|
|
||||||
g.destroy
|
g.destroy
|
||||||
|
|
||||||
User.where(id: u1.id).count.should == 1
|
expect(User.where(id: u1.id).count).to eq 1
|
||||||
GroupUser.where(group_id: g.id).count.should == 0
|
expect(GroupUser.where(group_id: g.id).count).to eq 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
it "has custom fields" do
|
it "has custom fields" do
|
||||||
group = Fabricate(:group)
|
group = Fabricate(:group)
|
||||||
group.custom_fields["a"].should == nil
|
expect(group.custom_fields["a"]).to be_nil
|
||||||
|
|
||||||
group.custom_fields["hugh"] = "jackman"
|
group.custom_fields["hugh"] = "jackman"
|
||||||
group.custom_fields["jack"] = "black"
|
group.custom_fields["jack"] = "black"
|
||||||
group.save
|
group.save
|
||||||
|
|
||||||
group = Group.find(group.id)
|
group = Group.find(group.id)
|
||||||
group.custom_fields.should == {"hugh" => "jackman", "jack" => "black"}
|
expect(group.custom_fields).to eq({"hugh" => "jackman", "jack" => "black"})
|
||||||
end
|
end
|
||||||
|
|
||||||
it "allows you to lookup a new group by name" do
|
it "allows you to lookup a new group by name" do
|
||||||
group = Fabricate(:group)
|
group = Fabricate(:group)
|
||||||
group.id.should == Group[group.name].id
|
expect(group.id).to eq Group[group.name].id
|
||||||
group.id.should == Group[group.name.to_sym].id
|
expect(group.id).to eq Group[group.name.to_sym].id
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can find desired groups correctly" do
|
it "can find desired groups correctly" do
|
||||||
Group.desired_trust_level_groups(2).sort.should == [10,11,12]
|
expect(Group.desired_trust_level_groups(2).sort).to eq [10,11,12]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -198,11 +197,11 @@ describe Group do
|
||||||
user = Fabricate(:user, trust_level: 2)
|
user = Fabricate(:user, trust_level: 2)
|
||||||
Group.user_trust_level_change!(user.id, 2)
|
Group.user_trust_level_change!(user.id, 2)
|
||||||
|
|
||||||
user.groups.map(&:name).sort.should == ["trust_level_0","trust_level_1", "trust_level_2"]
|
expect(user.groups.map(&:name).sort).to eq ["trust_level_0","trust_level_1", "trust_level_2"]
|
||||||
|
|
||||||
Group.user_trust_level_change!(user.id, 0)
|
Group.user_trust_level_change!(user.id, 0)
|
||||||
user.reload
|
user.reload
|
||||||
user.groups.map(&:name).sort.should == ["trust_level_0"]
|
expect(user.groups.map(&:name).sort).to eq ["trust_level_0"]
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,14 +15,14 @@ describe IncomingLink do
|
||||||
it "increases the incoming link counts" do
|
it "increases the incoming link counts" do
|
||||||
link = incoming_link
|
link = incoming_link
|
||||||
|
|
||||||
link.domain.should == "twitter.com"
|
expect(link.domain).to eq "twitter.com"
|
||||||
link.post_id.should == post.id
|
expect(link.post_id).to eq post.id
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
post.incoming_link_count.should == 1
|
expect(post.incoming_link_count).to eq 1
|
||||||
|
|
||||||
topic.reload
|
topic.reload
|
||||||
topic.incoming_link_count.should == 1
|
expect(topic.incoming_link_count).to eq 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -63,22 +63,22 @@ describe IncomingLink do
|
||||||
|
|
||||||
it "does nothing if referer is empty" do
|
it "does nothing if referer is empty" do
|
||||||
add(post_id: 1)
|
add(post_id: 1)
|
||||||
IncomingLink.count.should == 0
|
expect(IncomingLink.count).to eq 0
|
||||||
end
|
end
|
||||||
|
|
||||||
it "does nothing if referer is same as host" do
|
it "does nothing if referer is same as host" do
|
||||||
add(post_id: 1, host: 'somesite.com', referer: 'http://somesite.com')
|
add(post_id: 1, host: 'somesite.com', referer: 'http://somesite.com')
|
||||||
IncomingLink.count.should == 0
|
expect(IncomingLink.count).to eq 0
|
||||||
end
|
end
|
||||||
|
|
||||||
it "tracks not visits for invalid referers" do
|
it "tracks not visits for invalid referers" do
|
||||||
add(post_id: 1, referer: 'bang bang bang')
|
add(post_id: 1, referer: 'bang bang bang')
|
||||||
IncomingLink.count.should == 0
|
expect(IncomingLink.count).to eq 0
|
||||||
end
|
end
|
||||||
|
|
||||||
it "expects to be called with referer and user id" do
|
it "expects to be called with referer and user id" do
|
||||||
add(host: "test.com", referer: 'http://some.other.site.com', post_id: 1)
|
add(host: "test.com", referer: 'http://some.other.site.com', post_id: 1)
|
||||||
IncomingLink.count.should == 1
|
expect(IncomingLink.count).to eq 1
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is able to look up user_id and log it from the GET params" do
|
it "is able to look up user_id and log it from the GET params" do
|
||||||
|
@ -86,7 +86,7 @@ describe IncomingLink do
|
||||||
add(host: 'test.com', username: "bob", post_id: 1)
|
add(host: 'test.com', username: "bob", post_id: 1)
|
||||||
|
|
||||||
first = IncomingLink.first
|
first = IncomingLink.first
|
||||||
first.user_id.should == user.id
|
expect(first.user_id).to eq user.id
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -39,19 +39,19 @@ describe IncomingLinksReport do
|
||||||
end
|
end
|
||||||
|
|
||||||
r = IncomingLinksReport.find('top_referrers').as_json
|
r = IncomingLinksReport.find('top_referrers').as_json
|
||||||
r[:data].should == [
|
expect(r[:data]).to eq [
|
||||||
{username: p1.user.username, num_clicks: 7 + 2, num_topics: 2},
|
{username: p1.user.username, num_clicks: 7 + 2, num_topics: 2},
|
||||||
{username: p2.user.username, num_clicks: 3, num_topics: 1}
|
{username: p2.user.username, num_clicks: 3, num_topics: 1}
|
||||||
]
|
]
|
||||||
|
|
||||||
r = IncomingLinksReport.find('top_traffic_sources').as_json
|
r = IncomingLinksReport.find('top_traffic_sources').as_json
|
||||||
r[:data].should == [
|
expect(r[:data]).to eq [
|
||||||
{domain: 'test.com', num_clicks: 7, num_topics: 1},
|
{domain: 'test.com', num_clicks: 7, num_topics: 1},
|
||||||
{domain: 'foo.com', num_clicks: 3 + 2, num_topics: 1}
|
{domain: 'foo.com', num_clicks: 3 + 2, num_topics: 1}
|
||||||
]
|
]
|
||||||
|
|
||||||
r = IncomingLinksReport.find('top_referred_topics').as_json
|
r = IncomingLinksReport.find('top_referred_topics').as_json
|
||||||
r[:data].should == [
|
expect(r[:data]).to eq [
|
||||||
{topic_id: p1.topic.id, topic_title: p1.topic.title, topic_slug: p1.topic.slug, num_clicks: 7},
|
{topic_id: p1.topic.id, topic_title: p1.topic.title, topic_slug: p1.topic.slug, num_clicks: 7},
|
||||||
{topic_id: p2.topic.id, topic_title: p2.topic.title, topic_slug: p2.topic.slug, num_clicks: 2 + 3},
|
{topic_id: p2.topic.id, topic_title: p2.topic.title, topic_slug: p2.topic.slug, num_clicks: 2 + 3},
|
||||||
]
|
]
|
||||||
|
@ -75,16 +75,16 @@ describe IncomingLinksReport do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns localized titles' do
|
it 'returns localized titles' do
|
||||||
top_referrers[:title].should be_present
|
expect(top_referrers[:title]).to be_present
|
||||||
top_referrers[:xaxis].should be_present
|
expect(top_referrers[:xaxis]).to be_present
|
||||||
top_referrers[:ytitles].should be_present
|
expect(top_referrers[:ytitles]).to be_present
|
||||||
top_referrers[:ytitles][:num_clicks].should be_present
|
expect(top_referrers[:ytitles][:num_clicks]).to be_present
|
||||||
top_referrers[:ytitles][:num_topics].should be_present
|
expect(top_referrers[:ytitles][:num_topics]).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'with no IncomingLink records, it returns correct data' do
|
it 'with no IncomingLink records, it returns correct data' do
|
||||||
IncomingLink.delete_all
|
IncomingLink.delete_all
|
||||||
top_referrers[:data].size.should == 0
|
expect(top_referrers[:data].size).to eq 0
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'with some IncomingLink records, it returns correct data' do
|
it 'with some IncomingLink records, it returns correct data' do
|
||||||
|
@ -98,8 +98,8 @@ describe IncomingLinksReport do
|
||||||
Fabricate(:incoming_link, user: bob, post: post1).save
|
Fabricate(:incoming_link, user: bob, post: post1).save
|
||||||
end
|
end
|
||||||
|
|
||||||
top_referrers[:data][0].should == {username: 'amy', num_clicks: 3, num_topics: 2}
|
expect(top_referrers[:data][0]).to eq({username: 'amy', num_clicks: 3, num_topics: 2})
|
||||||
top_referrers[:data][1].should == {username: 'bob', num_clicks: 2, num_topics: 1}
|
expect(top_referrers[:data][1]).to eq({username: 'bob', num_clicks: 2, num_topics: 1})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -115,24 +115,24 @@ describe IncomingLinksReport do
|
||||||
|
|
||||||
it 'returns localized titles' do
|
it 'returns localized titles' do
|
||||||
stub_empty_traffic_source_data
|
stub_empty_traffic_source_data
|
||||||
top_traffic_sources[:title].should be_present
|
expect(top_traffic_sources[:title]).to be_present
|
||||||
top_traffic_sources[:xaxis].should be_present
|
expect(top_traffic_sources[:xaxis]).to be_present
|
||||||
top_traffic_sources[:ytitles].should be_present
|
expect(top_traffic_sources[:ytitles]).to be_present
|
||||||
top_traffic_sources[:ytitles][:num_clicks].should be_present
|
expect(top_traffic_sources[:ytitles][:num_clicks]).to be_present
|
||||||
top_traffic_sources[:ytitles][:num_topics].should be_present
|
expect(top_traffic_sources[:ytitles][:num_topics]).to be_present
|
||||||
top_traffic_sources[:ytitles][:num_users].should be_present
|
expect(top_traffic_sources[:ytitles][:num_users]).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'with no IncomingLink records, it returns correct data' do
|
it 'with no IncomingLink records, it returns correct data' do
|
||||||
stub_empty_traffic_source_data
|
stub_empty_traffic_source_data
|
||||||
top_traffic_sources[:data].size.should == 0
|
expect(top_traffic_sources[:data].size).to eq 0
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'with some IncomingLink records, it returns correct data' do
|
it 'with some IncomingLink records, it returns correct data' do
|
||||||
IncomingLinksReport.stubs(:link_count_per_domain).returns({'twitter.com' => 8, 'facebook.com' => 3})
|
IncomingLinksReport.stubs(:link_count_per_domain).returns({'twitter.com' => 8, 'facebook.com' => 3})
|
||||||
IncomingLinksReport.stubs(:topic_count_per_domain).returns({'twitter.com' => 2, 'facebook.com' => 3})
|
IncomingLinksReport.stubs(:topic_count_per_domain).returns({'twitter.com' => 2, 'facebook.com' => 3})
|
||||||
top_traffic_sources[:data][0].should == {domain: 'twitter.com', num_clicks: 8, num_topics: 2}
|
expect(top_traffic_sources[:data][0]).to eq({domain: 'twitter.com', num_clicks: 8, num_topics: 2})
|
||||||
top_traffic_sources[:data][1].should == {domain: 'facebook.com', num_clicks: 3, num_topics: 3}
|
expect(top_traffic_sources[:data][1]).to eq({domain: 'facebook.com', num_clicks: 3, num_topics: 3})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -146,15 +146,15 @@ describe IncomingLinksReport do
|
||||||
|
|
||||||
it 'returns localized titles' do
|
it 'returns localized titles' do
|
||||||
stub_empty_referred_topics_data
|
stub_empty_referred_topics_data
|
||||||
top_referred_topics[:title].should be_present
|
expect(top_referred_topics[:title]).to be_present
|
||||||
top_referred_topics[:xaxis].should be_present
|
expect(top_referred_topics[:xaxis]).to be_present
|
||||||
top_referred_topics[:ytitles].should be_present
|
expect(top_referred_topics[:ytitles]).to be_present
|
||||||
top_referred_topics[:ytitles][:num_clicks].should be_present
|
expect(top_referred_topics[:ytitles][:num_clicks]).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'with no IncomingLink records, it returns correct data' do
|
it 'with no IncomingLink records, it returns correct data' do
|
||||||
stub_empty_referred_topics_data
|
stub_empty_referred_topics_data
|
||||||
top_referred_topics[:data].size.should == 0
|
expect(top_referred_topics[:data].size).to eq 0
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'with some IncomingLink records, it returns correct data' do
|
it 'with some IncomingLink records, it returns correct data' do
|
||||||
|
@ -163,8 +163,8 @@ describe IncomingLinksReport do
|
||||||
IncomingLinksReport.stubs(:link_count_per_topic).returns({topic1.id => 8, topic2.id => 3})
|
IncomingLinksReport.stubs(:link_count_per_topic).returns({topic1.id => 8, topic2.id => 3})
|
||||||
Topic.stubs(:select).returns(Topic); Topic.stubs(:where).returns(Topic) # bypass some activerecord methods
|
Topic.stubs(:select).returns(Topic); Topic.stubs(:where).returns(Topic) # bypass some activerecord methods
|
||||||
Topic.stubs(:all).returns([topic1, topic2])
|
Topic.stubs(:all).returns([topic1, topic2])
|
||||||
top_referred_topics[:data][0].should == {topic_id: topic1.id, topic_title: topic1.title, topic_slug: topic1.slug, num_clicks: 8 }
|
expect(top_referred_topics[:data][0]).to eq({topic_id: topic1.id, topic_title: topic1.title, topic_slug: topic1.slug, num_clicks: 8 })
|
||||||
top_referred_topics[:data][1].should == {topic_id: topic2.id, topic_title: topic2.title, topic_slug: topic2.slug, num_clicks: 3 }
|
expect(top_referred_topics[:data][1]).to eq({topic_id: topic2.id, topic_title: topic2.title, topic_slug: topic2.slug, num_clicks: 3 })
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,10 +5,10 @@ describe InviteRedeemer do
|
||||||
describe '#create_for_email' do
|
describe '#create_for_email' do
|
||||||
let(:user) { InviteRedeemer.create_user_from_invite(Fabricate(:invite, email: 'walter.white@email.com'), 'walter', 'Walter White') }
|
let(:user) { InviteRedeemer.create_user_from_invite(Fabricate(:invite, email: 'walter.white@email.com'), 'walter', 'Walter White') }
|
||||||
it "should be created correctly" do
|
it "should be created correctly" do
|
||||||
user.username.should == 'walter'
|
expect(user.username).to eq('walter')
|
||||||
user.name.should == 'Walter White'
|
expect(user.name).to eq('Walter White')
|
||||||
user.should be_active
|
expect(user).to be_active
|
||||||
user.email.should == 'walter.white@email.com'
|
expect(user.email).to eq('walter.white@email.com')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe Invite do
|
describe Invite do
|
||||||
|
|
||||||
it { should validate_presence_of :invited_by_id }
|
it { is_expected.to validate_presence_of :invited_by_id }
|
||||||
|
|
||||||
let(:iceking) { 'iceking@adventuretime.ooo' }
|
let(:iceking) { 'iceking@adventuretime.ooo' }
|
||||||
|
|
||||||
|
@ -12,11 +12,11 @@ describe Invite do
|
||||||
let(:invite) { Invite.create(email: user.email, invited_by: coding_horror) }
|
let(:invite) { Invite.create(email: user.email, invited_by: coding_horror) }
|
||||||
|
|
||||||
it "should not allow an invite with the same email as an existing user" do
|
it "should not allow an invite with the same email as an existing user" do
|
||||||
invite.should_not be_valid
|
expect(invite).not_to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not allow a user to invite themselves" do
|
it "should not allow a user to invite themselves" do
|
||||||
invite.email_already_exists.should == true
|
expect(invite.email_already_exists).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -26,12 +26,12 @@ describe Invite do
|
||||||
let(:invite) { Invite.create(email: "test@mailinator.com", invited_by: coding_horror) }
|
let(:invite) { Invite.create(email: "test@mailinator.com", invited_by: coding_horror) }
|
||||||
|
|
||||||
it "should not allow an invite with blacklisted email" do
|
it "should not allow an invite with blacklisted email" do
|
||||||
invite.should_not be_valid
|
expect(invite).not_to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should allow an invite with non-blacklisted email" do
|
it "should allow an invite with non-blacklisted email" do
|
||||||
invite = Fabricate(:invite, email: "test@mail.com", invited_by: coding_horror)
|
invite = Fabricate(:invite, email: "test@mail.com", invited_by: coding_horror)
|
||||||
invite.should be_valid
|
expect(invite).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -42,12 +42,12 @@ describe Invite do
|
||||||
subject { Fabricate(:invite) }
|
subject { Fabricate(:invite) }
|
||||||
|
|
||||||
it "works" do
|
it "works" do
|
||||||
subject.invite_key.should be_present
|
expect(subject.invite_key).to be_present
|
||||||
subject.email_already_exists.should == false
|
expect(subject.email_already_exists).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should store a lower case version of the email' do
|
it 'should store a lower case version of the email' do
|
||||||
subject.email.should == iceking
|
expect(subject.email).to eq(iceking)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ describe Invite do
|
||||||
invite = topic.invite_by_email(inviter, iceking)
|
invite = topic.invite_by_email(inviter, iceking)
|
||||||
invite.destroy
|
invite.destroy
|
||||||
invite = topic.invite_by_email(inviter, iceking)
|
invite = topic.invite_by_email(inviter, iceking)
|
||||||
invite.should be_present
|
expect(invite).to be_present
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -77,8 +77,8 @@ describe Invite do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'belongs to the topic' do
|
it 'belongs to the topic' do
|
||||||
topic.invites.should == [@invite]
|
expect(topic.invites).to eq([@invite])
|
||||||
@invite.topics.should == [topic]
|
expect(@invite.topics).to eq([topic])
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when added by another user' do
|
context 'when added by another user' do
|
||||||
|
@ -86,18 +86,18 @@ describe Invite do
|
||||||
let(:new_invite) { topic.invite_by_email(coding_horror, iceking) }
|
let(:new_invite) { topic.invite_by_email(coding_horror, iceking) }
|
||||||
|
|
||||||
it 'returns a different invite' do
|
it 'returns a different invite' do
|
||||||
new_invite.should_not == @invite
|
expect(new_invite).not_to eq(@invite)
|
||||||
new_invite.invite_key.should_not == @invite.invite_key
|
expect(new_invite.invite_key).not_to eq(@invite.invite_key)
|
||||||
new_invite.topics.should == [topic]
|
expect(new_invite.topics).to eq([topic])
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when adding a duplicate' do
|
context 'when adding a duplicate' do
|
||||||
it 'returns the original invite' do
|
it 'returns the original invite' do
|
||||||
topic.invite_by_email(inviter, 'iceking@adventuretime.ooo').should == @invite
|
expect(topic.invite_by_email(inviter, 'iceking@adventuretime.ooo')).to eq(@invite)
|
||||||
topic.invite_by_email(inviter, 'iceking@ADVENTURETIME.ooo').should == @invite
|
expect(topic.invite_by_email(inviter, 'iceking@ADVENTURETIME.ooo')).to eq(@invite)
|
||||||
topic.invite_by_email(inviter, 'ICEKING@adventuretime.ooo').should == @invite
|
expect(topic.invite_by_email(inviter, 'ICEKING@adventuretime.ooo')).to eq(@invite)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a new invite if the other has expired' do
|
it 'returns a new invite if the other has expired' do
|
||||||
|
@ -105,8 +105,8 @@ describe Invite do
|
||||||
@invite.created_at = 2.days.ago
|
@invite.created_at = 2.days.ago
|
||||||
@invite.save
|
@invite.save
|
||||||
new_invite = topic.invite_by_email(inviter, 'iceking@adventuretime.ooo')
|
new_invite = topic.invite_by_email(inviter, 'iceking@adventuretime.ooo')
|
||||||
new_invite.should_not == @invite
|
expect(new_invite).not_to eq(@invite)
|
||||||
new_invite.should_not be_expired
|
expect(new_invite).not_to be_expired
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -115,9 +115,9 @@ describe Invite do
|
||||||
|
|
||||||
it 'should be the same invite' do
|
it 'should be the same invite' do
|
||||||
@new_invite = another_topic.invite_by_email(inviter, iceking)
|
@new_invite = another_topic.invite_by_email(inviter, iceking)
|
||||||
@new_invite.should == @invite
|
expect(@new_invite).to eq(@invite)
|
||||||
another_topic.invites.should == [@invite]
|
expect(another_topic.invites).to eq([@invite])
|
||||||
@invite.topics.should =~ [topic, another_topic]
|
expect(@invite.topics).to match_array([topic, another_topic])
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -132,10 +132,10 @@ describe Invite do
|
||||||
|
|
||||||
it "works" do
|
it "works" do
|
||||||
# doesn't create an invite
|
# doesn't create an invite
|
||||||
invite.should be_blank
|
expect(invite).to be_blank
|
||||||
|
|
||||||
# gives the user permission to access the topic
|
# gives the user permission to access the topic
|
||||||
topic.allowed_users.include?(coding_horror).should == true
|
expect(topic.allowed_users.include?(coding_horror)).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -145,23 +145,23 @@ describe Invite do
|
||||||
let(:invite) { Fabricate(:invite) }
|
let(:invite) { Fabricate(:invite) }
|
||||||
|
|
||||||
it 'creates a notification for the invitee' do
|
it 'creates a notification for the invitee' do
|
||||||
lambda { invite.redeem }.should change(Notification, :count)
|
expect { invite.redeem }.to change(Notification, :count)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'wont redeem an expired invite' do
|
it 'wont redeem an expired invite' do
|
||||||
SiteSetting.expects(:invite_expiry_days).returns(10)
|
SiteSetting.expects(:invite_expiry_days).returns(10)
|
||||||
invite.update_column(:created_at, 20.days.ago)
|
invite.update_column(:created_at, 20.days.ago)
|
||||||
invite.redeem.should be_blank
|
expect(invite.redeem).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'wont redeem a deleted invite' do
|
it 'wont redeem a deleted invite' do
|
||||||
invite.destroy
|
invite.destroy
|
||||||
invite.redeem.should be_blank
|
expect(invite.redeem).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
it "won't redeem an invalidated invite" do
|
it "won't redeem an invalidated invite" do
|
||||||
invite.invalidated_at = 1.day.ago
|
invite.invalidated_at = 1.day.ago
|
||||||
invite.redeem.should be_blank
|
expect(invite.redeem).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'enqueues a job to email "set password" instructions' do
|
context 'enqueues a job to email "set password" instructions' do
|
||||||
|
@ -198,14 +198,14 @@ describe Invite do
|
||||||
invite.save
|
invite.save
|
||||||
|
|
||||||
user = invite.redeem
|
user = invite.redeem
|
||||||
user.groups.count.should == 1
|
expect(user.groups.count).to eq(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "invite trust levels" do
|
context "invite trust levels" do
|
||||||
it "returns the trust level in default_invitee_trust_level" do
|
it "returns the trust level in default_invitee_trust_level" do
|
||||||
SiteSetting.stubs(:default_invitee_trust_level).returns(TrustLevel[3])
|
SiteSetting.stubs(:default_invitee_trust_level).returns(TrustLevel[3])
|
||||||
invite.redeem.trust_level.should == TrustLevel[3]
|
expect(invite.redeem.trust_level).to eq(TrustLevel[3])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -213,7 +213,7 @@ describe Invite do
|
||||||
it 'correctly activates accounts' do
|
it 'correctly activates accounts' do
|
||||||
SiteSetting.stubs(:must_approve_users).returns(true)
|
SiteSetting.stubs(:must_approve_users).returns(true)
|
||||||
user = invite.redeem
|
user = invite.redeem
|
||||||
user.approved?.should == true
|
expect(user.approved?).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -222,9 +222,9 @@ describe Invite do
|
||||||
let!(:user) { invite.redeem }
|
let!(:user) { invite.redeem }
|
||||||
|
|
||||||
it 'works correctly' do
|
it 'works correctly' do
|
||||||
user.is_a?(User).should == true
|
expect(user.is_a?(User)).to eq(true)
|
||||||
user.send_welcome_message.should == true
|
expect(user.send_welcome_message).to eq(true)
|
||||||
user.trust_level.should == SiteSetting.default_invitee_trust_level
|
expect(user.trust_level).to eq(SiteSetting.default_invitee_trust_level)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'after redeeming' do
|
context 'after redeeming' do
|
||||||
|
@ -234,10 +234,10 @@ describe Invite do
|
||||||
|
|
||||||
it 'works correctly' do
|
it 'works correctly' do
|
||||||
# has set the user_id attribute
|
# has set the user_id attribute
|
||||||
invite.user.should == user
|
expect(invite.user).to eq(user)
|
||||||
|
|
||||||
# returns true for redeemed
|
# returns true for redeemed
|
||||||
invite.should be_redeemed
|
expect(invite).to be_redeemed
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -248,7 +248,7 @@ describe Invite do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'will not redeem twice' do
|
it 'will not redeem twice' do
|
||||||
invite.redeem.should be_blank
|
expect(invite.redeem).to be_blank
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -258,8 +258,8 @@ describe Invite do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'will not redeem twice' do
|
it 'will not redeem twice' do
|
||||||
invite.redeem.should be_present
|
expect(invite.redeem).to be_present
|
||||||
invite.redeem.send_welcome_message.should == false
|
expect(invite.redeem.send_welcome_message).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -278,8 +278,8 @@ describe Invite do
|
||||||
it 'adds the user to the topic_users' do
|
it 'adds the user to the topic_users' do
|
||||||
user = invite.redeem
|
user = invite.redeem
|
||||||
topic.reload
|
topic.reload
|
||||||
topic.allowed_users.include?(user).should == true
|
expect(topic.allowed_users.include?(user)).to eq(true)
|
||||||
Guardian.new(user).can_see?(topic).should == true
|
expect(Guardian.new(user).can_see?(topic)).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -291,7 +291,7 @@ describe Invite do
|
||||||
|
|
||||||
it 'adds the user to the topic_users' do
|
it 'adds the user to the topic_users' do
|
||||||
topic.reload
|
topic.reload
|
||||||
topic.allowed_users.include?(user).should == true
|
expect(topic.allowed_users.include?(user)).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -303,19 +303,19 @@ describe Invite do
|
||||||
let(:another_topic) { Fabricate(:topic, category_id: nil, archetype: "private_message", user: coding_horror) }
|
let(:another_topic) { Fabricate(:topic, category_id: nil, archetype: "private_message", user: coding_horror) }
|
||||||
|
|
||||||
it 'adds the user to the topic_users of the first topic' do
|
it 'adds the user to the topic_users of the first topic' do
|
||||||
topic.allowed_users.include?(user).should == true
|
expect(topic.allowed_users.include?(user)).to eq(true)
|
||||||
another_topic.allowed_users.include?(user).should == true
|
expect(another_topic.allowed_users.include?(user)).to eq(true)
|
||||||
another_invite.reload
|
another_invite.reload
|
||||||
another_invite.should_not be_redeemed
|
expect(another_invite).not_to be_redeemed
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'if they redeem the other invite afterwards' do
|
context 'if they redeem the other invite afterwards' do
|
||||||
|
|
||||||
it 'returns the same user' do
|
it 'returns the same user' do
|
||||||
result = another_invite.redeem
|
result = another_invite.redeem
|
||||||
result.should == user
|
expect(result).to eq(user)
|
||||||
another_invite.reload
|
another_invite.reload
|
||||||
another_invite.should be_redeemed
|
expect(another_invite).to be_redeemed
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -366,7 +366,7 @@ describe Invite do
|
||||||
|
|
||||||
invites = Invite.find_redeemed_invites_from(inviter)
|
invites = Invite.find_redeemed_invites_from(inviter)
|
||||||
|
|
||||||
invites.size.should == 1
|
expect(invites.size).to eq(1)
|
||||||
expect(invites.first).to eq redeemed_invite
|
expect(invites.first).to eq redeemed_invite
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -376,22 +376,22 @@ describe Invite do
|
||||||
subject { described_class.invalidate_for_email(email) }
|
subject { described_class.invalidate_for_email(email) }
|
||||||
|
|
||||||
it 'returns nil if there is no invite for the given email' do
|
it 'returns nil if there is no invite for the given email' do
|
||||||
subject.should == nil
|
expect(subject).to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets the matching invite to be invalid' do
|
it 'sets the matching invite to be invalid' do
|
||||||
invite = Fabricate(:invite, invited_by: Fabricate(:user), user_id: nil, email: email)
|
invite = Fabricate(:invite, invited_by: Fabricate(:user), user_id: nil, email: email)
|
||||||
subject.should == invite
|
expect(subject).to eq(invite)
|
||||||
subject.link_valid?.should == false
|
expect(subject.link_valid?).to eq(false)
|
||||||
subject.should be_valid
|
expect(subject).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets the matching invite to be invalid without being case-sensitive' do
|
it 'sets the matching invite to be invalid without being case-sensitive' do
|
||||||
invite = Fabricate(:invite, invited_by: Fabricate(:user), user_id: nil, email: 'invite.me2@Example.COM')
|
invite = Fabricate(:invite, invited_by: Fabricate(:user), user_id: nil, email: 'invite.me2@Example.COM')
|
||||||
result = described_class.invalidate_for_email('invite.me2@EXAMPLE.com')
|
result = described_class.invalidate_for_email('invite.me2@EXAMPLE.com')
|
||||||
result.should == invite
|
expect(result).to eq(invite)
|
||||||
result.link_valid?.should == false
|
expect(result.link_valid?).to eq(false)
|
||||||
result.should be_valid
|
expect(result).to be_valid
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -403,13 +403,13 @@ describe Invite do
|
||||||
it 'redeems the invite from email' do
|
it 'redeems the invite from email' do
|
||||||
result = Invite.redeem_from_email(user.email)
|
result = Invite.redeem_from_email(user.email)
|
||||||
invite.reload
|
invite.reload
|
||||||
invite.should be_redeemed
|
expect(invite).to be_redeemed
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not redeem the invite if email does not match' do
|
it 'does not redeem the invite if email does not match' do
|
||||||
result = Invite.redeem_from_email('test24@example.com')
|
result = Invite.redeem_from_email('test24@example.com')
|
||||||
invite.reload
|
invite.reload
|
||||||
invite.should_not be_redeemed
|
expect(invite).not_to be_redeemed
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -422,13 +422,13 @@ describe Invite do
|
||||||
it 'redeems the invite from token' do
|
it 'redeems the invite from token' do
|
||||||
result = Invite.redeem_from_token(invite.invite_key, user.email)
|
result = Invite.redeem_from_token(invite.invite_key, user.email)
|
||||||
invite.reload
|
invite.reload
|
||||||
invite.should be_redeemed
|
expect(invite).to be_redeemed
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not redeem the invite if token does not match' do
|
it 'does not redeem the invite if token does not match' do
|
||||||
result = Invite.redeem_from_token("bae0071f995bb4b6f756e80b383778b5", user.email)
|
result = Invite.redeem_from_token("bae0071f995bb4b6f756e80b383778b5", user.email)
|
||||||
invite.reload
|
invite.reload
|
||||||
invite.should_not be_redeemed
|
expect(invite).not_to be_redeemed
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,12 +5,12 @@ describe Permalink do
|
||||||
describe "new record" do
|
describe "new record" do
|
||||||
it "strips blanks" do
|
it "strips blanks" do
|
||||||
permalink = described_class.create(url: " my/old/url ")
|
permalink = described_class.create(url: " my/old/url ")
|
||||||
permalink.url.should == "my/old/url"
|
expect(permalink.url).to eq("my/old/url")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "removes leading slash" do
|
it "removes leading slash" do
|
||||||
permalink = described_class.create(url: "/my/old/url")
|
permalink = described_class.create(url: "/my/old/url")
|
||||||
permalink.url.should == "my/old/url"
|
expect(permalink.url).to eq("my/old/url")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -24,49 +24,49 @@ describe Permalink do
|
||||||
|
|
||||||
it "returns a topic url when topic_id is set" do
|
it "returns a topic url when topic_id is set" do
|
||||||
permalink.topic_id = topic.id
|
permalink.topic_id = topic.id
|
||||||
target_url.should == topic.relative_url
|
expect(target_url).to eq(topic.relative_url)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns nil when topic_id is set but topic is not found" do
|
it "returns nil when topic_id is set but topic is not found" do
|
||||||
permalink.topic_id = 99999
|
permalink.topic_id = 99999
|
||||||
target_url.should == nil
|
expect(target_url).to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a post url when post_id is set" do
|
it "returns a post url when post_id is set" do
|
||||||
permalink.post_id = post.id
|
permalink.post_id = post.id
|
||||||
target_url.should == post.url
|
expect(target_url).to eq(post.url)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns nil when post_id is set but post is not found" do
|
it "returns nil when post_id is set but post is not found" do
|
||||||
permalink.post_id = 99999
|
permalink.post_id = 99999
|
||||||
target_url.should == nil
|
expect(target_url).to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a post url when post_id and topic_id are both set" do
|
it "returns a post url when post_id and topic_id are both set" do
|
||||||
permalink.post_id = post.id
|
permalink.post_id = post.id
|
||||||
permalink.topic_id = topic.id
|
permalink.topic_id = topic.id
|
||||||
target_url.should == post.url
|
expect(target_url).to eq(post.url)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a category url when category_id is set" do
|
it "returns a category url when category_id is set" do
|
||||||
permalink.category_id = category.id
|
permalink.category_id = category.id
|
||||||
target_url.should == category.url
|
expect(target_url).to eq(category.url)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns nil when category_id is set but category is not found" do
|
it "returns nil when category_id is set but category is not found" do
|
||||||
permalink.category_id = 99999
|
permalink.category_id = 99999
|
||||||
target_url.should == nil
|
expect(target_url).to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a post url when topic_id, post_id, and category_id are all set for some reason" do
|
it "returns a post url when topic_id, post_id, and category_id are all set for some reason" do
|
||||||
permalink.post_id = post.id
|
permalink.post_id = post.id
|
||||||
permalink.topic_id = topic.id
|
permalink.topic_id = topic.id
|
||||||
permalink.category_id = category.id
|
permalink.category_id = category.id
|
||||||
target_url.should == post.url
|
expect(target_url).to eq(post.url)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns nil when nothing is set" do
|
it "returns nil when nothing is set" do
|
||||||
target_url.should == nil
|
expect(target_url).to eq(nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,10 +2,10 @@ require 'spec_helper'
|
||||||
require_dependency 'post_destroyer'
|
require_dependency 'post_destroyer'
|
||||||
|
|
||||||
describe PostAction do
|
describe PostAction do
|
||||||
it { should belong_to :user }
|
it { is_expected.to belong_to :user }
|
||||||
it { should belong_to :post }
|
it { is_expected.to belong_to :post }
|
||||||
it { should belong_to :post_action_type }
|
it { is_expected.to belong_to :post_action_type }
|
||||||
it { should rate_limit }
|
it { is_expected.to rate_limit }
|
||||||
|
|
||||||
let(:moderator) { Fabricate(:moderator) }
|
let(:moderator) { Fabricate(:moderator) }
|
||||||
let(:codinghorror) { Fabricate(:coding_horror) }
|
let(:codinghorror) { Fabricate(:coding_horror) }
|
||||||
|
@ -20,7 +20,7 @@ describe PostAction do
|
||||||
it "doesn't generate title longer than 255 characters" do
|
it "doesn't generate title longer than 255 characters" do
|
||||||
topic = create_topic(title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc sit amet rutrum neque. Pellentesque suscipit vehicula facilisis. Phasellus lacus sapien, aliquam nec convallis sit amet, vestibulum laoreet ante. Curabitur et pellentesque tortor. Donec non.")
|
topic = create_topic(title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc sit amet rutrum neque. Pellentesque suscipit vehicula facilisis. Phasellus lacus sapien, aliquam nec convallis sit amet, vestibulum laoreet ante. Curabitur et pellentesque tortor. Donec non.")
|
||||||
post = create_post(topic: topic)
|
post = create_post(topic: topic)
|
||||||
-> { PostAction.act(admin, post, PostActionType.types[:notify_user], message: "WAT") }.should_not raise_error
|
expect { PostAction.act(admin, post, PostActionType.types[:notify_user], message: "WAT") }.not_to raise_error
|
||||||
end
|
end
|
||||||
|
|
||||||
it "notify moderators integration test" do
|
it "notify moderators integration test" do
|
||||||
|
@ -35,37 +35,37 @@ describe PostAction do
|
||||||
.where('topics.archetype' => Archetype.private_message)
|
.where('topics.archetype' => Archetype.private_message)
|
||||||
.to_a
|
.to_a
|
||||||
|
|
||||||
posts.count.should == 1
|
expect(posts.count).to eq(1)
|
||||||
action.related_post_id.should == posts[0].id.to_i
|
expect(action.related_post_id).to eq(posts[0].id.to_i)
|
||||||
posts[0].subtype.should == TopicSubtype.notify_moderators
|
expect(posts[0].subtype).to eq(TopicSubtype.notify_moderators)
|
||||||
|
|
||||||
topic = posts[0].topic
|
topic = posts[0].topic
|
||||||
|
|
||||||
# Moderators should be invited to the private topic, otherwise they're not permitted to see it
|
# Moderators should be invited to the private topic, otherwise they're not permitted to see it
|
||||||
topic_user_ids = topic.topic_users(true).map {|x| x.user_id}
|
topic_user_ids = topic.topic_users(true).map {|x| x.user_id}
|
||||||
topic_user_ids.should include(codinghorror.id)
|
expect(topic_user_ids).to include(codinghorror.id)
|
||||||
topic_user_ids.should include(mod.id)
|
expect(topic_user_ids).to include(mod.id)
|
||||||
|
|
||||||
# Notification level should be "Watching" for everyone
|
# Notification level should be "Watching" for everyone
|
||||||
topic.topic_users(true).map(&:notification_level).uniq.should == [TopicUser.notification_levels[:watching]]
|
expect(topic.topic_users(true).map(&:notification_level).uniq).to eq([TopicUser.notification_levels[:watching]])
|
||||||
|
|
||||||
# reply to PM should not clear flag
|
# reply to PM should not clear flag
|
||||||
PostCreator.new(mod, topic_id: posts[0].topic_id, raw: "This is my test reply to the user, it should clear flags").create
|
PostCreator.new(mod, topic_id: posts[0].topic_id, raw: "This is my test reply to the user, it should clear flags").create
|
||||||
action.reload
|
action.reload
|
||||||
action.deleted_at.should == nil
|
expect(action.deleted_at).to eq(nil)
|
||||||
|
|
||||||
# Acting on the flag should post an automated status message
|
# Acting on the flag should post an automated status message
|
||||||
topic.posts.count.should == 2
|
expect(topic.posts.count).to eq(2)
|
||||||
PostAction.agree_flags!(post, admin)
|
PostAction.agree_flags!(post, admin)
|
||||||
topic.reload
|
topic.reload
|
||||||
topic.posts.count.should == 3
|
expect(topic.posts.count).to eq(3)
|
||||||
topic.posts.last.post_type.should == Post.types[:moderator_action]
|
expect(topic.posts.last.post_type).to eq(Post.types[:moderator_action])
|
||||||
|
|
||||||
# Clearing the flags should not post another automated status message
|
# Clearing the flags should not post another automated status message
|
||||||
PostAction.act(mod, post, PostActionType.types[:notify_moderators], message: "another special message")
|
PostAction.act(mod, post, PostActionType.types[:notify_moderators], message: "another special message")
|
||||||
PostAction.clear_flags!(post, admin)
|
PostAction.clear_flags!(post, admin)
|
||||||
topic.reload
|
topic.reload
|
||||||
topic.posts.count.should == 3
|
expect(topic.posts.count).to eq(3)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'notify_moderators' do
|
describe 'notify_moderators' do
|
||||||
|
@ -100,39 +100,39 @@ describe PostAction do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "increments the numbers correctly" do
|
it "increments the numbers correctly" do
|
||||||
PostAction.flagged_posts_count.should == 0
|
expect(PostAction.flagged_posts_count).to eq(0)
|
||||||
|
|
||||||
PostAction.act(codinghorror, post, PostActionType.types[:off_topic])
|
PostAction.act(codinghorror, post, PostActionType.types[:off_topic])
|
||||||
PostAction.flagged_posts_count.should == 1
|
expect(PostAction.flagged_posts_count).to eq(1)
|
||||||
|
|
||||||
PostAction.clear_flags!(post, Discourse.system_user)
|
PostAction.clear_flags!(post, Discourse.system_user)
|
||||||
PostAction.flagged_posts_count.should == 0
|
expect(PostAction.flagged_posts_count).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should reset counts when a topic is deleted" do
|
it "should reset counts when a topic is deleted" do
|
||||||
PostAction.act(codinghorror, post, PostActionType.types[:off_topic])
|
PostAction.act(codinghorror, post, PostActionType.types[:off_topic])
|
||||||
post.topic.trash!
|
post.topic.trash!
|
||||||
PostAction.flagged_posts_count.should == 0
|
expect(PostAction.flagged_posts_count).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should ignore validated flags" do
|
it "should ignore validated flags" do
|
||||||
post = create_post
|
post = create_post
|
||||||
|
|
||||||
PostAction.act(codinghorror, post, PostActionType.types[:off_topic])
|
PostAction.act(codinghorror, post, PostActionType.types[:off_topic])
|
||||||
post.hidden.should == false
|
expect(post.hidden).to eq(false)
|
||||||
post.hidden_at.should be_blank
|
expect(post.hidden_at).to be_blank
|
||||||
PostAction.defer_flags!(post, admin)
|
PostAction.defer_flags!(post, admin)
|
||||||
PostAction.flagged_posts_count.should == 0
|
expect(PostAction.flagged_posts_count).to eq(0)
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
post.hidden.should == false
|
expect(post.hidden).to eq(false)
|
||||||
post.hidden_at.should be_blank
|
expect(post.hidden_at).to be_blank
|
||||||
|
|
||||||
PostAction.hide_post!(post, PostActionType.types[:off_topic])
|
PostAction.hide_post!(post, PostActionType.types[:off_topic])
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
post.hidden.should == true
|
expect(post.hidden).to eq(true)
|
||||||
post.hidden_at.should be_present
|
expect(post.hidden_at).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -144,18 +144,18 @@ describe PostAction do
|
||||||
PostAction.act(codinghorror, second_post, PostActionType.types[:like])
|
PostAction.act(codinghorror, second_post, PostActionType.types[:like])
|
||||||
|
|
||||||
post.topic.reload
|
post.topic.reload
|
||||||
post.topic.like_count.should == 2
|
expect(post.topic.like_count).to eq(2)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "when a user bookmarks something" do
|
describe "when a user bookmarks something" do
|
||||||
it "increases the post's bookmark count when saved" do
|
it "increases the post's bookmark count when saved" do
|
||||||
lambda { bookmark.save; post.reload }.should change(post, :bookmark_count).by(1)
|
expect { bookmark.save; post.reload }.to change(post, :bookmark_count).by(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "increases the forum topic's bookmark count when saved" do
|
it "increases the forum topic's bookmark count when saved" do
|
||||||
lambda { bookmark.save; post.topic.reload }.should change(post.topic, :bookmark_count).by(1)
|
expect { bookmark.save; post.topic.reload }.to change(post.topic, :bookmark_count).by(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'when deleted' do
|
describe 'when deleted' do
|
||||||
|
@ -170,11 +170,11 @@ describe PostAction do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'reduces the bookmark count of the post' do
|
it 'reduces the bookmark count of the post' do
|
||||||
lambda { post.reload }.should change(post, :bookmark_count).by(-1)
|
expect { post.reload }.to change(post, :bookmark_count).by(-1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'reduces the bookmark count of the forum topic' do
|
it 'reduces the bookmark count of the forum topic' do
|
||||||
lambda { @topic.reload }.should change(post.topic, :bookmark_count).by(-1)
|
expect { @topic.reload }.to change(post.topic, :bookmark_count).by(-1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -183,27 +183,27 @@ describe PostAction do
|
||||||
it 'should increase the `like_count` and `like_score` when a user likes something' do
|
it 'should increase the `like_count` and `like_score` when a user likes something' do
|
||||||
PostAction.act(codinghorror, post, PostActionType.types[:like])
|
PostAction.act(codinghorror, post, PostActionType.types[:like])
|
||||||
post.reload
|
post.reload
|
||||||
post.like_count.should == 1
|
expect(post.like_count).to eq(1)
|
||||||
post.like_score.should == 1
|
expect(post.like_score).to eq(1)
|
||||||
post.topic.reload
|
post.topic.reload
|
||||||
post.topic.like_count.should == 1
|
expect(post.topic.like_count).to eq(1)
|
||||||
|
|
||||||
# When a staff member likes it
|
# When a staff member likes it
|
||||||
PostAction.act(moderator, post, PostActionType.types[:like])
|
PostAction.act(moderator, post, PostActionType.types[:like])
|
||||||
post.reload
|
post.reload
|
||||||
post.like_count.should == 2
|
expect(post.like_count).to eq(2)
|
||||||
post.like_score.should == 4
|
expect(post.like_score).to eq(4)
|
||||||
|
|
||||||
# Removing likes
|
# Removing likes
|
||||||
PostAction.remove_act(codinghorror, post, PostActionType.types[:like])
|
PostAction.remove_act(codinghorror, post, PostActionType.types[:like])
|
||||||
post.reload
|
post.reload
|
||||||
post.like_count.should == 1
|
expect(post.like_count).to eq(1)
|
||||||
post.like_score.should == 3
|
expect(post.like_score).to eq(3)
|
||||||
|
|
||||||
PostAction.remove_act(moderator, post, PostActionType.types[:like])
|
PostAction.remove_act(moderator, post, PostActionType.types[:like])
|
||||||
post.reload
|
post.reload
|
||||||
post.like_count.should == 0
|
expect(post.like_count).to eq(0)
|
||||||
post.like_score.should == 0
|
expect(post.like_score).to eq(0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -212,27 +212,27 @@ describe PostAction do
|
||||||
PostAction.act(codinghorror, post, PostActionType.types[:like])
|
PostAction.act(codinghorror, post, PostActionType.types[:like])
|
||||||
PostAction.remove_act(codinghorror, post, PostActionType.types[:like])
|
PostAction.remove_act(codinghorror, post, PostActionType.types[:like])
|
||||||
PostAction.act(codinghorror, post, PostActionType.types[:like])
|
PostAction.act(codinghorror, post, PostActionType.types[:like])
|
||||||
PostAction.where(post: post).with_deleted.count.should == 1
|
expect(PostAction.where(post: post).with_deleted.count).to eq(1)
|
||||||
PostAction.remove_act(codinghorror, post, PostActionType.types[:like])
|
PostAction.remove_act(codinghorror, post, PostActionType.types[:like])
|
||||||
|
|
||||||
# Check that we don't lose consistency into negatives
|
# Check that we don't lose consistency into negatives
|
||||||
post.reload.like_count.should == 0
|
expect(post.reload.like_count).to eq(0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'when a user votes for something' do
|
describe 'when a user votes for something' do
|
||||||
it 'should increase the vote counts when a user votes' do
|
it 'should increase the vote counts when a user votes' do
|
||||||
lambda {
|
expect {
|
||||||
PostAction.act(codinghorror, post, PostActionType.types[:vote])
|
PostAction.act(codinghorror, post, PostActionType.types[:vote])
|
||||||
post.reload
|
post.reload
|
||||||
}.should change(post, :vote_count).by(1)
|
}.to change(post, :vote_count).by(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should increase the forum topic vote count when a user votes' do
|
it 'should increase the forum topic vote count when a user votes' do
|
||||||
lambda {
|
expect {
|
||||||
PostAction.act(codinghorror, post, PostActionType.types[:vote])
|
PostAction.act(codinghorror, post, PostActionType.types[:vote])
|
||||||
post.topic.reload
|
post.topic.reload
|
||||||
}.should change(post.topic, :vote_count).by(1)
|
}.to change(post.topic, :vote_count).by(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -245,32 +245,32 @@ describe PostAction do
|
||||||
SiteSetting.stubs(:flags_required_to_hide_post).returns(7)
|
SiteSetting.stubs(:flags_required_to_hide_post).returns(7)
|
||||||
|
|
||||||
# A post with no flags has 0 for flag counts
|
# A post with no flags has 0 for flag counts
|
||||||
PostAction.flag_counts_for(post.id).should == [0, 0]
|
expect(PostAction.flag_counts_for(post.id)).to eq([0, 0])
|
||||||
|
|
||||||
flag = PostAction.act(eviltrout, post, PostActionType.types[:spam])
|
flag = PostAction.act(eviltrout, post, PostActionType.types[:spam])
|
||||||
PostAction.flag_counts_for(post.id).should == [0, 1]
|
expect(PostAction.flag_counts_for(post.id)).to eq([0, 1])
|
||||||
|
|
||||||
# If staff takes action, it is ranked higher
|
# If staff takes action, it is ranked higher
|
||||||
PostAction.act(admin, post, PostActionType.types[:spam], take_action: true)
|
PostAction.act(admin, post, PostActionType.types[:spam], take_action: true)
|
||||||
PostAction.flag_counts_for(post.id).should == [0, 8]
|
expect(PostAction.flag_counts_for(post.id)).to eq([0, 8])
|
||||||
|
|
||||||
# If a flag is dismissed
|
# If a flag is dismissed
|
||||||
PostAction.clear_flags!(post, admin)
|
PostAction.clear_flags!(post, admin)
|
||||||
PostAction.flag_counts_for(post.id).should == [8, 0]
|
expect(PostAction.flag_counts_for(post.id)).to eq([8, 0])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not allow you to flag stuff with the same reason more than once' do
|
it 'does not allow you to flag stuff with the same reason more than once' do
|
||||||
post = Fabricate(:post)
|
post = Fabricate(:post)
|
||||||
PostAction.act(eviltrout, post, PostActionType.types[:spam])
|
PostAction.act(eviltrout, post, PostActionType.types[:spam])
|
||||||
lambda { PostAction.act(eviltrout, post, PostActionType.types[:off_topic]) }.should raise_error(PostAction::AlreadyActed)
|
expect { PostAction.act(eviltrout, post, PostActionType.types[:off_topic]) }.to raise_error(PostAction::AlreadyActed)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'allows you to flag stuff with another reason' do
|
it 'allows you to flag stuff with another reason' do
|
||||||
post = Fabricate(:post)
|
post = Fabricate(:post)
|
||||||
PostAction.act(eviltrout, post, PostActionType.types[:spam])
|
PostAction.act(eviltrout, post, PostActionType.types[:spam])
|
||||||
PostAction.remove_act(eviltrout, post, PostActionType.types[:spam])
|
PostAction.remove_act(eviltrout, post, PostActionType.types[:spam])
|
||||||
lambda { PostAction.act(eviltrout, post, PostActionType.types[:off_topic]) }.should_not raise_error()
|
expect { PostAction.act(eviltrout, post, PostActionType.types[:off_topic]) }.not_to raise_error()
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should update counts when you clear flags' do
|
it 'should update counts when you clear flags' do
|
||||||
|
@ -278,12 +278,12 @@ describe PostAction do
|
||||||
PostAction.act(eviltrout, post, PostActionType.types[:spam])
|
PostAction.act(eviltrout, post, PostActionType.types[:spam])
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
post.spam_count.should == 1
|
expect(post.spam_count).to eq(1)
|
||||||
|
|
||||||
PostAction.clear_flags!(post, Discourse.system_user)
|
PostAction.clear_flags!(post, Discourse.system_user)
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
post.spam_count.should == 0
|
expect(post.spam_count).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should follow the rules for automatic hiding workflow' do
|
it 'should follow the rules for automatic hiding workflow' do
|
||||||
|
@ -298,38 +298,38 @@ describe PostAction do
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
|
|
||||||
post.hidden.should == true
|
expect(post.hidden).to eq(true)
|
||||||
post.hidden_at.should be_present
|
expect(post.hidden_at).to be_present
|
||||||
post.hidden_reason_id.should == Post.hidden_reasons[:flag_threshold_reached]
|
expect(post.hidden_reason_id).to eq(Post.hidden_reasons[:flag_threshold_reached])
|
||||||
post.topic.visible.should == false
|
expect(post.topic.visible).to eq(false)
|
||||||
|
|
||||||
post.revise(post.user, { raw: post.raw + " ha I edited it " })
|
post.revise(post.user, { raw: post.raw + " ha I edited it " })
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
|
|
||||||
post.hidden.should == false
|
expect(post.hidden).to eq(false)
|
||||||
post.hidden_reason_id.should == nil
|
expect(post.hidden_reason_id).to eq(nil)
|
||||||
post.hidden_at.should be_blank
|
expect(post.hidden_at).to be_blank
|
||||||
post.topic.visible.should == true
|
expect(post.topic.visible).to eq(true)
|
||||||
|
|
||||||
PostAction.act(eviltrout, post, PostActionType.types[:spam])
|
PostAction.act(eviltrout, post, PostActionType.types[:spam])
|
||||||
PostAction.act(walterwhite, post, PostActionType.types[:off_topic])
|
PostAction.act(walterwhite, post, PostActionType.types[:off_topic])
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
|
|
||||||
post.hidden.should == true
|
expect(post.hidden).to eq(true)
|
||||||
post.hidden_at.should be_present
|
expect(post.hidden_at).to be_present
|
||||||
post.hidden_reason_id.should == Post.hidden_reasons[:flag_threshold_reached_again]
|
expect(post.hidden_reason_id).to eq(Post.hidden_reasons[:flag_threshold_reached_again])
|
||||||
post.topic.visible.should == false
|
expect(post.topic.visible).to eq(false)
|
||||||
|
|
||||||
post.revise(post.user, { raw: post.raw + " ha I edited it again " })
|
post.revise(post.user, { raw: post.raw + " ha I edited it again " })
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
|
|
||||||
post.hidden.should == true
|
expect(post.hidden).to eq(true)
|
||||||
post.hidden_at.should be_present
|
expect(post.hidden_at).to be_present
|
||||||
post.hidden_reason_id.should == Post.hidden_reasons[:flag_threshold_reached_again]
|
expect(post.hidden_reason_id).to eq(Post.hidden_reasons[:flag_threshold_reached_again])
|
||||||
post.topic.visible.should == false
|
expect(post.topic.visible).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "hide tl0 posts that are flagged as spam by a tl3 user" do
|
it "hide tl0 posts that are flagged as spam by a tl3 user" do
|
||||||
|
@ -342,23 +342,23 @@ describe PostAction do
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
|
|
||||||
post.hidden.should == true
|
expect(post.hidden).to eq(true)
|
||||||
post.hidden_at.should be_present
|
expect(post.hidden_at).to be_present
|
||||||
post.hidden_reason_id.should == Post.hidden_reasons[:flagged_by_tl3_user]
|
expect(post.hidden_reason_id).to eq(Post.hidden_reasons[:flagged_by_tl3_user])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can flag the topic instead of a post" do
|
it "can flag the topic instead of a post" do
|
||||||
post1 = create_post
|
post1 = create_post
|
||||||
post2 = create_post(topic: post1.topic)
|
post2 = create_post(topic: post1.topic)
|
||||||
post_action = PostAction.act(Fabricate(:user), post1, PostActionType.types[:spam], { flag_topic: true })
|
post_action = PostAction.act(Fabricate(:user), post1, PostActionType.types[:spam], { flag_topic: true })
|
||||||
post_action.targets_topic.should == true
|
expect(post_action.targets_topic).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "will flag the first post if you flag a topic but there is only one post in the topic" do
|
it "will flag the first post if you flag a topic but there is only one post in the topic" do
|
||||||
post = create_post
|
post = create_post
|
||||||
post_action = PostAction.act(Fabricate(:user), post, PostActionType.types[:spam], { flag_topic: true })
|
post_action = PostAction.act(Fabricate(:user), post, PostActionType.types[:spam], { flag_topic: true })
|
||||||
post_action.targets_topic.should == false
|
expect(post_action.targets_topic).to eq(false)
|
||||||
post_action.post_id.should == post.id
|
expect(post_action.post_id).to eq(post.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "will unhide the post when a moderator undos the flag on which s/he took action" do
|
it "will unhide the post when a moderator undos the flag on which s/he took action" do
|
||||||
|
@ -368,12 +368,12 @@ describe PostAction do
|
||||||
PostAction.act(moderator, post, PostActionType.types[:spam], { take_action: true })
|
PostAction.act(moderator, post, PostActionType.types[:spam], { take_action: true })
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
post.hidden.should == true
|
expect(post.hidden).to eq(true)
|
||||||
|
|
||||||
PostAction.remove_act(moderator, post, PostActionType.types[:spam])
|
PostAction.remove_act(moderator, post, PostActionType.types[:spam])
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
post.hidden.should == false
|
expect(post.hidden).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "will automatically close a topic due to large community flagging" do
|
it "will automatically close a topic due to large community flagging" do
|
||||||
|
@ -395,7 +395,7 @@ describe PostAction do
|
||||||
PostAction.act(flagger, post1, PostActionType.types[:inappropriate])
|
PostAction.act(flagger, post1, PostActionType.types[:inappropriate])
|
||||||
end
|
end
|
||||||
|
|
||||||
topic.reload.closed.should == false
|
expect(topic.reload.closed).to eq(false)
|
||||||
|
|
||||||
# clean up
|
# clean up
|
||||||
PostAction.where(post: post1).delete_all
|
PostAction.where(post: post1).delete_all
|
||||||
|
@ -405,7 +405,7 @@ describe PostAction do
|
||||||
PostAction.act(flagger1, post, PostActionType.types[:inappropriate])
|
PostAction.act(flagger1, post, PostActionType.types[:inappropriate])
|
||||||
end
|
end
|
||||||
|
|
||||||
topic.reload.closed.should == false
|
expect(topic.reload.closed).to eq(false)
|
||||||
|
|
||||||
# clean up
|
# clean up
|
||||||
PostAction.where(post: [post1, post2, post3]).delete_all
|
PostAction.where(post: [post1, post2, post3]).delete_all
|
||||||
|
@ -417,7 +417,7 @@ describe PostAction do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
topic.reload.closed.should == true
|
expect(topic.reload.closed).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -428,10 +428,10 @@ describe PostAction do
|
||||||
# flags are already being tested
|
# flags are already being tested
|
||||||
all_types_except_flags = PostActionType.types.except(PostActionType.flag_types)
|
all_types_except_flags = PostActionType.types.except(PostActionType.flag_types)
|
||||||
all_types_except_flags.values.each do |action|
|
all_types_except_flags.values.each do |action|
|
||||||
lambda do
|
expect do
|
||||||
PostAction.act(eviltrout, post, action)
|
PostAction.act(eviltrout, post, action)
|
||||||
PostAction.act(eviltrout, post, action)
|
PostAction.act(eviltrout, post, action)
|
||||||
end.should raise_error(PostAction::AlreadyActed)
|
end.to raise_error(PostAction::AlreadyActed)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -13,10 +13,10 @@ describe PostAlertObserver do
|
||||||
context 'liking' do
|
context 'liking' do
|
||||||
context 'when liking a post' do
|
context 'when liking a post' do
|
||||||
it 'creates a notification' do
|
it 'creates a notification' do
|
||||||
lambda {
|
expect {
|
||||||
PostAction.act(evil_trout, post, PostActionType.types[:like])
|
PostAction.act(evil_trout, post, PostActionType.types[:like])
|
||||||
# one like (welcome badge deferred)
|
# one like (welcome badge deferred)
|
||||||
}.should change(Notification, :count).by(1)
|
}.to change(Notification, :count).by(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -26,18 +26,18 @@ describe PostAlertObserver do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'removes a notification' do
|
it 'removes a notification' do
|
||||||
lambda {
|
expect {
|
||||||
PostAction.remove_act(evil_trout, post, PostActionType.types[:like])
|
PostAction.remove_act(evil_trout, post, PostActionType.types[:like])
|
||||||
}.should change(Notification, :count).by(-1)
|
}.to change(Notification, :count).by(-1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when editing a post' do
|
context 'when editing a post' do
|
||||||
it 'notifies a user of the revision' do
|
it 'notifies a user of the revision' do
|
||||||
lambda {
|
expect {
|
||||||
post.revise(evil_trout, { raw: "world is the new body of the message" })
|
post.revise(evil_trout, { raw: "world is the new body of the message" })
|
||||||
}.should change(post.user.notifications, :count).by(1)
|
}.to change(post.user.notifications, :count).by(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "edit notifications are disabled" do
|
context "edit notifications are disabled" do
|
||||||
|
@ -46,15 +46,15 @@ describe PostAlertObserver do
|
||||||
|
|
||||||
|
|
||||||
it 'notifies a user of the revision made by another user' do
|
it 'notifies a user of the revision made by another user' do
|
||||||
lambda {
|
expect {
|
||||||
post.revise(evil_trout, { raw: "world is the new body of the message" })
|
post.revise(evil_trout, { raw: "world is the new body of the message" })
|
||||||
}.should change(post.user.notifications, :count).by(1)
|
}.to change(post.user.notifications, :count).by(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not notifiy a user of the revision made by the system user' do
|
it 'does not notifiy a user of the revision made by the system user' do
|
||||||
lambda {
|
expect {
|
||||||
post.revise(Discourse.system_user, { raw: "world is the new body of the message" })
|
post.revise(Discourse.system_user, { raw: "world is the new body of the message" })
|
||||||
}.should_not change(post.user.notifications, :count)
|
}.not_to change(post.user.notifications, :count)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -71,20 +71,20 @@ describe PostAlertObserver do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "won't notify someone who can't see the post" do
|
it "won't notify someone who can't see the post" do
|
||||||
lambda {
|
expect {
|
||||||
Guardian.any_instance.expects(:can_see?).with(instance_of(Post)).returns(false)
|
Guardian.any_instance.expects(:can_see?).with(instance_of(Post)).returns(false)
|
||||||
mention_post
|
mention_post
|
||||||
PostAlerter.new.after_create_post(mention_post)
|
PostAlerter.new.after_create_post(mention_post)
|
||||||
PostAlerter.new.after_save_post(mention_post)
|
PostAlerter.new.after_save_post(mention_post)
|
||||||
}.should_not change(evil_trout.notifications, :count)
|
}.not_to change(evil_trout.notifications, :count)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates like notifications' do
|
it 'creates like notifications' do
|
||||||
other_user = Fabricate(:user)
|
other_user = Fabricate(:user)
|
||||||
topic.allowed_users << user << other_user
|
topic.allowed_users << user << other_user
|
||||||
lambda {
|
expect {
|
||||||
PostAction.act(other_user, mention_post, PostActionType.types[:like])
|
PostAction.act(other_user, mention_post, PostActionType.types[:like])
|
||||||
}.should change(user.notifications, :count)
|
}.to change(user.notifications, :count)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -46,44 +46,44 @@ describe PostAnalyzer do
|
||||||
describe "raw_links" do
|
describe "raw_links" do
|
||||||
it "returns a blank collection for a post with no links" do
|
it "returns a blank collection for a post with no links" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_no_links, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_no_links, default_topic_id)
|
||||||
post_analyzer.raw_links.should be_blank
|
expect(post_analyzer.raw_links).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds a link within markdown" do
|
it "finds a link within markdown" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_one_link_md, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_one_link_md, default_topic_id)
|
||||||
post_analyzer.raw_links.should == ["http://www.imdb.com/name/nm2225369"]
|
expect(post_analyzer.raw_links).to eq(["http://www.imdb.com/name/nm2225369"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can find two links from html" do
|
it "can find two links from html" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_two_links_html, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_two_links_html, default_topic_id)
|
||||||
post_analyzer.raw_links.should == ["http://disneyland.disney.go.com/", "http://reddit.com"]
|
expect(post_analyzer.raw_links).to eq(["http://disneyland.disney.go.com/", "http://reddit.com"])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can find three links without markup" do
|
it "can find three links without markup" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_three_links, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_three_links, default_topic_id)
|
||||||
post_analyzer.raw_links.should == ["http://discourse.org", "http://discourse.org/another_url", "http://www.imdb.com/name/nm2225369"]
|
expect(post_analyzer.raw_links).to eq(["http://discourse.org", "http://discourse.org/another_url", "http://www.imdb.com/name/nm2225369"])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "linked_hosts" do
|
describe "linked_hosts" do
|
||||||
it "returns blank with no links" do
|
it "returns blank with no links" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_no_links, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_no_links, default_topic_id)
|
||||||
post_analyzer.linked_hosts.should be_blank
|
expect(post_analyzer.linked_hosts).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns the host and a count for links" do
|
it "returns the host and a count for links" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_two_links_html, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_two_links_html, default_topic_id)
|
||||||
post_analyzer.linked_hosts.should == {"disneyland.disney.go.com" => 1, "reddit.com" => 1}
|
expect(post_analyzer.linked_hosts).to eq({"disneyland.disney.go.com" => 1, "reddit.com" => 1})
|
||||||
end
|
end
|
||||||
|
|
||||||
it "it counts properly with more than one link on the same host" do
|
it "it counts properly with more than one link on the same host" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_three_links, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_three_links, default_topic_id)
|
||||||
post_analyzer.linked_hosts.should == {"discourse.org" => 1, "www.imdb.com" => 1}
|
expect(post_analyzer.linked_hosts).to eq({"discourse.org" => 1, "www.imdb.com" => 1})
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns blank for ipv6 output' do
|
it 'returns blank for ipv6 output' do
|
||||||
post_analyzer = PostAnalyzer.new('PING www.google.com(lb-in-x93.1e100.net) 56 data bytes', default_topic_id)
|
post_analyzer = PostAnalyzer.new('PING www.google.com(lb-in-x93.1e100.net) 56 data bytes', default_topic_id)
|
||||||
post_analyzer.linked_hosts.should be_blank
|
expect(post_analyzer.linked_hosts).to be_blank
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -98,38 +98,38 @@ describe PostAnalyzer do
|
||||||
|
|
||||||
it "returns 0 images for an empty post" do
|
it "returns 0 images for an empty post" do
|
||||||
post_analyzer = PostAnalyzer.new("Hello world", nil)
|
post_analyzer = PostAnalyzer.new("Hello world", nil)
|
||||||
post_analyzer.image_count.should == 0
|
expect(post_analyzer.image_count).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds images from markdown" do
|
it "finds images from markdown" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_post_one_image_md, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_post_one_image_md, default_topic_id)
|
||||||
post_analyzer.image_count.should == 1
|
expect(post_analyzer.image_count).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds images from HTML" do
|
it "finds images from HTML" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_post_two_images_html, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_post_two_images_html, default_topic_id)
|
||||||
post_analyzer.image_count.should == 2
|
expect(post_analyzer.image_count).to eq(2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't count avatars as images" do
|
it "doesn't count avatars as images" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_post_with_avatars, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_post_with_avatars, default_topic_id)
|
||||||
post_analyzer.image_count.should == 0
|
expect(post_analyzer.image_count).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't count favicons as images" do
|
it "doesn't count favicons as images" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_post_with_favicon, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_post_with_favicon, default_topic_id)
|
||||||
post_analyzer.image_count.should == 0
|
expect(post_analyzer.image_count).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't count thumbnails as images" do
|
it "doesn't count thumbnails as images" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_post_with_thumbnail, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_post_with_thumbnail, default_topic_id)
|
||||||
post_analyzer.image_count.should == 0
|
expect(post_analyzer.image_count).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't count whitelisted images" do
|
it "doesn't count whitelisted images" do
|
||||||
Post.stubs(:white_listed_image_classes).returns(["classy"])
|
Post.stubs(:white_listed_image_classes).returns(["classy"])
|
||||||
post_analyzer = PostAnalyzer.new(raw_post_with_two_classy_images, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_post_with_two_classy_images, default_topic_id)
|
||||||
post_analyzer.image_count.should == 0
|
expect(post_analyzer.image_count).to eq(0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -140,23 +140,23 @@ describe PostAnalyzer do
|
||||||
|
|
||||||
it "returns 0 links for an empty post" do
|
it "returns 0 links for an empty post" do
|
||||||
post_analyzer = PostAnalyzer.new("Hello world", nil)
|
post_analyzer = PostAnalyzer.new("Hello world", nil)
|
||||||
post_analyzer.link_count.should == 0
|
expect(post_analyzer.link_count).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns 0 links for a post with mentions" do
|
it "returns 0 links for a post with mentions" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_post_with_mentions, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_post_with_mentions, default_topic_id)
|
||||||
post_analyzer.link_count.should == 0
|
expect(post_analyzer.link_count).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds links from markdown" do
|
it "finds links from markdown" do
|
||||||
Oneboxer.stubs :onebox
|
Oneboxer.stubs :onebox
|
||||||
post_analyzer = PostAnalyzer.new(raw_post_one_link_md, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_post_one_link_md, default_topic_id)
|
||||||
post_analyzer.link_count.should == 1
|
expect(post_analyzer.link_count).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "finds links from HTML" do
|
it "finds links from HTML" do
|
||||||
post_analyzer = PostAnalyzer.new(raw_post_two_links_html, default_topic_id)
|
post_analyzer = PostAnalyzer.new(raw_post_two_links_html, default_topic_id)
|
||||||
post_analyzer.link_count.should == 2
|
expect(post_analyzer.link_count).to eq(2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -165,42 +165,42 @@ describe PostAnalyzer do
|
||||||
|
|
||||||
it "returns an empty array with no matches" do
|
it "returns an empty array with no matches" do
|
||||||
post_analyzer = PostAnalyzer.new("Hello Jake and Finn!", default_topic_id)
|
post_analyzer = PostAnalyzer.new("Hello Jake and Finn!", default_topic_id)
|
||||||
post_analyzer.raw_mentions.should == []
|
expect(post_analyzer.raw_mentions).to eq([])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns lowercase unique versions of the mentions" do
|
it "returns lowercase unique versions of the mentions" do
|
||||||
post_analyzer = PostAnalyzer.new("@Jake @Finn @Jake", default_topic_id)
|
post_analyzer = PostAnalyzer.new("@Jake @Finn @Jake", default_topic_id)
|
||||||
post_analyzer.raw_mentions.should == ['jake', 'finn']
|
expect(post_analyzer.raw_mentions).to eq(['jake', 'finn'])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "ignores pre" do
|
it "ignores pre" do
|
||||||
post_analyzer = PostAnalyzer.new("<pre>@Jake</pre> @Finn", default_topic_id)
|
post_analyzer = PostAnalyzer.new("<pre>@Jake</pre> @Finn", default_topic_id)
|
||||||
post_analyzer.raw_mentions.should == ['finn']
|
expect(post_analyzer.raw_mentions).to eq(['finn'])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "catches content between pre tags" do
|
it "catches content between pre tags" do
|
||||||
post_analyzer = PostAnalyzer.new("<pre>hello</pre> @Finn <pre></pre>", default_topic_id)
|
post_analyzer = PostAnalyzer.new("<pre>hello</pre> @Finn <pre></pre>", default_topic_id)
|
||||||
post_analyzer.raw_mentions.should == ['finn']
|
expect(post_analyzer.raw_mentions).to eq(['finn'])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "ignores code" do
|
it "ignores code" do
|
||||||
post_analyzer = PostAnalyzer.new("@Jake `@Finn`", default_topic_id)
|
post_analyzer = PostAnalyzer.new("@Jake `@Finn`", default_topic_id)
|
||||||
post_analyzer.raw_mentions.should == ['jake']
|
expect(post_analyzer.raw_mentions).to eq(['jake'])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "ignores code in markdown-formatted code blocks" do
|
it "ignores code in markdown-formatted code blocks" do
|
||||||
post_analyzer = PostAnalyzer.new(" @Jake @Finn\n@Ryan", default_topic_id)
|
post_analyzer = PostAnalyzer.new(" @Jake @Finn\n@Ryan", default_topic_id)
|
||||||
post_analyzer.raw_mentions.should == ['ryan']
|
expect(post_analyzer.raw_mentions).to eq(['ryan'])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "ignores quotes" do
|
it "ignores quotes" do
|
||||||
post_analyzer = PostAnalyzer.new("[quote=\"Evil Trout\"]@Jake[/quote] @Finn", default_topic_id)
|
post_analyzer = PostAnalyzer.new("[quote=\"Evil Trout\"]@Jake[/quote] @Finn", default_topic_id)
|
||||||
post_analyzer.raw_mentions.should == ['finn']
|
expect(post_analyzer.raw_mentions).to eq(['finn'])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "handles underscore in username" do
|
it "handles underscore in username" do
|
||||||
post_analyzer = PostAnalyzer.new("@Jake @Finn @Jake_Old", default_topic_id)
|
post_analyzer = PostAnalyzer.new("@Jake @Finn @Jake_Old", default_topic_id)
|
||||||
post_analyzer.raw_mentions.should == ['jake', 'finn', 'jake_old']
|
expect(post_analyzer.raw_mentions).to eq(['jake', 'finn', 'jake_old'])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe PostDetail do
|
describe PostDetail do
|
||||||
it { should belong_to :post }
|
it { is_expected.to belong_to :post }
|
||||||
|
|
||||||
it { should validate_presence_of :key }
|
it { is_expected.to validate_presence_of :key }
|
||||||
it { should validate_presence_of :value }
|
it { is_expected.to validate_presence_of :value }
|
||||||
it { should validate_uniqueness_of(:key).scoped_to(:post_id) }
|
it { is_expected.to validate_uniqueness_of(:key).scoped_to(:post_id) }
|
||||||
end
|
end
|
||||||
|
|
|
@ -36,14 +36,14 @@ describe PostMover do
|
||||||
context "errors" do
|
context "errors" do
|
||||||
|
|
||||||
it "raises an error when one of the posts doesn't exist" do
|
it "raises an error when one of the posts doesn't exist" do
|
||||||
lambda { topic.move_posts(user, [1003], title: "new testing topic name") }.should raise_error(Discourse::InvalidParameters)
|
expect { topic.move_posts(user, [1003], title: "new testing topic name") }.to raise_error(Discourse::InvalidParameters)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises an error and does not create a topic if no posts were moved" do
|
it "raises an error and does not create a topic if no posts were moved" do
|
||||||
Topic.count.tap do |original_topic_count|
|
Topic.count.tap do |original_topic_count|
|
||||||
lambda {
|
expect {
|
||||||
topic.move_posts(user, [], title: "new testing topic name")
|
topic.move_posts(user, [], title: "new testing topic name")
|
||||||
}.should raise_error(Discourse::InvalidParameters)
|
}.to raise_error(Discourse::InvalidParameters)
|
||||||
|
|
||||||
expect(Topic.count).to eq original_topic_count
|
expect(Topic.count).to eq original_topic_count
|
||||||
end
|
end
|
||||||
|
@ -61,41 +61,41 @@ describe PostMover do
|
||||||
let!(:new_topic) { topic.move_posts(user, [p2.id, p4.id], title: "new testing topic name", category_id: category.id) }
|
let!(:new_topic) { topic.move_posts(user, [p2.id, p4.id], title: "new testing topic name", category_id: category.id) }
|
||||||
|
|
||||||
it "works correctly" do
|
it "works correctly" do
|
||||||
TopicUser.find_by(user_id: user.id, topic_id: topic.id).last_read_post_number.should == p3.post_number
|
expect(TopicUser.find_by(user_id: user.id, topic_id: topic.id).last_read_post_number).to eq(p3.post_number)
|
||||||
|
|
||||||
new_topic.should be_present
|
expect(new_topic).to be_present
|
||||||
new_topic.featured_user1_id.should == another_user.id
|
expect(new_topic.featured_user1_id).to eq(another_user.id)
|
||||||
new_topic.like_count.should == 1
|
expect(new_topic.like_count).to eq(1)
|
||||||
|
|
||||||
new_topic.category.should == category
|
expect(new_topic.category).to eq(category)
|
||||||
topic.featured_user1_id.should be_blank
|
expect(topic.featured_user1_id).to be_blank
|
||||||
new_topic.posts.by_post_number.should =~ [p2, p4]
|
expect(new_topic.posts.by_post_number).to match_array([p2, p4])
|
||||||
|
|
||||||
new_topic.reload
|
new_topic.reload
|
||||||
new_topic.posts_count.should == 2
|
expect(new_topic.posts_count).to eq(2)
|
||||||
new_topic.highest_post_number.should == 2
|
expect(new_topic.highest_post_number).to eq(2)
|
||||||
new_topic.last_post_user_id.should == new_topic.posts.last.user_id
|
expect(new_topic.last_post_user_id).to eq(new_topic.posts.last.user_id)
|
||||||
expect(new_topic.last_posted_at).to be_present
|
expect(new_topic.last_posted_at).to be_present
|
||||||
|
|
||||||
p2.reload
|
p2.reload
|
||||||
p2.sort_order.should == 1
|
expect(p2.sort_order).to eq(1)
|
||||||
p2.post_number.should == 1
|
expect(p2.post_number).to eq(1)
|
||||||
p2.topic_links.first.topic_id.should == new_topic.id
|
expect(p2.topic_links.first.topic_id).to eq(new_topic.id)
|
||||||
|
|
||||||
p4.reload
|
p4.reload
|
||||||
p4.post_number.should == 2
|
expect(p4.post_number).to eq(2)
|
||||||
p4.sort_order.should == 2
|
expect(p4.sort_order).to eq(2)
|
||||||
|
|
||||||
topic.reload
|
topic.reload
|
||||||
topic.featured_user1_id.should be_blank
|
expect(topic.featured_user1_id).to be_blank
|
||||||
topic.like_count.should == 0
|
expect(topic.like_count).to eq(0)
|
||||||
topic.posts_count.should == 2
|
expect(topic.posts_count).to eq(2)
|
||||||
topic.posts.by_post_number.should =~ [p1, p3]
|
expect(topic.posts.by_post_number).to match_array([p1, p3])
|
||||||
topic.highest_post_number.should == p3.post_number
|
expect(topic.highest_post_number).to eq(p3.post_number)
|
||||||
|
|
||||||
# both the like and was_liked user actions should be correct
|
# both the like and was_liked user actions should be correct
|
||||||
action = UserAction.find_by(user_id: another_user.id)
|
action = UserAction.find_by(user_id: another_user.id)
|
||||||
action.target_topic_id.should == new_topic.id
|
expect(action.target_topic_id).to eq(new_topic.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -106,43 +106,43 @@ describe PostMover do
|
||||||
let!(:moved_to) { topic.move_posts(user, [p2.id, p4.id], destination_topic_id: destination_topic.id)}
|
let!(:moved_to) { topic.move_posts(user, [p2.id, p4.id], destination_topic_id: destination_topic.id)}
|
||||||
|
|
||||||
it "works correctly" do
|
it "works correctly" do
|
||||||
moved_to.should == destination_topic
|
expect(moved_to).to eq(destination_topic)
|
||||||
|
|
||||||
# Check out new topic
|
# Check out new topic
|
||||||
moved_to.reload
|
moved_to.reload
|
||||||
moved_to.posts_count.should == 3
|
expect(moved_to.posts_count).to eq(3)
|
||||||
moved_to.highest_post_number.should == 3
|
expect(moved_to.highest_post_number).to eq(3)
|
||||||
moved_to.featured_user1_id.should == another_user.id
|
expect(moved_to.featured_user1_id).to eq(another_user.id)
|
||||||
moved_to.like_count.should == 1
|
expect(moved_to.like_count).to eq(1)
|
||||||
moved_to.category_id.should == SiteSetting.uncategorized_category_id
|
expect(moved_to.category_id).to eq(SiteSetting.uncategorized_category_id)
|
||||||
|
|
||||||
# Posts should be re-ordered
|
# Posts should be re-ordered
|
||||||
p2.reload
|
p2.reload
|
||||||
p2.sort_order.should == 2
|
expect(p2.sort_order).to eq(2)
|
||||||
p2.post_number.should == 2
|
expect(p2.post_number).to eq(2)
|
||||||
p2.topic_id.should == moved_to.id
|
expect(p2.topic_id).to eq(moved_to.id)
|
||||||
p2.reply_count.should == 1
|
expect(p2.reply_count).to eq(1)
|
||||||
p2.reply_to_post_number.should == nil
|
expect(p2.reply_to_post_number).to eq(nil)
|
||||||
|
|
||||||
p4.reload
|
p4.reload
|
||||||
p4.post_number.should == 3
|
expect(p4.post_number).to eq(3)
|
||||||
p4.sort_order.should == 3
|
expect(p4.sort_order).to eq(3)
|
||||||
p4.topic_id.should == moved_to.id
|
expect(p4.topic_id).to eq(moved_to.id)
|
||||||
p4.reply_count.should == 0
|
expect(p4.reply_count).to eq(0)
|
||||||
p4.reply_to_post_number.should == 2
|
expect(p4.reply_to_post_number).to eq(2)
|
||||||
|
|
||||||
# Check out the original topic
|
# Check out the original topic
|
||||||
topic.reload
|
topic.reload
|
||||||
topic.posts_count.should == 2
|
expect(topic.posts_count).to eq(2)
|
||||||
topic.highest_post_number.should == 3
|
expect(topic.highest_post_number).to eq(3)
|
||||||
topic.featured_user1_id.should be_blank
|
expect(topic.featured_user1_id).to be_blank
|
||||||
topic.like_count.should == 0
|
expect(topic.like_count).to eq(0)
|
||||||
topic.posts_count.should == 2
|
expect(topic.posts_count).to eq(2)
|
||||||
topic.posts.by_post_number.should =~ [p1, p3]
|
expect(topic.posts.by_post_number).to match_array([p1, p3])
|
||||||
topic.highest_post_number.should == p3.post_number
|
expect(topic.highest_post_number).to eq(p3.post_number)
|
||||||
|
|
||||||
# Should update last reads
|
# Should update last reads
|
||||||
TopicUser.find_by(user_id: user.id, topic_id: topic.id).last_read_post_number.should == p3.post_number
|
expect(TopicUser.find_by(user_id: user.id, topic_id: topic.id).last_read_post_number).to eq(p3.post_number)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -151,36 +151,36 @@ describe PostMover do
|
||||||
let!(:new_topic) { topic.move_posts(user, [p1.id, p2.id], title: "new testing topic name") }
|
let!(:new_topic) { topic.move_posts(user, [p1.id, p2.id], title: "new testing topic name") }
|
||||||
|
|
||||||
it "copies the OP, doesn't delete it" do
|
it "copies the OP, doesn't delete it" do
|
||||||
new_topic.should be_present
|
expect(new_topic).to be_present
|
||||||
new_topic.posts.reload
|
new_topic.posts.reload
|
||||||
new_topic.posts.by_post_number.first.raw.should == p1.raw
|
expect(new_topic.posts.by_post_number.first.raw).to eq(p1.raw)
|
||||||
|
|
||||||
new_topic.reload
|
new_topic.reload
|
||||||
new_topic.posts_count.should == 2
|
expect(new_topic.posts_count).to eq(2)
|
||||||
new_topic.highest_post_number.should == 2
|
expect(new_topic.highest_post_number).to eq(2)
|
||||||
|
|
||||||
# First post didn't move
|
# First post didn't move
|
||||||
p1.reload
|
p1.reload
|
||||||
p1.sort_order.should == 1
|
expect(p1.sort_order).to eq(1)
|
||||||
p1.post_number.should == 1
|
expect(p1.post_number).to eq(1)
|
||||||
p1.topic_id == topic.id
|
p1.topic_id == topic.id
|
||||||
p1.reply_count.should == 0
|
expect(p1.reply_count).to eq(0)
|
||||||
|
|
||||||
# New first post
|
# New first post
|
||||||
new_first = new_topic.posts.where(post_number: 1).first
|
new_first = new_topic.posts.where(post_number: 1).first
|
||||||
new_first.reply_count.should == 1
|
expect(new_first.reply_count).to eq(1)
|
||||||
|
|
||||||
# Second post is in a new topic
|
# Second post is in a new topic
|
||||||
p2.reload
|
p2.reload
|
||||||
p2.post_number.should == 2
|
expect(p2.post_number).to eq(2)
|
||||||
p2.sort_order.should == 2
|
expect(p2.sort_order).to eq(2)
|
||||||
p2.topic_id == new_topic.id
|
p2.topic_id == new_topic.id
|
||||||
p2.reply_to_post_number.should == 1
|
expect(p2.reply_to_post_number).to eq(1)
|
||||||
p2.reply_count.should == 0
|
expect(p2.reply_count).to eq(0)
|
||||||
|
|
||||||
topic.reload
|
topic.reload
|
||||||
topic.posts.by_post_number.should =~ [p1, p3, p4]
|
expect(topic.posts.by_post_number).to match_array([p1, p3, p4])
|
||||||
topic.highest_post_number.should == p4.post_number
|
expect(topic.highest_post_number).to eq(p4.post_number)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -195,26 +195,26 @@ describe PostMover do
|
||||||
it "works correctly" do
|
it "works correctly" do
|
||||||
destination_deleted_reply.trash!
|
destination_deleted_reply.trash!
|
||||||
|
|
||||||
moved_to.should == destination_topic
|
expect(moved_to).to eq(destination_topic)
|
||||||
|
|
||||||
# Check out new topic
|
# Check out new topic
|
||||||
moved_to.reload
|
moved_to.reload
|
||||||
moved_to.posts_count.should == 3
|
expect(moved_to.posts_count).to eq(3)
|
||||||
moved_to.highest_post_number.should == 4
|
expect(moved_to.highest_post_number).to eq(4)
|
||||||
|
|
||||||
# Posts should be re-ordered
|
# Posts should be re-ordered
|
||||||
p2.reload
|
p2.reload
|
||||||
p2.sort_order.should == 3
|
expect(p2.sort_order).to eq(3)
|
||||||
p2.post_number.should == 3
|
expect(p2.post_number).to eq(3)
|
||||||
p2.topic_id.should == moved_to.id
|
expect(p2.topic_id).to eq(moved_to.id)
|
||||||
p2.reply_count.should == 1
|
expect(p2.reply_count).to eq(1)
|
||||||
p2.reply_to_post_number.should == nil
|
expect(p2.reply_to_post_number).to eq(nil)
|
||||||
|
|
||||||
p4.reload
|
p4.reload
|
||||||
p4.post_number.should == 4
|
expect(p4.post_number).to eq(4)
|
||||||
p4.sort_order.should == 4
|
expect(p4.sort_order).to eq(4)
|
||||||
p4.topic_id.should == moved_to.id
|
expect(p4.topic_id).to eq(moved_to.id)
|
||||||
p4.reply_to_post_number.should == p2.post_number
|
expect(p4.reply_to_post_number).to eq(p2.post_number)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe PostReply do
|
describe PostReply do
|
||||||
|
|
||||||
it { should belong_to :post }
|
it { is_expected.to belong_to :post }
|
||||||
it { should belong_to :reply }
|
it { is_expected.to belong_to :reply }
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,8 +2,8 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe PostTiming do
|
describe PostTiming do
|
||||||
|
|
||||||
it { should validate_presence_of :post_number }
|
it { is_expected.to validate_presence_of :post_number }
|
||||||
it { should validate_presence_of :msecs }
|
it { is_expected.to validate_presence_of :msecs }
|
||||||
|
|
||||||
describe 'pretend_read' do
|
describe 'pretend_read' do
|
||||||
let!(:p1) { Fabricate(:post) }
|
let!(:p1) { Fabricate(:post) }
|
||||||
|
@ -41,21 +41,21 @@ describe PostTiming do
|
||||||
|
|
||||||
PostTiming.pretend_read(topic_id, 2, 3)
|
PostTiming.pretend_read(topic_id, 2, 3)
|
||||||
|
|
||||||
PostTiming.where(topic_id: topic_id, user_id: 1, post_number: 3).count.should == 0
|
expect(PostTiming.where(topic_id: topic_id, user_id: 1, post_number: 3).count).to eq(0)
|
||||||
PostTiming.where(topic_id: topic_id, user_id: 2, post_number: 3).count.should == 1
|
expect(PostTiming.where(topic_id: topic_id, user_id: 2, post_number: 3).count).to eq(1)
|
||||||
PostTiming.where(topic_id: topic_id, user_id: 3, post_number: 3).count.should == 1
|
expect(PostTiming.where(topic_id: topic_id, user_id: 3, post_number: 3).count).to eq(1)
|
||||||
|
|
||||||
tu = TopicUser.find_by(topic_id: topic_id, user_id: 1)
|
tu = TopicUser.find_by(topic_id: topic_id, user_id: 1)
|
||||||
tu.last_read_post_number.should == 1
|
expect(tu.last_read_post_number).to eq(1)
|
||||||
tu.highest_seen_post_number.should == 1
|
expect(tu.highest_seen_post_number).to eq(1)
|
||||||
|
|
||||||
tu = TopicUser.find_by(topic_id: topic_id, user_id: 2)
|
tu = TopicUser.find_by(topic_id: topic_id, user_id: 2)
|
||||||
tu.last_read_post_number.should == 3
|
expect(tu.last_read_post_number).to eq(3)
|
||||||
tu.highest_seen_post_number.should == 3
|
expect(tu.highest_seen_post_number).to eq(3)
|
||||||
|
|
||||||
tu = TopicUser.find_by(topic_id: topic_id, user_id: 3)
|
tu = TopicUser.find_by(topic_id: topic_id, user_id: 3)
|
||||||
tu.last_read_post_number.should == 3
|
expect(tu.last_read_post_number).to eq(3)
|
||||||
tu.highest_seen_post_number.should == 3
|
expect(tu.highest_seen_post_number).to eq(3)
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -73,14 +73,14 @@ describe PostTiming do
|
||||||
|
|
||||||
PostAction.act(user2, post, PostActionType.types[:like])
|
PostAction.act(user2, post, PostActionType.types[:like])
|
||||||
|
|
||||||
post.user.unread_notifications.should == 1
|
expect(post.user.unread_notifications).to eq(1)
|
||||||
post.user.unread_notifications_by_type.should == {Notification.types[:liked] => 1 }
|
expect(post.user.unread_notifications_by_type).to eq({Notification.types[:liked] => 1 })
|
||||||
|
|
||||||
PostTiming.process_timings(post.user, post.topic_id, 1, [[post.post_number, 100]])
|
PostTiming.process_timings(post.user, post.topic_id, 1, [[post.post_number, 100]])
|
||||||
|
|
||||||
post.user.reload
|
post.user.reload
|
||||||
post.user.unread_notifications_by_type.should == {}
|
expect(post.user.unread_notifications_by_type).to eq({})
|
||||||
post.user.unread_notifications.should == 0
|
expect(post.user.unread_notifications).to eq(0)
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -94,10 +94,10 @@ describe PostTiming do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'adds a view to the post' do
|
it 'adds a view to the post' do
|
||||||
lambda {
|
expect {
|
||||||
PostTiming.record_timing(@timing_attrs)
|
PostTiming.record_timing(@timing_attrs)
|
||||||
@post.reload
|
@post.reload
|
||||||
}.should change(@post, :reads).by(1)
|
}.to change(@post, :reads).by(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'multiple calls' do
|
describe 'multiple calls' do
|
||||||
|
@ -106,10 +106,10 @@ describe PostTiming do
|
||||||
PostTiming.record_timing(@timing_attrs)
|
PostTiming.record_timing(@timing_attrs)
|
||||||
timing = PostTiming.find_by(topic_id: @post.topic_id, user_id: @coding_horror.id, post_number: @post.post_number)
|
timing = PostTiming.find_by(topic_id: @post.topic_id, user_id: @coding_horror.id, post_number: @post.post_number)
|
||||||
|
|
||||||
timing.should be_present
|
expect(timing).to be_present
|
||||||
timing.msecs.should == 2468
|
expect(timing.msecs).to eq(2468)
|
||||||
|
|
||||||
@coding_horror.user_stat.posts_read_count.should == 1
|
expect(@coding_horror.user_stat.posts_read_count).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -118,25 +118,25 @@ describe PostTiming do
|
||||||
|
|
||||||
describe 'posts' do
|
describe 'posts' do
|
||||||
it 'has no avg_time by default' do
|
it 'has no avg_time by default' do
|
||||||
@post.avg_time.should be_blank
|
expect(@post.avg_time).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't change when we calculate the avg time for the post because there's no timings" do
|
it "doesn't change when we calculate the avg time for the post because there's no timings" do
|
||||||
Post.calculate_avg_time
|
Post.calculate_avg_time
|
||||||
@post.reload
|
@post.reload
|
||||||
@post.avg_time.should be_blank
|
expect(@post.avg_time).to be_blank
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'topics' do
|
describe 'topics' do
|
||||||
it 'has no avg_time by default' do
|
it 'has no avg_time by default' do
|
||||||
@topic.avg_time.should be_blank
|
expect(@topic.avg_time).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't change when we calculate the avg time for the post because there's no timings" do
|
it "doesn't change when we calculate the avg time for the post because there's no timings" do
|
||||||
Topic.calculate_avg_time
|
Topic.calculate_avg_time
|
||||||
@topic.reload
|
@topic.reload
|
||||||
@topic.avg_time.should be_blank
|
expect(@topic.avg_time).to be_blank
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ describe PostTiming do
|
||||||
PostTiming.record_timing(@timing_attrs.merge(user_id: @post.user_id))
|
PostTiming.record_timing(@timing_attrs.merge(user_id: @post.user_id))
|
||||||
Post.calculate_avg_time
|
Post.calculate_avg_time
|
||||||
@post.reload
|
@post.reload
|
||||||
@post.avg_time.should be_blank
|
expect(@post.avg_time).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -158,7 +158,7 @@ describe PostTiming do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'has a post avg_time from the timing' do
|
it 'has a post avg_time from the timing' do
|
||||||
@post.avg_time.should be_present
|
expect(@post.avg_time).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'forum topics' do
|
describe 'forum topics' do
|
||||||
|
@ -168,7 +168,7 @@ describe PostTiming do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'has an avg_time from the timing' do
|
it 'has an avg_time from the timing' do
|
||||||
@topic.avg_time.should be_present
|
expect(@topic.avg_time).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe PostUpload do
|
describe PostUpload do
|
||||||
|
|
||||||
it { should belong_to :post }
|
it { is_expected.to belong_to :post }
|
||||||
it { should belong_to :upload }
|
it { is_expected.to belong_to :upload }
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,7 +7,7 @@ describe Report do
|
||||||
|
|
||||||
context "no visits" do
|
context "no visits" do
|
||||||
it "returns an empty report" do
|
it "returns an empty report" do
|
||||||
report.data.should be_blank
|
expect(report.data).to be_blank
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ describe Report do
|
||||||
|
|
||||||
context "no #{pluralized}" do
|
context "no #{pluralized}" do
|
||||||
it 'returns an empty report' do
|
it 'returns an empty report' do
|
||||||
report.data.should be_blank
|
expect(report.data).to be_blank
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -65,14 +65,14 @@ describe Report do
|
||||||
|
|
||||||
context 'returns a report with data'
|
context 'returns a report with data'
|
||||||
it 'with 30 days data' do
|
it 'with 30 days data' do
|
||||||
report.data.count.should == 4
|
expect(report.data.count).to eq(4)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'has correct data sorted as asc' do
|
it 'has correct data sorted as asc' do
|
||||||
report.data[0][:y].should == 1 # 30.days.ago
|
expect(report.data[0][:y]).to eq(1) # 30.days.ago
|
||||||
report.data[1][:y].should == 1 # 2.days.ago
|
expect(report.data[1][:y]).to eq(1) # 2.days.ago
|
||||||
report.data[2][:y].should == 1 # 1.day.ago
|
expect(report.data[2][:y]).to eq(1) # 1.day.ago
|
||||||
report.data[3][:y].should == 3 # today
|
expect(report.data[3][:y]).to eq(3) # today
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns today's data" do
|
it "returns today's data" do
|
||||||
|
@ -97,8 +97,8 @@ describe Report do
|
||||||
Fabricate(:private_message_topic, created_at: 1.hour.ago)
|
Fabricate(:private_message_topic, created_at: 1.hour.ago)
|
||||||
Fabricate(:topic, created_at: 1.hour.ago)
|
Fabricate(:topic, created_at: 1.hour.ago)
|
||||||
report = Report.find('topics')
|
report = Report.find('topics')
|
||||||
report.data[0][:y].should == 1
|
expect(report.data[0][:y]).to eq(1)
|
||||||
report.total.should == 1
|
expect(report.total).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'post report should not include private messages' do
|
it 'post report should not include private messages' do
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe TopicAllowedUser do
|
describe TopicAllowedUser do
|
||||||
it { should belong_to :user }
|
it { is_expected.to belong_to :user }
|
||||||
it { should belong_to :topic }
|
it { is_expected.to belong_to :topic }
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,9 +2,9 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe TopicEmbed do
|
describe TopicEmbed do
|
||||||
|
|
||||||
it { should belong_to :topic }
|
it { is_expected.to belong_to :topic }
|
||||||
it { should belong_to :post }
|
it { is_expected.to belong_to :post }
|
||||||
it { should validate_presence_of :embed_url }
|
it { is_expected.to validate_presence_of :embed_url }
|
||||||
|
|
||||||
context '.import' do
|
context '.import' do
|
||||||
|
|
||||||
|
@ -14,42 +14,42 @@ describe TopicEmbed do
|
||||||
let(:contents) { "hello world new post <a href='/hello'>hello</a> <img src='/images/wat.jpg'>" }
|
let(:contents) { "hello world new post <a href='/hello'>hello</a> <img src='/images/wat.jpg'>" }
|
||||||
|
|
||||||
it "returns nil when the URL is malformed" do
|
it "returns nil when the URL is malformed" do
|
||||||
TopicEmbed.import(user, "invalid url", title, contents).should == nil
|
expect(TopicEmbed.import(user, "invalid url", title, contents)).to eq(nil)
|
||||||
TopicEmbed.count.should == 0
|
expect(TopicEmbed.count).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'creation of a post' do
|
context 'creation of a post' do
|
||||||
let!(:post) { TopicEmbed.import(user, url, title, contents) }
|
let!(:post) { TopicEmbed.import(user, url, title, contents) }
|
||||||
|
|
||||||
it "works as expected with a new URL" do
|
it "works as expected with a new URL" do
|
||||||
post.should be_present
|
expect(post).to be_present
|
||||||
|
|
||||||
# It uses raw_html rendering
|
# It uses raw_html rendering
|
||||||
post.cook_method.should == Post.cook_methods[:raw_html]
|
expect(post.cook_method).to eq(Post.cook_methods[:raw_html])
|
||||||
post.cooked.should == post.raw
|
expect(post.cooked).to eq(post.raw)
|
||||||
|
|
||||||
# It converts relative URLs to absolute
|
# It converts relative URLs to absolute
|
||||||
post.cooked.start_with?("hello world new post <a href=\"http://eviltrout.com/hello\">hello</a> <img src=\"http://eviltrout.com/images/wat.jpg\">").should == true
|
expect(post.cooked.start_with?("hello world new post <a href=\"http://eviltrout.com/hello\">hello</a> <img src=\"http://eviltrout.com/images/wat.jpg\">")).to eq(true)
|
||||||
|
|
||||||
post.topic.has_topic_embed?.should == true
|
expect(post.topic.has_topic_embed?).to eq(true)
|
||||||
TopicEmbed.where(topic_id: post.topic_id).should be_present
|
expect(TopicEmbed.where(topic_id: post.topic_id)).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
it "Supports updating the post" do
|
it "Supports updating the post" do
|
||||||
post = TopicEmbed.import(user, url, title, "muhahaha new contents!")
|
post = TopicEmbed.import(user, url, title, "muhahaha new contents!")
|
||||||
post.cooked.should =~ /new contents/
|
expect(post.cooked).to match(/new contents/)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "Should leave uppercase Feed Entry URL untouched in content" do
|
it "Should leave uppercase Feed Entry URL untouched in content" do
|
||||||
cased_url = 'http://eviltrout.com/ABCD'
|
cased_url = 'http://eviltrout.com/ABCD'
|
||||||
post = TopicEmbed.import(user, cased_url, title, "some random content")
|
post = TopicEmbed.import(user, cased_url, title, "some random content")
|
||||||
post.cooked.should =~ /#{cased_url}/
|
expect(post.cooked).to match(/#{cased_url}/)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "Should leave lowercase Feed Entry URL untouched in content" do
|
it "Should leave lowercase Feed Entry URL untouched in content" do
|
||||||
cased_url = 'http://eviltrout.com/abcd'
|
cased_url = 'http://eviltrout.com/abcd'
|
||||||
post = TopicEmbed.import(user, cased_url, title, "some random content")
|
post = TopicEmbed.import(user, cased_url, title, "some random content")
|
||||||
post.cooked.should =~ /#{cased_url}/
|
expect(post.cooked).to match(/#{cased_url}/)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -21,10 +21,10 @@ describe TopicFeaturedUsers do
|
||||||
|
|
||||||
t.reload
|
t.reload
|
||||||
|
|
||||||
t.featured_user1_id.should == p2.user_id
|
expect(t.featured_user1_id).to eq(p2.user_id)
|
||||||
t.featured_user2_id.should == p4.user_id
|
expect(t.featured_user2_id).to eq(p4.user_id)
|
||||||
t.featured_user3_id.should == nil
|
expect(t.featured_user3_id).to eq(nil)
|
||||||
t.featured_user4_id.should == nil
|
expect(t.featured_user4_id).to eq(nil)
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,9 +2,9 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe TopicInvite do
|
describe TopicInvite do
|
||||||
|
|
||||||
it { should belong_to :topic }
|
it { is_expected.to belong_to :topic }
|
||||||
it { should belong_to :invite }
|
it { is_expected.to belong_to :invite }
|
||||||
it { should validate_presence_of :topic_id }
|
it { is_expected.to validate_presence_of :topic_id }
|
||||||
it { should validate_presence_of :invite_id }
|
it { is_expected.to validate_presence_of :invite_id }
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,9 +2,9 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe TopicLinkClick do
|
describe TopicLinkClick do
|
||||||
|
|
||||||
it { should belong_to :topic_link }
|
it { is_expected.to belong_to :topic_link }
|
||||||
it { should belong_to :user }
|
it { is_expected.to belong_to :user }
|
||||||
it { should validate_presence_of :topic_link_id }
|
it { is_expected.to validate_presence_of :topic_link_id }
|
||||||
|
|
||||||
def test_uri
|
def test_uri
|
||||||
URI.parse('http://test.host')
|
URI.parse('http://test.host')
|
||||||
|
@ -19,7 +19,7 @@ describe TopicLinkClick do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'has 0 clicks at first' do
|
it 'has 0 clicks at first' do
|
||||||
@topic_link.clicks.should == 0
|
expect(@topic_link.clicks).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'create' do
|
context 'create' do
|
||||||
|
@ -28,16 +28,16 @@ describe TopicLinkClick do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates the forum topic link click' do
|
it 'creates the forum topic link click' do
|
||||||
TopicLinkClick.count.should == 1
|
expect(TopicLinkClick.count).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'has 0 clicks at first' do
|
it 'has 0 clicks at first' do
|
||||||
@topic_link.reload
|
@topic_link.reload
|
||||||
@topic_link.clicks.should == 1
|
expect(@topic_link.clicks).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'serializes and deserializes the IP' do
|
it 'serializes and deserializes the IP' do
|
||||||
TopicLinkClick.first.ip_address.to_s.should == '192.168.1.1'
|
expect(TopicLinkClick.first.ip_address.to_s).to eq('192.168.1.1')
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -48,15 +48,15 @@ describe TopicLinkClick do
|
||||||
let(:click) { TopicLinkClick.create_from(url: "url that doesn't exist", post_id: @post.id, ip: '127.0.0.1') }
|
let(:click) { TopicLinkClick.create_from(url: "url that doesn't exist", post_id: @post.id, ip: '127.0.0.1') }
|
||||||
|
|
||||||
it "returns nil" do
|
it "returns nil" do
|
||||||
click.should == nil
|
expect(click).to eq(nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'clicking on your own link' do
|
context 'clicking on your own link' do
|
||||||
it "should not record the click" do
|
it "should not record the click" do
|
||||||
lambda {
|
expect {
|
||||||
TopicLinkClick.create_from(url: @topic_link.url, post_id: @post.id, ip: '127.0.0.0', user_id: @post.user_id)
|
TopicLinkClick.create_from(url: @topic_link.url, post_id: @post.id, ip: '127.0.0.0', user_id: @post.user_id)
|
||||||
}.should_not change(TopicLinkClick, :count)
|
}.not_to change(TopicLinkClick, :count)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -67,14 +67,14 @@ describe TopicLinkClick do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates a click' do
|
it 'creates a click' do
|
||||||
@click.should be_present
|
expect(@click).to be_present
|
||||||
@click.topic_link.should == @topic_link
|
expect(@click.topic_link).to eq(@topic_link)
|
||||||
@url.should == @topic_link.url
|
expect(@url).to eq(@topic_link.url)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "clicking again" do
|
context "clicking again" do
|
||||||
it "should not record the click due to rate limiting" do
|
it "should not record the click due to rate limiting" do
|
||||||
-> { TopicLinkClick.create_from(url: @topic_link.url, post_id: @post.id, ip: '127.0.0.1') }.should_not change(TopicLinkClick, :count)
|
expect { TopicLinkClick.create_from(url: @topic_link.url, post_id: @post.id, ip: '127.0.0.1') }.not_to change(TopicLinkClick, :count)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -84,19 +84,19 @@ describe TopicLinkClick do
|
||||||
|
|
||||||
it 'returns the url' do
|
it 'returns the url' do
|
||||||
url = TopicLinkClick.create_from(url: '/relative-url', post_id: @post.id, ip: '127.0.0.1')
|
url = TopicLinkClick.create_from(url: '/relative-url', post_id: @post.id, ip: '127.0.0.1')
|
||||||
url.should == "/relative-url"
|
expect(url).to eq("/relative-url")
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'finds a protocol relative urls with a host' do
|
it 'finds a protocol relative urls with a host' do
|
||||||
url = "//#{host}/relative-url"
|
url = "//#{host}/relative-url"
|
||||||
redirect = TopicLinkClick.create_from(url: url)
|
redirect = TopicLinkClick.create_from(url: url)
|
||||||
redirect.should == url
|
expect(redirect).to eq(url)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns the url if it's on our host" do
|
it "returns the url if it's on our host" do
|
||||||
url = "http://#{host}/relative-url"
|
url = "http://#{host}/relative-url"
|
||||||
redirect = TopicLinkClick.create_from(url: url)
|
redirect = TopicLinkClick.create_from(url: url)
|
||||||
redirect.should == url
|
expect(redirect).to eq(url)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -107,9 +107,9 @@ describe TopicLinkClick do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates a click' do
|
it 'creates a click' do
|
||||||
@click.should be_present
|
expect(@click).to be_present
|
||||||
@click.topic_link.should == @topic_link
|
expect(@click.topic_link).to eq(@topic_link)
|
||||||
@url.should == 'https://twitter.com'
|
expect(@url).to eq('https://twitter.com')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -120,9 +120,9 @@ describe TopicLinkClick do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates a click' do
|
it 'creates a click' do
|
||||||
@click.should be_present
|
expect(@click).to be_present
|
||||||
@click.topic_link.should == @topic_link
|
expect(@click.topic_link).to eq(@topic_link)
|
||||||
@url.should == @topic_link.url
|
expect(@url).to eq(@topic_link.url)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe TopicLink do
|
describe TopicLink do
|
||||||
|
|
||||||
it { should validate_presence_of :url }
|
it { is_expected.to validate_presence_of :url }
|
||||||
|
|
||||||
def test_uri
|
def test_uri
|
||||||
URI.parse(Discourse.base_url)
|
URI.parse(Discourse.base_url)
|
||||||
|
@ -20,7 +20,7 @@ describe TopicLink do
|
||||||
ftl = TopicLink.new(url: "/t/#{topic.id}",
|
ftl = TopicLink.new(url: "/t/#{topic.id}",
|
||||||
topic_id: topic.id,
|
topic_id: topic.id,
|
||||||
link_topic_id: topic.id)
|
link_topic_id: topic.id)
|
||||||
ftl.valid?.should == false
|
expect(ftl.valid?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'external links' do
|
describe 'external links' do
|
||||||
|
@ -37,13 +37,13 @@ http://b.com/#{'a'*500}
|
||||||
|
|
||||||
it 'works' do
|
it 'works' do
|
||||||
# has the forum topic links
|
# has the forum topic links
|
||||||
topic.topic_links.count.should == 2
|
expect(topic.topic_links.count).to eq(2)
|
||||||
|
|
||||||
# works with markdown links
|
# works with markdown links
|
||||||
topic.topic_links.exists?(url: "http://a.com/").should == true
|
expect(topic.topic_links.exists?(url: "http://a.com/")).to eq(true)
|
||||||
|
|
||||||
#works with markdown links followed by a period
|
#works with markdown links followed by a period
|
||||||
topic.topic_links.exists?(url: "http://b.com/b").should == true
|
expect(topic.topic_links.exists?(url: "http://b.com/b")).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -66,9 +66,9 @@ http://b.com/#{'a'*500}
|
||||||
|
|
||||||
link = topic.topic_links.first
|
link = topic.topic_links.first
|
||||||
# should have a link
|
# should have a link
|
||||||
link.should be_present
|
expect(link).to be_present
|
||||||
# should be the canonical URL
|
# should be the canonical URL
|
||||||
link.url.should == url
|
expect(link.url).to eq(url)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -95,24 +95,24 @@ http://b.com/#{'a'*500}
|
||||||
TopicLink.extract_from(linked_post)
|
TopicLink.extract_from(linked_post)
|
||||||
|
|
||||||
link = topic.topic_links.first
|
link = topic.topic_links.first
|
||||||
link.should be_present
|
expect(link).to be_present
|
||||||
link.should be_internal
|
expect(link).to be_internal
|
||||||
link.url.should == url
|
expect(link.url).to eq(url)
|
||||||
link.domain.should == test_uri.host
|
expect(link.domain).to eq(test_uri.host)
|
||||||
link.link_topic_id == other_topic.id
|
link.link_topic_id == other_topic.id
|
||||||
link.should_not be_reflection
|
expect(link).not_to be_reflection
|
||||||
|
|
||||||
reflection = other_topic.topic_links.first
|
reflection = other_topic.topic_links.first
|
||||||
|
|
||||||
reflection.should be_present
|
expect(reflection).to be_present
|
||||||
reflection.should be_reflection
|
expect(reflection).to be_reflection
|
||||||
reflection.post_id.should be_present
|
expect(reflection.post_id).to be_present
|
||||||
reflection.domain.should == test_uri.host
|
expect(reflection.domain).to eq(test_uri.host)
|
||||||
reflection.url.should == "http://#{test_uri.host}/t/unique-topic-name/#{topic.id}/#{linked_post.post_number}"
|
expect(reflection.url).to eq("http://#{test_uri.host}/t/unique-topic-name/#{topic.id}/#{linked_post.post_number}")
|
||||||
reflection.link_topic_id.should == topic.id
|
expect(reflection.link_topic_id).to eq(topic.id)
|
||||||
reflection.link_post_id.should == linked_post.id
|
expect(reflection.link_post_id).to eq(linked_post.id)
|
||||||
|
|
||||||
reflection.user_id.should == link.user_id
|
expect(reflection.user_id).to eq(link.user_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'removing a link' do
|
context 'removing a link' do
|
||||||
|
@ -123,9 +123,9 @@ http://b.com/#{'a'*500}
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should remove the link' do
|
it 'should remove the link' do
|
||||||
topic.topic_links.where(post_id: post.id).should be_blank
|
expect(topic.topic_links.where(post_id: post.id)).to be_blank
|
||||||
# should remove the reflected link
|
# should remove the reflected link
|
||||||
other_topic.topic_links.should be_blank
|
expect(other_topic.topic_links).to be_blank
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -137,7 +137,7 @@ http://b.com/#{'a'*500}
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not extract a link' do
|
it 'does not extract a link' do
|
||||||
topic.topic_links.should be_blank
|
expect(topic.topic_links).to be_blank
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -148,7 +148,7 @@ http://b.com/#{'a'*500}
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not extract a link' do
|
it 'does not extract a link' do
|
||||||
topic.topic_links.should be_present
|
expect(topic.topic_links).to be_present
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -160,7 +160,7 @@ http://b.com/#{'a'*500}
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not extract a link' do
|
it 'does not extract a link' do
|
||||||
topic.topic_links.should be_blank
|
expect(topic.topic_links).to be_blank
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -172,8 +172,8 @@ http://b.com/#{'a'*500}
|
||||||
TopicLink.extract_from(quoting_post)
|
TopicLink.extract_from(quoting_post)
|
||||||
link = quoting_post.topic.topic_links.first
|
link = quoting_post.topic.topic_links.first
|
||||||
|
|
||||||
link.link_post_id.should == linked_post.id
|
expect(link.link_post_id).to eq(linked_post.id)
|
||||||
link.quote.should == true
|
expect(link.quote).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -184,13 +184,13 @@ http://b.com/#{'a'*500}
|
||||||
TopicLink.extract_from(post)
|
TopicLink.extract_from(post)
|
||||||
link = topic.topic_links.first
|
link = topic.topic_links.first
|
||||||
# extracted the link
|
# extracted the link
|
||||||
link.should be_present
|
expect(link).to be_present
|
||||||
# is set to internal
|
# is set to internal
|
||||||
link.should be_internal
|
expect(link).to be_internal
|
||||||
# has the correct url
|
# has the correct url
|
||||||
link.url.should == "/uploads/default/208/87bb3d8428eb4783.rb"
|
expect(link.url).to eq("/uploads/default/208/87bb3d8428eb4783.rb")
|
||||||
# should not be the reflection
|
# should not be the reflection
|
||||||
link.should_not be_reflection
|
expect(link).not_to be_reflection
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -202,13 +202,13 @@ http://b.com/#{'a'*500}
|
||||||
TopicLink.extract_from(post)
|
TopicLink.extract_from(post)
|
||||||
link = topic.topic_links.first
|
link = topic.topic_links.first
|
||||||
# extracted the link
|
# extracted the link
|
||||||
link.should be_present
|
expect(link).to be_present
|
||||||
# is not internal
|
# is not internal
|
||||||
link.should_not be_internal
|
expect(link).not_to be_internal
|
||||||
# has the correct url
|
# has the correct url
|
||||||
link.url.should == "//s3.amazonaws.com/bucket/2104a0211c9ce41ed67989a1ed62e9a394c1fbd1446.rb"
|
expect(link.url).to eq("//s3.amazonaws.com/bucket/2104a0211c9ce41ed67989a1ed62e9a394c1fbd1446.rb")
|
||||||
# should not be the reflection
|
# should not be the reflection
|
||||||
link.should_not be_reflection
|
expect(link).not_to be_reflection
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -227,8 +227,8 @@ http://b.com/#{'a'*500}
|
||||||
|
|
||||||
TopicLink.extract_from(linked_post)
|
TopicLink.extract_from(linked_post)
|
||||||
|
|
||||||
topic.topic_links.first.should == nil
|
expect(topic.topic_links.first).to eq(nil)
|
||||||
pm.topic_links.first.should_not == nil
|
expect(pm.topic_links.first).not_to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -245,13 +245,13 @@ http://b.com/#{'a'*500}
|
||||||
TopicLink.extract_from(post)
|
TopicLink.extract_from(post)
|
||||||
reflection = other_topic.topic_links.first
|
reflection = other_topic.topic_links.first
|
||||||
|
|
||||||
reflection.url.should == "http://#{alternate_uri.host}:5678/t/unique-topic-name/#{topic.id}"
|
expect(reflection.url).to eq("http://#{alternate_uri.host}:5678/t/unique-topic-name/#{topic.id}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'counts_for and topic_map' do
|
describe 'counts_for and topic_map' do
|
||||||
it 'returns blank without posts' do
|
it 'returns blank without posts' do
|
||||||
TopicLink.counts_for(Guardian.new, nil, nil).should be_blank
|
expect(TopicLink.counts_for(Guardian.new, nil, nil)).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with data' do
|
context 'with data' do
|
||||||
|
@ -271,13 +271,13 @@ http://b.com/#{'a'*500}
|
||||||
topic_link = post.topic.topic_links.first
|
topic_link = post.topic.topic_links.first
|
||||||
TopicLinkClick.create(topic_link: topic_link, ip_address: '192.168.1.1')
|
TopicLinkClick.create(topic_link: topic_link, ip_address: '192.168.1.1')
|
||||||
|
|
||||||
counts_for[post.id].should be_present
|
expect(counts_for[post.id]).to be_present
|
||||||
counts_for[post.id].find {|l| l[:url] == 'http://google.com'}[:clicks].should == 0
|
expect(counts_for[post.id].find {|l| l[:url] == 'http://google.com'}[:clicks]).to eq(0)
|
||||||
counts_for[post.id].first[:clicks].should == 1
|
expect(counts_for[post.id].first[:clicks]).to eq(1)
|
||||||
|
|
||||||
array = TopicLink.topic_map(Guardian.new, post.topic_id)
|
array = TopicLink.topic_map(Guardian.new, post.topic_id)
|
||||||
array.length.should == 4
|
expect(array.length).to eq(4)
|
||||||
array[0]["clicks"].should == "1"
|
expect(array[0]["clicks"]).to eq("1")
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'secures internal links correctly' do
|
it 'secures internal links correctly' do
|
||||||
|
@ -288,19 +288,19 @@ http://b.com/#{'a'*500}
|
||||||
post = Fabricate(:post, raw: "hello test topic #{url}")
|
post = Fabricate(:post, raw: "hello test topic #{url}")
|
||||||
TopicLink.extract_from(post)
|
TopicLink.extract_from(post)
|
||||||
|
|
||||||
TopicLink.topic_map(Guardian.new, post.topic_id).count.should == 1
|
expect(TopicLink.topic_map(Guardian.new, post.topic_id).count).to eq(1)
|
||||||
TopicLink.counts_for(Guardian.new, post.topic, [post]).length.should == 1
|
expect(TopicLink.counts_for(Guardian.new, post.topic, [post]).length).to eq(1)
|
||||||
|
|
||||||
category.set_permissions(:staff => :full)
|
category.set_permissions(:staff => :full)
|
||||||
category.save
|
category.save
|
||||||
|
|
||||||
admin = Fabricate(:admin)
|
admin = Fabricate(:admin)
|
||||||
|
|
||||||
TopicLink.topic_map(Guardian.new, post.topic_id).count.should == 0
|
expect(TopicLink.topic_map(Guardian.new, post.topic_id).count).to eq(0)
|
||||||
TopicLink.topic_map(Guardian.new(admin), post.topic_id).count.should == 1
|
expect(TopicLink.topic_map(Guardian.new(admin), post.topic_id).count).to eq(1)
|
||||||
|
|
||||||
TopicLink.counts_for(Guardian.new, post.topic, [post]).length.should == 0
|
expect(TopicLink.counts_for(Guardian.new, post.topic, [post]).length).to eq(0)
|
||||||
TopicLink.counts_for(Guardian.new(admin), post.topic, [post]).length.should == 1
|
expect(TopicLink.counts_for(Guardian.new(admin), post.topic, [post]).length).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,10 +19,10 @@ describe TopicStatusUpdate do
|
||||||
|
|
||||||
TopicStatusUpdate.new(post.topic, admin).update!("autoclosed", true)
|
TopicStatusUpdate.new(post.topic, admin).update!("autoclosed", true)
|
||||||
|
|
||||||
post.topic.posts.count.should == 2
|
expect(post.topic.posts.count).to eq(2)
|
||||||
|
|
||||||
tu = TopicUser.find_by(user_id: user.id)
|
tu = TopicUser.find_by(user_id: user.id)
|
||||||
tu.last_read_post_number.should == 2
|
expect(tu.last_read_post_number).to eq(2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "adds an autoclosed message" do
|
it "adds an autoclosed message" do
|
||||||
|
@ -30,7 +30,7 @@ describe TopicStatusUpdate do
|
||||||
|
|
||||||
TopicStatusUpdate.new(topic, admin).update!("autoclosed", true)
|
TopicStatusUpdate.new(topic, admin).update!("autoclosed", true)
|
||||||
|
|
||||||
topic.posts.last.raw.should == I18n.t("topic_statuses.autoclosed_enabled_minutes", count: 0)
|
expect(topic.posts.last.raw).to eq(I18n.t("topic_statuses.autoclosed_enabled_minutes", count: 0))
|
||||||
end
|
end
|
||||||
|
|
||||||
it "adds an autoclosed message based on last post" do
|
it "adds an autoclosed message based on last post" do
|
||||||
|
@ -39,7 +39,7 @@ describe TopicStatusUpdate do
|
||||||
|
|
||||||
TopicStatusUpdate.new(topic, admin).update!("autoclosed", true)
|
TopicStatusUpdate.new(topic, admin).update!("autoclosed", true)
|
||||||
|
|
||||||
topic.posts.last.raw.should == I18n.t("topic_statuses.autoclosed_enabled_lastpost_minutes", count: 0)
|
expect(topic.posts.last.raw).to eq(I18n.t("topic_statuses.autoclosed_enabled_lastpost_minutes", count: 0))
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,39 +17,39 @@ describe TopicTrackingState do
|
||||||
|
|
||||||
it "correctly gets the tracking state" do
|
it "correctly gets the tracking state" do
|
||||||
report = TopicTrackingState.report([user.id])
|
report = TopicTrackingState.report([user.id])
|
||||||
report.length.should == 0
|
expect(report.length).to eq(0)
|
||||||
|
|
||||||
new_post = post
|
new_post = post
|
||||||
post.topic.notifier.watch_topic!(post.topic.user_id)
|
post.topic.notifier.watch_topic!(post.topic.user_id)
|
||||||
|
|
||||||
report = TopicTrackingState.report([user.id])
|
report = TopicTrackingState.report([user.id])
|
||||||
|
|
||||||
report.length.should == 1
|
expect(report.length).to eq(1)
|
||||||
row = report[0]
|
row = report[0]
|
||||||
|
|
||||||
row.topic_id.should == post.topic_id
|
expect(row.topic_id).to eq(post.topic_id)
|
||||||
row.highest_post_number.should == 1
|
expect(row.highest_post_number).to eq(1)
|
||||||
row.last_read_post_number.should == nil
|
expect(row.last_read_post_number).to eq(nil)
|
||||||
row.user_id.should == user.id
|
expect(row.user_id).to eq(user.id)
|
||||||
|
|
||||||
# lets not leak out random users
|
# lets not leak out random users
|
||||||
TopicTrackingState.report([post.user_id]).should be_empty
|
expect(TopicTrackingState.report([post.user_id])).to be_empty
|
||||||
|
|
||||||
# lets not return anything if we scope on non-existing topic
|
# lets not return anything if we scope on non-existing topic
|
||||||
TopicTrackingState.report([user.id], post.topic_id + 1).should be_empty
|
expect(TopicTrackingState.report([user.id], post.topic_id + 1)).to be_empty
|
||||||
|
|
||||||
# when we reply the poster should have an unread row
|
# when we reply the poster should have an unread row
|
||||||
create_post(user: user, topic: post.topic)
|
create_post(user: user, topic: post.topic)
|
||||||
|
|
||||||
report = TopicTrackingState.report([post.user_id, user.id])
|
report = TopicTrackingState.report([post.user_id, user.id])
|
||||||
report.length.should == 1
|
expect(report.length).to eq(1)
|
||||||
|
|
||||||
row = report[0]
|
row = report[0]
|
||||||
|
|
||||||
row.topic_id.should == post.topic_id
|
expect(row.topic_id).to eq(post.topic_id)
|
||||||
row.highest_post_number.should == 2
|
expect(row.highest_post_number).to eq(2)
|
||||||
row.last_read_post_number.should == 1
|
expect(row.last_read_post_number).to eq(1)
|
||||||
row.user_id.should == post.user_id
|
expect(row.user_id).to eq(post.user_id)
|
||||||
|
|
||||||
# when we have no permission to see a category, don't show its stats
|
# when we have no permission to see a category, don't show its stats
|
||||||
category = Fabricate(:category, read_restricted: true)
|
category = Fabricate(:category, read_restricted: true)
|
||||||
|
@ -57,6 +57,6 @@ describe TopicTrackingState do
|
||||||
post.topic.category_id = category.id
|
post.topic.category_id = category.id
|
||||||
post.topic.save
|
post.topic.save
|
||||||
|
|
||||||
TopicTrackingState.report([post.user_id, user.id]).count.should == 0
|
expect(TopicTrackingState.report([post.user_id, user.id]).count).to eq(0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,7 +14,7 @@ describe TopicViewItem do
|
||||||
TopicViewItem.create!(topic_id: 1, ip_address: "1.1.1.1", viewed_at: 1.day.ago)
|
TopicViewItem.create!(topic_id: 1, ip_address: "1.1.1.1", viewed_at: 1.day.ago)
|
||||||
add(1, "1.1.1.1")
|
add(1, "1.1.1.1")
|
||||||
|
|
||||||
TopicViewItem.count.should == 3
|
expect(TopicViewItem.count).to eq(3)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "increases a users view count" do
|
it "increases a users view count" do
|
||||||
|
@ -24,7 +24,7 @@ describe TopicViewItem do
|
||||||
add(1, "1.1.1.1", user.id)
|
add(1, "1.1.1.1", user.id)
|
||||||
|
|
||||||
user.user_stat.reload
|
user.user_stat.reload
|
||||||
user.user_stat.topics_entered.should == 1
|
expect(user.user_stat.topics_entered).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,51 +16,51 @@ describe TrustLevel3Requirements do
|
||||||
describe "requirements" do
|
describe "requirements" do
|
||||||
it "min_days_visited uses site setting" do
|
it "min_days_visited uses site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_days_visited).returns(66)
|
SiteSetting.stubs(:tl3_requires_days_visited).returns(66)
|
||||||
tl3_requirements.min_days_visited.should == 66
|
expect(tl3_requirements.min_days_visited).to eq(66)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_topics_replied_to uses site setting" do
|
it "min_topics_replied_to uses site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_topics_replied_to).returns(12)
|
SiteSetting.stubs(:tl3_requires_topics_replied_to).returns(12)
|
||||||
tl3_requirements.min_topics_replied_to.should == 12
|
expect(tl3_requirements.min_topics_replied_to).to eq(12)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_topics_viewed depends on site setting and number of topics created" do
|
it "min_topics_viewed depends on site setting and number of topics created" do
|
||||||
SiteSetting.stubs(:tl3_requires_topics_viewed).returns(75)
|
SiteSetting.stubs(:tl3_requires_topics_viewed).returns(75)
|
||||||
described_class.stubs(:num_topics_in_time_period).returns(31)
|
described_class.stubs(:num_topics_in_time_period).returns(31)
|
||||||
tl3_requirements.min_topics_viewed.should == 23
|
expect(tl3_requirements.min_topics_viewed).to eq(23)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_posts_read depends on site setting and number of posts created" do
|
it "min_posts_read depends on site setting and number of posts created" do
|
||||||
SiteSetting.stubs(:tl3_requires_posts_read).returns(66)
|
SiteSetting.stubs(:tl3_requires_posts_read).returns(66)
|
||||||
described_class.stubs(:num_posts_in_time_period).returns(1234)
|
described_class.stubs(:num_posts_in_time_period).returns(1234)
|
||||||
tl3_requirements.min_posts_read.should == 814
|
expect(tl3_requirements.min_posts_read).to eq(814)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_topics_viewed_all_time depends on site setting" do
|
it "min_topics_viewed_all_time depends on site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_topics_viewed_all_time).returns(75)
|
SiteSetting.stubs(:tl3_requires_topics_viewed_all_time).returns(75)
|
||||||
tl3_requirements.min_topics_viewed_all_time.should == 75
|
expect(tl3_requirements.min_topics_viewed_all_time).to eq(75)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_posts_read_all_time depends on site setting" do
|
it "min_posts_read_all_time depends on site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_posts_read_all_time).returns(1001)
|
SiteSetting.stubs(:tl3_requires_posts_read_all_time).returns(1001)
|
||||||
tl3_requirements.min_posts_read_all_time.should == 1001
|
expect(tl3_requirements.min_posts_read_all_time).to eq(1001)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "max_flagged_posts depends on site setting" do
|
it "max_flagged_posts depends on site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_max_flagged).returns(3)
|
SiteSetting.stubs(:tl3_requires_max_flagged).returns(3)
|
||||||
tl3_requirements.max_flagged_posts.should == 3
|
expect(tl3_requirements.max_flagged_posts).to eq(3)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_likes_given depends on site setting" do
|
it "min_likes_given depends on site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_likes_given).returns(30)
|
SiteSetting.stubs(:tl3_requires_likes_given).returns(30)
|
||||||
tl3_requirements.min_likes_given.should == 30
|
expect(tl3_requirements.min_likes_given).to eq(30)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "min_likes_received depends on site setting" do
|
it "min_likes_received depends on site setting" do
|
||||||
SiteSetting.stubs(:tl3_requires_likes_received).returns(20)
|
SiteSetting.stubs(:tl3_requires_likes_received).returns(20)
|
||||||
tl3_requirements.min_likes_received.should == 20
|
expect(tl3_requirements.min_likes_received).to eq(20)
|
||||||
tl3_requirements.min_likes_received_days.should == 7
|
expect(tl3_requirements.min_likes_received_days).to eq(7)
|
||||||
tl3_requirements.min_likes_received_users.should == 5
|
expect(tl3_requirements.min_likes_received_users).to eq(5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ describe TrustLevel3Requirements do
|
||||||
user.update_posts_read!(1, 3.days.ago)
|
user.update_posts_read!(1, 3.days.ago)
|
||||||
user.update_posts_read!(0, 4.days.ago)
|
user.update_posts_read!(0, 4.days.ago)
|
||||||
user.update_posts_read!(3, 101.days.ago)
|
user.update_posts_read!(3, 101.days.ago)
|
||||||
tl3_requirements.days_visited.should == 2
|
expect(tl3_requirements.days_visited).to eq(2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ describe TrustLevel3Requirements do
|
||||||
topic2 = create_post(created_at: 101.days.ago).topic
|
topic2 = create_post(created_at: 101.days.ago).topic
|
||||||
_reply2 = create_post(topic: topic2, user: user, created_at: 101.days.ago) # topic is over 100 days old
|
_reply2 = create_post(topic: topic2, user: user, created_at: 101.days.ago) # topic is over 100 days old
|
||||||
|
|
||||||
tl3_requirements.num_topics_replied_to.should == 1
|
expect(tl3_requirements.num_topics_replied_to).to eq(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ describe TrustLevel3Requirements do
|
||||||
make_view(9, 3.days.ago, user.id) # same topic, different day
|
make_view(9, 3.days.ago, user.id) # same topic, different day
|
||||||
make_view(3, 4.days.ago, user.id)
|
make_view(3, 4.days.ago, user.id)
|
||||||
make_view(2, 101.days.ago, user.id) # too long ago
|
make_view(2, 101.days.ago, user.id) # too long ago
|
||||||
tl3_requirements.topics_viewed.should == 2
|
expect(tl3_requirements.topics_viewed).to eq(2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ describe TrustLevel3Requirements do
|
||||||
user.update_posts_read!(1, 3.days.ago)
|
user.update_posts_read!(1, 3.days.ago)
|
||||||
user.update_posts_read!(0, 4.days.ago)
|
user.update_posts_read!(0, 4.days.ago)
|
||||||
user.update_posts_read!(5, 101.days.ago)
|
user.update_posts_read!(5, 101.days.ago)
|
||||||
tl3_requirements.posts_read.should == 4
|
expect(tl3_requirements.posts_read).to eq(4)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ describe TrustLevel3Requirements do
|
||||||
make_view(10, 1.day.ago, user.id)
|
make_view(10, 1.day.ago, user.id)
|
||||||
make_view(9, 100.days.ago, user.id)
|
make_view(9, 100.days.ago, user.id)
|
||||||
make_view(8, 101.days.ago, user.id)
|
make_view(8, 101.days.ago, user.id)
|
||||||
tl3_requirements.topics_viewed_all_time.should == 3
|
expect(tl3_requirements.topics_viewed_all_time).to eq(3)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ describe TrustLevel3Requirements do
|
||||||
user.save
|
user.save
|
||||||
user.update_posts_read!(3, 2.days.ago)
|
user.update_posts_read!(3, 2.days.ago)
|
||||||
user.update_posts_read!(1, 101.days.ago)
|
user.update_posts_read!(1, 101.days.ago)
|
||||||
tl3_requirements.posts_read_all_time.should == 4
|
expect(tl3_requirements.posts_read_all_time).to eq(4)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -159,8 +159,8 @@ describe TrustLevel3Requirements do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "num_flagged_posts and num_flagged_by_users count spam and inappropriate agreed flags in the last 100 days" do
|
it "num_flagged_posts and num_flagged_by_users count spam and inappropriate agreed flags in the last 100 days" do
|
||||||
tl3_requirements.num_flagged_posts.should == 2
|
expect(tl3_requirements.num_flagged_posts).to eq(2)
|
||||||
tl3_requirements.num_flagged_by_users.should == 3
|
expect(tl3_requirements.num_flagged_by_users).to eq(3)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ describe TrustLevel3Requirements do
|
||||||
Fabricate(:like, user: user, post: recent_post2, created_at: 5.days.ago)
|
Fabricate(:like, user: user, post: recent_post2, created_at: 5.days.ago)
|
||||||
Fabricate(:like, user: user, post: old_post, created_at: 101.days.ago)
|
Fabricate(:like, user: user, post: old_post, created_at: 101.days.ago)
|
||||||
|
|
||||||
tl3_requirements.num_likes_given.should == 2
|
expect(tl3_requirements.num_likes_given).to eq(2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -196,9 +196,9 @@ describe TrustLevel3Requirements do
|
||||||
Fabricate(:like, user: liker, post: recent_post2, created_at: 5.days.ago)
|
Fabricate(:like, user: liker, post: recent_post2, created_at: 5.days.ago)
|
||||||
Fabricate(:like, user: liker, post: old_post, created_at: 101.days.ago)
|
Fabricate(:like, user: liker, post: old_post, created_at: 101.days.ago)
|
||||||
|
|
||||||
tl3_requirements.num_likes_received.should == 3
|
expect(tl3_requirements.num_likes_received).to eq(3)
|
||||||
tl3_requirements.num_likes_received_days.should == 2
|
expect(tl3_requirements.num_likes_received_days).to eq(2)
|
||||||
tl3_requirements.num_likes_received_users.should == 2
|
expect(tl3_requirements.num_likes_received_users).to eq(2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -233,12 +233,12 @@ describe TrustLevel3Requirements do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are met when all requirements are met" do
|
it "are met when all requirements are met" do
|
||||||
tl3_requirements.requirements_met?.should == true
|
expect(tl3_requirements.requirements_met?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are not met if too few days visited" do
|
it "are not met if too few days visited" do
|
||||||
tl3_requirements.stubs(:days_visited).returns(49)
|
tl3_requirements.stubs(:days_visited).returns(49)
|
||||||
tl3_requirements.requirements_met?.should == false
|
expect(tl3_requirements.requirements_met?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are not lost if requirements are close" do
|
it "are not lost if requirements are close" do
|
||||||
|
@ -248,77 +248,77 @@ describe TrustLevel3Requirements do
|
||||||
tl3_requirements.stubs(:posts_read).returns(23)
|
tl3_requirements.stubs(:posts_read).returns(23)
|
||||||
tl3_requirements.stubs(:num_likes_given).returns(29)
|
tl3_requirements.stubs(:num_likes_given).returns(29)
|
||||||
tl3_requirements.stubs(:num_likes_received).returns(19)
|
tl3_requirements.stubs(:num_likes_received).returns(19)
|
||||||
tl3_requirements.requirements_lost?.should == false
|
expect(tl3_requirements.requirements_lost?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough visited" do
|
it "are lost if not enough visited" do
|
||||||
tl3_requirements.stubs(:days_visited).returns(44)
|
tl3_requirements.stubs(:days_visited).returns(44)
|
||||||
tl3_requirements.requirements_lost?.should == true
|
expect(tl3_requirements.requirements_lost?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough topics replied to" do
|
it "are lost if not enough topics replied to" do
|
||||||
tl3_requirements.stubs(:num_topics_replied_to).returns(8)
|
tl3_requirements.stubs(:num_topics_replied_to).returns(8)
|
||||||
tl3_requirements.requirements_lost?.should == true
|
expect(tl3_requirements.requirements_lost?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough topics viewed" do
|
it "are lost if not enough topics viewed" do
|
||||||
tl3_requirements.stubs(:topics_viewed).returns(22)
|
tl3_requirements.stubs(:topics_viewed).returns(22)
|
||||||
tl3_requirements.requirements_lost?.should == true
|
expect(tl3_requirements.requirements_lost?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough posts read" do
|
it "are lost if not enough posts read" do
|
||||||
tl3_requirements.stubs(:posts_read).returns(22)
|
tl3_requirements.stubs(:posts_read).returns(22)
|
||||||
tl3_requirements.requirements_lost?.should == true
|
expect(tl3_requirements.requirements_lost?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are not met if not enough likes given" do
|
it "are not met if not enough likes given" do
|
||||||
tl3_requirements.stubs(:num_likes_given).returns(29)
|
tl3_requirements.stubs(:num_likes_given).returns(29)
|
||||||
tl3_requirements.requirements_met?.should == false
|
expect(tl3_requirements.requirements_met?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are not met if not enough likes received" do
|
it "are not met if not enough likes received" do
|
||||||
tl3_requirements.stubs(:num_likes_received).returns(19)
|
tl3_requirements.stubs(:num_likes_received).returns(19)
|
||||||
tl3_requirements.requirements_met?.should == false
|
expect(tl3_requirements.requirements_met?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are not met if not enough likes received on different days" do
|
it "are not met if not enough likes received on different days" do
|
||||||
tl3_requirements.stubs(:num_likes_received_days).returns(6)
|
tl3_requirements.stubs(:num_likes_received_days).returns(6)
|
||||||
tl3_requirements.requirements_met?.should == false
|
expect(tl3_requirements.requirements_met?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are not met if not enough likes received by different users" do
|
it "are not met if not enough likes received by different users" do
|
||||||
tl3_requirements.stubs(:num_likes_received_users).returns(4)
|
tl3_requirements.stubs(:num_likes_received_users).returns(4)
|
||||||
tl3_requirements.requirements_met?.should == false
|
expect(tl3_requirements.requirements_met?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough likes given" do
|
it "are lost if not enough likes given" do
|
||||||
tl3_requirements.stubs(:num_likes_given).returns(26)
|
tl3_requirements.stubs(:num_likes_given).returns(26)
|
||||||
tl3_requirements.requirements_lost?.should == true
|
expect(tl3_requirements.requirements_lost?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough likes received" do
|
it "are lost if not enough likes received" do
|
||||||
tl3_requirements.stubs(:num_likes_received).returns(17)
|
tl3_requirements.stubs(:num_likes_received).returns(17)
|
||||||
tl3_requirements.requirements_lost?.should == true
|
expect(tl3_requirements.requirements_lost?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are not met if suspended" do
|
it "are not met if suspended" do
|
||||||
user.stubs(:suspended?).returns(true)
|
user.stubs(:suspended?).returns(true)
|
||||||
tl3_requirements.requirements_met?.should == false
|
expect(tl3_requirements.requirements_met?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough likes received on different days" do
|
it "are lost if not enough likes received on different days" do
|
||||||
tl3_requirements.stubs(:num_likes_received_days).returns(4)
|
tl3_requirements.stubs(:num_likes_received_days).returns(4)
|
||||||
tl3_requirements.requirements_lost?.should == true
|
expect(tl3_requirements.requirements_lost?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if not enough likes received by different users" do
|
it "are lost if not enough likes received by different users" do
|
||||||
tl3_requirements.stubs(:num_likes_received_users).returns(3)
|
tl3_requirements.stubs(:num_likes_received_users).returns(3)
|
||||||
tl3_requirements.requirements_lost?.should == true
|
expect(tl3_requirements.requirements_lost?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "are lost if suspended" do
|
it "are lost if suspended" do
|
||||||
user.stubs(:suspended?).returns(true)
|
user.stubs(:suspended?).returns(true)
|
||||||
tl3_requirements.requirements_lost?.should == true
|
expect(tl3_requirements.requirements_lost?).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,6 @@ describe TwitterUserInfo do
|
||||||
id = 22019458041
|
id = 22019458041
|
||||||
info = TwitterUserInfo.create!(user_id: -1, screen_name: 'sam', twitter_user_id: id)
|
info = TwitterUserInfo.create!(user_id: -1, screen_name: 'sam', twitter_user_id: id)
|
||||||
info.reload
|
info.reload
|
||||||
info.twitter_user_id.should == id
|
expect(info.twitter_user_id).to eq(id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,12 +2,12 @@ require 'spec_helper'
|
||||||
require 'digest/sha1'
|
require 'digest/sha1'
|
||||||
|
|
||||||
describe Upload do
|
describe Upload do
|
||||||
it { should belong_to :user }
|
it { is_expected.to belong_to :user }
|
||||||
|
|
||||||
it { should have_many :post_uploads }
|
it { is_expected.to have_many :post_uploads }
|
||||||
it { should have_many :posts }
|
it { is_expected.to have_many :posts }
|
||||||
|
|
||||||
it { should have_many :optimized_images }
|
it { is_expected.to have_many :optimized_images }
|
||||||
|
|
||||||
let(:upload) { build(:upload) }
|
let(:upload) { build(:upload) }
|
||||||
let(:thumbnail) { build(:optimized_image, upload: upload) }
|
let(:thumbnail) { build(:optimized_image, upload: upload) }
|
||||||
|
@ -44,7 +44,7 @@ describe Upload do
|
||||||
OptimizedImage.expects(:create_for).returns(thumbnail)
|
OptimizedImage.expects(:create_for).returns(thumbnail)
|
||||||
upload.create_thumbnail!(100, 100)
|
upload.create_thumbnail!(100, 100)
|
||||||
upload.reload
|
upload.reload
|
||||||
upload.optimized_images.count.should == 1
|
expect(upload.optimized_images.count).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -56,7 +56,7 @@ describe Upload do
|
||||||
it "does not create another upload if it already exists" do
|
it "does not create another upload if it already exists" do
|
||||||
Upload.expects(:find_by).with(sha1: image_sha1).returns(upload)
|
Upload.expects(:find_by).with(sha1: image_sha1).returns(upload)
|
||||||
Upload.expects(:save).never
|
Upload.expects(:save).never
|
||||||
Upload.create_for(user_id, image, image_filename, image_filesize).should == upload
|
expect(Upload.create_for(user_id, image, image_filename, image_filesize)).to eq(upload)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "fix image orientation" do
|
it "fix image orientation" do
|
||||||
|
@ -75,13 +75,13 @@ describe Upload do
|
||||||
FileHelper.expects(:is_image?).returns(true)
|
FileHelper.expects(:is_image?).returns(true)
|
||||||
Upload.expects(:save).never
|
Upload.expects(:save).never
|
||||||
upload = Upload.create_for(user_id, attachment, attachment_filename, attachment_filesize)
|
upload = Upload.create_for(user_id, attachment, attachment_filename, attachment_filesize)
|
||||||
upload.errors.size.should > 0
|
expect(upload.errors.size).to be > 0
|
||||||
end
|
end
|
||||||
|
|
||||||
it "does not compute width & height for non-image" do
|
it "does not compute width & height for non-image" do
|
||||||
FastImage.any_instance.expects(:size).never
|
FastImage.any_instance.expects(:size).never
|
||||||
upload = Upload.create_for(user_id, attachment, attachment_filename, attachment_filesize)
|
upload = Upload.create_for(user_id, attachment, attachment_filename, attachment_filesize)
|
||||||
upload.errors.size.should > 0
|
expect(upload.errors.size).to be > 0
|
||||||
end
|
end
|
||||||
|
|
||||||
it "saves proper information" do
|
it "saves proper information" do
|
||||||
|
@ -91,13 +91,13 @@ describe Upload do
|
||||||
|
|
||||||
upload = Upload.create_for(user_id, image, image_filename, image_filesize)
|
upload = Upload.create_for(user_id, image, image_filename, image_filesize)
|
||||||
|
|
||||||
upload.user_id.should == user_id
|
expect(upload.user_id).to eq(user_id)
|
||||||
upload.original_filename.should == image_filename
|
expect(upload.original_filename).to eq(image_filename)
|
||||||
upload.filesize.should == image_filesize
|
expect(upload.filesize).to eq(image_filesize)
|
||||||
upload.sha1.should == image_sha1
|
expect(upload.sha1).to eq(image_sha1)
|
||||||
upload.width.should == 244
|
expect(upload.width).to eq(244)
|
||||||
upload.height.should == 66
|
expect(upload.height).to eq(66)
|
||||||
upload.url.should == url
|
expect(upload.url).to eq(url)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when svg is authorized" do
|
context "when svg is authorized" do
|
||||||
|
@ -111,12 +111,12 @@ describe Upload do
|
||||||
|
|
||||||
upload = Upload.create_for(user_id, image_svg, image_svg_filename, image_svg_filesize)
|
upload = Upload.create_for(user_id, image_svg, image_svg_filename, image_svg_filesize)
|
||||||
|
|
||||||
upload.user_id.should == user_id
|
expect(upload.user_id).to eq(user_id)
|
||||||
upload.original_filename.should == image_svg_filename
|
expect(upload.original_filename).to eq(image_svg_filename)
|
||||||
upload.filesize.should == image_svg_filesize
|
expect(upload.filesize).to eq(image_svg_filesize)
|
||||||
upload.width.should == 100
|
expect(upload.width).to eq(100)
|
||||||
upload.height.should == 50
|
expect(upload.height).to eq(50)
|
||||||
upload.url.should == url
|
expect(upload.url).to eq(url)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,8 +6,8 @@ describe UserAction do
|
||||||
ActiveRecord::Base.observers.enable :all
|
ActiveRecord::Base.observers.enable :all
|
||||||
end
|
end
|
||||||
|
|
||||||
it { should validate_presence_of :action_type }
|
it { is_expected.to validate_presence_of :action_type }
|
||||||
it { should validate_presence_of :user_id }
|
it { is_expected.to validate_presence_of :user_id }
|
||||||
|
|
||||||
describe 'lists' do
|
describe 'lists' do
|
||||||
|
|
||||||
|
@ -51,18 +51,18 @@ describe UserAction do
|
||||||
it 'includes the events correctly' do
|
it 'includes the events correctly' do
|
||||||
mystats = stats_for_user(user)
|
mystats = stats_for_user(user)
|
||||||
expecting = [UserAction::NEW_TOPIC, UserAction::NEW_PRIVATE_MESSAGE, UserAction::GOT_PRIVATE_MESSAGE, UserAction::BOOKMARK].sort
|
expecting = [UserAction::NEW_TOPIC, UserAction::NEW_PRIVATE_MESSAGE, UserAction::GOT_PRIVATE_MESSAGE, UserAction::BOOKMARK].sort
|
||||||
mystats.should == expecting
|
expect(mystats).to eq(expecting)
|
||||||
stream_count(user).should == 4
|
expect(stream_count(user)).to eq(4)
|
||||||
|
|
||||||
other_stats = stats_for_user
|
other_stats = stats_for_user
|
||||||
expecting = [UserAction::NEW_TOPIC]
|
expecting = [UserAction::NEW_TOPIC]
|
||||||
stream_count.should == 1
|
expect(stream_count).to eq(1)
|
||||||
|
|
||||||
other_stats.should == expecting
|
expect(other_stats).to eq(expecting)
|
||||||
|
|
||||||
public_topic.trash!(user)
|
public_topic.trash!(user)
|
||||||
stats_for_user.should == []
|
expect(stats_for_user).to eq([])
|
||||||
stream_count.should == 0
|
expect(stream_count).to eq(0)
|
||||||
|
|
||||||
# groups
|
# groups
|
||||||
category = Fabricate(:category, read_restricted: true)
|
category = Fabricate(:category, read_restricted: true)
|
||||||
|
@ -71,8 +71,8 @@ describe UserAction do
|
||||||
public_topic.category = category
|
public_topic.category = category
|
||||||
public_topic.save
|
public_topic.save
|
||||||
|
|
||||||
stats_for_user.should == []
|
expect(stats_for_user).to eq([])
|
||||||
stream_count.should == 0
|
expect(stream_count).to eq(0)
|
||||||
|
|
||||||
group = Fabricate(:group)
|
group = Fabricate(:group)
|
||||||
u = Fabricate(:coding_horror)
|
u = Fabricate(:coding_horror)
|
||||||
|
@ -82,8 +82,8 @@ describe UserAction do
|
||||||
category.set_permissions(group => :full)
|
category.set_permissions(group => :full)
|
||||||
category.save
|
category.save
|
||||||
|
|
||||||
stats_for_user(u).should == [UserAction::NEW_TOPIC]
|
expect(stats_for_user(u)).to eq([UserAction::NEW_TOPIC])
|
||||||
stream_count(u).should == 1
|
expect(stream_count(u)).to eq(1)
|
||||||
|
|
||||||
# duplicate should not exception out
|
# duplicate should not exception out
|
||||||
log_test_action
|
log_test_action
|
||||||
|
@ -94,8 +94,8 @@ describe UserAction do
|
||||||
public_post.revise(admin, { category_id: category2.id})
|
public_post.revise(admin, { category_id: category2.id})
|
||||||
|
|
||||||
action = UserAction.stream(user_id: public_topic.user_id, guardian: Guardian.new)[0]
|
action = UserAction.stream(user_id: public_topic.user_id, guardian: Guardian.new)[0]
|
||||||
action.acting_user_id.should == admin.id
|
expect(action.acting_user_id).to eq(admin.id)
|
||||||
action.action_type.should == UserAction::EDIT
|
expect(action.action_type).to eq(UserAction::EDIT)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -116,7 +116,7 @@ describe UserAction do
|
||||||
|
|
||||||
it "creates a new stream entry" do
|
it "creates a new stream entry" do
|
||||||
PostAction.act(liker, post, PostActionType.types[:like])
|
PostAction.act(liker, post, PostActionType.types[:like])
|
||||||
likee_stream.count.should == @old_count + 1
|
expect(likee_stream.count).to eq(@old_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "successful like" do
|
context "successful like" do
|
||||||
|
@ -127,14 +127,14 @@ describe UserAction do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should result in correct data assignment' do
|
it 'should result in correct data assignment' do
|
||||||
@liker_action.should_not == nil
|
expect(@liker_action).not_to eq(nil)
|
||||||
@likee_action.should_not == nil
|
expect(@likee_action).not_to eq(nil)
|
||||||
likee.user_stat.reload.likes_received.should == 1
|
expect(likee.user_stat.reload.likes_received).to eq(1)
|
||||||
liker.user_stat.reload.likes_given.should == 1
|
expect(liker.user_stat.reload.likes_given).to eq(1)
|
||||||
|
|
||||||
PostAction.remove_act(liker, post, PostActionType.types[:like])
|
PostAction.remove_act(liker, post, PostActionType.types[:like])
|
||||||
likee.user_stat.reload.likes_received.should == 0
|
expect(likee.user_stat.reload.likes_received).to eq(0)
|
||||||
liker.user_stat.reload.likes_given.should == 0
|
expect(liker.user_stat.reload.likes_given).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -147,7 +147,7 @@ describe UserAction do
|
||||||
|
|
||||||
it "doesn't add the entry to the stream" do
|
it "doesn't add the entry to the stream" do
|
||||||
PostAction.act(liker, post, PostActionType.types[:like])
|
PostAction.act(liker, post, PostActionType.types[:like])
|
||||||
likee_stream.count.should_not == @old_count + 1
|
expect(likee_stream.count).not_to eq(@old_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -169,13 +169,13 @@ describe UserAction do
|
||||||
@action = @post.user.user_actions.find_by(action_type: UserAction::NEW_TOPIC)
|
@action = @post.user.user_actions.find_by(action_type: UserAction::NEW_TOPIC)
|
||||||
end
|
end
|
||||||
it 'should exist' do
|
it 'should exist' do
|
||||||
@action.should_not == nil
|
expect(@action).not_to eq(nil)
|
||||||
@action.created_at.should be_within(1).of(@post.topic.created_at)
|
expect(@action.created_at).to be_within(1).of(@post.topic.created_at)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not log a post user action' do
|
it 'should not log a post user action' do
|
||||||
@post.user.user_actions.find_by(action_type: UserAction::REPLY).should == nil
|
expect(@post.user.user_actions.find_by(action_type: UserAction::REPLY)).to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -189,16 +189,16 @@ describe UserAction do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should log user actions correctly' do
|
it 'should log user actions correctly' do
|
||||||
@response.user.user_actions.find_by(action_type: UserAction::REPLY).should_not == nil
|
expect(@response.user.user_actions.find_by(action_type: UserAction::REPLY)).not_to eq(nil)
|
||||||
@post.user.user_actions.find_by(action_type: UserAction::RESPONSE).should_not == nil
|
expect(@post.user.user_actions.find_by(action_type: UserAction::RESPONSE)).not_to eq(nil)
|
||||||
@mentioned.user_actions.find_by(action_type: UserAction::MENTION).should_not == nil
|
expect(@mentioned.user_actions.find_by(action_type: UserAction::MENTION)).not_to eq(nil)
|
||||||
@post.user.user_actions.joins(:target_post).where('posts.post_number = 2').count.should == 1
|
expect(@post.user.user_actions.joins(:target_post).where('posts.post_number = 2').count).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not log a double notification for a post edit' do
|
it 'should not log a double notification for a post edit' do
|
||||||
@response.raw = "here it goes again"
|
@response.raw = "here it goes again"
|
||||||
@response.save!
|
@response.save!
|
||||||
@response.user.user_actions.where(action_type: UserAction::REPLY).count.should == 1
|
expect(@response.user.user_actions.where(action_type: UserAction::REPLY).count).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -213,13 +213,13 @@ describe UserAction do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should create a bookmark action correctly' do
|
it 'should create a bookmark action correctly' do
|
||||||
@action.action_type.should == UserAction::BOOKMARK
|
expect(@action.action_type).to eq(UserAction::BOOKMARK)
|
||||||
@action.target_post_id.should == @post.id
|
expect(@action.target_post_id).to eq(@post.id)
|
||||||
@action.acting_user_id.should == @user.id
|
expect(@action.acting_user_id).to eq(@user.id)
|
||||||
@action.user_id.should == @user.id
|
expect(@action.user_id).to eq(@user.id)
|
||||||
|
|
||||||
PostAction.remove_act(@user, @post, PostActionType.types[:bookmark])
|
PostAction.remove_act(@user, @post, PostActionType.types[:bookmark])
|
||||||
@user.user_actions.find_by(action_type: UserAction::BOOKMARK).should == nil
|
expect(@user.user_actions.find_by(action_type: UserAction::BOOKMARK)).to eq(nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -283,9 +283,9 @@ describe UserAction do
|
||||||
|
|
||||||
actions = UserAction.all.to_a
|
actions = UserAction.all.to_a
|
||||||
|
|
||||||
actions.length.should == 1
|
expect(actions.length).to eq(1)
|
||||||
actions.first.action_type.should == UserAction::STAR
|
expect(actions.first.action_type).to eq(UserAction::STAR)
|
||||||
actions.first.user_id.should == post.user.id
|
expect(actions.first.user_id).to eq(post.user.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -312,7 +312,7 @@ describe UserAction do
|
||||||
UserAction.synchronize_target_topic_ids
|
UserAction.synchronize_target_topic_ids
|
||||||
|
|
||||||
action.reload
|
action.reload
|
||||||
action.target_topic_id.should == post.topic_id
|
expect(action.target_topic_id).to eq(post.topic_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,6 +15,6 @@ describe UserAvatar do
|
||||||
FileHelper.expects(:download).returns(temp)
|
FileHelper.expects(:download).returns(temp)
|
||||||
avatar.update_gravatar!
|
avatar.update_gravatar!
|
||||||
temp.unlink
|
temp.unlink
|
||||||
avatar.gravatar_upload.should_not == nil
|
expect(avatar.gravatar_upload).not_to eq(nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,12 +11,12 @@ describe UserHistory do
|
||||||
|
|
||||||
it "returns all records for admins" do
|
it "returns all records for admins" do
|
||||||
records = described_class.staff_action_records(Fabricate(:admin)).to_a
|
records = described_class.staff_action_records(Fabricate(:admin)).to_a
|
||||||
records.size.should == 2
|
expect(records.size).to eq(2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't return records to moderators that only admins should see" do
|
it "doesn't return records to moderators that only admins should see" do
|
||||||
records = described_class.staff_action_records(Fabricate(:moderator)).to_a
|
records = described_class.staff_action_records(Fabricate(:moderator)).to_a
|
||||||
records.should == [@change_trust_level]
|
expect(records).to eq([@change_trust_level])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe UserOpenId do
|
describe UserOpenId do
|
||||||
|
|
||||||
it { should belong_to :user }
|
it { is_expected.to belong_to :user }
|
||||||
it { should validate_presence_of :email }
|
it { is_expected.to validate_presence_of :email }
|
||||||
it { should validate_presence_of :url }
|
it { is_expected.to validate_presence_of :url }
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,7 +3,7 @@ require 'spec_helper'
|
||||||
describe UserProfile do
|
describe UserProfile do
|
||||||
it 'is created automatically when a user is created' do
|
it 'is created automatically when a user is created' do
|
||||||
user = Fabricate(:evil_trout)
|
user = Fabricate(:evil_trout)
|
||||||
user.user_profile.should be_present
|
expect(user.user_profile).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'rebaking' do
|
describe 'rebaking' do
|
||||||
|
@ -12,11 +12,11 @@ describe UserProfile do
|
||||||
user_profile.update_columns(bio_raw: "test", bio_cooked: "broken", bio_cooked_version: nil)
|
user_profile.update_columns(bio_raw: "test", bio_cooked: "broken", bio_cooked_version: nil)
|
||||||
|
|
||||||
problems = UserProfile.rebake_old(10)
|
problems = UserProfile.rebake_old(10)
|
||||||
problems.length.should == 0
|
expect(problems.length).to eq(0)
|
||||||
|
|
||||||
user_profile.reload
|
user_profile.reload
|
||||||
user_profile.bio_cooked.should == "<p>test</p>"
|
expect(user_profile.bio_cooked).to eq("<p>test</p>")
|
||||||
user_profile.bio_cooked_version.should == UserProfile::BAKED_VERSION
|
expect(user_profile.bio_cooked_version).to eq(UserProfile::BAKED_VERSION)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ describe UserProfile do
|
||||||
|
|
||||||
it "doesn't support really long bios" do
|
it "doesn't support really long bios" do
|
||||||
user_profile = Fabricate.build(:user_profile_long)
|
user_profile = Fabricate.build(:user_profile_long)
|
||||||
user_profile.should_not be_valid
|
expect(user_profile).not_to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'after save' do
|
describe 'after save' do
|
||||||
|
@ -65,7 +65,7 @@ describe UserProfile do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should markdown the raw_bio and put it in cooked_bio' do
|
it 'should markdown the raw_bio and put it in cooked_bio' do
|
||||||
user.user_profile.bio_cooked.should == "<p><strong>turtle power!</strong></p>"
|
expect(user.user_profile.bio_cooked).to eq("<p><strong>turtle power!</strong></p>")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -37,80 +37,80 @@ describe UserSearch do
|
||||||
|
|
||||||
# normal search
|
# normal search
|
||||||
results = search_for(user1.name.split(" ").first)
|
results = search_for(user1.name.split(" ").first)
|
||||||
results.size.should == 1
|
expect(results.size).to eq(1)
|
||||||
results.first.should == user1
|
expect(results.first).to eq(user1)
|
||||||
|
|
||||||
# lower case
|
# lower case
|
||||||
results = search_for(user1.name.split(" ").first.downcase)
|
results = search_for(user1.name.split(" ").first.downcase)
|
||||||
results.size.should == 1
|
expect(results.size).to eq(1)
|
||||||
results.first.should == user1
|
expect(results.first).to eq(user1)
|
||||||
|
|
||||||
# username
|
# username
|
||||||
results = search_for(user4.username)
|
results = search_for(user4.username)
|
||||||
results.size.should == 1
|
expect(results.size).to eq(1)
|
||||||
results.first.should == user4
|
expect(results.first).to eq(user4)
|
||||||
|
|
||||||
# case insensitive
|
# case insensitive
|
||||||
results = search_for(user4.username.upcase)
|
results = search_for(user4.username.upcase)
|
||||||
results.size.should == 1
|
expect(results.size).to eq(1)
|
||||||
results.first.should == user4
|
expect(results.first).to eq(user4)
|
||||||
|
|
||||||
# substrings
|
# substrings
|
||||||
# only staff members see suspended users in results
|
# only staff members see suspended users in results
|
||||||
results = search_for("mr")
|
results = search_for("mr")
|
||||||
results.size.should == 5
|
expect(results.size).to eq(5)
|
||||||
results.should_not include(user6)
|
expect(results).not_to include(user6)
|
||||||
search_for("mr", searching_user: user1).size.should == 5
|
expect(search_for("mr", searching_user: user1).size).to eq(5)
|
||||||
|
|
||||||
results = search_for("mr", searching_user: admin)
|
results = search_for("mr", searching_user: admin)
|
||||||
results.size.should == 6
|
expect(results.size).to eq(6)
|
||||||
results.should include(user6)
|
expect(results).to include(user6)
|
||||||
search_for("mr", searching_user: moderator).size.should == 6
|
expect(search_for("mr", searching_user: moderator).size).to eq(6)
|
||||||
|
|
||||||
results = search_for("mrb", searching_user: admin)
|
results = search_for("mrb", searching_user: admin)
|
||||||
results.size.should == 3
|
expect(results.size).to eq(3)
|
||||||
|
|
||||||
|
|
||||||
results = search_for("MR", searching_user: admin)
|
results = search_for("MR", searching_user: admin)
|
||||||
results.size.should == 6
|
expect(results.size).to eq(6)
|
||||||
|
|
||||||
results = search_for("MRB", searching_user: admin, limit: 2)
|
results = search_for("MRB", searching_user: admin, limit: 2)
|
||||||
results.size.should == 2
|
expect(results.size).to eq(2)
|
||||||
|
|
||||||
# topic priority
|
# topic priority
|
||||||
results = search_for("mrb", topic_id: topic.id)
|
results = search_for("mrb", topic_id: topic.id)
|
||||||
results.first.should == user1
|
expect(results.first).to eq(user1)
|
||||||
|
|
||||||
|
|
||||||
results = search_for("mrb", topic_id: topic2.id)
|
results = search_for("mrb", topic_id: topic2.id)
|
||||||
results[1].should == user2
|
expect(results[1]).to eq(user2)
|
||||||
|
|
||||||
results = search_for("mrb", topic_id: topic3.id)
|
results = search_for("mrb", topic_id: topic3.id)
|
||||||
results[1].should == user5
|
expect(results[1]).to eq(user5)
|
||||||
|
|
||||||
# When searching by name is enabled, it returns the record
|
# When searching by name is enabled, it returns the record
|
||||||
SiteSetting.enable_names = true
|
SiteSetting.enable_names = true
|
||||||
results = search_for("Tarantino")
|
results = search_for("Tarantino")
|
||||||
results.size.should == 1
|
expect(results.size).to eq(1)
|
||||||
|
|
||||||
results = search_for("coding")
|
results = search_for("coding")
|
||||||
results.size.should == 0
|
expect(results.size).to eq(0)
|
||||||
|
|
||||||
results = search_for("z")
|
results = search_for("z")
|
||||||
results.size.should == 0
|
expect(results.size).to eq(0)
|
||||||
|
|
||||||
# When searching by name is disabled, it will not return the record
|
# When searching by name is disabled, it will not return the record
|
||||||
SiteSetting.enable_names = false
|
SiteSetting.enable_names = false
|
||||||
results = search_for("Tarantino")
|
results = search_for("Tarantino")
|
||||||
results.size.should == 0
|
expect(results.size).to eq(0)
|
||||||
|
|
||||||
# find an exact match first
|
# find an exact match first
|
||||||
results = search_for("mrB")
|
results = search_for("mrB")
|
||||||
results.first.should == user1
|
expect(results.first).to eq(user1)
|
||||||
|
|
||||||
# don't return inactive users
|
# don't return inactive users
|
||||||
results = search_for("Ghost")
|
results = search_for("Ghost")
|
||||||
results.should be_blank
|
expect(results).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,8 +3,8 @@ require_dependency 'user'
|
||||||
|
|
||||||
describe User do
|
describe User do
|
||||||
|
|
||||||
it { should validate_presence_of :username }
|
it { is_expected.to validate_presence_of :username }
|
||||||
it { should validate_presence_of :email }
|
it { is_expected.to validate_presence_of :email }
|
||||||
|
|
||||||
describe '#count_by_signup_date' do
|
describe '#count_by_signup_date' do
|
||||||
before(:each) do
|
before(:each) do
|
||||||
|
@ -20,8 +20,8 @@ describe User do
|
||||||
let(:signups_by_day) { {1.day.ago.to_date => 2, 2.days.ago.to_date => 1, Time.now.utc.to_date => 1} }
|
let(:signups_by_day) { {1.day.ago.to_date => 2, 2.days.ago.to_date => 1, Time.now.utc.to_date => 1} }
|
||||||
|
|
||||||
it 'collect closed interval signups' do
|
it 'collect closed interval signups' do
|
||||||
User.count_by_signup_date(2.days.ago, Time.now).should include(signups_by_day)
|
expect(User.count_by_signup_date(2.days.ago, Time.now)).to include(signups_by_day)
|
||||||
User.count_by_signup_date(2.days.ago, Time.now).should_not include({4.days.ago.to_date => 1})
|
expect(User.count_by_signup_date(2.days.ago, Time.now)).not_to include({4.days.ago.to_date => 1})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -58,15 +58,15 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'marks the user as approved' do
|
it 'marks the user as approved' do
|
||||||
user.should be_approved
|
expect(user).to be_approved
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'has the admin as the approved by' do
|
it 'has the admin as the approved by' do
|
||||||
user.approved_by.should == admin
|
expect(user.approved_by).to eq(admin)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'has a value for approved_at' do
|
it 'has a value for approved_at' do
|
||||||
user.approved_at.should be_present
|
expect(user.approved_at).to be_present
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -78,9 +78,9 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "creates a bookmark with the true parameter" do
|
it "creates a bookmark with the true parameter" do
|
||||||
lambda {
|
expect {
|
||||||
PostAction.act(@post.user, @post, PostActionType.types[:bookmark])
|
PostAction.act(@post.user, @post, PostActionType.types[:bookmark])
|
||||||
}.should change(PostAction, :count).by(1)
|
}.to change(PostAction, :count).by(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'when removing a bookmark' do
|
describe 'when removing a bookmark' do
|
||||||
|
@ -90,9 +90,9 @@ describe User do
|
||||||
|
|
||||||
it 'reduces the bookmark count of the post' do
|
it 'reduces the bookmark count of the post' do
|
||||||
active = PostAction.where(deleted_at: nil)
|
active = PostAction.where(deleted_at: nil)
|
||||||
lambda {
|
expect {
|
||||||
PostAction.remove_act(@post.user, @post, PostActionType.types[:bookmark])
|
PostAction.remove_act(@post.user, @post, PostActionType.types[:bookmark])
|
||||||
}.should change(active, :count).by(-1)
|
}.to change(active, :count).by(-1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -109,17 +109,17 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns true' do
|
it 'returns true' do
|
||||||
@result.should == true
|
expect(@result).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should change the username' do
|
it 'should change the username' do
|
||||||
user.reload
|
user.reload
|
||||||
user.username.should == new_username
|
expect(user.username).to eq(new_username)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should change the username_lower' do
|
it 'should change the username_lower' do
|
||||||
user.reload
|
user.reload
|
||||||
user.username_lower.should == new_username.downcase
|
expect(user.username_lower).to eq(new_username.downcase)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -133,17 +133,17 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns false' do
|
it 'returns false' do
|
||||||
@result.should == false
|
expect(@result).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not change the username' do
|
it 'should not change the username' do
|
||||||
user.reload
|
user.reload
|
||||||
user.username.should == username_before_change
|
expect(user.username).to eq(username_before_change)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not change the username_lower' do
|
it 'should not change the username_lower' do
|
||||||
user.reload
|
user.reload
|
||||||
user.username_lower.should == username_lower_before_change
|
expect(user.username_lower).to eq(username_lower_before_change)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -151,12 +151,12 @@ describe User do
|
||||||
let!(:myself) { Fabricate(:user, username: 'hansolo') }
|
let!(:myself) { Fabricate(:user, username: 'hansolo') }
|
||||||
|
|
||||||
it 'should return true' do
|
it 'should return true' do
|
||||||
myself.change_username('HanSolo').should == true
|
expect(myself.change_username('HanSolo')).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should change the username' do
|
it 'should change the username' do
|
||||||
myself.change_username('HanSolo')
|
myself.change_username('HanSolo')
|
||||||
myself.reload.username.should == 'HanSolo'
|
expect(myself.reload.username).to eq('HanSolo')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -168,17 +168,17 @@ describe User do
|
||||||
|
|
||||||
it 'should allow a shorter username than default' do
|
it 'should allow a shorter username than default' do
|
||||||
result = user.change_username('a' * @custom_min)
|
result = user.change_username('a' * @custom_min)
|
||||||
result.should_not == false
|
expect(result).not_to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not allow a shorter username than limit' do
|
it 'should not allow a shorter username than limit' do
|
||||||
result = user.change_username('a' * (@custom_min - 1))
|
result = user.change_username('a' * (@custom_min - 1))
|
||||||
result.should == false
|
expect(result).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not allow a longer username than limit' do
|
it 'should not allow a longer username than limit' do
|
||||||
result = user.change_username('a' * (User.username_length.end + 1))
|
result = user.change_username('a' * (User.username_length.end + 1))
|
||||||
result.should == false
|
expect(result).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -212,8 +212,8 @@ describe User do
|
||||||
|
|
||||||
@posts.each do |p|
|
@posts.each do |p|
|
||||||
p.reload
|
p.reload
|
||||||
p.should be_present
|
expect(p).to be_present
|
||||||
p.topic.should be_present
|
expect(p.topic).to be_present
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -222,32 +222,32 @@ describe User do
|
||||||
|
|
||||||
subject { Fabricate.build(:user) }
|
subject { Fabricate.build(:user) }
|
||||||
|
|
||||||
it { should be_valid }
|
it { is_expected.to be_valid }
|
||||||
it { should_not be_admin }
|
it { is_expected.not_to be_admin }
|
||||||
it { should_not be_approved }
|
it { is_expected.not_to be_approved }
|
||||||
|
|
||||||
it "is properly initialized" do
|
it "is properly initialized" do
|
||||||
subject.approved_at.should be_blank
|
expect(subject.approved_at).to be_blank
|
||||||
subject.approved_by_id.should be_blank
|
expect(subject.approved_by_id).to be_blank
|
||||||
subject.email_private_messages.should == true
|
expect(subject.email_private_messages).to eq(true)
|
||||||
subject.email_direct.should == true
|
expect(subject.email_direct).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'digest emails' do
|
context 'digest emails' do
|
||||||
it 'defaults to digests every week' do
|
it 'defaults to digests every week' do
|
||||||
subject.email_digests.should == true
|
expect(subject.email_digests).to eq(true)
|
||||||
subject.digest_after_days.should == 7
|
expect(subject.digest_after_days).to eq(7)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'uses default_digest_email_frequency' do
|
it 'uses default_digest_email_frequency' do
|
||||||
SiteSetting.stubs(:default_digest_email_frequency).returns(1)
|
SiteSetting.stubs(:default_digest_email_frequency).returns(1)
|
||||||
subject.email_digests.should == true
|
expect(subject.email_digests).to eq(true)
|
||||||
subject.digest_after_days.should == 1
|
expect(subject.digest_after_days).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'disables digests by default if site setting says so' do
|
it 'disables digests by default if site setting says so' do
|
||||||
SiteSetting.stubs(:default_digest_email_frequency).returns('')
|
SiteSetting.stubs(:default_digest_email_frequency).returns('')
|
||||||
subject.email_digests.should == false
|
expect(subject.email_digests).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -255,14 +255,14 @@ describe User do
|
||||||
before { subject.save }
|
before { subject.save }
|
||||||
|
|
||||||
it "has an email token" do
|
it "has an email token" do
|
||||||
subject.email_tokens.should be_present
|
expect(subject.email_tokens).to be_present
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "downcases email addresses" do
|
it "downcases email addresses" do
|
||||||
user = Fabricate.build(:user, email: 'Fancy.Caps.4.U@gmail.com')
|
user = Fabricate.build(:user, email: 'Fancy.Caps.4.U@gmail.com')
|
||||||
user.save
|
user.save
|
||||||
user.reload.email.should == 'fancy.caps.4.u@gmail.com'
|
expect(user.reload.email).to eq('fancy.caps.4.u@gmail.com')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -288,49 +288,49 @@ describe User do
|
||||||
|
|
||||||
it "sets to the default trust level setting" do
|
it "sets to the default trust level setting" do
|
||||||
SiteSetting.default_trust_level = TrustLevel[4]
|
SiteSetting.default_trust_level = TrustLevel[4]
|
||||||
User.new.trust_level.should == TrustLevel[4]
|
expect(User.new.trust_level).to eq(TrustLevel[4])
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'has_trust_level?' do
|
describe 'has_trust_level?' do
|
||||||
|
|
||||||
it "raises an error with an invalid level" do
|
it "raises an error with an invalid level" do
|
||||||
lambda { user.has_trust_level?(:wat) }.should raise_error
|
expect { user.has_trust_level?(:wat) }.to raise_error
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is true for your basic level" do
|
it "is true for your basic level" do
|
||||||
user.has_trust_level?(TrustLevel[0]).should == true
|
expect(user.has_trust_level?(TrustLevel[0])).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is false for a higher level" do
|
it "is false for a higher level" do
|
||||||
user.has_trust_level?(TrustLevel[2]).should == false
|
expect(user.has_trust_level?(TrustLevel[2])).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is true if you exceed the level" do
|
it "is true if you exceed the level" do
|
||||||
user.trust_level = TrustLevel[4]
|
user.trust_level = TrustLevel[4]
|
||||||
user.has_trust_level?(TrustLevel[1]).should == true
|
expect(user.has_trust_level?(TrustLevel[1])).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is true for an admin even with a low trust level" do
|
it "is true for an admin even with a low trust level" do
|
||||||
user.trust_level = TrustLevel[0]
|
user.trust_level = TrustLevel[0]
|
||||||
user.admin = true
|
user.admin = true
|
||||||
user.has_trust_level?(TrustLevel[1]).should == true
|
expect(user.has_trust_level?(TrustLevel[1])).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'moderator' do
|
describe 'moderator' do
|
||||||
it "isn't a moderator by default" do
|
it "isn't a moderator by default" do
|
||||||
user.moderator?.should == false
|
expect(user.moderator?).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is a moderator if the user level is moderator" do
|
it "is a moderator if the user level is moderator" do
|
||||||
user.moderator = true
|
user.moderator = true
|
||||||
user.has_trust_level?(TrustLevel[4]).should == true
|
expect(user.has_trust_level?(TrustLevel[4])).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is staff if the user is an admin" do
|
it "is staff if the user is an admin" do
|
||||||
user.admin = true
|
user.admin = true
|
||||||
user.staff?.should == true
|
expect(user.staff?).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -344,36 +344,36 @@ describe User do
|
||||||
describe '#staff?' do
|
describe '#staff?' do
|
||||||
subject { user.staff? }
|
subject { user.staff? }
|
||||||
|
|
||||||
it { should == false }
|
it { is_expected.to eq(false) }
|
||||||
|
|
||||||
context 'for a moderator user' do
|
context 'for a moderator user' do
|
||||||
before { user.moderator = true }
|
before { user.moderator = true }
|
||||||
|
|
||||||
it { should == true }
|
it { is_expected.to eq(true) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for an admin user' do
|
context 'for an admin user' do
|
||||||
before { user.admin = true }
|
before { user.admin = true }
|
||||||
|
|
||||||
it { should == true }
|
it { is_expected.to eq(true) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#regular?' do
|
describe '#regular?' do
|
||||||
subject { user.regular? }
|
subject { user.regular? }
|
||||||
|
|
||||||
it { should == true }
|
it { is_expected.to eq(true) }
|
||||||
|
|
||||||
context 'for a moderator user' do
|
context 'for a moderator user' do
|
||||||
before { user.moderator = true }
|
before { user.moderator = true }
|
||||||
|
|
||||||
it { should == false }
|
it { is_expected.to eq(false) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for an admin user' do
|
context 'for an admin user' do
|
||||||
before { user.admin = true }
|
before { user.admin = true }
|
||||||
|
|
||||||
it { should == false }
|
it { is_expected.to eq(false) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -384,17 +384,17 @@ describe User do
|
||||||
let!(:temporary_key) { user.temporary_key}
|
let!(:temporary_key) { user.temporary_key}
|
||||||
|
|
||||||
it 'has a temporary key' do
|
it 'has a temporary key' do
|
||||||
temporary_key.should be_present
|
expect(temporary_key).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'User#find_by_temporary_key' do
|
describe 'User#find_by_temporary_key' do
|
||||||
|
|
||||||
it 'can be used to find the user' do
|
it 'can be used to find the user' do
|
||||||
User.find_by_temporary_key(temporary_key).should == user
|
expect(User.find_by_temporary_key(temporary_key)).to eq(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns nil with an invalid key' do
|
it 'returns nil with an invalid key' do
|
||||||
User.find_by_temporary_key('asdfasdf').should be_blank
|
expect(User.find_by_temporary_key('asdfasdf')).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -407,7 +407,7 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should have a sane email hash' do
|
it 'should have a sane email hash' do
|
||||||
@user.email_hash.should =~ /^[0-9a-f]{32}$/
|
expect(@user.email_hash).to match(/^[0-9a-f]{32}$/)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should use downcase email' do
|
it 'should use downcase email' do
|
||||||
|
@ -415,7 +415,7 @@ describe User do
|
||||||
@user2 = Fabricate(:user)
|
@user2 = Fabricate(:user)
|
||||||
@user2.email = "ExAmPlE@eXaMpLe.com"
|
@user2.email = "ExAmPlE@eXaMpLe.com"
|
||||||
|
|
||||||
@user.email_hash.should == @user2.email_hash
|
expect(@user.email_hash).to eq(@user2.email_hash)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should trim whitespace before hashing' do
|
it 'should trim whitespace before hashing' do
|
||||||
|
@ -423,14 +423,14 @@ describe User do
|
||||||
@user2 = Fabricate(:user)
|
@user2 = Fabricate(:user)
|
||||||
@user2.email = " example@example.com "
|
@user2.email = " example@example.com "
|
||||||
|
|
||||||
@user.email_hash.should == @user2.email_hash
|
expect(@user.email_hash).to eq(@user2.email_hash)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'associated_accounts' do
|
describe 'associated_accounts' do
|
||||||
it 'should correctly find social associations' do
|
it 'should correctly find social associations' do
|
||||||
user = Fabricate(:user)
|
user = Fabricate(:user)
|
||||||
user.associated_accounts.should == I18n.t("user.no_accounts_associated")
|
expect(user.associated_accounts).to eq(I18n.t("user.no_accounts_associated"))
|
||||||
|
|
||||||
TwitterUserInfo.create(user_id: user.id, screen_name: "sam", twitter_user_id: 1)
|
TwitterUserInfo.create(user_id: user.id, screen_name: "sam", twitter_user_id: 1)
|
||||||
FacebookUserInfo.create(user_id: user.id, username: "sam", facebook_user_id: 1)
|
FacebookUserInfo.create(user_id: user.id, username: "sam", facebook_user_id: 1)
|
||||||
|
@ -438,14 +438,14 @@ describe User do
|
||||||
GithubUserInfo.create(user_id: user.id, screen_name: "sam", github_user_id: 1)
|
GithubUserInfo.create(user_id: user.id, screen_name: "sam", github_user_id: 1)
|
||||||
|
|
||||||
user.reload
|
user.reload
|
||||||
user.associated_accounts.should == "Twitter(sam), Facebook(sam), Google(sam@sam.com), Github(sam)"
|
expect(user.associated_accounts).to eq("Twitter(sam), Facebook(sam), Google(sam@sam.com), Github(sam)")
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'name heuristics' do
|
describe 'name heuristics' do
|
||||||
it 'is able to guess a decent name from an email' do
|
it 'is able to guess a decent name from an email' do
|
||||||
User.suggest_name('sam.saffron@gmail.com').should == 'Sam Saffron'
|
expect(User.suggest_name('sam.saffron@gmail.com')).to eq('Sam Saffron')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -453,26 +453,26 @@ describe User do
|
||||||
it "should be #{SiteSetting.min_username_length} chars or longer" do
|
it "should be #{SiteSetting.min_username_length} chars or longer" do
|
||||||
@user = Fabricate.build(:user)
|
@user = Fabricate.build(:user)
|
||||||
@user.username = 'ss'
|
@user.username = 'ss'
|
||||||
@user.save.should == false
|
expect(@user.save).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should never end with a ." do
|
it "should never end with a ." do
|
||||||
@user = Fabricate.build(:user)
|
@user = Fabricate.build(:user)
|
||||||
@user.username = 'sam.'
|
@user.username = 'sam.'
|
||||||
@user.save.should == false
|
expect(@user.save).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should never contain spaces" do
|
it "should never contain spaces" do
|
||||||
@user = Fabricate.build(:user)
|
@user = Fabricate.build(:user)
|
||||||
@user.username = 'sam s'
|
@user.username = 'sam s'
|
||||||
@user.save.should == false
|
expect(@user.save).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
['Bad One', 'Giraf%fe', 'Hello!', '@twitter', 'me@example.com', 'no.dots', 'purple.', '.bilbo', '_nope', 'sa$sy'].each do |bad_nickname|
|
['Bad One', 'Giraf%fe', 'Hello!', '@twitter', 'me@example.com', 'no.dots', 'purple.', '.bilbo', '_nope', 'sa$sy'].each do |bad_nickname|
|
||||||
it "should not allow username '#{bad_nickname}'" do
|
it "should not allow username '#{bad_nickname}'" do
|
||||||
@user = Fabricate.build(:user)
|
@user = Fabricate.build(:user)
|
||||||
@user.username = bad_nickname
|
@user.username = bad_nickname
|
||||||
@user.save.should == false
|
expect(@user.save).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -486,102 +486,102 @@ describe User do
|
||||||
|
|
||||||
it "should not allow saving if username is reused" do
|
it "should not allow saving if username is reused" do
|
||||||
@codinghorror.username = @user.username
|
@codinghorror.username = @user.username
|
||||||
@codinghorror.save.should == false
|
expect(@codinghorror.save).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not allow saving if username is reused in different casing" do
|
it "should not allow saving if username is reused in different casing" do
|
||||||
@codinghorror.username = @user.username.upcase
|
@codinghorror.username = @user.username.upcase
|
||||||
@codinghorror.save.should == false
|
expect(@codinghorror.save).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '.username_available?' do
|
context '.username_available?' do
|
||||||
it "returns true for a username that is available" do
|
it "returns true for a username that is available" do
|
||||||
User.username_available?('BruceWayne').should == true
|
expect(User.username_available?('BruceWayne')).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns false when a username is taken' do
|
it 'returns false when a username is taken' do
|
||||||
User.username_available?(Fabricate(:user).username).should == false
|
expect(User.username_available?(Fabricate(:user).username)).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'email_validator' do
|
describe 'email_validator' do
|
||||||
it 'should allow good emails' do
|
it 'should allow good emails' do
|
||||||
user = Fabricate.build(:user, email: 'good@gmail.com')
|
user = Fabricate.build(:user, email: 'good@gmail.com')
|
||||||
user.should be_valid
|
expect(user).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should reject some emails based on the email_domains_blacklist site setting' do
|
it 'should reject some emails based on the email_domains_blacklist site setting' do
|
||||||
SiteSetting.stubs(:email_domains_blacklist).returns('mailinator.com')
|
SiteSetting.stubs(:email_domains_blacklist).returns('mailinator.com')
|
||||||
Fabricate.build(:user, email: 'notgood@mailinator.com').should_not be_valid
|
expect(Fabricate.build(:user, email: 'notgood@mailinator.com')).not_to be_valid
|
||||||
Fabricate.build(:user, email: 'mailinator@gmail.com').should be_valid
|
expect(Fabricate.build(:user, email: 'mailinator@gmail.com')).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should reject some emails based on the email_domains_blacklist site setting' do
|
it 'should reject some emails based on the email_domains_blacklist site setting' do
|
||||||
SiteSetting.stubs(:email_domains_blacklist).returns('mailinator.com|trashmail.net')
|
SiteSetting.stubs(:email_domains_blacklist).returns('mailinator.com|trashmail.net')
|
||||||
Fabricate.build(:user, email: 'notgood@mailinator.com').should_not be_valid
|
expect(Fabricate.build(:user, email: 'notgood@mailinator.com')).not_to be_valid
|
||||||
Fabricate.build(:user, email: 'notgood@trashmail.net').should_not be_valid
|
expect(Fabricate.build(:user, email: 'notgood@trashmail.net')).not_to be_valid
|
||||||
Fabricate.build(:user, email: 'mailinator.com@gmail.com').should be_valid
|
expect(Fabricate.build(:user, email: 'mailinator.com@gmail.com')).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not reject partial matches' do
|
it 'should not reject partial matches' do
|
||||||
SiteSetting.stubs(:email_domains_blacklist).returns('mail.com')
|
SiteSetting.stubs(:email_domains_blacklist).returns('mail.com')
|
||||||
Fabricate.build(:user, email: 'mailinator@gmail.com').should be_valid
|
expect(Fabricate.build(:user, email: 'mailinator@gmail.com')).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should reject some emails based on the email_domains_blacklist site setting ignoring case' do
|
it 'should reject some emails based on the email_domains_blacklist site setting ignoring case' do
|
||||||
SiteSetting.stubs(:email_domains_blacklist).returns('trashmail.net')
|
SiteSetting.stubs(:email_domains_blacklist).returns('trashmail.net')
|
||||||
Fabricate.build(:user, email: 'notgood@TRASHMAIL.NET').should_not be_valid
|
expect(Fabricate.build(:user, email: 'notgood@TRASHMAIL.NET')).not_to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not interpret a period as a wildcard' do
|
it 'should not interpret a period as a wildcard' do
|
||||||
SiteSetting.stubs(:email_domains_blacklist).returns('trashmail.net')
|
SiteSetting.stubs(:email_domains_blacklist).returns('trashmail.net')
|
||||||
Fabricate.build(:user, email: 'good@trashmailinet.com').should be_valid
|
expect(Fabricate.build(:user, email: 'good@trashmailinet.com')).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not be used to validate existing records' do
|
it 'should not be used to validate existing records' do
|
||||||
u = Fabricate(:user, email: 'in_before_blacklisted@fakemail.com')
|
u = Fabricate(:user, email: 'in_before_blacklisted@fakemail.com')
|
||||||
SiteSetting.stubs(:email_domains_blacklist).returns('fakemail.com')
|
SiteSetting.stubs(:email_domains_blacklist).returns('fakemail.com')
|
||||||
u.should be_valid
|
expect(u).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should be used when email is being changed' do
|
it 'should be used when email is being changed' do
|
||||||
SiteSetting.stubs(:email_domains_blacklist).returns('mailinator.com')
|
SiteSetting.stubs(:email_domains_blacklist).returns('mailinator.com')
|
||||||
u = Fabricate(:user, email: 'good@gmail.com')
|
u = Fabricate(:user, email: 'good@gmail.com')
|
||||||
u.email = 'nope@mailinator.com'
|
u.email = 'nope@mailinator.com'
|
||||||
u.should_not be_valid
|
expect(u).not_to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'whitelist should reject some emails based on the email_domains_whitelist site setting' do
|
it 'whitelist should reject some emails based on the email_domains_whitelist site setting' do
|
||||||
SiteSetting.stubs(:email_domains_whitelist).returns('vaynermedia.com')
|
SiteSetting.stubs(:email_domains_whitelist).returns('vaynermedia.com')
|
||||||
Fabricate.build(:user, email: 'notgood@mailinator.com').should_not be_valid
|
expect(Fabricate.build(:user, email: 'notgood@mailinator.com')).not_to be_valid
|
||||||
Fabricate.build(:user, email: 'sbauch@vaynermedia.com').should be_valid
|
expect(Fabricate.build(:user, email: 'sbauch@vaynermedia.com')).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should reject some emails based on the email_domains_whitelist site setting when whitelisting multiple domains' do
|
it 'should reject some emails based on the email_domains_whitelist site setting when whitelisting multiple domains' do
|
||||||
SiteSetting.stubs(:email_domains_whitelist).returns('vaynermedia.com|gmail.com')
|
SiteSetting.stubs(:email_domains_whitelist).returns('vaynermedia.com|gmail.com')
|
||||||
Fabricate.build(:user, email: 'notgood@mailinator.com').should_not be_valid
|
expect(Fabricate.build(:user, email: 'notgood@mailinator.com')).not_to be_valid
|
||||||
Fabricate.build(:user, email: 'notgood@trashmail.net').should_not be_valid
|
expect(Fabricate.build(:user, email: 'notgood@trashmail.net')).not_to be_valid
|
||||||
Fabricate.build(:user, email: 'mailinator.com@gmail.com').should be_valid
|
expect(Fabricate.build(:user, email: 'mailinator.com@gmail.com')).to be_valid
|
||||||
Fabricate.build(:user, email: 'mailinator.com@vaynermedia.com').should be_valid
|
expect(Fabricate.build(:user, email: 'mailinator.com@vaynermedia.com')).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should accept some emails based on the email_domains_whitelist site setting ignoring case' do
|
it 'should accept some emails based on the email_domains_whitelist site setting ignoring case' do
|
||||||
SiteSetting.stubs(:email_domains_whitelist).returns('vaynermedia.com')
|
SiteSetting.stubs(:email_domains_whitelist).returns('vaynermedia.com')
|
||||||
Fabricate.build(:user, email: 'good@VAYNERMEDIA.COM').should be_valid
|
expect(Fabricate.build(:user, email: 'good@VAYNERMEDIA.COM')).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'email whitelist should not be used to validate existing records' do
|
it 'email whitelist should not be used to validate existing records' do
|
||||||
u = Fabricate(:user, email: 'in_before_whitelisted@fakemail.com')
|
u = Fabricate(:user, email: 'in_before_whitelisted@fakemail.com')
|
||||||
SiteSetting.stubs(:email_domains_blacklist).returns('vaynermedia.com')
|
SiteSetting.stubs(:email_domains_blacklist).returns('vaynermedia.com')
|
||||||
u.should be_valid
|
expect(u).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'email whitelist should be used when email is being changed' do
|
it 'email whitelist should be used when email is being changed' do
|
||||||
SiteSetting.stubs(:email_domains_whitelist).returns('vaynermedia.com')
|
SiteSetting.stubs(:email_domains_whitelist).returns('vaynermedia.com')
|
||||||
u = Fabricate(:user, email: 'good@vaynermedia.com')
|
u = Fabricate(:user, email: 'good@vaynermedia.com')
|
||||||
u.email = 'nope@mailinator.com'
|
u.email = 'nope@mailinator.com'
|
||||||
u.should_not be_valid
|
expect(u).not_to be_valid
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -593,11 +593,11 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should have a valid password after the initial save" do
|
it "should have a valid password after the initial save" do
|
||||||
@user.confirm_password?("ilovepasta").should == true
|
expect(@user.confirm_password?("ilovepasta")).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not have an active account after initial save" do
|
it "should not have an active account after initial save" do
|
||||||
@user.active.should == false
|
expect(@user.active).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -614,26 +614,26 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should act correctly" do
|
it "should act correctly" do
|
||||||
user.previous_visit_at.should == nil
|
expect(user.previous_visit_at).to eq(nil)
|
||||||
|
|
||||||
# first visit
|
# first visit
|
||||||
user.update_last_seen!(first_visit_date)
|
user.update_last_seen!(first_visit_date)
|
||||||
user.previous_visit_at.should == nil
|
expect(user.previous_visit_at).to eq(nil)
|
||||||
|
|
||||||
# updated same time
|
# updated same time
|
||||||
user.update_last_seen!(first_visit_date)
|
user.update_last_seen!(first_visit_date)
|
||||||
user.reload
|
user.reload
|
||||||
user.previous_visit_at.should == nil
|
expect(user.previous_visit_at).to eq(nil)
|
||||||
|
|
||||||
# second visit
|
# second visit
|
||||||
user.update_last_seen!(second_visit_date)
|
user.update_last_seen!(second_visit_date)
|
||||||
user.reload
|
user.reload
|
||||||
user.previous_visit_at.should be_within_one_second_of(first_visit_date)
|
expect(user.previous_visit_at).to be_within_one_second_of(first_visit_date)
|
||||||
|
|
||||||
# third visit
|
# third visit
|
||||||
user.update_last_seen!(third_visit_date)
|
user.update_last_seen!(third_visit_date)
|
||||||
user.reload
|
user.reload
|
||||||
user.previous_visit_at.should be_within_one_second_of(second_visit_date)
|
expect(user.previous_visit_at).to be_within_one_second_of(second_visit_date)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -642,11 +642,11 @@ describe User do
|
||||||
let(:user) { Fabricate(:user) }
|
let(:user) { Fabricate(:user) }
|
||||||
|
|
||||||
it "should have a blank last seen on creation" do
|
it "should have a blank last seen on creation" do
|
||||||
user.last_seen_at.should == nil
|
expect(user.last_seen_at).to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should have 0 for days_visited" do
|
it "should have 0 for days_visited" do
|
||||||
user.user_stat.days_visited.should == 0
|
expect(user.user_stat.days_visited).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'with no previous values' do
|
describe 'with no previous values' do
|
||||||
|
@ -662,16 +662,16 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "updates last_seen_at" do
|
it "updates last_seen_at" do
|
||||||
user.last_seen_at.should be_within_one_second_of(date)
|
expect(user.last_seen_at).to be_within_one_second_of(date)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should have 0 for days_visited" do
|
it "should have 0 for days_visited" do
|
||||||
user.reload
|
user.reload
|
||||||
user.user_stat.days_visited.should == 1
|
expect(user.user_stat.days_visited).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should log a user_visit with the date" do
|
it "should log a user_visit with the date" do
|
||||||
user.user_visits.first.visited_at.should == date.to_date
|
expect(user.user_visits.first.visited_at).to eq(date.to_date)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "called twice" do
|
context "called twice" do
|
||||||
|
@ -688,7 +688,7 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't increase days_visited twice" do
|
it "doesn't increase days_visited twice" do
|
||||||
user.user_stat.days_visited.should == 1
|
expect(user.user_stat.days_visited).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -706,7 +706,7 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should log a second visited_at record when we log an update later" do
|
it "should log a second visited_at record when we log an update later" do
|
||||||
user.user_visits.count.should == 2
|
expect(user.user_visits.count).to eq(2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -718,7 +718,7 @@ describe User do
|
||||||
|
|
||||||
context 'when email has not been confirmed yet' do
|
context 'when email has not been confirmed yet' do
|
||||||
it 'should return false' do
|
it 'should return false' do
|
||||||
user.email_confirmed?.should == false
|
expect(user.email_confirmed?).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -726,7 +726,7 @@ describe User do
|
||||||
it 'should return true' do
|
it 'should return true' do
|
||||||
token = user.email_tokens.find_by(email: user.email)
|
token = user.email_tokens.find_by(email: user.email)
|
||||||
EmailToken.confirm(token.token)
|
EmailToken.confirm(token.token)
|
||||||
user.email_confirmed?.should == true
|
expect(user.email_confirmed?).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -734,7 +734,7 @@ describe User do
|
||||||
it 'should return false' do
|
it 'should return false' do
|
||||||
user.email_tokens.each {|t| t.destroy}
|
user.email_tokens.each {|t| t.destroy}
|
||||||
user.reload
|
user.reload
|
||||||
user.email_confirmed?.should == true
|
expect(user.email_confirmed?).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -750,13 +750,13 @@ describe User do
|
||||||
user.flag_linked_posts_as_spam
|
user.flag_linked_posts_as_spam
|
||||||
|
|
||||||
post.reload
|
post.reload
|
||||||
post.spam_count.should == 1
|
expect(post.spam_count).to eq(1)
|
||||||
|
|
||||||
another_post.reload
|
another_post.reload
|
||||||
another_post.spam_count.should == 1
|
expect(another_post.spam_count).to eq(1)
|
||||||
|
|
||||||
post_without_link.reload
|
post_without_link.reload
|
||||||
post_without_link.spam_count.should == 0
|
expect(post_without_link.spam_count).to eq(0)
|
||||||
|
|
||||||
# It doesn't raise an exception if called again
|
# It doesn't raise an exception if called again
|
||||||
user.flag_linked_posts_as_spam
|
user.flag_linked_posts_as_spam
|
||||||
|
@ -768,17 +768,17 @@ describe User do
|
||||||
describe '#readable_name' do
|
describe '#readable_name' do
|
||||||
context 'when name is missing' do
|
context 'when name is missing' do
|
||||||
it 'returns just the username' do
|
it 'returns just the username' do
|
||||||
Fabricate(:user, username: 'foo', name: nil).readable_name.should == 'foo'
|
expect(Fabricate(:user, username: 'foo', name: nil).readable_name).to eq('foo')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
context 'when name and username are identical' do
|
context 'when name and username are identical' do
|
||||||
it 'returns just the username' do
|
it 'returns just the username' do
|
||||||
Fabricate(:user, username: 'foo', name: 'foo').readable_name.should == 'foo'
|
expect(Fabricate(:user, username: 'foo', name: 'foo').readable_name).to eq('foo')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
context 'when name and username are not identical' do
|
context 'when name and username are not identical' do
|
||||||
it 'returns the name and username' do
|
it 'returns the name and username' do
|
||||||
Fabricate(:user, username: 'foo', name: 'Bar Baz').readable_name.should == 'Bar Baz (foo)'
|
expect(Fabricate(:user, username: 'foo', name: 'Bar Baz').readable_name).to eq('Bar Baz (foo)')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -895,11 +895,11 @@ describe User do
|
||||||
|
|
||||||
it "does not return true for staff" do
|
it "does not return true for staff" do
|
||||||
user.stubs(:staff?).returns(true)
|
user.stubs(:staff?).returns(true)
|
||||||
user.posted_too_much_in_topic?(topic.id).should == false
|
expect(user.posted_too_much_in_topic?(topic.id)).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true when the user has posted too much" do
|
it "returns true when the user has posted too much" do
|
||||||
user.posted_too_much_in_topic?(topic.id).should == true
|
expect(user.posted_too_much_in_topic?(topic.id)).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with a reply" do
|
context "with a reply" do
|
||||||
|
@ -908,7 +908,7 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "resets the `posted_too_much` threshold" do
|
it "resets the `posted_too_much` threshold" do
|
||||||
user.posted_too_much_in_topic?(topic.id).should == false
|
expect(user.posted_too_much_in_topic?(topic.id)).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -916,7 +916,7 @@ describe User do
|
||||||
it "returns false for a user who created the topic" do
|
it "returns false for a user who created the topic" do
|
||||||
topic_user = topic.user
|
topic_user = topic.user
|
||||||
topic_user.trust_level = TrustLevel[0]
|
topic_user.trust_level = TrustLevel[0]
|
||||||
topic.user.posted_too_much_in_topic?(topic.id).should == false
|
expect(topic.user.posted_too_much_in_topic?(topic.id)).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -945,7 +945,7 @@ describe User do
|
||||||
describe "#gravatar_template" do
|
describe "#gravatar_template" do
|
||||||
|
|
||||||
it "returns a gravatar based template" do
|
it "returns a gravatar based template" do
|
||||||
User.gravatar_template("em@il.com").should == "//www.gravatar.com/avatar/6dc2fde946483a1d8a84b89345a1b638.png?s={size}&r=pg&d=identicon"
|
expect(User.gravatar_template("em@il.com")).to eq("//www.gravatar.com/avatar/6dc2fde946483a1d8a84b89345a1b638.png?s={size}&r=pg&d=identicon")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -955,7 +955,7 @@ describe User do
|
||||||
let(:user) { build(:user, username: 'Sam') }
|
let(:user) { build(:user, username: 'Sam') }
|
||||||
|
|
||||||
it "returns a 45-pixel-wide avatar" do
|
it "returns a 45-pixel-wide avatar" do
|
||||||
user.small_avatar_url.should == "//test.localhost/letter_avatar/sam/45/#{LetterAvatar::VERSION}.png"
|
expect(user.small_avatar_url).to eq("//test.localhost/letter_avatar/sam/45/#{LetterAvatar::VERSION}.png")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -965,12 +965,12 @@ describe User do
|
||||||
let(:user) { build(:user, uploaded_avatar_id: 99, username: 'Sam') }
|
let(:user) { build(:user, uploaded_avatar_id: 99, username: 'Sam') }
|
||||||
|
|
||||||
it "returns a schemaless avatar template with correct id" do
|
it "returns a schemaless avatar template with correct id" do
|
||||||
user.avatar_template_url.should == "//test.localhost/user_avatar/test.localhost/sam/{size}/99.png"
|
expect(user.avatar_template_url).to eq("//test.localhost/user_avatar/test.localhost/sam/{size}/99.png")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a schemaless cdn-based avatar template" do
|
it "returns a schemaless cdn-based avatar template" do
|
||||||
Rails.configuration.action_controller.stubs(:asset_host).returns("http://my.cdn.com")
|
Rails.configuration.action_controller.stubs(:asset_host).returns("http://my.cdn.com")
|
||||||
user.avatar_template_url.should == "//my.cdn.com/user_avatar/test.localhost/sam/{size}/99.png"
|
expect(user.avatar_template_url).to eq("//my.cdn.com/user_avatar/test.localhost/sam/{size}/99.png")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -984,14 +984,14 @@ describe User do
|
||||||
it "with existing UserVisit record, increments the posts_read value" do
|
it "with existing UserVisit record, increments the posts_read value" do
|
||||||
expect {
|
expect {
|
||||||
user_visit = user.update_posts_read!(2)
|
user_visit = user.update_posts_read!(2)
|
||||||
user_visit.posts_read.should == 2
|
expect(user_visit.posts_read).to eq(2)
|
||||||
}.to_not change { UserVisit.count }
|
}.to_not change { UserVisit.count }
|
||||||
end
|
end
|
||||||
|
|
||||||
it "with no existing UserVisit record, creates a new UserVisit record and increments the posts_read count" do
|
it "with no existing UserVisit record, creates a new UserVisit record and increments the posts_read count" do
|
||||||
expect {
|
expect {
|
||||||
user_visit = user.update_posts_read!(3, 5.days.ago)
|
user_visit = user.update_posts_read!(3, 5.days.ago)
|
||||||
user_visit.posts_read.should == 3
|
expect(user_visit.posts_read).to eq(3)
|
||||||
}.to change { UserVisit.count }.by(1)
|
}.to change { UserVisit.count }.by(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1001,7 +1001,7 @@ describe User do
|
||||||
let!(:user) { Fabricate(:user) }
|
let!(:user) { Fabricate(:user) }
|
||||||
|
|
||||||
it "has no primary_group_id by default" do
|
it "has no primary_group_id by default" do
|
||||||
user.primary_group_id.should == nil
|
expect(user.primary_group_id).to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when the user has a group" do
|
context "when the user has a group" do
|
||||||
|
@ -1016,7 +1016,7 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should allow us to use it as a primary group" do
|
it "should allow us to use it as a primary group" do
|
||||||
user.primary_group_id.should == group.id
|
expect(user.primary_group_id).to eq(group.id)
|
||||||
|
|
||||||
# If we remove the user from the group
|
# If we remove the user from the group
|
||||||
group.usernames = ""
|
group.usernames = ""
|
||||||
|
@ -1024,7 +1024,7 @@ describe User do
|
||||||
|
|
||||||
# It should unset it from the primary_group_id
|
# It should unset it from the primary_group_id
|
||||||
user.reload
|
user.reload
|
||||||
user.primary_group_id.should == nil
|
expect(user.primary_group_id).to eq(nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1034,12 +1034,12 @@ describe User do
|
||||||
|
|
||||||
it "should be redirected to top when there is a reason to" do
|
it "should be redirected to top when there is a reason to" do
|
||||||
user.expects(:redirected_to_top_reason).returns("42")
|
user.expects(:redirected_to_top_reason).returns("42")
|
||||||
user.should_be_redirected_to_top.should == true
|
expect(user.should_be_redirected_to_top).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not be redirected to top when there is no reason to" do
|
it "should not be redirected to top when there is no reason to" do
|
||||||
user.expects(:redirected_to_top_reason).returns(nil)
|
user.expects(:redirected_to_top_reason).returns(nil)
|
||||||
user.should_be_redirected_to_top.should == false
|
expect(user.should_be_redirected_to_top).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -1049,7 +1049,7 @@ describe User do
|
||||||
|
|
||||||
it "should have no reason when `SiteSetting.redirect_users_to_top_page` is disabled" do
|
it "should have no reason when `SiteSetting.redirect_users_to_top_page` is disabled" do
|
||||||
SiteSetting.expects(:redirect_users_to_top_page).returns(false)
|
SiteSetting.expects(:redirect_users_to_top_page).returns(false)
|
||||||
user.redirected_to_top_reason.should == nil
|
expect(user.redirected_to_top_reason).to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when `SiteSetting.redirect_users_to_top_page` is enabled" do
|
context "when `SiteSetting.redirect_users_to_top_page` is enabled" do
|
||||||
|
@ -1057,7 +1057,7 @@ describe User do
|
||||||
|
|
||||||
it "should have no reason when top is not in the `SiteSetting.top_menu`" do
|
it "should have no reason when top is not in the `SiteSetting.top_menu`" do
|
||||||
SiteSetting.expects(:top_menu).returns("latest")
|
SiteSetting.expects(:top_menu).returns("latest")
|
||||||
user.redirected_to_top_reason.should == nil
|
expect(user.redirected_to_top_reason).to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "and when top is in the `SiteSetting.top_menu`" do
|
context "and when top is in the `SiteSetting.top_menu`" do
|
||||||
|
@ -1065,7 +1065,7 @@ describe User do
|
||||||
|
|
||||||
it "should have no reason when there aren't enough topics" do
|
it "should have no reason when there aren't enough topics" do
|
||||||
SiteSetting.expects(:has_enough_topics_to_redirect_to_top).returns(false)
|
SiteSetting.expects(:has_enough_topics_to_redirect_to_top).returns(false)
|
||||||
user.redirected_to_top_reason.should == nil
|
expect(user.redirected_to_top_reason).to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "and when there are enough topics" do
|
context "and when there are enough topics" do
|
||||||
|
@ -1081,14 +1081,14 @@ describe User do
|
||||||
user.expects(:last_redirected_to_top_at).returns(nil)
|
user.expects(:last_redirected_to_top_at).returns(nil)
|
||||||
user.expects(:update_last_redirected_to_top!).once
|
user.expects(:update_last_redirected_to_top!).once
|
||||||
|
|
||||||
user.redirected_to_top_reason.should == I18n.t('redirected_to_top_reasons.new_user')
|
expect(user.redirected_to_top_reason).to eq(I18n.t('redirected_to_top_reasons.new_user'))
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not have a reason for next visits" do
|
it "should not have a reason for next visits" do
|
||||||
user.expects(:last_redirected_to_top_at).returns(10.minutes.ago)
|
user.expects(:last_redirected_to_top_at).returns(10.minutes.ago)
|
||||||
user.expects(:update_last_redirected_to_top!).never
|
user.expects(:update_last_redirected_to_top!).never
|
||||||
|
|
||||||
user.redirected_to_top_reason.should == nil
|
expect(user.redirected_to_top_reason).to eq(nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1099,7 +1099,7 @@ describe User do
|
||||||
user.last_seen_at = 2.months.ago
|
user.last_seen_at = 2.months.ago
|
||||||
user.expects(:update_last_redirected_to_top!).once
|
user.expects(:update_last_redirected_to_top!).once
|
||||||
|
|
||||||
user.redirected_to_top_reason.should == I18n.t('redirected_to_top_reasons.not_seen_in_a_month')
|
expect(user.redirected_to_top_reason).to eq(I18n.t('redirected_to_top_reasons.not_seen_in_a_month'))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1115,8 +1115,8 @@ describe User do
|
||||||
it "sets a system avatar for new users" do
|
it "sets a system avatar for new users" do
|
||||||
u = User.create!(username: "bob", email: "bob@bob.com")
|
u = User.create!(username: "bob", email: "bob@bob.com")
|
||||||
u.reload
|
u.reload
|
||||||
u.uploaded_avatar_id.should == nil
|
expect(u.uploaded_avatar_id).to eq(nil)
|
||||||
u.avatar_template.should == "/letter_avatar/bob/{size}/#{LetterAvatar::VERSION}.png"
|
expect(u.avatar_template).to eq("/letter_avatar/bob/{size}/#{LetterAvatar::VERSION}.png")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1124,7 +1124,7 @@ describe User do
|
||||||
it "allows modification of custom fields" do
|
it "allows modification of custom fields" do
|
||||||
user = Fabricate(:user)
|
user = Fabricate(:user)
|
||||||
|
|
||||||
user.custom_fields["a"].should == nil
|
expect(user.custom_fields["a"]).to eq(nil)
|
||||||
|
|
||||||
user.custom_fields["bob"] = "marley"
|
user.custom_fields["bob"] = "marley"
|
||||||
user.custom_fields["jack"] = "black"
|
user.custom_fields["jack"] = "black"
|
||||||
|
@ -1132,8 +1132,8 @@ describe User do
|
||||||
|
|
||||||
user = User.find(user.id)
|
user = User.find(user.id)
|
||||||
|
|
||||||
user.custom_fields["bob"].should == "marley"
|
expect(user.custom_fields["bob"]).to eq("marley")
|
||||||
user.custom_fields["jack"].should == "black"
|
expect(user.custom_fields["jack"]).to eq("black")
|
||||||
|
|
||||||
user.custom_fields.delete("bob")
|
user.custom_fields.delete("bob")
|
||||||
user.custom_fields["jack"] = "jill"
|
user.custom_fields["jack"] = "jill"
|
||||||
|
@ -1141,7 +1141,7 @@ describe User do
|
||||||
user.save
|
user.save
|
||||||
user = User.find(user.id)
|
user = User.find(user.id)
|
||||||
|
|
||||||
user.custom_fields.should == {"jack" => "jill"}
|
expect(user.custom_fields).to eq({"jack" => "jill"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1165,9 +1165,9 @@ describe User do
|
||||||
it 'should only remove old, unactivated users' do
|
it 'should only remove old, unactivated users' do
|
||||||
User.purge_unactivated
|
User.purge_unactivated
|
||||||
all_users = User.all
|
all_users = User.all
|
||||||
all_users.include?(user).should == true
|
expect(all_users.include?(user)).to eq(true)
|
||||||
all_users.include?(inactive).should == true
|
expect(all_users.include?(inactive)).to eq(true)
|
||||||
all_users.include?(inactive_old).should == false
|
expect(all_users.include?(inactive_old)).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1180,19 +1180,19 @@ describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns the same hash for the same password and salt" do
|
it "returns the same hash for the same password and salt" do
|
||||||
hash('poutine', 'gravy').should == hash('poutine', 'gravy')
|
expect(hash('poutine', 'gravy')).to eq(hash('poutine', 'gravy'))
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a different hash for the same salt and different password" do
|
it "returns a different hash for the same salt and different password" do
|
||||||
hash('poutine', 'gravy').should_not == hash('fries', 'gravy')
|
expect(hash('poutine', 'gravy')).not_to eq(hash('fries', 'gravy'))
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns a different hash for the same password and different salt" do
|
it "returns a different hash for the same password and different salt" do
|
||||||
hash('poutine', 'gravy').should_not == hash('poutine', 'cheese')
|
expect(hash('poutine', 'gravy')).not_to eq(hash('poutine', 'cheese'))
|
||||||
end
|
end
|
||||||
|
|
||||||
it "raises an error when passwords are too long" do
|
it "raises an error when passwords are too long" do
|
||||||
-> { hash(too_long, 'gravy') }.should raise_error
|
expect { hash(too_long, 'gravy') }.to raise_error
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,14 +2,14 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe UserStat do
|
describe UserStat do
|
||||||
|
|
||||||
it { should belong_to :user }
|
it { is_expected.to belong_to :user }
|
||||||
|
|
||||||
it "is created automatically when a user is created" do
|
it "is created automatically when a user is created" do
|
||||||
user = Fabricate(:evil_trout)
|
user = Fabricate(:evil_trout)
|
||||||
user.user_stat.should be_present
|
expect(user.user_stat).to be_present
|
||||||
|
|
||||||
# It populates the `new_since` field by default
|
# It populates the `new_since` field by default
|
||||||
user.user_stat.new_since.should be_present
|
expect(user.user_stat.new_since).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
context '#update_view_counts' do
|
context '#update_view_counts' do
|
||||||
|
@ -20,7 +20,7 @@ describe UserStat do
|
||||||
context 'topics_entered' do
|
context 'topics_entered' do
|
||||||
context 'without any views' do
|
context 'without any views' do
|
||||||
it "doesn't increase the user's topics_entered" do
|
it "doesn't increase the user's topics_entered" do
|
||||||
lambda { UserStat.update_view_counts; stat.reload }.should_not change(stat, :topics_entered)
|
expect { UserStat.update_view_counts; stat.reload }.not_to change(stat, :topics_entered)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -35,14 +35,14 @@ describe UserStat do
|
||||||
it "adds one to the topics entered" do
|
it "adds one to the topics entered" do
|
||||||
UserStat.update_view_counts
|
UserStat.update_view_counts
|
||||||
stat.reload
|
stat.reload
|
||||||
stat.topics_entered.should == 1
|
expect(stat.topics_entered).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "won't record a second view as a different topic" do
|
it "won't record a second view as a different topic" do
|
||||||
TopicViewItem.add(topic.id, '127.0.0.1', user.id)
|
TopicViewItem.add(topic.id, '127.0.0.1', user.id)
|
||||||
UserStat.update_view_counts
|
UserStat.update_view_counts
|
||||||
stat.reload
|
stat.reload
|
||||||
stat.topics_entered.should == 1
|
expect(stat.topics_entered).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -51,7 +51,7 @@ describe UserStat do
|
||||||
context 'posts_read_count' do
|
context 'posts_read_count' do
|
||||||
context 'without any post timings' do
|
context 'without any post timings' do
|
||||||
it "doesn't increase the user's posts_read_count" do
|
it "doesn't increase the user's posts_read_count" do
|
||||||
lambda { UserStat.update_view_counts; stat.reload }.should_not change(stat, :posts_read_count)
|
expect { UserStat.update_view_counts; stat.reload }.not_to change(stat, :posts_read_count)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ describe UserStat do
|
||||||
it "increases posts_read_count" do
|
it "increases posts_read_count" do
|
||||||
UserStat.update_view_counts
|
UserStat.update_view_counts
|
||||||
stat.reload
|
stat.reload
|
||||||
stat.posts_read_count.should == 1
|
expect(stat.posts_read_count).to eq(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -83,14 +83,14 @@ describe UserStat do
|
||||||
stat.expects(:last_seen_cached).returns(nil)
|
stat.expects(:last_seen_cached).returns(nil)
|
||||||
stat.update_time_read!
|
stat.update_time_read!
|
||||||
stat.reload
|
stat.reload
|
||||||
stat.time_read.should == 0
|
expect(stat.time_read).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'makes a change if time read is below threshold' do
|
it 'makes a change if time read is below threshold' do
|
||||||
stat.expects(:last_seen_cached).returns(Time.now - 10)
|
stat.expects(:last_seen_cached).returns(Time.now - 10)
|
||||||
stat.update_time_read!
|
stat.update_time_read!
|
||||||
stat.reload
|
stat.reload
|
||||||
stat.time_read.should == 10
|
expect(stat.time_read).to eq(10)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'makes no change if time read is above threshold' do
|
it 'makes no change if time read is above threshold' do
|
||||||
|
@ -98,7 +98,7 @@ describe UserStat do
|
||||||
stat.expects(:last_seen_cached).returns(t)
|
stat.expects(:last_seen_cached).returns(t)
|
||||||
stat.update_time_read!
|
stat.update_time_read!
|
||||||
stat.reload
|
stat.reload
|
||||||
stat.time_read.should == 0
|
expect(stat.time_read).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,14 +11,14 @@ describe UserVisit do
|
||||||
user.update_visit_record!(1.day.ago.to_date)
|
user.update_visit_record!(1.day.ago.to_date)
|
||||||
|
|
||||||
user.reload
|
user.reload
|
||||||
user.user_stat.days_visited.should == 2
|
expect(user.user_stat.days_visited).to eq(2)
|
||||||
|
|
||||||
user.user_stat.days_visited = 1
|
user.user_stat.days_visited = 1
|
||||||
user.save
|
user.save
|
||||||
UserVisit.ensure_consistency!
|
UserVisit.ensure_consistency!
|
||||||
|
|
||||||
user.reload
|
user.reload
|
||||||
user.user_stat.days_visited.should == 2
|
expect(user.user_stat.days_visited).to eq(2)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#by_day' do
|
describe '#by_day' do
|
||||||
|
@ -34,8 +34,8 @@ describe UserVisit do
|
||||||
let(:visits_by_day) { {1.day.ago.to_date => 2, 2.days.ago.to_date => 1, Time.now.to_date => 1 } }
|
let(:visits_by_day) { {1.day.ago.to_date => 2, 2.days.ago.to_date => 1, Time.now.to_date => 1 } }
|
||||||
|
|
||||||
it 'collect closed interval visits' do
|
it 'collect closed interval visits' do
|
||||||
UserVisit.by_day(2.days.ago, Time.now).should include(visits_by_day)
|
expect(UserVisit.by_day(2.days.ago, Time.now)).to include(visits_by_day)
|
||||||
UserVisit.by_day(2.days.ago, Time.now).should_not include({4.days.ago.to_date => 1})
|
expect(UserVisit.by_day(2.days.ago, Time.now)).not_to include({4.days.ago.to_date => 1})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,12 +12,12 @@ describe BasicPostSerializer do
|
||||||
|
|
||||||
it "returns the name it when `enable_names` is true" do
|
it "returns the name it when `enable_names` is true" do
|
||||||
SiteSetting.stubs(:enable_names?).returns(true)
|
SiteSetting.stubs(:enable_names?).returns(true)
|
||||||
json[:name].should be_present
|
expect(json[:name]).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't return the name it when `enable_names` is false" do
|
it "doesn't return the name it when `enable_names` is false" do
|
||||||
SiteSetting.stubs(:enable_names?).returns(false)
|
SiteSetting.stubs(:enable_names?).returns(false)
|
||||||
json[:name].should be_blank
|
expect(json[:name]).to be_blank
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,16 +30,16 @@ describe PostSerializer do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "displays the correct info" do
|
it "displays the correct info" do
|
||||||
visible_actions_for(actor).sort.should == [:like,:notify_user,:spam,:vote]
|
expect(visible_actions_for(actor).sort).to eq([:like,:notify_user,:spam,:vote])
|
||||||
visible_actions_for(post.user).sort.should == [:like,:vote]
|
expect(visible_actions_for(post.user).sort).to eq([:like,:vote])
|
||||||
visible_actions_for(nil).sort.should == [:like,:vote]
|
expect(visible_actions_for(nil).sort).to eq([:like,:vote])
|
||||||
visible_actions_for(admin).sort.should == [:like,:notify_user,:spam,:vote]
|
expect(visible_actions_for(admin).sort).to eq([:like,:notify_user,:spam,:vote])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can't flag your own post to notify yourself" do
|
it "can't flag your own post to notify yourself" do
|
||||||
serializer = PostSerializer.new(post, scope: Guardian.new(post.user), root: false)
|
serializer = PostSerializer.new(post, scope: Guardian.new(post.user), root: false)
|
||||||
notify_user_action = serializer.actions_summary.find { |a| a[:id] == PostActionType.types[:notify_user] }
|
notify_user_action = serializer.actions_summary.find { |a| a[:id] == PostActionType.types[:notify_user] }
|
||||||
notify_user_action[:can_act].should == false
|
expect(notify_user_action[:can_act]).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -55,10 +55,10 @@ describe PostSerializer do
|
||||||
|
|
||||||
it "serializes correctly" do
|
it "serializes correctly" do
|
||||||
[:name, :username, :display_username, :avatar_template, :user_title, :trust_level].each do |attr|
|
[:name, :username, :display_username, :avatar_template, :user_title, :trust_level].each do |attr|
|
||||||
subject[attr].should be_nil
|
expect(subject[attr]).to be_nil
|
||||||
end
|
end
|
||||||
[:moderator, :staff, :yours].each do |attr|
|
[:moderator, :staff, :yours].each do |attr|
|
||||||
subject[attr].should == false
|
expect(subject[attr]).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -71,12 +71,12 @@ describe PostSerializer do
|
||||||
|
|
||||||
it "returns the display_username it when `enable_names` is on" do
|
it "returns the display_username it when `enable_names` is on" do
|
||||||
SiteSetting.stubs(:enable_names).returns(true)
|
SiteSetting.stubs(:enable_names).returns(true)
|
||||||
json[:display_username].should be_present
|
expect(json[:display_username]).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't return the display_username it when `enable_names` is off" do
|
it "doesn't return the display_username it when `enable_names` is off" do
|
||||||
SiteSetting.stubs(:enable_names).returns(false)
|
SiteSetting.stubs(:enable_names).returns(false)
|
||||||
json[:display_username].should be_blank
|
expect(json[:display_username]).to be_blank
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ describe PostSerializer do
|
||||||
|
|
||||||
it "includes the raw post for everyone" do
|
it "includes the raw post for everyone" do
|
||||||
[nil, user, Fabricate(:user), Fabricate(:moderator), Fabricate(:admin)].each do |user|
|
[nil, user, Fabricate(:user), Fabricate(:moderator), Fabricate(:admin)].each do |user|
|
||||||
serialized_post_for_user(user)[:raw].should == raw
|
expect(serialized_post_for_user(user)[:raw]).to eq(raw)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -104,21 +104,21 @@ describe PostSerializer do
|
||||||
let(:post) { Fabricate.build(:post, raw: raw, user: user, hidden: true, hidden_reason_id: Post.hidden_reasons[:flag_threshold_reached]) }
|
let(:post) { Fabricate.build(:post, raw: raw, user: user, hidden: true, hidden_reason_id: Post.hidden_reasons[:flag_threshold_reached]) }
|
||||||
|
|
||||||
it "shows the raw post only if authorized to see it" do
|
it "shows the raw post only if authorized to see it" do
|
||||||
serialized_post_for_user(nil)[:raw].should == nil
|
expect(serialized_post_for_user(nil)[:raw]).to eq(nil)
|
||||||
serialized_post_for_user(Fabricate(:user))[:raw].should == nil
|
expect(serialized_post_for_user(Fabricate(:user))[:raw]).to eq(nil)
|
||||||
|
|
||||||
serialized_post_for_user(user)[:raw].should == raw
|
expect(serialized_post_for_user(user)[:raw]).to eq(raw)
|
||||||
serialized_post_for_user(Fabricate(:moderator))[:raw].should == raw
|
expect(serialized_post_for_user(Fabricate(:moderator))[:raw]).to eq(raw)
|
||||||
serialized_post_for_user(Fabricate(:admin))[:raw].should == raw
|
expect(serialized_post_for_user(Fabricate(:admin))[:raw]).to eq(raw)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can view edit history only if authorized" do
|
it "can view edit history only if authorized" do
|
||||||
serialized_post_for_user(nil)[:can_view_edit_history].should == false
|
expect(serialized_post_for_user(nil)[:can_view_edit_history]).to eq(false)
|
||||||
serialized_post_for_user(Fabricate(:user))[:can_view_edit_history].should == false
|
expect(serialized_post_for_user(Fabricate(:user))[:can_view_edit_history]).to eq(false)
|
||||||
|
|
||||||
serialized_post_for_user(user)[:can_view_edit_history].should == true
|
expect(serialized_post_for_user(user)[:can_view_edit_history]).to eq(true)
|
||||||
serialized_post_for_user(Fabricate(:moderator))[:can_view_edit_history].should == true
|
expect(serialized_post_for_user(Fabricate(:moderator))[:can_view_edit_history]).to eq(true)
|
||||||
serialized_post_for_user(Fabricate(:admin))[:can_view_edit_history].should == true
|
expect(serialized_post_for_user(Fabricate(:admin))[:can_view_edit_history]).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ describe PostSerializer do
|
||||||
|
|
||||||
it "can view edit history" do
|
it "can view edit history" do
|
||||||
[nil, user, Fabricate(:user), Fabricate(:moderator), Fabricate(:admin)].each do |user|
|
[nil, user, Fabricate(:user), Fabricate(:moderator), Fabricate(:admin)].each do |user|
|
||||||
serialized_post_for_user(user)[:can_view_edit_history].should == true
|
expect(serialized_post_for_user(user)[:can_view_edit_history]).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -136,12 +136,12 @@ describe PostSerializer do
|
||||||
let(:post) { Fabricate.build(:post, raw: raw, user: user, wiki: true, hidden: true, hidden_reason_id: Post.hidden_reasons[:flag_threshold_reached]) }
|
let(:post) { Fabricate.build(:post, raw: raw, user: user, wiki: true, hidden: true, hidden_reason_id: Post.hidden_reasons[:flag_threshold_reached]) }
|
||||||
|
|
||||||
it "can view edit history only if authorized" do
|
it "can view edit history only if authorized" do
|
||||||
serialized_post_for_user(nil)[:can_view_edit_history].should == false
|
expect(serialized_post_for_user(nil)[:can_view_edit_history]).to eq(false)
|
||||||
serialized_post_for_user(Fabricate(:user))[:can_view_edit_history].should == false
|
expect(serialized_post_for_user(Fabricate(:user))[:can_view_edit_history]).to eq(false)
|
||||||
|
|
||||||
serialized_post_for_user(user)[:can_view_edit_history].should == true
|
expect(serialized_post_for_user(user)[:can_view_edit_history]).to eq(true)
|
||||||
serialized_post_for_user(Fabricate(:moderator))[:can_view_edit_history].should == true
|
expect(serialized_post_for_user(Fabricate(:moderator))[:can_view_edit_history]).to eq(true)
|
||||||
serialized_post_for_user(Fabricate(:admin))[:can_view_edit_history].should == true
|
expect(serialized_post_for_user(Fabricate(:admin))[:can_view_edit_history]).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ describe TopicListItemSerializer do
|
||||||
topic.posters = []
|
topic.posters = []
|
||||||
serialized = TopicListItemSerializer.new(topic, scope: Guardian.new, root: false).as_json
|
serialized = TopicListItemSerializer.new(topic, scope: Guardian.new, root: false).as_json
|
||||||
|
|
||||||
serialized[:title].should == "test"
|
expect(serialized[:title]).to eq("test")
|
||||||
serialized[:bumped].should == true
|
expect(serialized[:bumped]).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,7 +11,7 @@ describe UserSerializer do
|
||||||
let(:untrusted_attributes) { %i{bio_raw bio_cooked bio_excerpt location website profile_background card_background} }
|
let(:untrusted_attributes) { %i{bio_raw bio_cooked bio_excerpt location website profile_background card_background} }
|
||||||
|
|
||||||
it "doesn't serialize untrusted attributes" do
|
it "doesn't serialize untrusted attributes" do
|
||||||
untrusted_attributes.each { |attr| json.should_not have_key(attr) }
|
untrusted_attributes.each { |attr| expect(json).not_to have_key(attr) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ describe UserSerializer do
|
||||||
let(:json) { serializer.as_json }
|
let(:json) { serializer.as_json }
|
||||||
|
|
||||||
it "produces json" do
|
it "produces json" do
|
||||||
json.should be_present
|
expect(json).to be_present
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with `enable_names` true" do
|
context "with `enable_names` true" do
|
||||||
|
@ -30,7 +30,7 @@ describe UserSerializer do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "has a name" do
|
it "has a name" do
|
||||||
json[:name].should be_present
|
expect(json[:name]).to be_present
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ describe UserSerializer do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "has a name" do
|
it "has a name" do
|
||||||
json[:name].should be_blank
|
expect(json[:name]).to be_blank
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -102,13 +102,13 @@ describe UserSerializer do
|
||||||
|
|
||||||
it "doesn't serialize the fields by default" do
|
it "doesn't serialize the fields by default" do
|
||||||
json[:custom_fields]
|
json[:custom_fields]
|
||||||
json[:custom_fields].should be_empty
|
expect(json[:custom_fields]).to be_empty
|
||||||
end
|
end
|
||||||
|
|
||||||
it "serializes the fields listed in public_user_custom_fields site setting" do
|
it "serializes the fields listed in public_user_custom_fields site setting" do
|
||||||
SiteSetting.stubs(:public_user_custom_fields).returns('public_field')
|
SiteSetting.stubs(:public_user_custom_fields).returns('public_field')
|
||||||
json[:custom_fields]['public_field'].should == user.custom_fields['public_field']
|
expect(json[:custom_fields]['public_field']).to eq(user.custom_fields['public_field'])
|
||||||
json[:custom_fields]['secret_field'].should == nil
|
expect(json[:custom_fields]['secret_field']).to eq(nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,9 +17,9 @@ describe "users/omniauth_callbacks/complete.html.erb" do
|
||||||
|
|
||||||
render
|
render
|
||||||
|
|
||||||
rendered_data["authenticated"].should eq(false)
|
expect(rendered_data["authenticated"]).to eq(false)
|
||||||
rendered_data["awaiting_activation"].should eq(false)
|
expect(rendered_data["awaiting_activation"]).to eq(false)
|
||||||
rendered_data["awaiting_approval"].should eq(false)
|
expect(rendered_data["awaiting_approval"]).to eq(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "renders cas data " do
|
it "renders cas data " do
|
||||||
|
@ -32,10 +32,10 @@ describe "users/omniauth_callbacks/complete.html.erb" do
|
||||||
|
|
||||||
render
|
render
|
||||||
|
|
||||||
rendered_data["email"].should eq(result.email)
|
expect(rendered_data["email"]).to eq(result.email)
|
||||||
# TODO this is a bit weird, the upcasing is confusing,
|
# TODO this is a bit weird, the upcasing is confusing,
|
||||||
# clean it up throughout
|
# clean it up throughout
|
||||||
rendered_data["auth_provider"].should eq("Cas")
|
expect(rendered_data["auth_provider"]).to eq("Cas")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,7 +6,7 @@ describe "users/omniauth_callbacks/failure.html.erb" do
|
||||||
flash[:error] = I18n.t("login.omniauth_error", strategy: 'test')
|
flash[:error] = I18n.t("login.omniauth_error", strategy: 'test')
|
||||||
render
|
render
|
||||||
|
|
||||||
rendered.match(I18n.t("login.omniauth_error", strategy: 'test')).should_not == nil
|
expect(rendered.match(I18n.t("login.omniauth_error", strategy: 'test'))).not_to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue