commit: 80393a23d0a0c296d4356a2a21cf8504435265bf
parent: 8d23667536cec65292302774b3816467ad427a32
Author: nullkal <nullkal@users.noreply.github.com>
Date: Wed, 23 Aug 2017 22:16:20 +0900
Use checkboxes for application scope setting (#4671)
Diffstat:
3 files changed, 44 insertions(+), 6 deletions(-)
diff --git a/app/controllers/settings/applications_controller.rb b/app/controllers/settings/applications_controller.rb
@@ -5,6 +5,7 @@ class Settings::ApplicationsController < ApplicationController
before_action :authenticate_user!
before_action :set_application, only: [:show, :update, :destroy, :regenerate]
+ before_action :prepare_scopes, only: [:create, :update]
def index
@applications = current_user.applications.page(params[:page])
@@ -63,4 +64,9 @@ class Settings::ApplicationsController < ApplicationController
:website
)
end
+
+ def prepare_scopes
+ scopes = params.fetch(:doorkeeper_application, {}).fetch(:scopes, nil)
+ params[:doorkeeper_application][:scopes] = scopes.join(' ') if scopes.is_a? Array
+ end
end
diff --git a/app/views/settings/applications/_fields.html.haml b/app/views/settings/applications/_fields.html.haml
@@ -7,5 +7,15 @@
%p.hint= t('doorkeeper.applications.help.native_redirect_uri', native_redirect_uri: Doorkeeper.configuration.native_redirect_uri)
-.fields-group
- = f.input :scopes, wrapper: :with_label, label: t('activerecord.attributes.doorkeeper/application.scopes'), hint: t('doorkeeper.applications.help.scopes')
+.field-group
+ = f.input :scopes,
+ label: t('activerecord.attributes.doorkeeper/application.scopes'),
+ collection: Doorkeeper.configuration.scopes,
+ wrapper: :with_label,
+ include_blank: false,
+ selected: f.object.scopes.all,
+ required: false,
+ as: :check_boxes,
+ collection_wrapper_tag: 'ul',
+ item_wrapper_tag: 'li'
+
diff --git a/spec/controllers/settings/applications_controller_spec.rb b/spec/controllers/settings/applications_controller_spec.rb
@@ -45,7 +45,7 @@ describe Settings::ApplicationsController do
end
describe 'POST #create' do
- context 'success' do
+ context 'success (passed scopes as a String)' do
def call_create
post :create, params: {
doorkeeper_application: {
@@ -61,7 +61,29 @@ describe Settings::ApplicationsController do
it 'creates an entry in the database' do
expect { call_create }.to change(Doorkeeper::Application, :count)
end
-
+
+ it 'redirects back to applications page' do
+ expect(call_create).to redirect_to(settings_applications_path)
+ end
+ end
+
+ context 'success (passed scopes as an Array)' do
+ def call_create
+ post :create, params: {
+ doorkeeper_application: {
+ name: 'My New App',
+ redirect_uri: 'urn:ietf:wg:oauth:2.0:oob',
+ website: 'http://google.com',
+ scopes: [ 'read', 'write', 'follow' ]
+ }
+ }
+ response
+ end
+
+ it 'creates an entry in the database' do
+ expect { call_create }.to change(Doorkeeper::Application, :count)
+ end
+
it 'redirects back to applications page' do
expect(call_create).to redirect_to(settings_applications_path)
end
@@ -74,7 +96,7 @@ describe Settings::ApplicationsController do
name: '',
redirect_uri: '',
website: '',
- scopes: ''
+ scopes: []
}
}
end
@@ -123,7 +145,7 @@ describe Settings::ApplicationsController do
name: '',
redirect_uri: '',
website: '',
- scopes: ''
+ scopes: []
}
}
end