otwarchive-symphonyarchive/spec/models/invite_request_spec.rb

73 lines
2.5 KiB
Ruby
Raw Normal View History

2026-03-11 22:22:11 +00:00
require 'spec_helper'
describe InviteRequest do
it "has a valid factory" do
expect(build(:invite_request)).to be_valid
end
describe "Validation" do
context "Invalid email" do
it "invitation is not created for a blank email" do
@invite = build(:invite_request, email: nil)
expect(@invite.valid?).to be_falsey
expect(@invite.errors[:email]).not_to be_empty
end
BAD_EMAILS.each do |email|
it "cannot be created if the email does not pass format check" do
bad_email = build(:user, email: email)
expect(bad_email.valid?).to be_falsey
expect(bad_email.errors[:email]).to include("should look like an email address.")
end
end
end
context "Duplicate email" do
before :all do
@original_request = create(:invite_request, email: "thegodthor@gmail.com")
end
it "should not let you sign up again with the same email" do
dup_request = build(:invite_request, email: @original_request.email)
expect(dup_request.valid?).to be_falsey
expect(dup_request.errors[:email]).to include("is already part of our queue.")
end
it "should not allow duplicates with periods and plus signs" do
dup_request = build(:invite_request, email: "the.god.thor+marvel@gmail.com")
expect(dup_request.valid?).to be_falsey
expect(dup_request.errors[:email]).to include("is already part of our queue.")
end
it "should not return error for duplicate simplified email if duplicate raw email error already present" do
dup_request = build(:invite_request, email: "the.god.thor+marvel@gmail.com")
dup_request.valid?
expect(dup_request.errors[:email].count).to eq(1)
expect(dup_request.errors[:email]).to include("is already part of our queue.")
end
end
end
describe "#proposed_fill_time" do
let(:invite_request) { create(:invite_request) }
before do
freeze_time
admin_setting = AdminSetting.default
admin_setting.invite_from_queue_number = 3
admin_setting.invite_from_queue_frequency = 11
admin_setting.save(validate: false)
end
it "returns time of next check for invite in next batch" do
expect(invite_request.proposed_fill_time).to eq(Time.current + 11.hours)
end
it "returns time with x3 check duration for invite in 3rd batch" do
allow(invite_request).to receive(:position).and_return(9)
expect(invite_request.proposed_fill_time).to eq(Time.current + 33.hours)
end
end
end