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 :authenticate_user! | ||||||
|   before_action :set_application, only: [:show, :update, :destroy, :regenerate] |   before_action :set_application, only: [:show, :update, :destroy, :regenerate] | ||||||
|  |   before_action :prepare_scopes, only: [:create, :update] | ||||||
|  |  | ||||||
|   def index |   def index | ||||||
|     @applications = current_user.applications.page(params[:page]) |     @applications = current_user.applications.page(params[:page]) | ||||||
| @@ -63,4 +64,9 @@ class Settings::ApplicationsController < ApplicationController | |||||||
|       :website |       :website | ||||||
|     ) |     ) | ||||||
|   end |   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 | end | ||||||
|   | |||||||
| @@ -7,5 +7,15 @@ | |||||||
|  |  | ||||||
|   %p.hint= t('doorkeeper.applications.help.native_redirect_uri', native_redirect_uri: Doorkeeper.configuration.native_redirect_uri) |   %p.hint= t('doorkeeper.applications.help.native_redirect_uri', native_redirect_uri: Doorkeeper.configuration.native_redirect_uri) | ||||||
|  |  | ||||||
| .fields-group | .field-group | ||||||
|   = f.input :scopes, wrapper: :with_label, label: t('activerecord.attributes.doorkeeper/application.scopes'), hint: t('doorkeeper.applications.help.scopes') |   = 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 |   end | ||||||
|  |  | ||||||
|   describe 'POST #create' do |   describe 'POST #create' do | ||||||
|     context 'success' do |     context 'success (passed scopes as a String)' do | ||||||
|       def call_create |       def call_create | ||||||
|         post :create, params: { |         post :create, params: { | ||||||
|                doorkeeper_application: { |                doorkeeper_application: { | ||||||
| @@ -61,7 +61,29 @@ describe Settings::ApplicationsController do | |||||||
|       it 'creates an entry in the database' do |       it 'creates an entry in the database' do | ||||||
|         expect { call_create }.to change(Doorkeeper::Application, :count) |         expect { call_create }.to change(Doorkeeper::Application, :count) | ||||||
|       end |       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 |       it 'redirects back to applications page' do | ||||||
|         expect(call_create).to redirect_to(settings_applications_path) |         expect(call_create).to redirect_to(settings_applications_path) | ||||||
|       end |       end | ||||||
| @@ -74,7 +96,7 @@ describe Settings::ApplicationsController do | |||||||
|                  name: '', |                  name: '', | ||||||
|                  redirect_uri: '', |                  redirect_uri: '', | ||||||
|                  website: '', |                  website: '', | ||||||
|                  scopes: '' |                  scopes: [] | ||||||
|                } |                } | ||||||
|              } |              } | ||||||
|       end |       end | ||||||
| @@ -123,7 +145,7 @@ describe Settings::ApplicationsController do | |||||||
|                   name: '', |                   name: '', | ||||||
|                   redirect_uri: '', |                   redirect_uri: '', | ||||||
|                   website: '', |                   website: '', | ||||||
|                   scopes: '' |                   scopes: [] | ||||||
|                 } |                 } | ||||||
|               } |               } | ||||||
|       end |       end | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user