Use checkboxes for application scope setting (#4671)
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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' | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user