require 'rails_helper' describe NonceStore do let(:nonce) { SecureRandom.hex } describe '.add' do it 'stores a nonce in the cache' do expect(Rails.cache).to receive(:write) described_class.add(nonce) end end describe '.delete' do it 'deletes a nonce from the cache' do expect(Rails.cache).to receive(:write) described_class.add(nonce) described_class.delete(nonce) expect(described_class.has?(nonce)).to be false end end describe '.has?' do it 'returns true for present nonces' do described_class.add(nonce) expect(described_class.has?(nonce)).to be true end it 'returns false for expired nonces' do Lti.send(:remove_const, 'MAXIMUM_SESSION_AGE') Lti::MAXIMUM_SESSION_AGE = 1 described_class.add(nonce) expect(described_class.has?(nonce)).to be true sleep(Lti::MAXIMUM_SESSION_AGE) expect(described_class.has?(nonce)).to be false end it 'returns false for absent nonces' do expect(described_class.has?(nonce)).to be false end end end