discourse/spec/models/screened_url_spec.rb
Jarek Radosz 8e809149d2
DEV: Fix "overridden" typos ()
There are still some, but those are in actual code that's used outside core, so the change there would need to go through the deprecation cycle. That's a task for another day.
2022-04-06 23:17:20 +02:00

133 lines
4.5 KiB
Ruby

# frozen_string_literal: true
describe ScreenedUrl do
let(:url) { 'http://shopppping.com/bad/drugz' }
let(:domain) { 'shopppping.com' }
let(:valid_params) { { url: url, domain: domain } }
describe "new record" do
it "sets a default action_type" do
expect(described_class.create(valid_params).action_type).to eq(described_class.actions[:do_nothing])
end
it "last_match_at is null" do
expect(described_class.create(valid_params).last_match_at).to eq(nil)
end
it "normalizes the url and domain" do
record = described_class.new(valid_params)
record.expects(:normalize).once
record.valid?
end
end
describe 'normalize' do
let(:record) { described_class.new(@params) }
subject { record.normalize; record }
['http://', 'HTTP://', 'https://', 'HTTPS://'].each do |prefix|
it "strips #{prefix}" do
@params = valid_params.merge(url: url.gsub('http://', prefix))
expect(subject.url).to eq(url.gsub('http://', ''))
end
end
it "strips trailing slash" do
@params = valid_params.merge(url: 'silverbullet.in/')
expect(subject.url).to eq('silverbullet.in')
end
it "strips trailing slashes" do
@params = valid_params.merge(url: 'silverbullet.in/buy///')
expect(subject.url).to eq('silverbullet.in/buy')
end
it "downcases domains" do
record1 = described_class.new(valid_params.merge(domain: 'DuB30.com', url: 'DuB30.com/Gems/Gems-of-Power'))
record1.normalize
expect(record1.domain).to eq('dub30.com')
expect(record1.url).to eq('dub30.com/Gems/Gems-of-Power')
expect(record1).to be_valid
record2 = described_class.new(valid_params.merge(domain: 'DuB30.com', url: 'DuB30.com'))
record2.normalize
expect(record2.domain).to eq('dub30.com')
expect(record2.url).to eq('dub30.com')
expect(record2).to be_valid
end
it "strips www. from domains" do
record1 = described_class.new(valid_params.merge(domain: 'www.DuB30.com', url: 'www.DuB30.com/Gems/Gems-of-Power'))
record1.normalize
expect(record1.domain).to eq('dub30.com')
record2 = described_class.new(valid_params.merge(domain: 'WWW.DuB30.cOM', url: 'WWW.DuB30.com/Gems/Gems-of-Power'))
record2.normalize
expect(record2.domain).to eq('dub30.com')
record3 = described_class.new(valid_params.merge(domain: 'www.trolls.spammers.com', url: 'WWW.DuB30.com/Gems/Gems-of-Power'))
record3.normalize
expect(record3.domain).to eq('trolls.spammers.com')
end
it "doesn't modify the url argument" do
expect {
described_class.new(valid_params).normalize
}.to_not change { valid_params[:url] }
end
it "doesn't modify the domain argument" do
params = valid_params.merge(domain: domain.upcase)
expect {
described_class.new(params).normalize
}.to_not change { params[:domain] }
end
end
describe 'find_match' do
it 'returns nil when there is no match' do
expect(described_class.find_match('http://spamspot.com/buy/it')).to eq(nil)
end
it 'returns the record when there is an exact match' do
match = described_class.create(valid_params)
expect(described_class.find_match(valid_params[:url])).to eq(match)
end
it 'ignores case of the domain' do
match = described_class.create(valid_params.merge(url: 'spamexchange.com/Good/Things'))
expect(described_class.find_match("http://SPAMExchange.com/Good/Things")).to eq(match)
end
end
describe '#watch' do
context 'url is not being blocked' do
it 'creates a new record with default action of :do_nothing' do
record = described_class.watch(url, domain)
expect(record).not_to be_new_record
expect(record.action_type).to eq(described_class.actions[:do_nothing])
end
it 'lets action_type be overridden' do
record = described_class.watch(url, domain, action_type: described_class.actions[:block])
expect(record).not_to be_new_record
expect(record.action_type).to eq(described_class.actions[:block])
end
end
context 'url is already being blocked' do
let!(:existing) { Fabricate(:screened_url, url: url, domain: domain) }
it "doesn't create a new record" do
expect { described_class.watch(url, domain) }.to_not change { described_class.count }
end
it "returns the existing record" do
expect(described_class.watch(url, domain)).to eq(existing)
end
end
end
end