|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe Record do
|
|
|
|
include_context "data"
|
|
|
|
|
|
|
|
it "protects DOS on more Settings.max_records_per_domain+ domains" do
|
|
|
|
max = Settings.max_records_per_domain.to_i
|
|
|
|
a_record.domain.stub_chain(:records, :count).and_return(max)
|
|
|
|
a_record.max_records_per_domain
|
|
|
|
a_record.should have(1).errors
|
|
|
|
end
|
|
|
|
|
|
|
|
it "is DOS-valid on less than Settings.max_records_per_domain domains" do
|
|
|
|
max = Settings.max_records_per_domain.to_i
|
|
|
|
a_record.domain.stub_chain(:records, :count).and_return(max)
|
|
|
|
a_record.max_records_per_domain
|
|
|
|
a_record.should be_valid
|
|
|
|
end
|
|
|
|
|
|
|
|
it "queries records corectly in index" do
|
|
|
|
permission3
|
|
|
|
query = Record.accessible_by(user.ability)
|
|
|
|
expected = <<-SQL
|
|
|
|
SELECT `records`.* FROM `records`
|
|
|
|
INNER JOIN `domains` ON `domains`.`id` = `records`.`domain_id`
|
|
|
|
LEFT OUTER JOIN `permissions` ON `permissions`.`domain_id` = `domains`.`id`
|
|
|
|
WHERE ((((1=0 OR
|
|
|
|
`domains`.`user_id` = #{user.id}) OR
|
|
|
|
`permissions`.`user_id` = #{user.id}) OR
|
|
|
|
`domains`.`name_reversed` LIKE '#{permission3.domain.name_reversed}.%'))
|
|
|
|
SQL
|
|
|
|
query.to_sql.should == expected.gsub("\n", '').gsub(/\s+/, ' ').strip
|
|
|
|
end
|
|
|
|
|
|
|
|
it "queries A records corectly in index" do
|
|
|
|
permission3
|
|
|
|
query = A.accessible_by(user.ability(:reload => true))
|
|
|
|
expected = <<-SQL
|
|
|
|
SELECT `records`.* FROM `records`
|
|
|
|
INNER JOIN `domains` ON `domains`.`id` = `records`.`domain_id`
|
|
|
|
LEFT OUTER JOIN `permissions` ON `permissions`.`domain_id` = `domains`.`id`
|
|
|
|
WHERE `records`.`type` IN ('A') AND (((((1=0 OR
|
|
|
|
`domains`.`user_id` = #{user.id}) OR
|
|
|
|
`records`.`user_id` = #{user.id}) OR
|
|
|
|
`permissions`.`user_id` = #{user.id}) OR
|
|
|
|
`domains`.`name_reversed` LIKE '#{permission3.domain.name_reversed}.%'))
|
|
|
|
SQL
|
|
|
|
query.to_sql.should == expected.gsub("\n", '').gsub(/\s+/, ' ').strip
|
|
|
|
end
|
|
|
|
|
|
|
|
it "validates host a records dubles" do
|
|
|
|
host_a_record
|
|
|
|
host_a_record2 = build(:a, name: host_a_record.name, content: '127.0.0.2', domain: host_domain, user: user2)
|
|
|
|
host_a_record2.should have(1).errors_on(:name)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "audits creations" do
|
|
|
|
PaperTrail.enabled = true
|
|
|
|
expect { a_record }.to change(PaperTrail::Version, :count)
|
|
|
|
expect { a_record.update!(name: "x.#{a_record.name}") }.to change(PaperTrail::Version, :count).by(1)
|
|
|
|
expect { a_record.update!(content: "127.0.0.2") }.to_not change(PaperTrail::Version, :count)
|
|
|
|
PaperTrail.enabled = false
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|