Merge branch 'master' into discussions

Conflicts:
	app/assets/stylesheets/main.scss
	app/models/project.rb
	app/views/notes/_common_form.html.haml
	app/views/notes/_per_line_form.html.haml
	lib/gitlab/markdown.rb
	spec/models/note_spec.rb
This commit is contained in:
Riyad Preukschas 2012-12-23 01:03:57 +01:00
commit db2c15369c
276 changed files with 4466 additions and 2603 deletions

View file

@ -59,7 +59,7 @@ describe Event do
end
it { @event.push?.should be_true }
it { @event.allowed?.should be_true }
it { @event.proper?.should be_true }
it { @event.new_branch?.should be_true }
it { @event.tag?.should be_false }
it { @event.branch_name.should == "master" }

View file

@ -42,7 +42,7 @@ describe MergeRequest do
before do
merge_request.stub(:commits) { [merge_request.project.commit] }
create(:note, noteable: merge_request.commits.first)
create(:note, commit_id: merge_request.commits.first.id, noteable_type: 'Commit')
create(:note, noteable: merge_request)
end

View file

@ -80,13 +80,13 @@ describe Note do
let!(:commit) { note.noteable }
it "should be accessible through #noteable" do
note.noteable_id.should == commit.id
note.commit_id.should == commit.id
note.noteable.should be_a(Commit)
note.noteable.should == commit
end
it "should save a valid note" do
note.noteable_id.should == commit.id
note.commit_id.should == commit.id
note.noteable == commit
end
@ -104,7 +104,7 @@ describe Note do
let!(:commit) { note.noteable }
it "should save a valid note" do
note.noteable_id.should == commit.id
note.commit_id.should == commit.id
note.noteable.id.should == commit.id
end

View file

@ -108,7 +108,7 @@ describe Project, "Hooks" do
it { should include(id: @commit.id) }
it { should include(message: @commit.safe_message) }
it { should include(timestamp: @commit.date.xmlschema) }
it { should include(url: "#{Gitlab.config.url}/#{project.code}/commits/#{@commit.id}") }
it { should include(url: "#{Gitlab.config.gitlab.url}/#{project.code}/commit/#{@commit.id}") }
context "with a author" do
subject { @data[:commits].first[:author] }

View file

@ -4,38 +4,109 @@ describe Project do
describe :authorization do
before do
@p1 = create(:project)
@u1 = create(:user)
@u2 = create(:user)
@u3 = create(:user)
@u4 = @p1.chief
@abilities = Six.new
@abilities << Ability
end
describe "read access" do
let(:guest_actions) { Ability.project_guest_rules }
let(:report_actions) { Ability.project_report_rules }
let(:dev_actions) { Ability.project_dev_rules }
let(:master_actions) { Ability.project_master_rules }
let(:admin_actions) { Ability.project_admin_rules }
describe "Non member rules" do
it "should deny for non-project users any actions" do
admin_actions.each do |action|
@abilities.allowed?(@u1, action, @p1).should be_false
end
end
end
describe "Guest Rules" do
before do
@p1.users_projects.create(project: @p1, user: @u2, project_access: UsersProject::GUEST)
end
it "should allow for project user any guest actions" do
guest_actions.each do |action|
@abilities.allowed?(@u2, action, @p1).should be_true
end
end
end
describe "Report Rules" do
before do
@p1.users_projects.create(project: @p1, user: @u2, project_access: UsersProject::REPORTER)
end
it { @abilities.allowed?(@u1, :read_project, @p1).should be_false }
it { @abilities.allowed?(@u2, :read_project, @p1).should be_true }
it "should allow for project user any report actions" do
report_actions.each do |action|
@abilities.allowed?(@u2, action, @p1).should be_true
end
end
end
describe "write access" do
describe "Developer Rules" do
before do
@p1.users_projects.create(project: @p1, user: @u2, project_access: UsersProject::REPORTER)
@p1.users_projects.create(project: @p1, user: @u3, project_access: UsersProject::DEVELOPER)
end
it "should deny for developer master-specific actions" do
[dev_actions - report_actions].each do |action|
@abilities.allowed?(@u2, action, @p1).should be_false
end
end
it "should allow for project user any dev actions" do
dev_actions.each do |action|
@abilities.allowed?(@u3, action, @p1).should be_true
end
end
end
describe "Master Rules" do
before do
@p1.users_projects.create(project: @p1, user: @u2, project_access: UsersProject::DEVELOPER)
@p1.users_projects.create(project: @p1, user: @u3, project_access: UsersProject::MASTER)
end
it { @abilities.allowed?(@u1, :write_project, @p1).should be_false }
it { @abilities.allowed?(@u2, :write_project, @p1).should be_true }
it "should deny for developer master-specific actions" do
[master_actions - dev_actions].each do |action|
@abilities.allowed?(@u2, action, @p1).should be_false
end
end
it "should allow for project user any master actions" do
master_actions.each do |action|
@abilities.allowed?(@u3, action, @p1).should be_true
end
end
end
describe "admin access" do
describe "Admin Rules" do
before do
@p1.users_projects.create(project: @p1, user: @u1, project_access: UsersProject::DEVELOPER)
@p1.users_projects.create(project: @p1, user: @u2, project_access: UsersProject::MASTER)
@p1.users_projects.create(project: @p1, user: @u2, project_access: UsersProject::DEVELOPER)
@p1.users_projects.create(project: @p1, user: @u3, project_access: UsersProject::MASTER)
end
it { @abilities.allowed?(@u1, :admin_project, @p1).should be_false }
it { @abilities.allowed?(@u2, :admin_project, @p1).should be_true }
it "should deny for masters admin-specific actions" do
[admin_actions - master_actions].each do |action|
@abilities.allowed?(@u2, action, @p1).should be_false
end
end
it "should allow for project owner any admin actions" do
admin_actions.each do |action|
@abilities.allowed?(@u4, action, @p1).should be_true
end
end
end
end
end

View file

@ -129,6 +129,13 @@ describe Project do
it { should respond_to(:execute_hooks) }
it { should respond_to(:post_receive_data) }
it { should respond_to(:trigger_post_receive) }
# Namespaced Project Role
it { should respond_to(:transfer) }
it { should respond_to(:name_with_namespace) }
it { should respond_to(:namespace_owner) }
it { should respond_to(:chief) }
it { should respond_to(:path_with_namespace) }
end
describe 'modules' do
@ -136,11 +143,12 @@ describe Project do
it { should include_module(PushObserver) }
it { should include_module(Authority) }
it { should include_module(Team) }
it { should include_module(NamespacedProject) }
end
it "should return valid url to repo" do
project = Project.new(path: "somewhere")
project.url_to_repo.should == Gitlab.config.ssh_path + "somewhere.git"
project.url_to_repo.should == Gitlab.config.gitolite.ssh_path_prefix + "somewhere.git"
end
it "should return path to repo" do
@ -150,19 +158,7 @@ describe Project do
it "returns the full web URL for this repo" do
project = Project.new(path: "somewhere")
project.web_url.should == "#{Gitlab.config.url}/somewhere"
end
describe :valid_repo? do
it "should be valid repo" do
project = create(:project)
project.valid_repo?.should be_true
end
it "should be invalid repo" do
project = Project.new(name: "ok_name", path: "/INVALID_PATH/", path: "NEOK")
project.valid_repo?.should be_false
end
project.web_url.should == "#{Gitlab.config.gitlab.url}/somewhere"
end
describe "last_activity methods" do
@ -188,85 +184,6 @@ describe Project do
end
end
describe "fresh commits" do
let(:project) { create(:project) }
it { project.fresh_commits(3).count.should == 3 }
it { project.fresh_commits.first.id.should == "bcf03b5de6c33f3869ef70d68cf06e679d1d7f9a" }
it { project.fresh_commits.last.id.should == "f403da73f5e62794a0447aca879360494b08f678" }
end
describe "commits_between" do
let(:project) { create(:project) }
subject do
commits = project.commits_between("3a4b4fb4cde7809f033822a171b9feae19d41fff",
"8470d70da67355c9c009e4401746b1d5410af2e3")
commits.map { |c| c.id }
end
it { should have(3).elements }
it { should include("f0f14c8eaba69ebddd766498a9d0b0e79becd633") }
it { should_not include("bcf03b5de6c33f3869ef70d68cf06e679d1d7f9a") }
end
describe "Git methods" do
let(:project) { create(:project) }
describe :repo do
it "should return valid repo" do
project.repo.should be_kind_of(Grit::Repo)
end
it "should return nil" do
lambda { Project.new(path: "invalid").repo }.should raise_error(Grit::NoSuchPathError)
end
it "should return nil" do
lambda { Project.new.repo }.should raise_error(TypeError)
end
end
describe :commit do
it "should return first head commit if without params" do
project.commit.id.should == project.repo.commits.first.id
end
it "should return valid commit" do
project.commit(ValidCommit::ID).should be_valid_commit
end
it "should return nil" do
project.commit("+123_4532530XYZ").should be_nil
end
end
describe :tree do
before do
@commit = project.commit(ValidCommit::ID)
end
it "should raise error w/o arguments" do
lambda { project.tree }.should raise_error
end
it "should return root tree for commit" do
tree = project.tree(@commit)
tree.contents.size.should == ValidCommit::FILES_COUNT
tree.contents.map(&:name).should == ValidCommit::FILES
end
it "should return root tree for commit with correct path" do
tree = project.tree(@commit, ValidCommit::C_FILE_PATH)
tree.contents.map(&:name).should == ValidCommit::C_FILES
end
it "should return root tree for commit with incorrect path" do
project.tree(@commit, "invalid_path").should be_nil
end
end
end
describe :update_merge_requests do
let(:project) { create(:project) }

View file

@ -56,7 +56,7 @@ describe SystemHook do
user = create(:user)
project = create(:project)
with_resque do
project.users << user
project.add_access(user, :admin)
end
WebMock.should have_requested(:post, @system_hook.url).with(body: /user_add_to_team/).once
end
@ -64,7 +64,7 @@ describe SystemHook do
it "project_destroy hook" do
user = create(:user)
project = create(:project)
project.users << user
project.add_access(user, :admin)
with_resque do
project.users_projects.clear
end

View file

@ -41,7 +41,6 @@ describe User do
it { should have_many(:users_projects).dependent(:destroy) }
it { should have_many(:projects) }
it { should have_many(:groups) }
it { should have_many(:my_own_projects).class_name('Project') }
it { should have_many(:keys).dependent(:destroy) }
it { should have_many(:events).class_name('Event').dependent(:destroy) }
it { should have_many(:recent_events).class_name('Event') }
@ -67,6 +66,10 @@ describe User do
it { should ensure_length_of(:bio).is_within(0..255) }
end
describe 'modules' do
it { should include_module(Account) }
end
describe "Respond to" do
it { should respond_to(:is_admin?) }
it { should respond_to(:identifier) }

View file

@ -29,6 +29,7 @@ describe UsersProject do
it { should validate_uniqueness_of(:user_id).scoped_to(:project_id).with_message(/already exists/) }
it { should validate_presence_of(:project) }
it { should ensure_inclusion_of(:project_access).in_array(UsersProject.access_roles.values) }
end
describe "Delegate methods" do