spec/lib/rotp/hotp_spec.rb in rotp-3.3.1 vs spec/lib/rotp/hotp_spec.rb in rotp-4.0.0

- old
+ new

@@ -12,18 +12,10 @@ it 'generates a string OTP' do expect(token).to eq '161024' end end - context 'without padding' do - let(:token) { hotp.at counter, false } - - it 'generates an integer OTP' do - expect(token).to eq 161024 - end - end - context 'RFC compatibility' do let(:hotp) { ROTP::HOTP.new('GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ') } it 'matches the RFC documentation examples' do # 12345678901234567890 in Base32 @@ -67,10 +59,49 @@ it 'verifies and does not allow reuse' do expect(hotp.verify(token, 9)).to be_truthy expect(hotp.verify(token, 10)).to be_falsey end end + describe 'with retries' do + let(:verification) { hotp.verify token, counter, retries:retries } + + context 'counter outside than retries' do + let(:counter) { 1223 } + let(:retries) { 10 } + + it 'is false' do + expect(verification).to be_falsey + end + end + + context 'counter exactly in retry range' do + let(:counter) { 1224 } + let(:retries) { 10 } + + it 'is true' do + expect(verification).to eq 1234 + end + end + + context 'counter in retry range' do + let(:counter) { 1224 } + let(:retries) { 11 } + + it 'is true' do + expect(verification).to eq 1234 + end + end + + context 'counter ahead of token' do + let(:counter) { 1235 } + let(:retries) { 3 } + + it 'is false' do + expect(verification).to be_falsey + end + end + end end describe '#provisioning_uri' do let(:uri) { hotp.provisioning_uri('mark@percival') } let(:params) { CGI::parse URI::parse(uri).query } @@ -96,61 +127,6 @@ expect(params['digits'].first).to eq '8' end end end - describe '#verify_with_retries' do - let(:verification) { hotp.verify_with_retries token, counter, retries } - - context 'negative retries' do - let(:retries) { -1 } - - it 'is false' do - expect(verification).to be_falsey - end - end - - context 'zero retries' do - let(:retries) { 0 } - - it 'is false' do - expect(verification).to be_falsey - end - end - - context 'counter lower than retries' do - let(:counter) { 1223 } - let(:retries) { 10 } - - it 'is false' do - expect(verification).to be_falsey - end - end - - context 'counter exactly in retry range' do - let(:counter) { 1224 } - let(:retries) { 10 } - - it 'is true' do - expect(verification).to eq 1234 - end - end - - context 'counter in retry range' do - let(:counter) { 1224 } - let(:retries) { 11 } - - it 'is true' do - expect(verification).to eq 1234 - end - end - - context 'counter too high' do - let(:counter) { 1235 } - let(:retries) { 3 } - - it 'is false' do - expect(verification).to be_falsey - end - end - end end