doorkeeper 5.0.0 → 5.0.1

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.

Potentially problematic release.


This version of doorkeeper might be problematic. Click here for more details.

Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +5 -0
  3. data/Dangerfile +57 -0
  4. data/NEWS.md +32 -1
  5. data/README.md +18 -3
  6. data/app/controllers/doorkeeper/application_controller.rb +2 -0
  7. data/app/controllers/doorkeeper/application_metal_controller.rb +2 -0
  8. data/app/controllers/doorkeeper/applications_controller.rb +4 -2
  9. data/app/controllers/doorkeeper/authorizations_controller.rb +3 -3
  10. data/app/controllers/doorkeeper/authorized_applications_controller.rb +2 -0
  11. data/app/controllers/doorkeeper/token_info_controller.rb +2 -0
  12. data/app/controllers/doorkeeper/tokens_controller.rb +2 -0
  13. data/app/helpers/doorkeeper/dashboard_helper.rb +2 -0
  14. data/app/validators/redirect_uri_validator.rb +2 -0
  15. data/doorkeeper.gemspec +23 -22
  16. data/lib/doorkeeper.rb +1 -0
  17. data/lib/doorkeeper/config.rb +7 -2
  18. data/lib/doorkeeper/engine.rb +2 -0
  19. data/lib/doorkeeper/errors.rb +17 -0
  20. data/lib/doorkeeper/grape/authorization_decorator.rb +2 -0
  21. data/lib/doorkeeper/grape/helpers.rb +2 -0
  22. data/lib/doorkeeper/helpers/controller.rb +2 -0
  23. data/lib/doorkeeper/models/access_grant_mixin.rb +5 -3
  24. data/lib/doorkeeper/models/access_token_mixin.rb +5 -3
  25. data/lib/doorkeeper/models/application_mixin.rb +2 -0
  26. data/lib/doorkeeper/models/concerns/accessible.rb +2 -0
  27. data/lib/doorkeeper/models/concerns/expirable.rb +2 -0
  28. data/lib/doorkeeper/models/concerns/orderable.rb +2 -0
  29. data/lib/doorkeeper/models/concerns/ownership.rb +2 -0
  30. data/lib/doorkeeper/models/concerns/revocable.rb +2 -0
  31. data/lib/doorkeeper/models/concerns/scopes.rb +2 -0
  32. data/lib/doorkeeper/oauth/authorization/code.rb +2 -0
  33. data/lib/doorkeeper/oauth/authorization/context.rb +2 -0
  34. data/lib/doorkeeper/oauth/authorization/token.rb +2 -0
  35. data/lib/doorkeeper/oauth/authorization/uri_builder.rb +2 -0
  36. data/lib/doorkeeper/oauth/authorization_code_request.rb +2 -0
  37. data/lib/doorkeeper/oauth/base_request.rb +2 -0
  38. data/lib/doorkeeper/oauth/base_response.rb +2 -0
  39. data/lib/doorkeeper/oauth/client.rb +2 -0
  40. data/lib/doorkeeper/oauth/client/credentials.rb +2 -0
  41. data/lib/doorkeeper/oauth/client_credentials/creator.rb +2 -0
  42. data/lib/doorkeeper/oauth/client_credentials/issuer.rb +2 -0
  43. data/lib/doorkeeper/oauth/client_credentials/validation.rb +2 -0
  44. data/lib/doorkeeper/oauth/client_credentials_request.rb +2 -0
  45. data/lib/doorkeeper/oauth/code_request.rb +2 -0
  46. data/lib/doorkeeper/oauth/code_response.rb +2 -0
  47. data/lib/doorkeeper/oauth/error.rb +2 -0
  48. data/lib/doorkeeper/oauth/error_response.rb +10 -0
  49. data/lib/doorkeeper/oauth/forbidden_token_response.rb +9 -2
  50. data/lib/doorkeeper/oauth/helpers/scope_checker.rb +2 -0
  51. data/lib/doorkeeper/oauth/helpers/unique_token.rb +2 -0
  52. data/lib/doorkeeper/oauth/helpers/uri_checker.rb +5 -2
  53. data/lib/doorkeeper/oauth/invalid_token_response.rb +18 -0
  54. data/lib/doorkeeper/oauth/password_access_token_request.rb +2 -0
  55. data/lib/doorkeeper/oauth/pre_authorization.rb +2 -0
  56. data/lib/doorkeeper/oauth/refresh_token_request.rb +10 -2
  57. data/lib/doorkeeper/oauth/scopes.rb +2 -0
  58. data/lib/doorkeeper/oauth/token.rb +2 -0
  59. data/lib/doorkeeper/oauth/token_introspection.rb +2 -0
  60. data/lib/doorkeeper/oauth/token_request.rb +2 -0
  61. data/lib/doorkeeper/oauth/token_response.rb +2 -0
  62. data/lib/doorkeeper/orm/active_record.rb +2 -0
  63. data/lib/doorkeeper/rails/helpers.rb +4 -0
  64. data/lib/doorkeeper/rails/routes.rb +9 -2
  65. data/lib/doorkeeper/rails/routes/mapper.rb +2 -0
  66. data/lib/doorkeeper/rails/routes/mapping.rb +2 -0
  67. data/lib/doorkeeper/rake/db.rake +4 -4
  68. data/lib/doorkeeper/request.rb +2 -0
  69. data/lib/doorkeeper/request/authorization_code.rb +2 -0
  70. data/lib/doorkeeper/request/client_credentials.rb +2 -0
  71. data/lib/doorkeeper/request/code.rb +2 -0
  72. data/lib/doorkeeper/request/password.rb +2 -0
  73. data/lib/doorkeeper/request/refresh_token.rb +2 -0
  74. data/lib/doorkeeper/request/strategy.rb +2 -0
  75. data/lib/doorkeeper/request/token.rb +2 -0
  76. data/lib/doorkeeper/server.rb +2 -0
  77. data/lib/doorkeeper/stale_records_cleaner.rb +20 -0
  78. data/lib/doorkeeper/validations.rb +2 -0
  79. data/lib/doorkeeper/version.rb +3 -1
  80. data/lib/generators/doorkeeper/templates/initializer.rb +20 -2
  81. data/lib/generators/doorkeeper/templates/migration.rb.erb +2 -2
  82. data/spec/controllers/applications_controller_spec.rb +37 -41
  83. data/spec/controllers/authorizations_controller_spec.rb +71 -18
  84. data/spec/controllers/protected_resources_controller_spec.rb +44 -2
  85. data/spec/controllers/tokens_controller_spec.rb +4 -5
  86. data/spec/dummy/Rakefile +1 -1
  87. data/spec/dummy/app/controllers/custom_authorizations_controller.rb +1 -1
  88. data/spec/dummy/app/controllers/home_controller.rb +1 -2
  89. data/spec/dummy/config.ru +1 -1
  90. data/spec/dummy/config/application.rb +1 -1
  91. data/spec/dummy/config/boot.rb +2 -4
  92. data/spec/dummy/config/environment.rb +1 -1
  93. data/spec/dummy/config/environments/test.rb +1 -1
  94. data/spec/dummy/config/initializers/doorkeeper.rb +2 -1
  95. data/spec/dummy/config/initializers/new_framework_defaults.rb +1 -3
  96. data/spec/dummy/config/initializers/secret_token.rb +1 -1
  97. data/spec/dummy/db/migrate/20151223192035_create_doorkeeper_tables.rb +4 -4
  98. data/spec/dummy/db/migrate/20151223200000_add_owner_to_application.rb +1 -1
  99. data/spec/dummy/script/rails +4 -3
  100. data/spec/factories.rb +6 -6
  101. data/spec/generators/install_generator_spec.rb +4 -1
  102. data/spec/generators/templates/routes.rb +0 -1
  103. data/spec/generators/views_generator_spec.rb +1 -1
  104. data/spec/grape/grape_integration_spec.rb +1 -1
  105. data/spec/lib/config_spec.rb +25 -8
  106. data/spec/lib/doorkeeper_spec.rb +5 -5
  107. data/spec/lib/oauth/authorization_code_request_spec.rb +9 -6
  108. data/spec/lib/oauth/base_request_spec.rb +10 -10
  109. data/spec/lib/oauth/client/credentials_spec.rb +2 -2
  110. data/spec/lib/oauth/client_credentials/issuer_spec.rb +0 -2
  111. data/spec/lib/oauth/client_credentials/validation_spec.rb +2 -1
  112. data/spec/lib/oauth/client_credentials_integration_spec.rb +1 -1
  113. data/spec/lib/oauth/code_request_spec.rb +2 -2
  114. data/spec/lib/oauth/code_response_spec.rb +1 -1
  115. data/spec/lib/oauth/helpers/scope_checker_spec.rb +8 -8
  116. data/spec/lib/oauth/helpers/uri_checker_spec.rb +17 -6
  117. data/spec/lib/oauth/password_access_token_request_spec.rb +17 -5
  118. data/spec/lib/oauth/refresh_token_request_spec.rb +11 -7
  119. data/spec/lib/oauth/token_request_spec.rb +5 -5
  120. data/spec/lib/oauth/token_spec.rb +4 -1
  121. data/spec/lib/server_spec.rb +6 -6
  122. data/spec/lib/{orm/active_record/stale_records_cleaner_spec.rb → stale_records_cleaner_spec.rb} +14 -4
  123. data/spec/models/doorkeeper/access_token_spec.rb +14 -10
  124. data/spec/models/doorkeeper/application_spec.rb +4 -4
  125. data/spec/requests/applications/applications_request_spec.rb +2 -2
  126. data/spec/requests/endpoints/authorization_spec.rb +2 -2
  127. data/spec/requests/flows/authorization_code_errors_spec.rb +1 -1
  128. data/spec/requests/flows/authorization_code_spec.rb +75 -15
  129. data/spec/requests/flows/implicit_grant_errors_spec.rb +2 -2
  130. data/spec/requests/flows/password_spec.rb +6 -2
  131. data/spec/requests/flows/refresh_token_spec.rb +57 -0
  132. data/spec/requests/flows/revoke_token_spec.rb +9 -9
  133. data/spec/requests/protected_resources/private_api_spec.rb +2 -2
  134. data/spec/support/doorkeeper_rspec.rb +2 -1
  135. data/spec/support/helpers/model_helper.rb +8 -4
  136. data/spec/support/helpers/url_helper.rb +11 -11
  137. data/spec/support/shared/controllers_shared_context.rb +56 -0
  138. data/spec/validators/redirect_uri_validator_spec.rb +2 -2
  139. metadata +20 -4
@@ -16,7 +16,7 @@ class Doorkeeper::OAuth::Client
16
16
  let(:request) { double.as_null_object }
17
17
 
18
18
  let(:method) do
19
- ->(_request) { ['uid', 'secret'] }
19
+ ->(_request) { %w[uid secret] }
20
20
  end
21
21
 
22
22
  it 'accepts anything that responds to #call' do
@@ -77,7 +77,7 @@ class Doorkeeper::OAuth::Client
77
77
  end
78
78
 
79
79
  it 'is blank if Authorization is not Basic' do
80
- request = double authorization: "#{credentials}"
80
+ request = double authorization: credentials.to_s
81
81
  uid, secret = Credentials.from_basic(request)
82
82
 
83
83
  expect(uid).to be_blank
@@ -73,8 +73,6 @@ class Doorkeeper::OAuth::ClientCredentialsRequest
73
73
  custom_ttl_scope
74
74
  elsif context.grant_type == Doorkeeper::OAuth::CLIENT_CREDENTIALS
75
75
  custom_ttl_grant
76
- else
77
- nil
78
76
  end
79
77
  }
80
78
  )
@@ -23,7 +23,8 @@ class Doorkeeper::OAuth::ClientCredentialsRequest
23
23
  server_scopes = Doorkeeper::OAuth::Scopes.from_string 'email'
24
24
  allow(server).to receive(:scopes).and_return(server_scopes)
25
25
  allow(request).to receive(:scopes).and_return(
26
- Doorkeeper::OAuth::Scopes.from_string 'invalid')
26
+ Doorkeeper::OAuth::Scopes.from_string('invalid')
27
+ )
27
28
  expect(subject).not_to be_valid
28
29
  end
29
30
 
@@ -20,7 +20,7 @@ module Doorkeeper::OAuth
20
20
  request = ClientCredentialsRequest.new(server, nil, {})
21
21
  expect do
22
22
  request.authorize
23
- end.to_not change { Doorkeeper::AccessToken.count }
23
+ end.to_not(change { Doorkeeper::AccessToken.count })
24
24
  end
25
25
  end
26
26
  end
@@ -12,7 +12,7 @@ module Doorkeeper::OAuth
12
12
  error: nil,
13
13
  authorizable?: true,
14
14
  code_challenge: nil,
15
- code_challenge_method: nil,
15
+ code_challenge_method: nil
16
16
  )
17
17
  end
18
18
 
@@ -34,7 +34,7 @@ module Doorkeeper::OAuth
34
34
 
35
35
  it 'does not create grant when not authorizable' do
36
36
  allow(pre_auth).to receive(:authorizable?).and_return(false)
37
- expect { subject.authorize }.not_to change { Doorkeeper::AccessGrant.count }
37
+ expect { subject.authorize }.not_to(change { Doorkeeper::AccessGrant.count })
38
38
  end
39
39
 
40
40
  it 'returns a error response' do
@@ -11,7 +11,7 @@ module Doorkeeper
11
11
  client: double(:application, id: 1),
12
12
  redirect_uri: 'http://tst.com/cb',
13
13
  state: nil,
14
- scopes: Scopes.from_string('public'),
14
+ scopes: Scopes.from_string('public')
15
15
  )
16
16
  end
17
17
 
@@ -43,18 +43,18 @@ module Doorkeeper::OAuth::Helpers
43
43
 
44
44
  it 'is valid if scope is included in the application scope list' do
45
45
  expect(ScopeChecker.valid?(
46
- 'app123',
47
- server_scopes,
48
- application_scopes
49
- )).to be_truthy
46
+ 'app123',
47
+ server_scopes,
48
+ application_scopes
49
+ )).to be_truthy
50
50
  end
51
51
 
52
52
  it 'is invalid if any scope is not included in the application' do
53
53
  expect(ScopeChecker.valid?(
54
- 'svr',
55
- server_scopes,
56
- application_scopes
57
- )).to be_falsey
54
+ 'svr',
55
+ server_scopes,
56
+ application_scopes
57
+ )).to be_falsey
58
58
  end
59
59
  end
60
60
  end
@@ -116,6 +116,22 @@ module Doorkeeper::OAuth::Helpers
116
116
  it 'is true if valid and matches' do
117
117
  uri = client_uri = 'http://app.co/aaa'
118
118
  expect(URIChecker.valid_for_authorization?(uri, client_uri)).to be_truthy
119
+
120
+ uri = client_uri = 'http://app.co/aaa?b=c'
121
+ expect(URIChecker.valid_for_authorization?(uri, client_uri)).to be_truthy
122
+ end
123
+
124
+ it 'is true if uri includes blank query' do
125
+ uri = client_uri = 'http://app.co/aaa?'
126
+ expect(URIChecker.valid_for_authorization?(uri, client_uri)).to be_truthy
127
+
128
+ uri = 'http://app.co/aaa?'
129
+ client_uri = 'http://app.co/aaa'
130
+ expect(URIChecker.valid_for_authorization?(uri, client_uri)).to be_truthy
131
+
132
+ uri = 'http://app.co/aaa'
133
+ client_uri = 'http://app.co/aaa?'
134
+ expect(URIChecker.valid_for_authorization?(uri, client_uri)).to be_truthy
119
135
  end
120
136
 
121
137
  it 'is false if valid and mismatches' do
@@ -136,12 +152,7 @@ module Doorkeeper::OAuth::Helpers
136
152
  expect(URIChecker.valid_for_authorization?(uri, client_uri)).to be_falsey
137
153
  end
138
154
 
139
- it 'is true if valid and matches' do
140
- uri = client_uri = 'http://app.co/aaa'
141
- expect(URIChecker.valid_for_authorization?(uri, client_uri)).to be true
142
- end
143
-
144
- it 'is false if invalid' do
155
+ it 'is false if queries does not match' do
145
156
  uri = 'http://app.co/aaa?pankcakes=abc'
146
157
  client_uri = 'http://app.co/aaa?waffles=abc'
147
158
  expect(URIChecker.valid_for_authorization?(uri, client_uri)).to be false
@@ -24,7 +24,8 @@ module Doorkeeper::OAuth
24
24
  expect do
25
25
  subject.authorize
26
26
  end.to change { client.reload.access_tokens.count }.by(1)
27
- expect(client.reload.access_tokens.sort_by(&:created_at).last.expires_in).to eq(1234)
27
+
28
+ expect(client.reload.access_tokens.max_by(&:created_at).expires_in).to eq(1234)
28
29
  end
29
30
 
30
31
  it 'issues a new token without a client' do
@@ -39,7 +40,7 @@ module Doorkeeper::OAuth
39
40
  subject.client = nil
40
41
  subject.parameters = { client_id: 'bad_id' }
41
42
  subject.authorize
42
- end.to_not change { Doorkeeper::AccessToken.count }
43
+ end.not_to(change { Doorkeeper::AccessToken.count })
43
44
 
44
45
  expect(subject.error).to eq(:invalid_client)
45
46
  end
@@ -57,6 +58,7 @@ module Doorkeeper::OAuth
57
58
 
58
59
  it 'creates token even when there is already one (default)' do
59
60
  FactoryBot.create(:access_token, application_id: client.id, resource_owner_id: owner.id)
61
+
60
62
  expect do
61
63
  subject.authorize
62
64
  end.to change { Doorkeeper::AccessToken.count }.by(1)
@@ -65,14 +67,19 @@ module Doorkeeper::OAuth
65
67
  it 'skips token creation if there is already one' do
66
68
  allow(Doorkeeper.configuration).to receive(:reuse_access_token).and_return(true)
67
69
  FactoryBot.create(:access_token, application_id: client.id, resource_owner_id: owner.id)
70
+
68
71
  expect do
69
72
  subject.authorize
70
- end.to_not change { Doorkeeper::AccessToken.count }
73
+ end.not_to(change { Doorkeeper::AccessToken.count })
71
74
  end
72
75
 
73
76
  it "calls configured request callback methods" do
74
- expect(Doorkeeper.configuration.before_successful_strategy_response).to receive(:call).with(subject).once
75
- expect(Doorkeeper.configuration.after_successful_strategy_response).to receive(:call).with(subject, instance_of(Doorkeeper::OAuth::TokenResponse)).once
77
+ expect(Doorkeeper.configuration.before_successful_strategy_response)
78
+ .to receive(:call).with(subject).once
79
+
80
+ expect(Doorkeeper.configuration.after_successful_strategy_response)
81
+ .to receive(:call).with(subject, instance_of(Doorkeeper::OAuth::TokenResponse)).once
82
+
76
83
  subject.authorize
77
84
  end
78
85
 
@@ -92,6 +99,7 @@ module Doorkeeper::OAuth
92
99
  expect do
93
100
  subject.authorize
94
101
  end.to change { Doorkeeper::AccessToken.count }.by(1)
102
+
95
103
  expect(Doorkeeper::AccessToken.last.scopes).to include('public')
96
104
  end
97
105
  end
@@ -112,18 +120,22 @@ module Doorkeeper::OAuth
112
120
  it 'checks scopes' do
113
121
  subject = PasswordAccessTokenRequest.new(server, client, owner, scope: 'public')
114
122
  allow(server).to receive(:scopes).and_return(Doorkeeper::OAuth::Scopes.from_string('public'))
123
+
115
124
  expect do
116
125
  subject.authorize
117
126
  end.to change { Doorkeeper::AccessToken.count }.by(1)
127
+
118
128
  expect(Doorkeeper::AccessToken.last.expires_in).to eq(222)
119
129
  end
120
130
 
121
131
  it 'falls back to the default otherwise' do
122
132
  subject = PasswordAccessTokenRequest.new(server, client, owner, scope: 'private')
123
133
  allow(server).to receive(:scopes).and_return(Doorkeeper::OAuth::Scopes.from_string('private'))
134
+
124
135
  expect do
125
136
  subject.authorize
126
137
  end.to change { Doorkeeper::AccessToken.count }.by(1)
138
+
127
139
  expect(Doorkeeper::AccessToken.last.expires_in).to eq(2.hours)
128
140
  end
129
141
  end
@@ -24,7 +24,7 @@ module Doorkeeper::OAuth
24
24
  it 'issues a new token for the client' do
25
25
  expect { subject.authorize }.to change { client.reload.access_tokens.count }.by(1)
26
26
  # #sort_by used for MongoDB ORM extensions for valid ordering
27
- expect(client.reload.access_tokens.sort_by(&:created_at).last.expires_in).to eq(120)
27
+ expect(client.reload.access_tokens.max_by(&:created_at).expires_in).to eq(120)
28
28
  end
29
29
 
30
30
  it 'issues a new token for the client with custom expires_in' do
@@ -39,7 +39,7 @@ module Doorkeeper::OAuth
39
39
  RefreshTokenRequest.new(server, refresh_token, credentials).authorize
40
40
 
41
41
  # #sort_by used for MongoDB ORM extensions for valid ordering
42
- expect(client.reload.access_tokens.sort_by(&:created_at).last.expires_in).to eq(1234)
42
+ expect(client.reload.access_tokens.max_by(&:created_at).expires_in).to eq(1234)
43
43
  end
44
44
 
45
45
  it 'revokes the previous token' do
@@ -47,8 +47,12 @@ module Doorkeeper::OAuth
47
47
  end
48
48
 
49
49
  it "calls configured request callback methods" do
50
- expect(Doorkeeper.configuration.before_successful_strategy_response).to receive(:call).with(subject).once
51
- expect(Doorkeeper.configuration.after_successful_strategy_response).to receive(:call).with(subject, instance_of(Doorkeeper::OAuth::TokenResponse)).once
50
+ expect(Doorkeeper.configuration.before_successful_strategy_response)
51
+ .to receive(:call).with(subject).once
52
+
53
+ expect(Doorkeeper.configuration.after_successful_strategy_response)
54
+ .to receive(:call).with(subject, instance_of(Doorkeeper::OAuth::TokenResponse)).once
55
+
52
56
  subject.authorize
53
57
  end
54
58
 
@@ -109,7 +113,7 @@ module Doorkeeper::OAuth
109
113
  subject.authorize
110
114
  expect(
111
115
  # #sort_by used for MongoDB ORM extensions for valid ordering
112
- client.access_tokens.sort_by(&:created_at).last.previous_refresh_token
116
+ client.access_tokens.max_by(&:created_at).previous_refresh_token
113
117
  ).to eq(refresh_token.refresh_token)
114
118
  end
115
119
  end
@@ -127,8 +131,8 @@ module Doorkeeper::OAuth
127
131
  context 'with scopes' do
128
132
  let(:refresh_token) do
129
133
  FactoryBot.create :access_token,
130
- use_refresh_token: true,
131
- scopes: 'public write'
134
+ use_refresh_token: true,
135
+ scopes: 'public write'
132
136
  end
133
137
  let(:parameters) { {} }
134
138
  subject { RefreshTokenRequest.new server, refresh_token, credentials, parameters }
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  module Doorkeeper::OAuth
4
4
  describe TokenRequest do
5
5
  let :application do
6
- FactoryBot.create(:application, scopes: "public")
6
+ FactoryBot.create(:application, scopes: 'public')
7
7
  end
8
8
 
9
9
  let :pre_auth do
@@ -38,7 +38,7 @@ module Doorkeeper::OAuth
38
38
 
39
39
  it 'does not create token when not authorizable' do
40
40
  allow(pre_auth).to receive(:authorizable?).and_return(false)
41
- expect { subject.authorize }.not_to change { Doorkeeper::AccessToken.count }
41
+ expect { subject.authorize }.not_to(change { Doorkeeper::AccessToken.count })
42
42
  end
43
43
 
44
44
  it 'returns a error response' do
@@ -74,7 +74,7 @@ module Doorkeeper::OAuth
74
74
  it 'creates a new token if scopes do not match' do
75
75
  allow(Doorkeeper.configuration).to receive(:reuse_access_token).and_return(true)
76
76
  FactoryBot.create(:access_token, application_id: pre_auth.client.id,
77
- resource_owner_id: owner.id, scopes: '')
77
+ resource_owner_id: owner.id, scopes: '')
78
78
  expect do
79
79
  subject.authorize
80
80
  end.to change { Doorkeeper::AccessToken.count }.by(1)
@@ -86,9 +86,9 @@ module Doorkeeper::OAuth
86
86
  allow(application.scopes).to receive(:all?).and_return(true)
87
87
 
88
88
  FactoryBot.create(:access_token, application_id: pre_auth.client.id,
89
- resource_owner_id: owner.id, scopes: 'public')
89
+ resource_owner_id: owner.id, scopes: 'public')
90
90
 
91
- expect { subject.authorize }.not_to change { Doorkeeper::AccessToken.count }
91
+ expect { subject.authorize }.not_to(change { Doorkeeper::AccessToken.count })
92
92
  end
93
93
  end
94
94
  end
@@ -115,7 +115,10 @@ module Doorkeeper
115
115
 
116
116
  context 'refresh tokens are enabled' do
117
117
  before do
118
- Doorkeeper.configure { use_refresh_token }
118
+ Doorkeeper.configure do
119
+ orm DOORKEEPER_ORM
120
+ use_refresh_token
121
+ end
119
122
  end
120
123
 
121
124
  it 'revokes previous refresh_token if token was found' do
@@ -22,9 +22,9 @@ describe Doorkeeper::Server do
22
22
 
23
23
  context 'when only Authorization Code strategy is enabled' do
24
24
  before do
25
- allow(Doorkeeper.configuration).
26
- to receive(:grant_flows).
27
- and_return(['authorization_code'])
25
+ allow(Doorkeeper.configuration)
26
+ .to receive(:grant_flows)
27
+ .and_return(['authorization_code'])
28
28
  end
29
29
 
30
30
  it 'raises error when using the disabled Implicit strategy' do
@@ -47,9 +47,9 @@ describe Doorkeeper::Server do
47
47
  end
48
48
 
49
49
  it 'builds the request with composite strategy name' do
50
- allow(Doorkeeper.configuration).
51
- to receive(:authorization_response_types).
52
- and_return(['id_token token'])
50
+ allow(Doorkeeper.configuration)
51
+ .to receive(:authorization_response_types)
52
+ .and_return(['id_token token'])
53
53
 
54
54
  stub_const 'Doorkeeper::Request::IdTokenToken', fake_class
55
55
  expect(fake_class).to receive(:new).with(subject)
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe Doorkeeper::Orm::ActiveRecord::StaleRecordsCleaner do
5
+ describe Doorkeeper::StaleRecordsCleaner do
6
6
  let(:cleaner) { described_class.new(model) }
7
7
  let(:models_by_name) do
8
8
  {
@@ -11,6 +11,16 @@ describe Doorkeeper::Orm::ActiveRecord::StaleRecordsCleaner do
11
11
  }
12
12
  end
13
13
 
14
+ context 'when ORM has no cleaner class' do
15
+ it 'raises an error' do
16
+ allow_any_instance_of(Doorkeeper::Config).to receive(:orm).and_return('hibernate')
17
+
18
+ expect do
19
+ described_class.for(Doorkeeper::AccessToken)
20
+ end.to raise_error(Doorkeeper::Errors::NoOrmCleaner, /has no cleaner/)
21
+ end
22
+ end
23
+
14
24
  %i[access_token access_grant].each do |model_name|
15
25
  context "(#{model_name})" do
16
26
  let(:model) { models_by_name.fetch(model_name) }
@@ -34,7 +44,7 @@ describe Doorkeeper::Orm::ActiveRecord::StaleRecordsCleaner do
34
44
  end
35
45
 
36
46
  it 'keeps the record' do
37
- expect { subject }.not_to change { model.count }
47
+ expect { subject }.not_to(change { model.count })
38
48
  end
39
49
  end
40
50
 
@@ -44,7 +54,7 @@ describe Doorkeeper::Orm::ActiveRecord::StaleRecordsCleaner do
44
54
  end
45
55
 
46
56
  it 'keeps the record' do
47
- expect { subject }.not_to change { model.count }
57
+ expect { subject }.not_to(change { model.count })
48
58
  end
49
59
  end
50
60
  end
@@ -70,7 +80,7 @@ describe Doorkeeper::Orm::ActiveRecord::StaleRecordsCleaner do
70
80
  end
71
81
 
72
82
  it 'keeps the record' do
73
- expect { subject }.not_to change { model.count }
83
+ expect { subject }.not_to(change { model.count })
74
84
  end
75
85
  end
76
86
  end
@@ -13,8 +13,7 @@ module Doorkeeper
13
13
  end
14
14
 
15
15
  module CustomGeneratorArgs
16
- def self.generate
17
- end
16
+ def self.generate; end
18
17
  end
19
18
 
20
19
  describe :generate_token do
@@ -42,7 +41,7 @@ module Doorkeeper
42
41
  end
43
42
 
44
43
  token = FactoryBot.create :access_token
45
- expect(token.token).to match(%r{custom_generator_token_\d+})
44
+ expect(token.token).to match(/custom_generator_token_\d+/)
46
45
  end
47
46
 
48
47
  it 'allows the custom generator to access the application details' do
@@ -62,7 +61,7 @@ module Doorkeeper
62
61
  end
63
62
 
64
63
  token = FactoryBot.create :access_token
65
- expect(token.token).to match(%r{custom_generator_token_Application \d+})
64
+ expect(token.token).to match(/custom_generator_token_Application \d+/)
66
65
  end
67
66
 
68
67
  it 'allows the custom generator to access the scopes' do
@@ -214,9 +213,7 @@ module Doorkeeper
214
213
  end
215
214
 
216
215
  describe '#same_credential?' do
217
-
218
216
  context 'with default parameters' do
219
-
220
217
  let(:resource_owner_id) { 100 }
221
218
  let(:application) { FactoryBot.create :application }
222
219
  let(:default_attributes) do
@@ -233,7 +230,11 @@ module Doorkeeper
233
230
 
234
231
  context 'the second token has same owner and different app' do
235
232
  let(:other_application) { FactoryBot.create :application }
236
- let(:access_token2) { FactoryBot.create :access_token, application: other_application, resource_owner_id: resource_owner_id }
233
+ let(:access_token2) do
234
+ FactoryBot.create :access_token,
235
+ application: other_application,
236
+ resource_owner_id: resource_owner_id
237
+ end
237
238
 
238
239
  it 'fail' do
239
240
  expect(access_token1.same_credential?(access_token2)).to be_falsey
@@ -241,9 +242,10 @@ module Doorkeeper
241
242
  end
242
243
 
243
244
  context 'the second token has different owner and different app' do
244
-
245
245
  let(:other_application) { FactoryBot.create :application }
246
- let(:access_token2) { FactoryBot.create :access_token, application: other_application, resource_owner_id: 42 }
246
+ let(:access_token2) do
247
+ FactoryBot.create :access_token, application: other_application, resource_owner_id: 42
248
+ end
247
249
 
248
250
  it 'fail' do
249
251
  expect(access_token1.same_credential?(access_token2)).to be_falsey
@@ -251,7 +253,9 @@ module Doorkeeper
251
253
  end
252
254
 
253
255
  context 'the second token has different owner and same app' do
254
- let(:access_token2) { FactoryBot.create :access_token, application: application, resource_owner_id: 42 }
256
+ let(:access_token2) do
257
+ FactoryBot.create :access_token, application: application, resource_owner_id: 42
258
+ end
255
259
 
256
260
  it 'fail' do
257
261
  expect(access_token1.same_credential?(access_token2)).to be_falsey