d9bb4230cc
Added visibility_level icons to project view (rather than just text). Added public projects to search results. Added ability to restrict visibility levels standard users can set.
142 lines
4.4 KiB
Ruby
142 lines
4.4 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Projects::CreateContext do
|
|
before(:each) { ActiveRecord::Base.observers.enable(:user_observer) }
|
|
after(:each) { ActiveRecord::Base.observers.disable(:user_observer) }
|
|
|
|
describe :create_by_user do
|
|
before do
|
|
@user = create :user
|
|
@admin = create :user, admin: true
|
|
@opts = {
|
|
name: "GitLab",
|
|
namespace: @user.namespace
|
|
}
|
|
end
|
|
|
|
context 'user namespace' do
|
|
before do
|
|
@project = create_project(@user, @opts)
|
|
end
|
|
|
|
it { @project.should be_valid }
|
|
it { @project.owner.should == @user }
|
|
it { @project.namespace.should == @user.namespace }
|
|
end
|
|
|
|
context 'group namespace' do
|
|
before do
|
|
@group = create :group
|
|
@group.add_owner(@user)
|
|
|
|
@opts.merge!(namespace_id: @group.id)
|
|
@project = create_project(@user, @opts)
|
|
end
|
|
|
|
it { @project.should be_valid }
|
|
it { @project.owner.should == @group }
|
|
it { @project.namespace.should == @group }
|
|
end
|
|
|
|
context 'respect configured visibility setting' do
|
|
before(:each) do
|
|
@settings = double("settings")
|
|
@settings.stub(:issues) { true }
|
|
@settings.stub(:merge_requests) { true }
|
|
@settings.stub(:wiki) { true }
|
|
@settings.stub(:wall) { true }
|
|
@settings.stub(:snippets) { true }
|
|
stub_const("Settings", Class.new)
|
|
@restrictions = double("restrictions")
|
|
@restrictions.stub(:restricted_visibility_levels) { [] }
|
|
Settings.stub_chain(:gitlab).and_return(@restrictions)
|
|
Settings.stub_chain(:gitlab, :default_projects_features).and_return(@settings)
|
|
end
|
|
|
|
context 'should be public when setting is public' do
|
|
before do
|
|
@settings.stub(:visibility_level) { Gitlab::VisibilityLevel::PUBLIC }
|
|
@project = create_project(@user, @opts)
|
|
end
|
|
|
|
it { @project.public?.should be_true }
|
|
end
|
|
|
|
context 'should be private when setting is private' do
|
|
before do
|
|
@settings.stub(:visibility_level) { Gitlab::VisibilityLevel::PRIVATE }
|
|
@project = create_project(@user, @opts)
|
|
end
|
|
|
|
it { @project.private?.should be_true }
|
|
end
|
|
|
|
context 'should be internal when setting is internal' do
|
|
before do
|
|
@settings.stub(:visibility_level) { Gitlab::VisibilityLevel::INTERNAL }
|
|
@project = create_project(@user, @opts)
|
|
end
|
|
|
|
it { @project.internal?.should be_true }
|
|
end
|
|
end
|
|
|
|
context 'respect configured visibility restrictions setting' do
|
|
before(:each) do
|
|
@settings = double("settings")
|
|
@settings.stub(:issues) { true }
|
|
@settings.stub(:merge_requests) { true }
|
|
@settings.stub(:wiki) { true }
|
|
@settings.stub(:wall) { true }
|
|
@settings.stub(:snippets) { true }
|
|
@settings.stub(:visibility_level) { Gitlab::VisibilityLevel::PRIVATE }
|
|
stub_const("Settings", Class.new)
|
|
@restrictions = double("restrictions")
|
|
@restrictions.stub(:restricted_visibility_levels) { [ Gitlab::VisibilityLevel::PUBLIC ] }
|
|
Settings.stub_chain(:gitlab).and_return(@restrictions)
|
|
Settings.stub_chain(:gitlab, :default_projects_features).and_return(@settings)
|
|
end
|
|
|
|
context 'should be private when option is public' do
|
|
before do
|
|
@opts.merge!(visibility_level: Gitlab::VisibilityLevel::PUBLIC)
|
|
@project = create_project(@user, @opts)
|
|
end
|
|
|
|
it { @project.private?.should be_true }
|
|
end
|
|
|
|
context 'should be public when option is public for admin' do
|
|
before do
|
|
@opts.merge!(visibility_level: Gitlab::VisibilityLevel::PUBLIC)
|
|
@project = create_project(@admin, @opts)
|
|
end
|
|
|
|
it { @project.public?.should be_true }
|
|
end
|
|
|
|
context 'should be private when option is private' do
|
|
before do
|
|
@opts.merge!(visibility_level: Gitlab::VisibilityLevel::PRIVATE)
|
|
@project = create_project(@user, @opts)
|
|
end
|
|
|
|
it { @project.private?.should be_true }
|
|
end
|
|
|
|
context 'should be internal when option is internal' do
|
|
before do
|
|
@opts.merge!(visibility_level: Gitlab::VisibilityLevel::INTERNAL)
|
|
@project = create_project(@user, @opts)
|
|
end
|
|
|
|
it { @project.internal?.should be_true }
|
|
end
|
|
end
|
|
end
|
|
|
|
def create_project(user, opts)
|
|
Projects::CreateContext.new(user, opts).execute
|
|
end
|
|
end
|
|
|