Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
7c21abab
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7c21abab
编写于
10月 06, 2019
作者:
G
GitLab Bot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add latest changes from gitlab-org/gitlab@master
上级
b8331414
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
56 addition
and
34 deletion
+56
-34
doc/development/testing_guide/best_practices.md
doc/development/testing_guide/best_practices.md
+22
-7
spec/policies/group_policy_spec.rb
spec/policies/group_policy_spec.rb
+25
-18
spec/spec_helper.rb
spec/spec_helper.rb
+1
-1
spec/support/shared_contexts/policies/group_policy_shared_context.rb
...t/shared_contexts/policies/group_policy_shared_context.rb
+8
-8
未找到文件。
doc/development/testing_guide/best_practices.md
浏览文件 @
7c21abab
...
...
@@ -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
be evaluated until it is referenced.
### `let_it_be` variables
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
on the same project, one project will do for the entire file. This can
be achieved by using
[
`let_it_be`
](
https://test-prof.evilmartians.io/#/let_it_be
)
variables
### Common test setup
In some cases, there is no need to recreate the same object for tests
again for each example. For example, a project and a guest of that project
is needed to test issues on the same project, one project and user will do for the entire file.
This can be achieved by using
[
`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
)
.
```
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,
then you will need to reload the object as needed, or specify the
`reload`
option to reload for every example.
...
...
spec/policies/group_policy_spec.rb
浏览文件 @
7c21abab
...
...
@@ -3,7 +3,7 @@ require 'spec_helper'
describe
GroupPolicy
do
include_context
'GroupPolicy context'
context
'with no user'
do
context
'
public group
with no user'
do
let
(
:group
)
{
create
(
:group
,
:public
)
}
let
(
:current_user
)
{
nil
}
...
...
@@ -33,7 +33,6 @@ describe GroupPolicy do
context
'with foreign user and public project'
do
let
(
:project
)
{
create
(
:project
,
:public
)
}
let
(
:user
)
{
create
(
:user
)
}
let
(
:current_user
)
{
create
(
:user
)
}
before
do
...
...
@@ -105,8 +104,8 @@ describe GroupPolicy do
let
(
:current_user
)
{
maintainer
}
context
'with subgroup_creation level set to maintainer'
do
let
(
:group
)
do
create
(
:group
,
:private
,
subgroup_creation_level:
::
Gitlab
::
Access
::
MAINTAINER_SUBGROUP_ACCESS
)
before_all
do
group
.
update
(
subgroup_creation_level:
::
Gitlab
::
Access
::
MAINTAINER_SUBGROUP_ACCESS
)
end
it
'allows every maintainer permission plus creating subgroups'
do
...
...
@@ -164,11 +163,11 @@ describe GroupPolicy do
end
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
)
end
before
do
before
_all
do
nested_group
.
add_guest
(
guest
)
nested_group
.
add_guest
(
reporter
)
nested_group
.
add_guest
(
developer
)
...
...
@@ -268,6 +267,10 @@ describe GroupPolicy do
context
'when the group share_with_group_lock is enabled'
do
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 group has a grandparent'
do
let
(
:parent
)
{
create
(
:group
,
share_with_group_lock:
true
,
parent:
grandparent
)
}
...
...
@@ -353,7 +356,9 @@ describe GroupPolicy do
context
"create_projects"
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
let
(
:current_user
)
{
reporter
}
...
...
@@ -381,7 +386,9 @@ describe GroupPolicy do
end
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
let
(
:current_user
)
{
reporter
}
...
...
@@ -409,7 +416,9 @@ describe GroupPolicy do
end
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
let
(
:current_user
)
{
reporter
}
...
...
@@ -437,7 +446,9 @@ describe GroupPolicy do
end
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
let
(
:current_user
)
{
reporter
}
...
...
@@ -467,10 +478,8 @@ describe GroupPolicy do
context
"create_subgroup"
do
context
'when group has subgroup creation level set to owner'
do
let
(
:group
)
do
create
(
:group
,
subgroup_creation_level:
::
Gitlab
::
Access
::
OWNER_SUBGROUP_ACCESS
)
before_all
do
group
.
update
(
subgroup_creation_level:
::
Gitlab
::
Access
::
OWNER_SUBGROUP_ACCESS
)
end
context
'reporter'
do
...
...
@@ -499,10 +508,8 @@ describe GroupPolicy do
end
context
'when group has subgroup creation level set to maintainer'
do
let
(
:group
)
do
create
(
:group
,
subgroup_creation_level:
::
Gitlab
::
Access
::
MAINTAINER_SUBGROUP_ACCESS
)
before_all
do
group
.
update
(
subgroup_creation_level:
::
Gitlab
::
Access
::
MAINTAINER_SUBGROUP_ACCESS
)
end
context
'reporter'
do
...
...
spec/spec_helper.rb
浏览文件 @
7c21abab
...
...
@@ -10,7 +10,7 @@ require 'rspec/rails'
require
'shoulda/matchers'
require
'rspec/retry'
require
'rspec-parameterized'
require
"test_prof/recipes/rspec/let_it_be"
require
'test_prof/recipes/rspec/let_it_be'
rspec_profiling_is_configured
=
ENV
[
'RSPEC_PROFILING_POSTGRES_URL'
].
present?
||
...
...
spec/support/shared_contexts/policies/group_policy_shared_context.rb
浏览文件 @
7c21abab
# frozen_string_literal: true
RSpec
.
shared_context
'GroupPolicy context'
do
let
(
:guest
)
{
create
(
:user
)
}
let
(
:reporter
)
{
create
(
:user
)
}
let
(
:developer
)
{
create
(
:user
)
}
let
(
:maintainer
)
{
create
(
:user
)
}
let
(
:owner
)
{
create
(
:user
)
}
let
(
:admin
)
{
create
(
:admin
)
}
let
(
:group
)
{
create
(
:group
,
:private
,
:owner_subgroup_creation_only
)
}
let
_it_be
(
:guest
)
{
create
(
:user
)
}
let
_it_be
(
:reporter
)
{
create
(
:user
)
}
let
_it_be
(
:developer
)
{
create
(
:user
)
}
let
_it_be
(
:maintainer
)
{
create
(
:user
)
}
let
_it_be
(
:owner
)
{
create
(
:user
)
}
let
_it_be
(
:admin
)
{
create
(
:admin
)
}
let
_it_be
(
:group
,
refind:
true
)
{
create
(
:group
,
:private
,
:owner_subgroup_creation_only
)
}
let
(
:guest_permissions
)
do
%i[
...
...
@@ -37,7 +37,7 @@ RSpec.shared_context 'GroupPolicy context' do
].
compact
end
before
do
before
_all
do
group
.
add_guest
(
guest
)
group
.
add_reporter
(
reporter
)
group
.
add_developer
(
developer
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录