[CE] Add Naming/FileName rule checking expected class/module per filename
This commit is contained in:
parent
a284400099
commit
5c7a738105
72
.rubocop.yml
72
.rubocop.yml
|
@ -31,6 +31,78 @@ Style/MutableConstant:
|
||||||
- 'ee/db/post_migrate/**/*'
|
- 'ee/db/post_migrate/**/*'
|
||||||
- 'ee/db/geo/migrate/**/*'
|
- 'ee/db/geo/migrate/**/*'
|
||||||
|
|
||||||
|
Naming/FileName:
|
||||||
|
ExpectMatchingDefinition: true
|
||||||
|
Exclude:
|
||||||
|
- 'spec/**/*'
|
||||||
|
- 'features/**/*'
|
||||||
|
- 'ee/spec/**/*'
|
||||||
|
- 'qa/spec/**/*'
|
||||||
|
- 'qa/qa/specs/**/*'
|
||||||
|
- 'qa/bin/*'
|
||||||
|
- 'config/**/*'
|
||||||
|
- 'lib/generators/**/*'
|
||||||
|
- 'ee/lib/generators/**/*'
|
||||||
|
IgnoreExecutableScripts: true
|
||||||
|
AllowedAcronyms:
|
||||||
|
- EE
|
||||||
|
- JSON
|
||||||
|
- LDAP
|
||||||
|
- IO
|
||||||
|
- HMAC
|
||||||
|
- QA
|
||||||
|
- ENV
|
||||||
|
- STL
|
||||||
|
- PDF
|
||||||
|
- SVG
|
||||||
|
- CTE
|
||||||
|
- DN
|
||||||
|
- RSA
|
||||||
|
- CI
|
||||||
|
- CD
|
||||||
|
- OAuth
|
||||||
|
# default ones:
|
||||||
|
- CLI
|
||||||
|
- DSL
|
||||||
|
- ACL
|
||||||
|
- API
|
||||||
|
- ASCII
|
||||||
|
- CPU
|
||||||
|
- CSS
|
||||||
|
- DNS
|
||||||
|
- EOF
|
||||||
|
- GUID
|
||||||
|
- HTML
|
||||||
|
- HTTP
|
||||||
|
- HTTPS
|
||||||
|
- ID
|
||||||
|
- IP
|
||||||
|
- JSON
|
||||||
|
- LHS
|
||||||
|
- QPS
|
||||||
|
- RAM
|
||||||
|
- RHS
|
||||||
|
- RPC
|
||||||
|
- SLA
|
||||||
|
- SMTP
|
||||||
|
- SQL
|
||||||
|
- SSH
|
||||||
|
- TCP
|
||||||
|
- TLS
|
||||||
|
- TTL
|
||||||
|
- UDP
|
||||||
|
- UI
|
||||||
|
- UID
|
||||||
|
- UUID
|
||||||
|
- URI
|
||||||
|
- URL
|
||||||
|
- UTF8
|
||||||
|
- VM
|
||||||
|
- XML
|
||||||
|
- XMPP
|
||||||
|
- XSRF
|
||||||
|
- XSS
|
||||||
|
|
||||||
# Gitlab ###################################################################
|
# Gitlab ###################################################################
|
||||||
|
|
||||||
Gitlab/ModuleWithInstanceVariables:
|
Gitlab/ModuleWithInstanceVariables:
|
||||||
|
|
|
@ -40,7 +40,7 @@ scope(path: '*namespace_id/:project_id',
|
||||||
# /info/refs?service=git-receive-pack, but nothing else.
|
# /info/refs?service=git-receive-pack, but nothing else.
|
||||||
#
|
#
|
||||||
git_http_handshake = lambda do |request|
|
git_http_handshake = lambda do |request|
|
||||||
ProjectUrlConstrainer.new.matches?(request) &&
|
::Constraints::ProjectUrlConstrainer.new.matches?(request) &&
|
||||||
(request.query_string.blank? ||
|
(request.query_string.blank? ||
|
||||||
request.query_string.match(/\Aservice=git-(upload|receive)-pack\z/))
|
request.query_string.match(/\Aservice=git-(upload|receive)-pack\z/))
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
require 'constraints/group_url_constrainer'
|
|
||||||
|
|
||||||
resources :groups, only: [:index, :new, :create] do
|
resources :groups, only: [:index, :new, :create] do
|
||||||
post :preview_markdown
|
post :preview_markdown
|
||||||
end
|
end
|
||||||
|
|
||||||
constraints(GroupUrlConstrainer.new) do
|
constraints(::Constraints::GroupUrlConstrainer.new) do
|
||||||
scope(path: 'groups/*id',
|
scope(path: 'groups/*id',
|
||||||
controller: :groups,
|
controller: :groups,
|
||||||
constraints: { id: Gitlab::PathRegex.full_namespace_route_regex, format: /(html|json|atom)/ }) do
|
constraints: { id: Gitlab::PathRegex.full_namespace_route_regex, format: /(html|json|atom)/ }) do
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
require 'constraints/project_url_constrainer'
|
|
||||||
|
|
||||||
resources :projects, only: [:index, :new, :create]
|
resources :projects, only: [:index, :new, :create]
|
||||||
|
|
||||||
draw :git_http
|
draw :git_http
|
||||||
|
|
||||||
constraints(ProjectUrlConstrainer.new) do
|
constraints(::Constraints::ProjectUrlConstrainer.new) do
|
||||||
# If the route has a wildcard segment, the segment has a regex constraint,
|
# If the route has a wildcard segment, the segment has a regex constraint,
|
||||||
# the segment is potentially followed by _another_ wildcard segment, and
|
# the segment is potentially followed by _another_ wildcard segment, and
|
||||||
# the `format` option is not set to false, we need to specify that
|
# the `format` option is not set to false, we need to specify that
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
require 'constraints/user_url_constrainer'
|
|
||||||
|
|
||||||
devise_for :users, controllers: { omniauth_callbacks: :omniauth_callbacks,
|
devise_for :users, controllers: { omniauth_callbacks: :omniauth_callbacks,
|
||||||
registrations: :registrations,
|
registrations: :registrations,
|
||||||
passwords: :passwords,
|
passwords: :passwords,
|
||||||
|
@ -35,7 +33,7 @@ scope(constraints: { username: Gitlab::PathRegex.root_namespace_route_regex }) d
|
||||||
get '/u/:username/contributed', to: redirect('users/%{username}/contributed')
|
get '/u/:username/contributed', to: redirect('users/%{username}/contributed')
|
||||||
end
|
end
|
||||||
|
|
||||||
constraints(UserUrlConstrainer.new) do
|
constraints(::Constraints::UserUrlConstrainer.new) do
|
||||||
# Get all keys of user
|
# Get all keys of user
|
||||||
get ':username.keys' => 'profiles/keys#get_keys', constraints: { username: Gitlab::PathRegex.root_namespace_route_regex }
|
get ':username.keys' => 'profiles/keys#get_keys', constraints: { username: Gitlab::PathRegex.root_namespace_route_regex }
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
module Constraints
|
||||||
class GroupUrlConstrainer
|
class GroupUrlConstrainer
|
||||||
def matches?(request)
|
def matches?(request)
|
||||||
full_path = request.params[:group_id] || request.params[:id]
|
full_path = request.params[:group_id] || request.params[:id]
|
||||||
|
@ -7,3 +8,4 @@ class GroupUrlConstrainer
|
||||||
Group.find_by_full_path(full_path, follow_redirects: request.get?).present?
|
Group.find_by_full_path(full_path, follow_redirects: request.get?).present?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
module Constraints
|
||||||
class ProjectUrlConstrainer
|
class ProjectUrlConstrainer
|
||||||
def matches?(request)
|
def matches?(request)
|
||||||
namespace_path = request.params[:namespace_id]
|
namespace_path = request.params[:namespace_id]
|
||||||
|
@ -11,3 +12,4 @@ class ProjectUrlConstrainer
|
||||||
Project.find_by_full_path(full_path, follow_redirects: request.get?).present?
|
Project.find_by_full_path(full_path, follow_redirects: request.get?).present?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
module Constraints
|
||||||
class UserUrlConstrainer
|
class UserUrlConstrainer
|
||||||
def matches?(request)
|
def matches?(request)
|
||||||
full_path = request.params[:username]
|
full_path = request.params[:username]
|
||||||
|
@ -7,3 +8,4 @@ class UserUrlConstrainer
|
||||||
User.find_by_full_path(full_path, follow_redirects: request.get?).present?
|
User.find_by_full_path(full_path, follow_redirects: request.get?).present?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
require_dependency 'declarative_policy/cache'
|
require_dependency 'declarative_policy/cache'
|
||||||
require_dependency 'declarative_policy/condition'
|
require_dependency 'declarative_policy/condition'
|
||||||
require_dependency 'declarative_policy/dsl'
|
require_dependency 'declarative_policy/delegate_dsl'
|
||||||
|
require_dependency 'declarative_policy/policy_dsl'
|
||||||
|
require_dependency 'declarative_policy/rule_dsl'
|
||||||
require_dependency 'declarative_policy/preferred_scope'
|
require_dependency 'declarative_policy/preferred_scope'
|
||||||
require_dependency 'declarative_policy/rule'
|
require_dependency 'declarative_policy/rule'
|
||||||
require_dependency 'declarative_policy/runner'
|
require_dependency 'declarative_policy/runner'
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
module DeclarativePolicy
|
||||||
|
# Used when the name of a delegate is mentioned in
|
||||||
|
# the rule DSL.
|
||||||
|
class DelegateDsl
|
||||||
|
def initialize(rule_dsl, delegate_name)
|
||||||
|
@rule_dsl = rule_dsl
|
||||||
|
@delegate_name = delegate_name
|
||||||
|
end
|
||||||
|
|
||||||
|
def method_missing(m, *a, &b)
|
||||||
|
return super unless a.empty? && !block_given?
|
||||||
|
|
||||||
|
@rule_dsl.delegate(@delegate_name, m)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,103 +0,0 @@
|
||||||
module DeclarativePolicy
|
|
||||||
# The DSL evaluation context inside rule { ... } blocks.
|
|
||||||
# Responsible for creating and combining Rule objects.
|
|
||||||
#
|
|
||||||
# See Base.rule
|
|
||||||
class RuleDsl
|
|
||||||
def initialize(context_class)
|
|
||||||
@context_class = context_class
|
|
||||||
end
|
|
||||||
|
|
||||||
def can?(ability)
|
|
||||||
Rule::Ability.new(ability)
|
|
||||||
end
|
|
||||||
|
|
||||||
def all?(*rules)
|
|
||||||
Rule::And.make(rules)
|
|
||||||
end
|
|
||||||
|
|
||||||
def any?(*rules)
|
|
||||||
Rule::Or.make(rules)
|
|
||||||
end
|
|
||||||
|
|
||||||
def none?(*rules)
|
|
||||||
~Rule::Or.new(rules)
|
|
||||||
end
|
|
||||||
|
|
||||||
def cond(condition)
|
|
||||||
Rule::Condition.new(condition)
|
|
||||||
end
|
|
||||||
|
|
||||||
def delegate(delegate_name, condition)
|
|
||||||
Rule::DelegatedCondition.new(delegate_name, condition)
|
|
||||||
end
|
|
||||||
|
|
||||||
def method_missing(m, *a, &b)
|
|
||||||
return super unless a.size == 0 && !block_given?
|
|
||||||
|
|
||||||
if @context_class.delegations.key?(m)
|
|
||||||
DelegateDsl.new(self, m)
|
|
||||||
else
|
|
||||||
cond(m.to_sym)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Used when the name of a delegate is mentioned in
|
|
||||||
# the rule DSL.
|
|
||||||
class DelegateDsl
|
|
||||||
def initialize(rule_dsl, delegate_name)
|
|
||||||
@rule_dsl = rule_dsl
|
|
||||||
@delegate_name = delegate_name
|
|
||||||
end
|
|
||||||
|
|
||||||
def method_missing(m, *a, &b)
|
|
||||||
return super unless a.size == 0 && !block_given?
|
|
||||||
|
|
||||||
@rule_dsl.delegate(@delegate_name, m)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# The return value of a rule { ... } declaration.
|
|
||||||
# Can call back to register rules with the containing
|
|
||||||
# Policy class (context_class here). See Base.rule
|
|
||||||
#
|
|
||||||
# Note that the #policy method just performs an #instance_eval,
|
|
||||||
# which is useful for multiple #enable or #prevent callse.
|
|
||||||
#
|
|
||||||
# Also provides a #method_missing proxy to the context
|
|
||||||
# class's class methods, so that helper methods can be
|
|
||||||
# defined and used in a #policy { ... } block.
|
|
||||||
class PolicyDsl
|
|
||||||
def initialize(context_class, rule)
|
|
||||||
@context_class = context_class
|
|
||||||
@rule = rule
|
|
||||||
end
|
|
||||||
|
|
||||||
def policy(&b)
|
|
||||||
instance_eval(&b)
|
|
||||||
end
|
|
||||||
|
|
||||||
def enable(*abilities)
|
|
||||||
@context_class.enable_when(abilities, @rule)
|
|
||||||
end
|
|
||||||
|
|
||||||
def prevent(*abilities)
|
|
||||||
@context_class.prevent_when(abilities, @rule)
|
|
||||||
end
|
|
||||||
|
|
||||||
def prevent_all
|
|
||||||
@context_class.prevent_all_when(@rule)
|
|
||||||
end
|
|
||||||
|
|
||||||
def method_missing(m, *a, &b)
|
|
||||||
return super unless @context_class.respond_to?(m)
|
|
||||||
|
|
||||||
@context_class.__send__(m, *a, &b) # rubocop:disable GitlabSecurity/PublicSend
|
|
||||||
end
|
|
||||||
|
|
||||||
def respond_to_missing?(m)
|
|
||||||
@context_class.respond_to?(m) || super
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
module DeclarativePolicy
|
||||||
|
# The return value of a rule { ... } declaration.
|
||||||
|
# Can call back to register rules with the containing
|
||||||
|
# Policy class (context_class here). See Base.rule
|
||||||
|
#
|
||||||
|
# Note that the #policy method just performs an #instance_eval,
|
||||||
|
# which is useful for multiple #enable or #prevent callse.
|
||||||
|
#
|
||||||
|
# Also provides a #method_missing proxy to the context
|
||||||
|
# class's class methods, so that helper methods can be
|
||||||
|
# defined and used in a #policy { ... } block.
|
||||||
|
class PolicyDsl
|
||||||
|
def initialize(context_class, rule)
|
||||||
|
@context_class = context_class
|
||||||
|
@rule = rule
|
||||||
|
end
|
||||||
|
|
||||||
|
def policy(&b)
|
||||||
|
instance_eval(&b)
|
||||||
|
end
|
||||||
|
|
||||||
|
def enable(*abilities)
|
||||||
|
@context_class.enable_when(abilities, @rule)
|
||||||
|
end
|
||||||
|
|
||||||
|
def prevent(*abilities)
|
||||||
|
@context_class.prevent_when(abilities, @rule)
|
||||||
|
end
|
||||||
|
|
||||||
|
def prevent_all
|
||||||
|
@context_class.prevent_all_when(@rule)
|
||||||
|
end
|
||||||
|
|
||||||
|
def method_missing(m, *a, &b)
|
||||||
|
return super unless @context_class.respond_to?(m)
|
||||||
|
|
||||||
|
@context_class.__send__(m, *a, &b) # rubocop:disable GitlabSecurity/PublicSend
|
||||||
|
end
|
||||||
|
|
||||||
|
def respond_to_missing?(m)
|
||||||
|
@context_class.respond_to?(m) || super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,4 +1,4 @@
|
||||||
module DeclarativePolicy
|
module DeclarativePolicy # rubocop:disable Naming/FileName
|
||||||
PREFERRED_SCOPE_KEY = :"DeclarativePolicy.preferred_scope"
|
PREFERRED_SCOPE_KEY = :"DeclarativePolicy.preferred_scope"
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
module DeclarativePolicy
|
||||||
|
# The DSL evaluation context inside rule { ... } blocks.
|
||||||
|
# Responsible for creating and combining Rule objects.
|
||||||
|
#
|
||||||
|
# See Base.rule
|
||||||
|
class RuleDsl
|
||||||
|
def initialize(context_class)
|
||||||
|
@context_class = context_class
|
||||||
|
end
|
||||||
|
|
||||||
|
def can?(ability)
|
||||||
|
Rule::Ability.new(ability)
|
||||||
|
end
|
||||||
|
|
||||||
|
def all?(*rules)
|
||||||
|
Rule::And.make(rules)
|
||||||
|
end
|
||||||
|
|
||||||
|
def any?(*rules)
|
||||||
|
Rule::Or.make(rules)
|
||||||
|
end
|
||||||
|
|
||||||
|
def none?(*rules)
|
||||||
|
~Rule::Or.new(rules)
|
||||||
|
end
|
||||||
|
|
||||||
|
def cond(condition)
|
||||||
|
Rule::Condition.new(condition)
|
||||||
|
end
|
||||||
|
|
||||||
|
def delegate(delegate_name, condition)
|
||||||
|
Rule::DelegatedCondition.new(delegate_name, condition)
|
||||||
|
end
|
||||||
|
|
||||||
|
def method_missing(m, *a, &b)
|
||||||
|
return super unless a.empty? && !block_given?
|
||||||
|
|
||||||
|
if @context_class.delegations.key?(m)
|
||||||
|
DelegateDsl.new(self, m)
|
||||||
|
else
|
||||||
|
cond(m.to_sym)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,4 +1,4 @@
|
||||||
module Gitlab
|
module Gitlab # rubocop:disable Naming/FileName
|
||||||
module Auth
|
module Auth
|
||||||
Result = Struct.new(:actor, :project, :type, :authentication_abilities) do
|
Result = Struct.new(:actor, :project, :type, :authentication_abilities) do
|
||||||
def ci?(for_project)
|
def ci?(for_project)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
module Gitlab
|
module Gitlab # rubocop:disable Naming/FileName
|
||||||
module Ci
|
module Ci
|
||||||
module Pipeline
|
module Pipeline
|
||||||
module Chain
|
module Chain
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
module Gitlab::HealthChecks
|
module Gitlab::HealthChecks # rubocop:disable Naming/FileName
|
||||||
Metric = Struct.new(:name, :value, :labels)
|
Metric = Struct.new(:name, :value, :labels)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
module Gitlab::HealthChecks
|
module Gitlab::HealthChecks # rubocop:disable Naming/FileName
|
||||||
Result = Struct.new(:success, :message, :labels)
|
Result = Struct.new(:success, :message, :labels)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
module Gitlab
|
module Gitlab # rubocop:disable Naming/FileName
|
||||||
module Middleware
|
module Middleware
|
||||||
# Some of middleware would hold env for no good reason even after the
|
# Some of middleware would hold env for no good reason even after the
|
||||||
# request had already been processed, and we could not garbage collect
|
# request had already been processed, and we could not garbage collect
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
module Gitlab
|
module Gitlab # rubocop:disable Naming/FileName
|
||||||
module SlashCommands
|
module SlashCommands
|
||||||
Result = Struct.new(:type, :message)
|
Result = Struct.new(:type, :message)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
unless Rails.env.production?
|
unless Rails.env.production? # rubocop:disable Naming/FileName
|
||||||
require 'haml_lint/haml_visitor'
|
require 'haml_lint/haml_visitor'
|
||||||
require 'haml_lint/linter'
|
require 'haml_lint/linter'
|
||||||
require 'haml_lint/linter_registry'
|
require 'haml_lint/linter_registry'
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
module QA
|
module QA # rubocop:disable Naming/FileName
|
||||||
module Page
|
module Page
|
||||||
module Project
|
module Project
|
||||||
module Settings
|
module Settings
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# rubocop:disable Naming/FileName
|
||||||
require_relative 'cop/gitlab/module_with_instance_variables'
|
require_relative 'cop/gitlab/module_with_instance_variables'
|
||||||
require_relative 'cop/gitlab/predicate_memoization'
|
require_relative 'cop/gitlab/predicate_memoization'
|
||||||
require_relative 'cop/include_sidekiq_worker'
|
require_relative 'cop/include_sidekiq_worker'
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe GroupUrlConstrainer do
|
describe Constraints::GroupUrlConstrainer do
|
||||||
let!(:group) { create(:group, path: 'gitlab') }
|
let!(:group) { create(:group, path: 'gitlab') }
|
||||||
|
|
||||||
describe '#matches?' do
|
describe '#matches?' do
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe ProjectUrlConstrainer do
|
describe Constraints::ProjectUrlConstrainer do
|
||||||
let!(:project) { create(:project) }
|
let!(:project) { create(:project) }
|
||||||
let!(:namespace) { project.namespace }
|
let!(:namespace) { project.namespace }
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe UserUrlConstrainer do
|
describe Constraints::UserUrlConstrainer do
|
||||||
let!(:user) { create(:user, username: 'dz') }
|
let!(:user) { create(:user, username: 'dz') }
|
||||||
|
|
||||||
describe '#matches?' do
|
describe '#matches?' do
|
||||||
|
|
|
@ -9,7 +9,7 @@ require 'spec_helper'
|
||||||
# user_calendar_activities GET /u/:username/calendar_activities(.:format)
|
# user_calendar_activities GET /u/:username/calendar_activities(.:format)
|
||||||
describe UsersController, "routing" do
|
describe UsersController, "routing" do
|
||||||
it "to #show" do
|
it "to #show" do
|
||||||
allow_any_instance_of(UserUrlConstrainer).to receive(:matches?).and_return(true)
|
allow_any_instance_of(::Constraints::UserUrlConstrainer).to receive(:matches?).and_return(true)
|
||||||
|
|
||||||
expect(get("/User")).to route_to('users#show', username: 'User')
|
expect(get("/User")).to route_to('users#show', username: 'User')
|
||||||
end
|
end
|
||||||
|
@ -210,7 +210,7 @@ describe Profiles::KeysController, "routing" do
|
||||||
|
|
||||||
# get all the ssh-keys of a user
|
# get all the ssh-keys of a user
|
||||||
it "to #get_keys" do
|
it "to #get_keys" do
|
||||||
allow_any_instance_of(UserUrlConstrainer).to receive(:matches?).and_return(true)
|
allow_any_instance_of(::Constraints::UserUrlConstrainer).to receive(:matches?).and_return(true)
|
||||||
|
|
||||||
expect(get("/foo.keys")).to route_to('profiles/keys#get_keys', username: 'foo')
|
expect(get("/foo.keys")).to route_to('profiles/keys#get_keys', username: 'foo')
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue