Add spec for deletion of authorized OAuth2 application
Closes #14370 Move gon function into its own helper
This commit is contained in:
parent
0c082d5e3a
commit
c7e384aab2
10 changed files with 112 additions and 15 deletions
|
@ -2,6 +2,7 @@ Please view this file on the master branch, on stable branches it's out of date.
|
|||
|
||||
v 8.7.0 (unreleased)
|
||||
- The Projects::HousekeepingService class has extra instrumentation (Yorick Peterse)
|
||||
- Fix revoking of authorized OAuth applications (Connor Shea)
|
||||
- All service classes (those residing in app/services) are now instrumented (Yorick Peterse)
|
||||
- Developers can now add custom tags to transactions (Yorick Peterse)
|
||||
- Loading of an issue's referenced merge requests and related branches is now done asynchronously (Yorick Peterse)
|
||||
|
|
|
@ -158,20 +158,6 @@ class ApplicationController < ActionController::Base
|
|||
end
|
||||
end
|
||||
|
||||
def add_gon_variables
|
||||
gon.api_version = API::API.version
|
||||
gon.default_avatar_url = URI::join(Gitlab.config.gitlab.url, ActionController::Base.helpers.image_path('no_avatar.png')).to_s
|
||||
gon.default_issues_tracker = Project.new.default_issue_tracker.to_param
|
||||
gon.max_file_size = current_application_settings.max_attachment_size
|
||||
gon.relative_url_root = Gitlab.config.gitlab.relative_url_root
|
||||
gon.user_color_scheme = Gitlab::ColorSchemes.for_user(current_user).css_class
|
||||
|
||||
if current_user
|
||||
gon.current_user_id = current_user.id
|
||||
gon.api_token = current_user.private_token
|
||||
end
|
||||
end
|
||||
|
||||
def validate_user_service_ticket!
|
||||
return unless signed_in? && session[:service_tickets]
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ class Oauth::ApplicationsController < Doorkeeper::ApplicationsController
|
|||
|
||||
before_action :verify_user_oauth_applications_enabled
|
||||
before_action :authenticate_user!
|
||||
before_action :add_gon_variables
|
||||
|
||||
layout 'profile'
|
||||
|
||||
|
|
19
app/models/oauth_access_token.rb
Normal file
19
app/models/oauth_access_token.rb
Normal file
|
@ -0,0 +1,19 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: oauth_access_tokens
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# resource_owner_id :integer
|
||||
# application_id :integer
|
||||
# token :string not null
|
||||
# refresh_token :string
|
||||
# expires_in :integer
|
||||
# revoked_at :datetime
|
||||
# created_at :datetime not null
|
||||
# scopes :string
|
||||
#
|
||||
|
||||
class OauthAccessToken < ActiveRecord::Base
|
||||
belongs_to :resource_owner, class_name: 'User'
|
||||
belongs_to :application, class_name: 'Doorkeeper::Application'
|
||||
end
|
|
@ -1,5 +1,7 @@
|
|||
module Gitlab
|
||||
module CurrentSettings
|
||||
include ::Gitlab::GonHelper
|
||||
|
||||
def current_application_settings
|
||||
key = :current_application_settings
|
||||
|
||||
|
|
17
lib/gitlab/gon_helper.rb
Normal file
17
lib/gitlab/gon_helper.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
module Gitlab
|
||||
module GonHelper
|
||||
def add_gon_variables
|
||||
gon.api_version = API::API.version
|
||||
gon.default_avatar_url = URI::join(Gitlab.config.gitlab.url, ActionController::Base.helpers.image_path('no_avatar.png')).to_s
|
||||
gon.default_issues_tracker = Project.new.default_issue_tracker.to_param
|
||||
gon.max_file_size = current_application_settings.max_attachment_size
|
||||
gon.relative_url_root = Gitlab.config.gitlab.relative_url_root
|
||||
gon.user_color_scheme = Gitlab::ColorSchemes.for_user(current_user).css_class
|
||||
|
||||
if current_user
|
||||
gon.current_user_id = current_user.id
|
||||
gon.api_token = current_user.private_token
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
23
spec/factories/oauth_access_tokens.rb
Normal file
23
spec/factories/oauth_access_tokens.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: oauth_access_tokens
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# resource_owner_id :integer
|
||||
# application_id :integer
|
||||
# token :string not null
|
||||
# refresh_token :string
|
||||
# expires_in :integer
|
||||
# revoked_at :datetime
|
||||
# created_at :datetime not null
|
||||
# scopes :string
|
||||
#
|
||||
|
||||
FactoryGirl.define do
|
||||
factory :oauth_access_token do
|
||||
resource_owner
|
||||
application
|
||||
token '123456'
|
||||
created_at :datetime
|
||||
end
|
||||
end
|
9
spec/factories/oauth_applications.rb
Normal file
9
spec/factories/oauth_applications.rb
Normal file
|
@ -0,0 +1,9 @@
|
|||
FactoryGirl.define do
|
||||
factory :oauth_application, class: 'Doorkeeper::Application', aliases: [:application] do
|
||||
name { FFaker::Name.name }
|
||||
uid { FFaker::Name.name }
|
||||
redirect_uri { FFaker::Internet.uri('http') }
|
||||
owner
|
||||
owner_type 'User'
|
||||
end
|
||||
end
|
|
@ -1,7 +1,7 @@
|
|||
FactoryGirl.define do
|
||||
sequence(:name) { FFaker::Name.name }
|
||||
|
||||
factory :user, aliases: [:author, :assignee, :recipient, :owner, :creator] do
|
||||
factory :user, aliases: [:author, :assignee, :recipient, :owner, :creator, :resource_owner] do
|
||||
email { FFaker::Internet.email }
|
||||
name
|
||||
sequence(:username) { |n| "#{FFaker::Internet.user_name}#{n}" }
|
||||
|
|
39
spec/features/profiles/oauth_applications_spec.rb
Normal file
39
spec/features/profiles/oauth_applications_spec.rb
Normal file
|
@ -0,0 +1,39 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe 'Profile > Applications', feature: true do
|
||||
let(:user) { create(:user) }
|
||||
|
||||
before do
|
||||
login_as(user)
|
||||
end
|
||||
|
||||
describe 'User manages applications', js: true do
|
||||
it 'deletes an application' do
|
||||
create(:oauth_application, owner: user)
|
||||
visit oauth_applications_path
|
||||
|
||||
page.within('.oauth-applications') do
|
||||
expect(page).to have_content('Your applications (1)')
|
||||
click_button 'Destroy'
|
||||
end
|
||||
|
||||
expect(page).to have_content('The application was deleted successfully')
|
||||
expect(page).to have_content('Your applications (0)')
|
||||
expect(page).to have_content('Authorized applications (0)')
|
||||
end
|
||||
|
||||
it 'deletes an authorized application' do
|
||||
create(:oauth_access_token, resource_owner: user)
|
||||
visit oauth_applications_path
|
||||
|
||||
page.within('.oauth-authorized-applications') do
|
||||
expect(page).to have_content('Authorized applications (1)')
|
||||
click_button 'Revoke'
|
||||
end
|
||||
|
||||
expect(page).to have_content('The application was revoked access.')
|
||||
expect(page).to have_content('Your applications (0)')
|
||||
expect(page).to have_content('Authorized applications (0)')
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue