castle-rb 7.1.2 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -159
  3. data/lib/castle/api/authenticate.rb +3 -12
  4. data/lib/castle/api/end_impersonation.rb +1 -3
  5. data/lib/castle/api/filter.rb +2 -10
  6. data/lib/castle/api/log.rb +2 -10
  7. data/lib/castle/api/risk.rb +2 -10
  8. data/lib/castle/api/start_impersonation.rb +1 -3
  9. data/lib/castle/api/track.rb +1 -3
  10. data/lib/castle/client.rb +1 -5
  11. data/lib/castle/commands/log.rb +1 -5
  12. data/lib/castle/commands/risk.rb +1 -5
  13. data/lib/castle/configuration.rb +2 -6
  14. data/lib/castle/core/process_response.rb +25 -2
  15. data/lib/castle/core/process_webhook.rb +4 -7
  16. data/lib/castle/core/send_request.rb +1 -3
  17. data/lib/castle/errors.rb +8 -0
  18. data/lib/castle/headers/extract.rb +1 -3
  19. data/lib/castle/headers/filter.rb +2 -3
  20. data/lib/castle/payload/prepare.rb +1 -2
  21. data/lib/castle/session.rb +1 -1
  22. data/lib/castle/version.rb +1 -1
  23. data/lib/castle.rb +1 -3
  24. data/spec/integration/rails/rails_spec.rb +9 -3
  25. data/spec/integration/rails/support/application.rb +2 -2
  26. data/spec/integration/rails/support/home_controller.rb +4 -30
  27. data/spec/lib/castle/api/approve_device_spec.rb +2 -6
  28. data/spec/lib/castle/api/authenticate_spec.rb +22 -25
  29. data/spec/lib/castle/api/end_impersonation_spec.rb +8 -14
  30. data/spec/lib/castle/api/get_device_spec.rb +1 -3
  31. data/spec/lib/castle/api/get_devices_for_user_spec.rb +1 -3
  32. data/spec/lib/castle/api/report_device_spec.rb +2 -6
  33. data/spec/lib/castle/api/start_impersonation_spec.rb +8 -14
  34. data/spec/lib/castle/api/track_spec.rb +9 -16
  35. data/spec/lib/castle/client_id/extract_spec.rb +2 -9
  36. data/spec/lib/castle/client_spec.rb +37 -78
  37. data/spec/lib/castle/command_spec.rb +3 -3
  38. data/spec/lib/castle/commands/approve_device_spec.rb +2 -2
  39. data/spec/lib/castle/commands/authenticate_spec.rb +17 -24
  40. data/spec/lib/castle/commands/end_impersonation_spec.rb +14 -21
  41. data/spec/lib/castle/commands/filter_spec.rb +15 -15
  42. data/spec/lib/castle/commands/get_device_spec.rb +2 -2
  43. data/spec/lib/castle/commands/get_devices_for_user_spec.rb +2 -2
  44. data/spec/lib/castle/commands/log_spec.rb +15 -15
  45. data/spec/lib/castle/commands/report_device_spec.rb +2 -2
  46. data/spec/lib/castle/commands/risk_spec.rb +15 -15
  47. data/spec/lib/castle/commands/start_impersonation_spec.rb +14 -21
  48. data/spec/lib/castle/commands/track_spec.rb +19 -24
  49. data/spec/lib/castle/configuration_spec.rb +1 -1
  50. data/spec/lib/castle/context/get_default_spec.rb +9 -8
  51. data/spec/lib/castle/context/prepare_spec.rb +3 -4
  52. data/spec/lib/castle/core/process_response_spec.rb +3 -6
  53. data/spec/lib/castle/core/process_webhook_spec.rb +12 -6
  54. data/spec/lib/castle/core/send_request_spec.rb +7 -11
  55. data/spec/lib/castle/failover/strategy_spec.rb +5 -5
  56. data/spec/lib/castle/headers/extract_spec.rb +1 -1
  57. data/spec/lib/castle/headers/filter_spec.rb +6 -3
  58. data/spec/lib/castle/headers/format_spec.rb +5 -5
  59. data/spec/lib/castle/ips/extract_spec.rb +2 -6
  60. data/spec/lib/castle/logger_spec.rb +2 -1
  61. data/spec/lib/castle/payload/prepare_spec.rb +4 -7
  62. data/spec/lib/castle/secure_mode_spec.rb +1 -3
  63. data/spec/lib/castle/session_spec.rb +1 -5
  64. data/spec/lib/castle/singleton_configuration_spec.rb +1 -1
  65. data/spec/lib/castle/utils/clone_spec.rb +1 -1
  66. data/spec/lib/castle/utils/merge_spec.rb +2 -4
  67. data/spec/lib/castle/validators/not_supported_spec.rb +1 -6
  68. data/spec/lib/castle/validators/present_spec.rb +2 -9
  69. data/spec/lib/castle/verdict_spec.rb +3 -3
  70. data/spec/lib/castle/webhooks/verify_spec.rb +12 -6
  71. data/spec/lib/castle_spec.rb +5 -7
  72. data/spec/support/shared_examples/action_request.rb +37 -25
  73. data/spec/support/shared_examples/configuration.rb +14 -16
  74. metadata +48 -48
@@ -4,9 +4,7 @@ describe Castle::Commands::Authenticate do
4
4
  subject(:instance) { described_class }
5
5
 
6
6
  let(:context) { { test: { test1: '1' } } }
7
- let(:default_payload) do
8
- { event: '$login.authenticate', user_id: '1234', sent_at: time_auto, context: context }
9
- end
7
+ let(:default_payload) { { event: '$login.authenticate', user_id: '1234', sent_at: time_auto, context: context } }
10
8
 
11
9
  let(:time_now) { Time.now }
12
10
  let(:time_auto) { time_now.utc.iso8601(3) }
@@ -22,45 +20,45 @@ describe Castle::Commands::Authenticate do
22
20
  let(:payload) { default_payload.merge(properties: { test: '1' }) }
23
21
  let(:command_data) { default_payload.merge(properties: { test: '1' }, context: context) }
24
22
 
25
- it { expect(command.method).to be_eql(:post) }
26
- it { expect(command.path).to be_eql('authenticate') }
27
- it { expect(command.data).to be_eql(command_data) }
23
+ it { expect(command.method).to be(:post) }
24
+ it { expect(command.path).to eql('authenticate') }
25
+ it { expect(command.data).to eql(command_data) }
28
26
  end
29
27
 
30
28
  context 'with user_traits' do
31
29
  let(:payload) { default_payload.merge(user_traits: { test: '1' }) }
32
30
  let(:command_data) { default_payload.merge(user_traits: { test: '1' }, context: context) }
33
31
 
34
- it { expect(command.method).to be_eql(:post) }
35
- it { expect(command.path).to be_eql('authenticate') }
36
- it { expect(command.data).to be_eql(command_data) }
32
+ it { expect(command.method).to be(:post) }
33
+ it { expect(command.path).to eql('authenticate') }
34
+ it { expect(command.data).to eql(command_data) }
37
35
  end
38
36
 
39
37
  context 'when active true' do
40
38
  let(:payload) { default_payload.merge(context: context.merge(active: true)) }
41
39
  let(:command_data) { default_payload.merge(context: context.merge(active: true)) }
42
40
 
43
- it { expect(command.method).to be_eql(:post) }
44
- it { expect(command.path).to be_eql('authenticate') }
45
- it { expect(command.data).to be_eql(command_data) }
41
+ it { expect(command.method).to be(:post) }
42
+ it { expect(command.path).to eql('authenticate') }
43
+ it { expect(command.data).to eql(command_data) }
46
44
  end
47
45
 
48
46
  context 'when active false' do
49
47
  let(:payload) { default_payload.merge(context: context.merge(active: false)) }
50
48
  let(:command_data) { default_payload.merge(context: context.merge(active: false)) }
51
49
 
52
- it { expect(command.method).to be_eql(:post) }
53
- it { expect(command.path).to be_eql('authenticate') }
54
- it { expect(command.data).to be_eql(command_data) }
50
+ it { expect(command.method).to be(:post) }
51
+ it { expect(command.path).to eql('authenticate') }
52
+ it { expect(command.data).to eql(command_data) }
55
53
  end
56
54
 
57
55
  context 'when active string' do
58
56
  let(:payload) { default_payload.merge(context: context.merge(active: 'string')) }
59
57
  let(:command_data) { default_payload.merge(context: context) }
60
58
 
61
- it { expect(command.method).to be_eql(:post) }
62
- it { expect(command.path).to be_eql('authenticate') }
63
- it { expect(command.data).to be_eql(command_data) }
59
+ it { expect(command.method).to be(:post) }
60
+ it { expect(command.path).to eql('authenticate') }
61
+ it { expect(command.data).to eql(command_data) }
64
62
  end
65
63
  end
66
64
 
@@ -70,12 +68,7 @@ describe Castle::Commands::Authenticate do
70
68
  context 'with event not present' do
71
69
  let(:payload) { {} }
72
70
 
73
- it do
74
- expect { validate! }.to raise_error(
75
- Castle::InvalidParametersError,
76
- 'event is missing or empty'
77
- )
78
- end
71
+ it { expect { validate! }.to raise_error(Castle::InvalidParametersError, 'event is missing or empty') }
79
72
  end
80
73
 
81
74
  context 'with user_id not present' do
@@ -19,40 +19,38 @@ describe Castle::Commands::EndImpersonation do
19
19
 
20
20
  context 'with impersonator' do
21
21
  let(:payload) { default_payload.merge(properties: { impersonator: impersonator }) }
22
- let(:command_data) do
23
- default_payload.merge(properties: { impersonator: impersonator }, context: context)
24
- end
22
+ let(:command_data) { default_payload.merge(properties: { impersonator: impersonator }, context: context) }
25
23
 
26
- it { expect(command.method).to be_eql(:delete) }
27
- it { expect(command.path).to be_eql('impersonate') }
28
- it { expect(command.data).to be_eql(command_data) }
24
+ it { expect(command.method).to be(:delete) }
25
+ it { expect(command.path).to eql('impersonate') }
26
+ it { expect(command.data).to eql(command_data) }
29
27
  end
30
28
 
31
29
  context 'when active true' do
32
30
  let(:payload) { default_payload.merge(context: context.merge(active: true)) }
33
31
  let(:command_data) { default_payload.merge(context: context.merge(active: true)) }
34
32
 
35
- it { expect(command.method).to be_eql(:delete) }
36
- it { expect(command.path).to be_eql('impersonate') }
37
- it { expect(command.data).to be_eql(command_data) }
33
+ it { expect(command.method).to be(:delete) }
34
+ it { expect(command.path).to eql('impersonate') }
35
+ it { expect(command.data).to eql(command_data) }
38
36
  end
39
37
 
40
38
  context 'when active false' do
41
39
  let(:payload) { default_payload.merge(context: context.merge(active: false)) }
42
40
  let(:command_data) { default_payload.merge(context: context.merge(active: false)) }
43
41
 
44
- it { expect(command.method).to be_eql(:delete) }
45
- it { expect(command.path).to be_eql('impersonate') }
46
- it { expect(command.data).to be_eql(command_data) }
42
+ it { expect(command.method).to be(:delete) }
43
+ it { expect(command.path).to eql('impersonate') }
44
+ it { expect(command.data).to eql(command_data) }
47
45
  end
48
46
 
49
47
  context 'when active string' do
50
48
  let(:payload) { default_payload.merge(context: context.merge(active: 'string')) }
51
49
  let(:command_data) { default_payload.merge(context: context) }
52
50
 
53
- it { expect(command.method).to be_eql(:delete) }
54
- it { expect(command.path).to be_eql('impersonate') }
55
- it { expect(command.data).to be_eql(command_data) }
51
+ it { expect(command.method).to be(:delete) }
52
+ it { expect(command.path).to eql('impersonate') }
53
+ it { expect(command.data).to eql(command_data) }
56
54
  end
57
55
  end
58
56
 
@@ -62,12 +60,7 @@ describe Castle::Commands::EndImpersonation do
62
60
  context 'when user_id not present' do
63
61
  let(:payload) { {} }
64
62
 
65
- it do
66
- expect { validate! }.to raise_error(
67
- Castle::InvalidParametersError,
68
- 'user_id is missing or empty'
69
- )
70
- end
63
+ it { expect { validate! }.to raise_error(Castle::InvalidParametersError, 'user_id is missing or empty') }
71
64
  end
72
65
 
73
66
  context 'when user_id present' do
@@ -28,45 +28,45 @@ describe Castle::Commands::Filter do
28
28
  let(:payload) { default_payload.merge(properties: { test: '1' }) }
29
29
  let(:command_data) { default_payload.merge(properties: { test: '1' }, context: context) }
30
30
 
31
- it { expect(command.method).to be_eql(:post) }
32
- it { expect(command.path).to be_eql('filter') }
33
- it { expect(command.data).to be_eql(command_data) }
31
+ it { expect(command.method).to be(:post) }
32
+ it { expect(command.path).to eql('filter') }
33
+ it { expect(command.data).to eql(command_data) }
34
34
  end
35
35
 
36
36
  context 'with user_traits' do
37
37
  let(:payload) { default_payload.merge(user_traits: { test: '1' }) }
38
38
  let(:command_data) { default_payload.merge(user_traits: { test: '1' }, context: context) }
39
39
 
40
- it { expect(command.method).to be_eql(:post) }
41
- it { expect(command.path).to be_eql('filter') }
42
- it { expect(command.data).to be_eql(command_data) }
40
+ it { expect(command.method).to be(:post) }
41
+ it { expect(command.path).to eql('filter') }
42
+ it { expect(command.data).to eql(command_data) }
43
43
  end
44
44
 
45
45
  context 'when active true' do
46
46
  let(:payload) { default_payload.merge(context: context.merge(active: true)) }
47
47
  let(:command_data) { default_payload.merge(context: context.merge(active: true)) }
48
48
 
49
- it { expect(command.method).to be_eql(:post) }
50
- it { expect(command.path).to be_eql('filter') }
51
- it { expect(command.data).to be_eql(command_data) }
49
+ it { expect(command.method).to be(:post) }
50
+ it { expect(command.path).to eql('filter') }
51
+ it { expect(command.data).to eql(command_data) }
52
52
  end
53
53
 
54
54
  context 'when active false' do
55
55
  let(:payload) { default_payload.merge(context: context.merge(active: false)) }
56
56
  let(:command_data) { default_payload.merge(context: context.merge(active: false)) }
57
57
 
58
- it { expect(command.method).to be_eql(:post) }
59
- it { expect(command.path).to be_eql('filter') }
60
- it { expect(command.data).to be_eql(command_data) }
58
+ it { expect(command.method).to be(:post) }
59
+ it { expect(command.path).to eql('filter') }
60
+ it { expect(command.data).to eql(command_data) }
61
61
  end
62
62
 
63
63
  context 'when active string' do
64
64
  let(:payload) { default_payload.merge(context: context.merge(active: 'string')) }
65
65
  let(:command_data) { default_payload.merge(context: context) }
66
66
 
67
- it { expect(command.method).to be_eql(:post) }
68
- it { expect(command.path).to be_eql('filter') }
69
- it { expect(command.data).to be_eql(command_data) }
67
+ it { expect(command.method).to be(:post) }
68
+ it { expect(command.path).to eql('filter') }
69
+ it { expect(command.data).to eql(command_data) }
70
70
  end
71
71
  end
72
72
  end
@@ -16,8 +16,8 @@ describe Castle::Commands::GetDevice do
16
16
  end
17
17
 
18
18
  context 'with device_token' do
19
- it { expect(command.method).to be_eql(:get) }
20
- it { expect(command.path).to be_eql("devices/#{device_token}") }
19
+ it { expect(command.method).to be(:get) }
20
+ it { expect(command.path).to eql("devices/#{device_token}") }
21
21
  it { expect(command.data).to be_nil }
22
22
  end
23
23
  end
@@ -16,8 +16,8 @@ describe Castle::Commands::GetDevicesForUser do
16
16
  end
17
17
 
18
18
  context 'with user_id' do
19
- it { expect(command.method).to be_eql(:get) }
20
- it { expect(command.path).to be_eql("users/#{user_id}/devices") }
19
+ it { expect(command.method).to be(:get) }
20
+ it { expect(command.path).to eql("users/#{user_id}/devices") }
21
21
  it { expect(command.data).to be_nil }
22
22
  end
23
23
  end
@@ -29,45 +29,45 @@ describe Castle::Commands::Log do
29
29
  let(:payload) { default_payload.merge(properties: { test: '1' }) }
30
30
  let(:command_data) { default_payload.merge(properties: { test: '1' }, context: context) }
31
31
 
32
- it { expect(command.method).to be_eql(:post) }
33
- it { expect(command.path).to be_eql('log') }
34
- it { expect(command.data).to be_eql(command_data) }
32
+ it { expect(command.method).to be(:post) }
33
+ it { expect(command.path).to eql('log') }
34
+ it { expect(command.data).to eql(command_data) }
35
35
  end
36
36
 
37
37
  context 'with user_traits' do
38
38
  let(:payload) { default_payload.merge(user_traits: { test: '1' }) }
39
39
  let(:command_data) { default_payload.merge(user_traits: { test: '1' }, context: context) }
40
40
 
41
- it { expect(command.method).to be_eql(:post) }
42
- it { expect(command.path).to be_eql('log') }
43
- it { expect(command.data).to be_eql(command_data) }
41
+ it { expect(command.method).to be(:post) }
42
+ it { expect(command.path).to eql('log') }
43
+ it { expect(command.data).to eql(command_data) }
44
44
  end
45
45
 
46
46
  context 'when active true' do
47
47
  let(:payload) { default_payload.merge(context: context.merge(active: true)) }
48
48
  let(:command_data) { default_payload.merge(context: context.merge(active: true)) }
49
49
 
50
- it { expect(command.method).to be_eql(:post) }
51
- it { expect(command.path).to be_eql('log') }
52
- it { expect(command.data).to be_eql(command_data) }
50
+ it { expect(command.method).to be(:post) }
51
+ it { expect(command.path).to eql('log') }
52
+ it { expect(command.data).to eql(command_data) }
53
53
  end
54
54
 
55
55
  context 'when active false' do
56
56
  let(:payload) { default_payload.merge(context: context.merge(active: false)) }
57
57
  let(:command_data) { default_payload.merge(context: context.merge(active: false)) }
58
58
 
59
- it { expect(command.method).to be_eql(:post) }
60
- it { expect(command.path).to be_eql('log') }
61
- it { expect(command.data).to be_eql(command_data) }
59
+ it { expect(command.method).to be(:post) }
60
+ it { expect(command.path).to eql('log') }
61
+ it { expect(command.data).to eql(command_data) }
62
62
  end
63
63
 
64
64
  context 'when active string' do
65
65
  let(:payload) { default_payload.merge(context: context.merge(active: 'string')) }
66
66
  let(:command_data) { default_payload.merge(context: context) }
67
67
 
68
- it { expect(command.method).to be_eql(:post) }
69
- it { expect(command.path).to be_eql('log') }
70
- it { expect(command.data).to be_eql(command_data) }
68
+ it { expect(command.method).to be(:post) }
69
+ it { expect(command.path).to eql('log') }
70
+ it { expect(command.data).to eql(command_data) }
71
71
  end
72
72
  end
73
73
  end
@@ -16,8 +16,8 @@ describe Castle::Commands::ReportDevice do
16
16
  end
17
17
 
18
18
  context 'with device_token' do
19
- it { expect(command.method).to be_eql(:put) }
20
- it { expect(command.path).to be_eql("devices/#{device_token}/report") }
19
+ it { expect(command.method).to be(:put) }
20
+ it { expect(command.path).to eql("devices/#{device_token}/report") }
21
21
  it { expect(command.data).to be_nil }
22
22
  end
23
23
  end
@@ -29,45 +29,45 @@ describe Castle::Commands::Risk do
29
29
  let(:payload) { default_payload.merge(properties: { test: '1' }) }
30
30
  let(:command_data) { default_payload.merge(properties: { test: '1' }, context: context) }
31
31
 
32
- it { expect(command.method).to be_eql(:post) }
33
- it { expect(command.path).to be_eql('risk') }
34
- it { expect(command.data).to be_eql(command_data) }
32
+ it { expect(command.method).to be(:post) }
33
+ it { expect(command.path).to eql('risk') }
34
+ it { expect(command.data).to eql(command_data) }
35
35
  end
36
36
 
37
37
  context 'with user_traits' do
38
38
  let(:payload) { default_payload.merge(user_traits: { test: '1' }) }
39
39
  let(:command_data) { default_payload.merge(user_traits: { test: '1' }, context: context) }
40
40
 
41
- it { expect(command.method).to be_eql(:post) }
42
- it { expect(command.path).to be_eql('risk') }
43
- it { expect(command.data).to be_eql(command_data) }
41
+ it { expect(command.method).to be(:post) }
42
+ it { expect(command.path).to eql('risk') }
43
+ it { expect(command.data).to eql(command_data) }
44
44
  end
45
45
 
46
46
  context 'when active true' do
47
47
  let(:payload) { default_payload.merge(context: context.merge(active: true)) }
48
48
  let(:command_data) { default_payload.merge(context: context.merge(active: true)) }
49
49
 
50
- it { expect(command.method).to be_eql(:post) }
51
- it { expect(command.path).to be_eql('risk') }
52
- it { expect(command.data).to be_eql(command_data) }
50
+ it { expect(command.method).to be(:post) }
51
+ it { expect(command.path).to eql('risk') }
52
+ it { expect(command.data).to eql(command_data) }
53
53
  end
54
54
 
55
55
  context 'when active false' do
56
56
  let(:payload) { default_payload.merge(context: context.merge(active: false)) }
57
57
  let(:command_data) { default_payload.merge(context: context.merge(active: false)) }
58
58
 
59
- it { expect(command.method).to be_eql(:post) }
60
- it { expect(command.path).to be_eql('risk') }
61
- it { expect(command.data).to be_eql(command_data) }
59
+ it { expect(command.method).to be(:post) }
60
+ it { expect(command.path).to eql('risk') }
61
+ it { expect(command.data).to eql(command_data) }
62
62
  end
63
63
 
64
64
  context 'when active string' do
65
65
  let(:payload) { default_payload.merge(context: context.merge(active: 'string')) }
66
66
  let(:command_data) { default_payload.merge(context: context) }
67
67
 
68
- it { expect(command.method).to be_eql(:post) }
69
- it { expect(command.path).to be_eql('risk') }
70
- it { expect(command.data).to be_eql(command_data) }
68
+ it { expect(command.method).to be(:post) }
69
+ it { expect(command.path).to eql('risk') }
70
+ it { expect(command.data).to eql(command_data) }
71
71
  end
72
72
  end
73
73
  end
@@ -19,40 +19,38 @@ describe Castle::Commands::StartImpersonation do
19
19
 
20
20
  context 'with impersonator' do
21
21
  let(:payload) { default_payload.merge(properties: { impersonator: impersonator }) }
22
- let(:command_data) do
23
- default_payload.merge(properties: { impersonator: impersonator }, context: context)
24
- end
22
+ let(:command_data) { default_payload.merge(properties: { impersonator: impersonator }, context: context) }
25
23
 
26
- it { expect(command.method).to be_eql(:post) }
27
- it { expect(command.path).to be_eql('impersonate') }
28
- it { expect(command.data).to be_eql(command_data) }
24
+ it { expect(command.method).to be(:post) }
25
+ it { expect(command.path).to eql('impersonate') }
26
+ it { expect(command.data).to eql(command_data) }
29
27
  end
30
28
 
31
29
  context 'when active true' do
32
30
  let(:payload) { default_payload.merge(context: context.merge(active: true)) }
33
31
  let(:command_data) { default_payload.merge(context: context.merge(active: true)) }
34
32
 
35
- it { expect(command.method).to be_eql(:post) }
36
- it { expect(command.path).to be_eql('impersonate') }
37
- it { expect(command.data).to be_eql(command_data) }
33
+ it { expect(command.method).to be(:post) }
34
+ it { expect(command.path).to eql('impersonate') }
35
+ it { expect(command.data).to eql(command_data) }
38
36
  end
39
37
 
40
38
  context 'when active false' do
41
39
  let(:payload) { default_payload.merge(context: context.merge(active: false)) }
42
40
  let(:command_data) { default_payload.merge(context: context.merge(active: false)) }
43
41
 
44
- it { expect(command.method).to be_eql(:post) }
45
- it { expect(command.path).to be_eql('impersonate') }
46
- it { expect(command.data).to be_eql(command_data) }
42
+ it { expect(command.method).to be(:post) }
43
+ it { expect(command.path).to eql('impersonate') }
44
+ it { expect(command.data).to eql(command_data) }
47
45
  end
48
46
 
49
47
  context 'when active string' do
50
48
  let(:payload) { default_payload.merge(context: context.merge(active: 'string')) }
51
49
  let(:command_data) { default_payload.merge(context: context) }
52
50
 
53
- it { expect(command.method).to be_eql(:post) }
54
- it { expect(command.path).to be_eql('impersonate') }
55
- it { expect(command.data).to be_eql(command_data) }
51
+ it { expect(command.method).to be(:post) }
52
+ it { expect(command.path).to eql('impersonate') }
53
+ it { expect(command.data).to eql(command_data) }
56
54
  end
57
55
  end
58
56
 
@@ -62,12 +60,7 @@ describe Castle::Commands::StartImpersonation do
62
60
  context 'when user_id not present' do
63
61
  let(:payload) { {} }
64
62
 
65
- it do
66
- expect { validate! }.to raise_error(
67
- Castle::InvalidParametersError,
68
- 'user_id is missing or empty'
69
- )
70
- end
63
+ it { expect { validate! }.to raise_error(Castle::InvalidParametersError, 'user_id is missing or empty') }
71
64
  end
72
65
 
73
66
  context 'when user_id present' do
@@ -20,54 +20,54 @@ describe Castle::Commands::Track do
20
20
  let(:payload) { default_payload.merge(user_id: '1234') }
21
21
  let(:command_data) { default_payload.merge(user_id: '1234', context: context) }
22
22
 
23
- it { expect(command.method).to be_eql(:post) }
24
- it { expect(command.path).to be_eql('track') }
25
- it { expect(command.data).to be_eql(command_data) }
23
+ it { expect(command.method).to be(:post) }
24
+ it { expect(command.path).to eql('track') }
25
+ it { expect(command.data).to eql(command_data) }
26
26
  end
27
27
 
28
28
  context 'with properties' do
29
29
  let(:payload) { default_payload.merge(properties: { test: '1' }) }
30
30
  let(:command_data) { default_payload.merge(properties: { test: '1' }, context: context) }
31
31
 
32
- it { expect(command.method).to be_eql(:post) }
33
- it { expect(command.path).to be_eql('track') }
34
- it { expect(command.data).to be_eql(command_data) }
32
+ it { expect(command.method).to be(:post) }
33
+ it { expect(command.path).to eql('track') }
34
+ it { expect(command.data).to eql(command_data) }
35
35
  end
36
36
 
37
37
  context 'with user_traits' do
38
38
  let(:payload) { default_payload.merge(user_traits: { test: '1' }) }
39
39
  let(:command_data) { default_payload.merge(user_traits: { test: '1' }, context: context) }
40
40
 
41
- it { expect(command.method).to be_eql(:post) }
42
- it { expect(command.path).to be_eql('track') }
43
- it { expect(command.data).to be_eql(command_data) }
41
+ it { expect(command.method).to be(:post) }
42
+ it { expect(command.path).to eql('track') }
43
+ it { expect(command.data).to eql(command_data) }
44
44
  end
45
45
 
46
46
  context 'when active true' do
47
47
  let(:payload) { default_payload.merge(context: context.merge(active: true)) }
48
48
  let(:command_data) { default_payload.merge(context: context.merge(active: true)) }
49
49
 
50
- it { expect(command.method).to be_eql(:post) }
51
- it { expect(command.path).to be_eql('track') }
52
- it { expect(command.data).to be_eql(command_data) }
50
+ it { expect(command.method).to be(:post) }
51
+ it { expect(command.path).to eql('track') }
52
+ it { expect(command.data).to eql(command_data) }
53
53
  end
54
54
 
55
55
  context 'when active false' do
56
56
  let(:payload) { default_payload.merge(context: context.merge(active: false)) }
57
57
  let(:command_data) { default_payload.merge(context: context.merge(active: false)) }
58
58
 
59
- it { expect(command.method).to be_eql(:post) }
60
- it { expect(command.path).to be_eql('track') }
61
- it { expect(command.data).to be_eql(command_data) }
59
+ it { expect(command.method).to be(:post) }
60
+ it { expect(command.path).to eql('track') }
61
+ it { expect(command.data).to eql(command_data) }
62
62
  end
63
63
 
64
64
  context 'when active string' do
65
65
  let(:payload) { default_payload.merge(context: context.merge(active: 'string')) }
66
66
  let(:command_data) { default_payload.merge(context: context) }
67
67
 
68
- it { expect(command.method).to be_eql(:post) }
69
- it { expect(command.path).to be_eql('track') }
70
- it { expect(command.data).to be_eql(command_data) }
68
+ it { expect(command.method).to be(:post) }
69
+ it { expect(command.path).to eql('track') }
70
+ it { expect(command.data).to eql(command_data) }
71
71
  end
72
72
  end
73
73
 
@@ -77,12 +77,7 @@ describe Castle::Commands::Track do
77
77
  context 'when event not present' do
78
78
  let(:payload) { {} }
79
79
 
80
- it do
81
- expect { validate! }.to raise_error(
82
- Castle::InvalidParametersError,
83
- 'event is missing or empty'
84
- )
85
- end
80
+ it { expect { validate! }.to raise_error(Castle::InvalidParametersError, 'event is missing or empty') }
86
81
  end
87
82
 
88
83
  context 'when event present' do
@@ -10,5 +10,5 @@ describe Castle::Configuration do
10
10
  it_behaves_like 'configuration_failover_strategy'
11
11
  it_behaves_like 'configuration_api_secret'
12
12
 
13
- it { expect(config.api_secret).to be_eql('') }
13
+ it { expect(config.api_secret).to eql('') }
14
14
  end
@@ -12,7 +12,8 @@ describe Castle::Context::GetDefault do
12
12
  'HTTP_X_FORWARDED_FOR' => ip,
13
13
  'HTTP_ACCEPT_LANGUAGE' => 'en',
14
14
  'HTTP_USER_AGENT' => 'test',
15
- 'HTTP_COOKIE' => "__cid=#{client_id};other=efgh"
15
+ 'HTTP_COOKIE' => "__cid=#{client_id};other=efgh",
16
+ 'HTTP_CONTENT_LENGTH' => '0'
16
17
  )
17
18
  end
18
19
  let(:request) { Rack::Request.new(env) }
@@ -30,11 +31,11 @@ describe Castle::Context::GetDefault do
30
31
 
31
32
  before { stub_const('Castle::VERSION', version) }
32
33
 
33
- it { expect(default_context[:active]).to be_eql(true) }
34
- it { expect(default_context[:headers]).to be_eql(result_headers) }
35
- it { expect(default_context[:ip]).to be_eql(ip) }
36
- it { expect(default_context[:client_id]).to be_eql(client_id) }
37
- it { expect(default_context[:library][:name]).to be_eql('castle-rb') }
38
- it { expect(default_context[:library][:version]).to be_eql(version) }
39
- it { expect(default_context[:user_agent]).to be_eql('test') }
34
+ it { expect(default_context[:active]).to be(true) }
35
+ it { expect(default_context[:headers]).to eql(result_headers) }
36
+ it { expect(default_context[:ip]).to eql(ip) }
37
+ it { expect(default_context[:client_id]).to eql(client_id) }
38
+ it { expect(default_context[:library][:name]).to eql('castle-rb') }
39
+ it { expect(default_context[:library][:version]).to eql(version) }
40
+ it { expect(default_context[:user_agent]).to eql('test') }
40
41
  end
@@ -9,7 +9,8 @@ describe Castle::Context::Prepare do
9
9
  '/',
10
10
  'HTTP_USER_AGENT' => ua,
11
11
  'HTTP_X_FORWARDED_FOR' => ip,
12
- 'HTTP_COOKIE' => "__cid=#{cookie_id};other=efgh"
12
+ 'HTTP_COOKIE' => "__cid=#{cookie_id};other=efgh",
13
+ 'HTTP_CONTENT_LENGTH' => '0'
13
14
  )
14
15
  end
15
16
  let(:request) { Rack::Request.new(env) }
@@ -27,9 +28,7 @@ describe Castle::Context::Prepare do
27
28
  }
28
29
  end
29
30
 
30
- let(:headers) do
31
- { 'Content-Length': '0', 'User-Agent': ua, 'X-Forwarded-For': ip.to_s, 'Cookie': true }
32
- end
31
+ let(:headers) { { 'Content-Length': '0', 'User-Agent': ua, 'X-Forwarded-For': ip.to_s, Cookie: true } }
33
32
 
34
33
  before { stub_const('Castle::VERSION', '6.0.0') }
35
34
 
@@ -18,17 +18,13 @@ describe Castle::Core::ProcessResponse do
18
18
  end
19
19
 
20
20
  context 'when allow with additional props' do
21
- let(:response) do
22
- OpenStruct.new(body: '{"action":"allow","user_id":"12345","internal":{}}', code: 200)
23
- end
21
+ let(:response) { OpenStruct.new(body: '{"action":"allow","user_id":"12345","internal":{}}', code: 200) }
24
22
 
25
23
  it { expect(call).to eql({ action: 'allow', user_id: '12345', internal: {} }) }
26
24
  end
27
25
 
28
26
  context 'when deny without risk policy' do
29
- let(:response) do
30
- OpenStruct.new(body: '{"action":"deny","user_id":"1","device_token":"abc"}', code: 200)
31
- end
27
+ let(:response) { OpenStruct.new(body: '{"action":"deny","user_id":"1","device_token":"abc"}', code: 200) }
32
28
 
33
29
  it { expect(call).to eql({ action: 'deny', user_id: '1', device_token: 'abc' }) }
34
30
  end
@@ -100,6 +96,7 @@ describe Castle::Core::ProcessResponse do
100
96
  it_behaves_like 'response_failed', '404', Castle::NotFoundError
101
97
  it_behaves_like 'response_failed', '419', Castle::UserUnauthorizedError
102
98
  it_behaves_like 'response_failed', '422', Castle::InvalidParametersError
99
+ it_behaves_like 'response_failed', '429', Castle::RateLimitError
103
100
  it_behaves_like 'response_failed', '499', Castle::ApiError
104
101
  it_behaves_like 'response_failed', '500', Castle::InternalServerError
105
102
  end
@@ -15,13 +15,19 @@ describe Castle::Core::ProcessWebhook do
15
15
  device_token: 'token',
16
16
  user_id: '',
17
17
  trigger: '$login.succeeded',
18
- context: {},
19
- location: {},
20
- user_agent: {}
18
+ context: {
19
+ },
20
+ location: {
21
+ },
22
+ user_agent: {
23
+ }
21
24
  },
22
- user_traits: {},
23
- properties: {},
24
- policy: {}
25
+ user_traits: {
26
+ },
27
+ properties: {
28
+ },
29
+ policy: {
30
+ }
25
31
  }.to_json
26
32
  end
27
33