Fixing requests after namespaces. Fixed admin bug with access to project

This commit is contained in:
Dmitriy Zaporozhets 2012-11-23 22:25:28 +02:00
parent e92b563acf
commit 0e1635a68a
14 changed files with 35 additions and 62 deletions

View file

@ -42,4 +42,14 @@ class Admin::ProjectsController < AdminController
redirect_to projects_url, notice: 'Project was successfully deleted.' redirect_to projects_url, notice: 'Project was successfully deleted.'
end end
protected
def project
id = params[:project_id] || params[:id]
id = id.split("/") if id.include?("/")
@project ||= Project.find_by_path(id)
@project || render_404
end
end end

View file

@ -88,7 +88,7 @@ module ApplicationHelper
[ "Users", users.map {|u| [u.human_name, u.id]} ] [ "Users", users.map {|u| [u.human_name, u.id]} ]
] ]
if selected == :current_user if selected == :current_user && current_user.namespace
selected = current_user.namespace.id selected = current_user.namespace.id
end end

View file

@ -1,6 +1,6 @@
class UserObserver < ActiveRecord::Observer class UserObserver < ActiveRecord::Observer
def after_create(user) def after_create(user)
user.create_namespace(code: user.username, name: user.name) user.create_namespace(path: user.username, name: user.name)
log_info("User \"#{user.name}\" (#{user.email}) was created") log_info("User \"#{user.name}\" (#{user.email}) was created")
@ -13,7 +13,7 @@ class UserObserver < ActiveRecord::Observer
def after_save user def after_save user
if user.username_changed? and user.namespace if user.username_changed? and user.namespace
user.namespace.update_attributes(code: user.username) user.namespace.update_attributes(path: user.username)
end end
end end

View file

@ -38,10 +38,7 @@ module Gitlab
# Example Request # Example Request
# POST /projects # POST /projects
post do post do
params[:code] ||= params[:name] attrs = attributes_for_keys [:name,
params[:path] ||= params[:name]
attrs = attributes_for_keys [:path,
:name,
:description, :description,
:default_branch, :default_branch,
:issues_enabled, :issues_enabled,

View file

@ -13,7 +13,7 @@ describe CommitsController do
describe "GET show" do describe "GET show" do
context "as atom feed" do context "as atom feed" do
it "should render as atom" do it "should render as atom" do
get :show, project_id: project.code, id: "master.atom" get :show, project_id: project.path, id: "master.atom"
response.should be_success response.should be_success
response.content_type.should == 'application/atom+xml' response.content_type.should == 'application/atom+xml'
end end

View file

@ -12,7 +12,7 @@ FactoryGirl.define do
factory :user, aliases: [:author, :assignee, :owner] do factory :user, aliases: [:author, :assignee, :owner] do
email { Faker::Internet.email } email { Faker::Internet.email }
name name
username 'john' username { Faker::Internet.user_name }
password "123456" password "123456"
password_confirmation { password } password_confirmation { password }

View file

@ -169,9 +169,7 @@ describe Notify do
end end
describe 'project access changed' do describe 'project access changed' do
let(:project) { create(:project, let(:project) { create(:project) }
path: "Fuu",
code: "Fuu") }
let(:user) { create(:user) } let(:user) { create(:user) }
let(:users_project) { create(:users_project, let(:users_project) { create(:users_project,
project: project, project: project,

View file

@ -13,7 +13,12 @@ describe UserObserver do
end end
context 'when a new user is created' do context 'when a new user is created' do
let(:user) { double(:user, id: 42, password: 'P@ssword!', name: 'John', email: 'u@mail.local', username: 'root') } let(:user) { double(:user, id: 42,
password: 'P@ssword!',
name: 'John',
email: 'u@mail.local',
username: 'root',
create_namespace: true) }
let(:notification) { double :notification } let(:notification) { double :notification }
it 'sends an email' do it 'sends an email' do

View file

@ -2,9 +2,7 @@ require 'spec_helper'
describe UsersProjectObserver do describe UsersProjectObserver do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project, let(:project) { create(:project) }
code: "Fuu",
path: "Fuu" ) }
let(:users_project) { create(:users_project, let(:users_project) { create(:users_project,
project: project, project: project,
user: user )} user: user )}

View file

@ -2,9 +2,7 @@ require 'spec_helper'
describe "Admin::Hooks" do describe "Admin::Hooks" do
before do before do
@project = create(:project, @project = create(:project)
name: "LeGiT",
code: "LGT")
login_as :admin login_as :admin
@system_hook = create(:system_hook) @system_hook = create(:system_hook)

View file

@ -39,8 +39,8 @@ describe "Admin::Projects" do
end end
it "should have project edit page" do it "should have project edit page" do
page.should have_content("Project name") page.should have_content("Edit project")
page.should have_content("URL") page.should have_button("Save Project")
end end
describe "Update project" do describe "Update project" do
@ -60,39 +60,6 @@ describe "Admin::Projects" do
end end
end end
describe "GET /admin/projects/new" do
before do
visit admin_projects_path
click_link "New Project"
end
it "should be correct path" do
current_path.should == new_admin_project_path
end
it "should have labels for new project" do
page.should have_content("Project name is")
end
end
describe "POST /admin/projects" do
before do
visit new_admin_project_path
fill_in 'project_name', with: 'NewProject'
expect { click_button "Create project" }.to change { Project.count }.by(1)
@project = Project.last
end
it "should be correct path" do
current_path.should == admin_project_path(@project)
end
it "should show project" do
page.should have_content(@project.name)
page.should have_content(@project.path)
end
end
describe "Add new team member" do describe "Add new team member" do
before do before do
@new_user = create(:user) @new_user = create(:user)

View file

@ -23,6 +23,7 @@ describe "Admin::Users" do
@password = "123ABC" @password = "123ABC"
visit new_admin_user_path visit new_admin_user_path
fill_in "user_name", with: "Big Bang" fill_in "user_name", with: "Big Bang"
fill_in "user_username", with: "bang"
fill_in "user_email", with: "bigbang@mail.com" fill_in "user_email", with: "bigbang@mail.com"
fill_in "user_password", with: @password fill_in "user_password", with: @password
fill_in "user_password_confirmation", with: @password fill_in "user_password_confirmation", with: @password

View file

@ -11,7 +11,7 @@ describe Gitlab::API do
describe "GET /projects/:id/milestones" do describe "GET /projects/:id/milestones" do
it "should return project milestones" do it "should return project milestones" do
get api("/projects/#{project.code}/milestones", user) get api("/projects/#{project.path}/milestones", user)
response.status.should == 200 response.status.should == 200
json_response.should be_an Array json_response.should be_an Array
json_response.first['title'].should == milestone.title json_response.first['title'].should == milestone.title
@ -20,7 +20,7 @@ describe Gitlab::API do
describe "GET /projects/:id/milestones/:milestone_id" do describe "GET /projects/:id/milestones/:milestone_id" do
it "should return a project milestone by id" do it "should return a project milestone by id" do
get api("/projects/#{project.code}/milestones/#{milestone.id}", user) get api("/projects/#{project.path}/milestones/#{milestone.id}", user)
response.status.should == 200 response.status.should == 200
json_response['title'].should == milestone.title json_response['title'].should == milestone.title
end end
@ -28,7 +28,7 @@ describe Gitlab::API do
describe "POST /projects/:id/milestones" do describe "POST /projects/:id/milestones" do
it "should create a new project milestone" do it "should create a new project milestone" do
post api("/projects/#{project.code}/milestones", user), post api("/projects/#{project.path}/milestones", user),
title: 'new milestone' title: 'new milestone'
response.status.should == 201 response.status.should == 201
json_response['title'].should == 'new milestone' json_response['title'].should == 'new milestone'
@ -38,7 +38,7 @@ describe Gitlab::API do
describe "PUT /projects/:id/milestones/:milestone_id" do describe "PUT /projects/:id/milestones/:milestone_id" do
it "should update a project milestone" do it "should update a project milestone" do
put api("/projects/#{project.code}/milestones/#{milestone.id}", user), put api("/projects/#{project.path}/milestones/#{milestone.id}", user),
title: 'updated title' title: 'updated title'
response.status.should == 200 response.status.should == 200
json_response['title'].should == 'updated title' json_response['title'].should == 'updated title'

View file

@ -53,7 +53,6 @@ describe Gitlab::API do
it "should assign attributes to project" do it "should assign attributes to project" do
project = attributes_for(:project, { project = attributes_for(:project, {
path: project.name.parameterize,
description: Faker::Lorem.sentence, description: Faker::Lorem.sentence,
default_branch: 'stable', default_branch: 'stable',
issues_enabled: false, issues_enabled: false,
@ -257,7 +256,7 @@ describe Gitlab::API do
describe "POST /projects/:id/snippets" do describe "POST /projects/:id/snippets" do
it "should create a new project snippet" do it "should create a new project snippet" do
post api("/projects/#{project.path}/snippets", user), post api("/projects/#{project.path}/snippets", user),
title: 'api test', file_name: 'sample.rb', path: 'test' title: 'api test', file_name: 'sample.rb', code: 'test'
response.status.should == 201 response.status.should == 201
json_response['title'].should == 'api test' json_response['title'].should == 'api test'
end end
@ -266,10 +265,10 @@ describe Gitlab::API do
describe "PUT /projects/:id/snippets/:shippet_id" do describe "PUT /projects/:id/snippets/:shippet_id" do
it "should update an existing project snippet" do it "should update an existing project snippet" do
put api("/projects/#{project.path}/snippets/#{snippet.id}", user), put api("/projects/#{project.path}/snippets/#{snippet.id}", user),
path: 'updated path' code: 'updated code'
response.status.should == 200 response.status.should == 200
json_response['title'].should == 'example' json_response['title'].should == 'example'
snippet.reload.content.should == 'updated path' snippet.reload.content.should == 'updated code'
end end
end end