Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2019-10-06 09:06:13 +00:00
parent b83314141e
commit 7c21abab2a
4 changed files with 55 additions and 33 deletions

View File

@ -202,15 +202,30 @@ so we need to set some guidelines for their use going forward:
order is required, otherwise `let` will suffice. Remember that `let` is lazy and won't order is required, otherwise `let` will suffice. Remember that `let` is lazy and won't
be evaluated until it is referenced. be evaluated until it is referenced.
### `let_it_be` variables ### Common test setup
In some cases there is no need to recreate the same object for tests In some cases, there is no need to recreate the same object for tests
again for each example. For example, a project is needed to test issues again for each example. For example, a project and a guest of that project
on the same project, one project will do for the entire file. This can is needed to test issues on the same project, one project and user will do for the entire file.
be achieved by using This can be achieved by using
[`let_it_be`](https://test-prof.evilmartians.io/#/let_it_be) variables [`let_it_be`](https://test-prof.evilmartians.io/#/let_it_be) variables and the
[`before_all`](https://test-prof.evilmartians.io/#/before_all) hook
from the [`test-prof` gem](https://rubygems.org/gems/test-prof). from the [`test-prof` gem](https://rubygems.org/gems/test-prof).
```
let_it_be(:project) { create(:project) }
let_it_be(:user) { create(:user) }
before_all do
project.add_guest(user)
end
```
This will result in only one `Project`, `User`, and `ProjectMember` created for this context.
`let_it_be` and `before_all` are also available within nested contexts. Cleanup after the context
is handled automatically using a transaction rollback.
Note that if you modify an object defined inside a `let_it_be` block, Note that if you modify an object defined inside a `let_it_be` block,
then you will need to reload the object as needed, or specify the `reload` then you will need to reload the object as needed, or specify the `reload`
option to reload for every example. option to reload for every example.

View File

@ -3,7 +3,7 @@ require 'spec_helper'
describe GroupPolicy do describe GroupPolicy do
include_context 'GroupPolicy context' include_context 'GroupPolicy context'
context 'with no user' do context 'public group with no user' do
let(:group) { create(:group, :public) } let(:group) { create(:group, :public) }
let(:current_user) { nil } let(:current_user) { nil }
@ -33,7 +33,6 @@ describe GroupPolicy do
context 'with foreign user and public project' do context 'with foreign user and public project' do
let(:project) { create(:project, :public) } let(:project) { create(:project, :public) }
let(:user) { create(:user) }
let(:current_user) { create(:user) } let(:current_user) { create(:user) }
before do before do
@ -105,8 +104,8 @@ describe GroupPolicy do
let(:current_user) { maintainer } let(:current_user) { maintainer }
context 'with subgroup_creation level set to maintainer' do context 'with subgroup_creation level set to maintainer' do
let(:group) do before_all do
create(:group, :private, subgroup_creation_level: ::Gitlab::Access::MAINTAINER_SUBGROUP_ACCESS) group.update(subgroup_creation_level: ::Gitlab::Access::MAINTAINER_SUBGROUP_ACCESS)
end end
it 'allows every maintainer permission plus creating subgroups' do it 'allows every maintainer permission plus creating subgroups' do
@ -164,11 +163,11 @@ describe GroupPolicy do
end end
describe 'private nested group use the highest access level from the group and inherited permissions' do describe 'private nested group use the highest access level from the group and inherited permissions' do
let(:nested_group) do let_it_be(:nested_group) do
create(:group, :private, :owner_subgroup_creation_only, parent: group) create(:group, :private, :owner_subgroup_creation_only, parent: group)
end end
before do before_all do
nested_group.add_guest(guest) nested_group.add_guest(guest)
nested_group.add_guest(reporter) nested_group.add_guest(reporter)
nested_group.add_guest(developer) nested_group.add_guest(developer)
@ -268,6 +267,10 @@ describe GroupPolicy do
context 'when the group share_with_group_lock is enabled' do context 'when the group share_with_group_lock is enabled' do
let(:group) { create(:group, share_with_group_lock: true, parent: parent) } let(:group) { create(:group, share_with_group_lock: true, parent: parent) }
before do
group.add_owner(owner)
end
context 'when the parent group share_with_group_lock is enabled' do context 'when the parent group share_with_group_lock is enabled' do
context 'when the group has a grandparent' do context 'when the group has a grandparent' do
let(:parent) { create(:group, share_with_group_lock: true, parent: grandparent) } let(:parent) { create(:group, share_with_group_lock: true, parent: grandparent) }
@ -353,7 +356,9 @@ describe GroupPolicy do
context "create_projects" do context "create_projects" do
context 'when group has no project creation level set' do context 'when group has no project creation level set' do
let(:group) { create(:group, project_creation_level: nil) } before_all do
group.update(project_creation_level: nil)
end
context 'reporter' do context 'reporter' do
let(:current_user) { reporter } let(:current_user) { reporter }
@ -381,7 +386,9 @@ describe GroupPolicy do
end end
context 'when group has project creation level set to no one' do context 'when group has project creation level set to no one' do
let(:group) { create(:group, project_creation_level: ::Gitlab::Access::NO_ONE_PROJECT_ACCESS) } before_all do
group.update(project_creation_level: ::Gitlab::Access::NO_ONE_PROJECT_ACCESS)
end
context 'reporter' do context 'reporter' do
let(:current_user) { reporter } let(:current_user) { reporter }
@ -409,7 +416,9 @@ describe GroupPolicy do
end end
context 'when group has project creation level set to maintainer only' do context 'when group has project creation level set to maintainer only' do
let(:group) { create(:group, project_creation_level: ::Gitlab::Access::MAINTAINER_PROJECT_ACCESS) } before_all do
group.update(project_creation_level: ::Gitlab::Access::MAINTAINER_PROJECT_ACCESS)
end
context 'reporter' do context 'reporter' do
let(:current_user) { reporter } let(:current_user) { reporter }
@ -437,7 +446,9 @@ describe GroupPolicy do
end end
context 'when group has project creation level set to developers + maintainer' do context 'when group has project creation level set to developers + maintainer' do
let(:group) { create(:group, project_creation_level: ::Gitlab::Access::DEVELOPER_MAINTAINER_PROJECT_ACCESS) } before_all do
group.update(project_creation_level: ::Gitlab::Access::DEVELOPER_MAINTAINER_PROJECT_ACCESS)
end
context 'reporter' do context 'reporter' do
let(:current_user) { reporter } let(:current_user) { reporter }
@ -467,10 +478,8 @@ describe GroupPolicy do
context "create_subgroup" do context "create_subgroup" do
context 'when group has subgroup creation level set to owner' do context 'when group has subgroup creation level set to owner' do
let(:group) do before_all do
create( group.update(subgroup_creation_level: ::Gitlab::Access::OWNER_SUBGROUP_ACCESS)
:group,
subgroup_creation_level: ::Gitlab::Access::OWNER_SUBGROUP_ACCESS)
end end
context 'reporter' do context 'reporter' do
@ -499,10 +508,8 @@ describe GroupPolicy do
end end
context 'when group has subgroup creation level set to maintainer' do context 'when group has subgroup creation level set to maintainer' do
let(:group) do before_all do
create( group.update(subgroup_creation_level: ::Gitlab::Access::MAINTAINER_SUBGROUP_ACCESS)
:group,
subgroup_creation_level: ::Gitlab::Access::MAINTAINER_SUBGROUP_ACCESS)
end end
context 'reporter' do context 'reporter' do

View File

@ -10,7 +10,7 @@ require 'rspec/rails'
require 'shoulda/matchers' require 'shoulda/matchers'
require 'rspec/retry' require 'rspec/retry'
require 'rspec-parameterized' require 'rspec-parameterized'
require "test_prof/recipes/rspec/let_it_be" require 'test_prof/recipes/rspec/let_it_be'
rspec_profiling_is_configured = rspec_profiling_is_configured =
ENV['RSPEC_PROFILING_POSTGRES_URL'].present? || ENV['RSPEC_PROFILING_POSTGRES_URL'].present? ||

View File

@ -1,13 +1,13 @@
# frozen_string_literal: true # frozen_string_literal: true
RSpec.shared_context 'GroupPolicy context' do RSpec.shared_context 'GroupPolicy context' do
let(:guest) { create(:user) } let_it_be(:guest) { create(:user) }
let(:reporter) { create(:user) } let_it_be(:reporter) { create(:user) }
let(:developer) { create(:user) } let_it_be(:developer) { create(:user) }
let(:maintainer) { create(:user) } let_it_be(:maintainer) { create(:user) }
let(:owner) { create(:user) } let_it_be(:owner) { create(:user) }
let(:admin) { create(:admin) } let_it_be(:admin) { create(:admin) }
let(:group) { create(:group, :private, :owner_subgroup_creation_only) } let_it_be(:group, refind: true) { create(:group, :private, :owner_subgroup_creation_only) }
let(:guest_permissions) do let(:guest_permissions) do
%i[ %i[
@ -37,7 +37,7 @@ RSpec.shared_context 'GroupPolicy context' do
].compact ].compact
end end
before do before_all do
group.add_guest(guest) group.add_guest(guest)
group.add_reporter(reporter) group.add_reporter(reporter)
group.add_developer(developer) group.add_developer(developer)