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