Commit bd7ba308 authored by Douwe Maan's avatar Douwe Maan

Merge branch 'ee-3662-board_routes_prefix_with_dash' into 'master'

Move group boards routes under '-' and remove "boards" from reserved paths

Closes #3662

See merge request gitlab-org/gitlab-ee!3078
parents 88f46f7d d85bbf0d
---
title: Move group boards routes under - and remove "boards" from reserved paths
merge_request:
author:
type: fixed
...@@ -2,7 +2,20 @@ require 'constraints/group_url_constrainer' ...@@ -2,7 +2,20 @@ require 'constraints/group_url_constrainer'
resources :groups, only: [:index, :new, :create] resources :groups, only: [:index, :new, :create]
scope(path: 'groups/*group_id', constraints(GroupUrlConstrainer.new) do
scope(path: 'groups/*id',
controller: :groups,
constraints: { id: Gitlab::PathRegex.full_namespace_route_regex, format: /(html|json|atom)/ }) do
get :edit, as: :edit_group
get :issues, as: :issues_group
get :merge_requests, as: :merge_requests_group
get :projects, as: :projects_group
get :activity, as: :activity_group
get :subgroups, as: :subgroups_group
get '/', action: :show, as: :group_canonical
end
scope(path: 'groups/*group_id',
module: :groups, module: :groups,
as: :group, as: :group,
constraints: { group_id: Gitlab::PathRegex.full_namespace_route_regex }) do constraints: { group_id: Gitlab::PathRegex.full_namespace_route_regex }) do
...@@ -61,25 +74,15 @@ scope(path: 'groups/*group_id', ...@@ -61,25 +74,15 @@ scope(path: 'groups/*group_id',
resources :variables, only: [:index, :show, :update, :create, :destroy] resources :variables, only: [:index, :show, :update, :create, :destroy]
resources :billings, only: [:index] resources :billings, only: [:index]
end
## EE-specific ## EE-specific
resources :boards, only: [:index, :show, :create, :update, :destroy] resources :boards, only: [:index, :show, :create, :update, :destroy]
end end
scope(path: 'groups/*id', ## EE-specific
controller: :groups, get :boards, to: redirect('/groups/%{group_id}/-/boards')
constraints: { id: Gitlab::PathRegex.full_namespace_route_regex, format: /(html|json|atom)/ }) do end
get :edit, as: :edit_group
get :issues, as: :issues_group
get :merge_requests, as: :merge_requests_group
get :projects, as: :projects_group
get :activity, as: :activity_group
get :subgroups, as: :subgroups_group
get '/', action: :show, as: :group_canonical
end
constraints(GroupUrlConstrainer.new) do
scope(path: '*id', scope(path: '*id',
as: :group, as: :group,
constraints: { id: Gitlab::PathRegex.full_namespace_route_regex, format: /(html|json|atom)/ }, constraints: { id: Gitlab::PathRegex.full_namespace_route_regex, format: /(html|json|atom)/ },
......
...@@ -120,7 +120,6 @@ module Gitlab ...@@ -120,7 +120,6 @@ module Gitlab
analytics analytics
audit_events audit_events
avatar avatar
boards
edit edit
group_members group_members
hooks hooks
......
...@@ -72,7 +72,14 @@ describe Gitlab::PathRegex do ...@@ -72,7 +72,14 @@ describe Gitlab::PathRegex do
route_set = Rails.application.routes route_set = Rails.application.routes
routes_collection = route_set.routes routes_collection = route_set.routes
routes_array = routes_collection.routes routes_array = routes_collection.routes
routes_array.map { |route| route.path.spec.to_s } non_deprecated_redirect_routes = routes_array.reject do |route|
app = route.app
# `app.app` is either another app, or `self`. We want to find the final app.
app = app.app while app.try(:app) && app.app != app
app.is_a?(ActionDispatch::Routing::PathRedirect) && app.block.include?('/-/')
end
non_deprecated_redirect_routes.map { |route| route.path.spec.to_s }
end end
let(:routes_without_format) { all_routes.map { |path| without_format(path) } } let(:routes_without_format) { all_routes.map { |path| without_format(path) } }
......
require 'spec_helper'
describe 'Deprecated boards paths' do
it 'redirects to boards page' do
group = create :group, name: 'gitlabhq'
get('/groups/gitlabhq/boards')
expect(response).to redirect_to(group_boards_path(group))
end
end
require 'spec_helper'
describe 'Group routing' do
describe 'subgroup "boards"' do
it 'shows group show page' do
allow(Group).to receive(:find_by_full_path).with('gitlabhq/boards', any_args).and_return(true)
expect(get('/groups/gitlabhq/boards')).to route_to('groups#show', id: 'gitlabhq/boards')
end
it 'shows boards index page' do
allow(Group).to receive(:find_by_full_path).with('gitlabhq', any_args).and_return(true)
expect(get('/groups/gitlabhq/-/boards')).to route_to('groups/boards#index', group_id: 'gitlabhq')
end
end
end
...@@ -285,17 +285,15 @@ end ...@@ -285,17 +285,15 @@ end
describe "Groups", "routing" do describe "Groups", "routing" do
let(:name) { 'complex.group-namegit' } let(:name) { 'complex.group-namegit' }
let!(:group) { create(:group, name: name) }
before do
allow_any_instance_of(GroupUrlConstrainer).to receive(:matches?).and_return(true)
end
it "to #show" do it "to #show" do
expect(get("/groups/#{name}")).to route_to('groups#show', id: name) expect(get("/groups/#{name}")).to route_to('groups#show', id: name)
end end
it "also supports nested groups" do it "also supports nested groups" do
expect(get("/#{name}/#{name}")).to route_to('groups#show', id: "#{name}/#{name}") nested_group = create(:group, parent: group)
expect(get("/#{name}/#{nested_group.name}")).to route_to('groups#show', id: "#{name}/#{nested_group.name}")
end end
it "also display group#show on the short path" do it "also display group#show on the short path" do
...@@ -313,10 +311,6 @@ describe "Groups", "routing" do ...@@ -313,10 +311,6 @@ describe "Groups", "routing" do
it "to #members" do it "to #members" do
expect(get("/groups/#{name}/group_members")).to route_to('groups/group_members#index', group_id: name) expect(get("/groups/#{name}/group_members")).to route_to('groups/group_members#index', group_id: name)
end end
it "also display group#show with slash in the path" do
expect(get('/group/subgroup')).to route_to('groups#show', id: 'group/subgroup')
end
end end
describe HealthCheckController, 'routing' do describe HealthCheckController, 'routing' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment