Fix specs
This commit is contained in:
parent
b959ae553b
commit
8b830b8c3b
|
@ -969,8 +969,9 @@ class Project < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def visibility_level_allowed?(level = self.visibility_level)
|
def visibility_level_allowed?(level = self.visibility_level)
|
||||||
allowed_by_forks = if forked?
|
allowed_by_forks = if forked? && forked_project_link.forked_from_project_id.present?
|
||||||
Gitlab::VisibilityLevel.allowed_fork_levels(forked_from_project.visibility_level).include?(level)
|
from_project = eager_load_forked_from_project
|
||||||
|
Gitlab::VisibilityLevel.allowed_fork_levels(from_project.visibility_level).include?(level)
|
||||||
else
|
else
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
@ -980,6 +981,11 @@ class Project < ActiveRecord::Base
|
||||||
allowed_by_forks && allowed_by_groups
|
allowed_by_forks && allowed_by_groups
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#Necessary to retrieve many-to-many associations on new forks before validating visibility level
|
||||||
|
def eager_load_forked_from_project
|
||||||
|
Project.find(forked_project_link.forked_from_project_id)
|
||||||
|
end
|
||||||
|
|
||||||
def runners_token
|
def runners_token
|
||||||
ensure_runners_token!
|
ensure_runners_token!
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,7 +10,10 @@ module Projects
|
||||||
@project = Project.new(params)
|
@project = Project.new(params)
|
||||||
|
|
||||||
# Make sure that the user is allowed to use the specified visibility level
|
# Make sure that the user is allowed to use the specified visibility level
|
||||||
return @project unless visibility_level_allowed?
|
unless visibility_level_allowed?
|
||||||
|
deny_visibility_level(@project)
|
||||||
|
return @project
|
||||||
|
end
|
||||||
|
|
||||||
# Set project name from path
|
# Set project name from path
|
||||||
if @project.name.present? && @project.path.present?
|
if @project.name.present? && @project.path.present?
|
||||||
|
|
|
@ -38,7 +38,7 @@ module SharedGroup
|
||||||
def is_member_of(username, groupname, role)
|
def is_member_of(username, groupname, role)
|
||||||
@project_count ||= 0
|
@project_count ||= 0
|
||||||
user = User.find_by(name: username) || create(:user, name: username)
|
user = User.find_by(name: username) || create(:user, name: username)
|
||||||
group = Group.find_by(name: groupname) || create(:group, name: groupname)
|
group = Group.find_by(name: groupname) || create(:group, name: groupname, visibility_level: Gitlab::VisibilityLevel::PUBLIC)
|
||||||
group.add_user(user, role)
|
group.add_user(user, role)
|
||||||
project ||= create(:project, namespace: group, path: "project#{@project_count}")
|
project ||= create(:project, namespace: group, path: "project#{@project_count}")
|
||||||
create(:closed_issue_event, project: project)
|
create(:closed_issue_event, project: project)
|
||||||
|
@ -47,6 +47,6 @@ module SharedGroup
|
||||||
end
|
end
|
||||||
|
|
||||||
def owned_group
|
def owned_group
|
||||||
@owned_group ||= Group.find_by(name: "Owned")
|
@owned_group ||= Group.find_by(name: "Owned", visibility_level: Gitlab::VisibilityLevel::PUBLIC)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,7 +15,7 @@ describe NamespacesController do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when the namespace belongs to a group" do
|
context "when the namespace belongs to a group" do
|
||||||
let!(:group) { create(:group) }
|
let!(:group) { create(:group, visibility_level: Gitlab::VisibilityLevel::PUBLIC) }
|
||||||
let!(:project) { create(:project, namespace: group) }
|
let!(:project) { create(:project, namespace: group) }
|
||||||
|
|
||||||
context "when the group has public projects" do
|
context "when the group has public projects" do
|
||||||
|
|
|
@ -30,7 +30,7 @@ describe UploadsController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when not signed in" do
|
context "when not signed in" do
|
||||||
it "responds with status 200" do
|
it "responds with status 200" do
|
||||||
get :show, model: "user", mounted_as: "avatar", id: user.id, filename: "image.png"
|
get :show, model: "user", mounted_as: "avatar", id: user.id, filename: "image.png"
|
||||||
|
@ -126,11 +126,12 @@ describe UploadsController do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when viewing a group avatar" do
|
context "when viewing a group avatar" do
|
||||||
let!(:group) { create(:group, avatar: fixture_file_upload(Rails.root + "spec/fixtures/dk.png", "image/png")) }
|
let!(:group) { create(:group, avatar: fixture_file_upload(Rails.root + "spec/fixtures/dk.png", "image/png")) }
|
||||||
let!(:project) { create(:project, namespace: group) }
|
let!(:project) { create(:project, namespace: group) }
|
||||||
|
|
||||||
context "when the group has public projects" do
|
context "when the group has public projects" do
|
||||||
before do
|
before do
|
||||||
|
group.update_attribute(:visibility_level, Gitlab::VisibilityLevel::PUBLIC)
|
||||||
project.update_attribute(:visibility_level, Project::PUBLIC)
|
project.update_attribute(:visibility_level, Project::PUBLIC)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -12,25 +12,25 @@ feature 'Project', feature: true do
|
||||||
it 'parses Markdown' do
|
it 'parses Markdown' do
|
||||||
project.update_attribute(:description, 'This is **my** project')
|
project.update_attribute(:description, 'This is **my** project')
|
||||||
visit path
|
visit path
|
||||||
expect(page).to have_css('.project-home-desc > p > strong')
|
expect(page).to have_css('.cover-title > p > strong')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'passes through html-pipeline' do
|
it 'passes through html-pipeline' do
|
||||||
project.update_attribute(:description, 'This project is the :poop:')
|
project.update_attribute(:description, 'This project is the :poop:')
|
||||||
visit path
|
visit path
|
||||||
expect(page).to have_css('.project-home-desc > p > img')
|
expect(page).to have_css('.cover-title > p > img')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sanitizes unwanted tags' do
|
it 'sanitizes unwanted tags' do
|
||||||
project.update_attribute(:description, "```\ncode\n```")
|
project.update_attribute(:description, "```\ncode\n```")
|
||||||
visit path
|
visit path
|
||||||
expect(page).not_to have_css('.project-home-desc code')
|
expect(page).not_to have_css('.cover-title code')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'permits `rel` attribute on links' do
|
it 'permits `rel` attribute on links' do
|
||||||
project.update_attribute(:description, 'https://google.com/')
|
project.update_attribute(:description, 'https://google.com/')
|
||||||
visit path
|
visit path
|
||||||
expect(page).to have_css('.project-home-desc a[rel]')
|
expect(page).to have_css('.cover-title a[rel]')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ describe 'Group access', feature: true do
|
||||||
include AccessMatchers
|
include AccessMatchers
|
||||||
|
|
||||||
def group
|
def group
|
||||||
@group ||= create(:group)
|
@group ||= create(:group, visibility_level: Gitlab::VisibilityLevel::PUBLIC)
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_project(access_level)
|
def create_project(access_level)
|
||||||
|
|
|
@ -3,7 +3,7 @@ require 'spec_helper'
|
||||||
describe ProjectsFinder do
|
describe ProjectsFinder do
|
||||||
describe '#execute' do
|
describe '#execute' do
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
let(:group) { create(:group) }
|
let(:group) { create(:group, visibility_level: Gitlab::VisibilityLevel::PUBLIC) }
|
||||||
|
|
||||||
let!(:private_project) do
|
let!(:private_project) do
|
||||||
create(:project, :private, name: 'A', path: 'A')
|
create(:project, :private, name: 'A', path: 'A')
|
||||||
|
|
|
@ -3,7 +3,7 @@ require 'spec_helper'
|
||||||
describe SnippetsFinder do
|
describe SnippetsFinder do
|
||||||
let(:user) { create :user }
|
let(:user) { create :user }
|
||||||
let(:user1) { create :user }
|
let(:user1) { create :user }
|
||||||
let(:group) { create :group }
|
let(:group) { create :group, visibility_level: Gitlab::VisibilityLevel::PUBLIC }
|
||||||
|
|
||||||
let(:project1) { create(:empty_project, :public, group: group) }
|
let(:project1) { create(:empty_project, :public, group: group) }
|
||||||
let(:project2) { create(:empty_project, :private, group: group) }
|
let(:project2) { create(:empty_project, :private, group: group) }
|
||||||
|
|
|
@ -442,7 +442,7 @@ describe Project, models: true do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '.trending' do
|
describe '.trending' do
|
||||||
let(:group) { create(:group) }
|
let(:group) { create(:group, :public) }
|
||||||
let(:project1) { create(:empty_project, :public, group: group) }
|
let(:project1) { create(:empty_project, :public, group: group) }
|
||||||
let(:project2) { create(:empty_project, :public, group: group) }
|
let(:project2) { create(:empty_project, :public, group: group) }
|
||||||
|
|
||||||
|
|
|
@ -275,6 +275,7 @@ describe API::API, api: true do
|
||||||
|
|
||||||
it 'should not allow a non-admin to use a restricted visibility level' do
|
it 'should not allow a non-admin to use a restricted visibility level' do
|
||||||
post api('/projects', user), @project
|
post api('/projects', user), @project
|
||||||
|
|
||||||
expect(response.status).to eq(400)
|
expect(response.status).to eq(400)
|
||||||
expect(json_response['message']['visibility_level'].first).to(
|
expect(json_response['message']['visibility_level'].first).to(
|
||||||
match('restricted by your GitLab administrator')
|
match('restricted by your GitLab administrator')
|
||||||
|
|
Loading…
Reference in New Issue