require 'rails_helper' describe Lock do let(:lock) { create(:lock) } describe "#locked?" do it "returns true if locked_until is after the current time" do lock.locked_until = 1.day.from_now expect(lock.locked?).to be true end it "return false if locked_until is before curren time" do lock.locked_until = 1.day.ago expect(lock.locked?).to be false end end describe "#lock_time" do it "increases exponentially with number of tries" do lock.tries = 5 lock.save expect(lock.reload.lock_time).to be_between(30.minutes.from_now, 35.minutes.from_now) lock.tries = 10 lock.save expect(lock.reload.lock_time).to be_between(16.hours.from_now, 18.hours.from_now) lock.tries = 15 lock.save expect(lock.reload.lock_time).to be_between(21.days.from_now, 23.days.from_now) end end describe "#too_many_tries?" do it "returns true if number of tries is multiple of 5" do lock.tries = 5 expect(lock.too_many_tries?).to be true lock.tries = 10 expect(lock.too_many_tries?).to be true lock.tries = 15 expect(lock.too_many_tries?).to be true end it "returns false if number of tries is not multiple of 5" do lock.tries = 0 expect(lock.too_many_tries?).to be false lock.tries = 1 expect(lock.too_many_tries?).to be false lock.tries = 6 expect(lock.too_many_tries?).to be false end end end