/
claims_validator_spec.rb
79 lines (60 loc) · 1.97 KB
/
claims_validator_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# frozen_string_literal: true
RSpec.describe JWT::ClaimsValidator do
let(:validator) { described_class.new(claims) }
describe '#validate!' do
subject { validator.validate! }
shared_examples_for 'a NumericDate claim' do |claim|
context "when #{claim} payload is an integer" do
let(:claims) { { claim => 12345 } }
it 'does not raise error' do
expect { subject }.not_to raise_error
end
context 'and key is a string' do
let(:claims) { { claim.to_s => 43.32 } }
it 'does not raise error' do
expect { subject }.not_to raise_error
end
end
end
context "when #{claim} payload is a float" do
let(:claims) { { claim => 43.32 } }
it 'does not raise error' do
expect { subject }.not_to raise_error
end
end
context "when #{claim} payload is a string" do
let(:claims) { { claim => '1' } }
it 'raises error' do
expect { subject }.to raise_error JWT::InvalidPayload
end
context 'and key is a string' do
let(:claims) { { claim.to_s => '1' } }
it 'raises error' do
expect { subject }.to raise_error JWT::InvalidPayload
end
end
end
context "when #{claim} payload is a Time object" do
let(:claims) { { claim => Time.now } }
it 'raises error' do
expect { subject }.to raise_error JWT::InvalidPayload
end
end
context "when #{claim} payload is a string" do
let(:claims) { { claim => '1' } }
it 'raises error' do
expect { subject }.to raise_error JWT::InvalidPayload
end
end
end
context 'exp claim' do
it_should_behave_like 'a NumericDate claim', :exp
end
context 'iat claim' do
it_should_behave_like 'a NumericDate claim', :iat
end
context 'nbf claim' do
it_should_behave_like 'a NumericDate claim', :nbf
end
end
end