discourse/spec/components/common_passwords/common_passwords_spec.rb
Sam Saffron 4ea21fa2d0 DEV: use #frozen_string_literal: true on all spec
This change both speeds up specs (less strings to allocate) and helps catch
cases where methods in Discourse are mutating inputs.

Overall we will be migrating everything to use #frozen_string_literal: true
it will take a while, but this is the first and safest move in this direction
2019-04-30 10:27:42 +10:00

82 lines
2.7 KiB
Ruby

# frozen_string_literal: true
require "rails_helper"
require_dependency "common_passwords/common_passwords"
describe CommonPasswords do
it "the passwords file should exist" do
expect(File.exists?(described_class::PASSWORD_FILE)).to eq(true)
end
describe "#common_password?" do
before { described_class.stubs(:redis).returns(stub_everything) }
subject { described_class.common_password? @password }
it "returns false if password isn't in the common passwords list" do
described_class.stubs(:password_list).returns(stub_everything(include?: false))
@password = 'uncommonPassword'
expect(subject).to eq(false)
end
it "returns false if password is nil" do
described_class.expects(:password_list).never
@password = nil
expect(subject).to eq(false)
end
it "returns false if password is blank" do
described_class.expects(:password_list).never
@password = ""
expect(subject).to eq(false)
end
it "returns true if password is in the common passwords list" do
described_class.stubs(:password_list).returns(stub_everything(include?: true))
@password = "password"
expect(subject).to eq(true)
end
end
describe '#password_list' do
it "loads the passwords file if redis doesn't have it" do
mock_redis = mock("redis")
mock_redis.stubs(:exists).returns(false)
mock_redis.stubs(:scard).returns(0)
described_class.stubs(:redis).returns(mock_redis)
described_class.expects(:load_passwords).returns(['password'])
list = described_class.password_list
expect(list).to respond_to(:include?)
end
it "doesn't load the passwords file if redis has it" do
mock_redis = mock("redis")
mock_redis.stubs(:exists).returns(true)
mock_redis.stubs(:scard).returns(10000)
described_class.stubs(:redis).returns(mock_redis)
described_class.expects(:load_passwords).never
list = described_class.password_list
expect(list).to respond_to(:include?)
end
it "loads the passwords file if redis has an empty list" do
mock_redis = mock("redis")
mock_redis.stubs(:exists).returns(true)
mock_redis.stubs(:scard).returns(0)
described_class.stubs(:redis).returns(mock_redis)
described_class.expects(:load_passwords).returns(['password'])
list = described_class.password_list
expect(list).to respond_to(:include?)
end
end
context "missing password file" do
it "tolerates it" do
described_class.stubs(:redis).returns(stub_everything(sismember: false, exists: false, scard: 0))
File.stubs(:readlines).with(described_class::PASSWORD_FILE).raises(Errno::ENOENT)
expect(described_class.common_password?("password")).to eq(false)
end
end
end