Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
疯人忠
Cvat
提交
05e6143a
C
Cvat
项目概览
疯人忠
/
Cvat
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Cvat
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
05e6143a
编写于
7月 07, 2022
作者:
K
Kirill Sizov
提交者:
GitHub
7月 07, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
REST API tests: project backup and patch labels (#104)
上级
b986b314
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
215 addition
and
1 deletion
+215
-1
tests/rest_api/fixtures/data.py
tests/rest_api/fixtures/data.py
+8
-0
tests/rest_api/test_projects.py
tests/rest_api/test_projects.py
+207
-1
未找到文件。
tests/rest_api/fixtures/data.py
浏览文件 @
05e6143a
...
...
@@ -95,6 +95,14 @@ def jobs_by_org(tasks, jobs):
data
[
''
]
=
data
.
pop
(
None
,
[])
return
data
@
pytest
.
fixture
(
scope
=
'session'
)
def
projects_by_org
(
projects
):
data
=
{}
for
project
in
projects
:
data
.
setdefault
(
project
[
'organization'
],
[]).
append
(
project
)
data
[
''
]
=
data
.
pop
(
None
,
[])
return
data
@
pytest
.
fixture
(
scope
=
'session'
)
def
tasks_by_org
(
tasks
):
data
=
{}
...
...
tests/rest_api/test_projects.py
浏览文件 @
05e6143a
...
...
@@ -6,9 +6,14 @@ import tempfile
from
http
import
HTTPStatus
from
itertools
import
groupby
,
product
from
time
import
sleep
import
pytest
from
copy
import
deepcopy
from
deepdiff
import
DeepDiff
from
.utils.config
import
get_method
,
post_files_method
,
post_method
from
.utils.config
import
(
get_method
,
patch_method
,
post_files_method
,
post_method
)
@
pytest
.
mark
.
usefixtures
(
'dontchangedb'
)
...
...
@@ -113,6 +118,109 @@ class TestGetProjects:
self
.
_test_response_200
(
user_in_project
[
'username'
],
project_id
,
org_id
=
user_in_project
[
'org'
])
class
TestGetProjectBackup
:
def
_test_can_get_project_backup
(
self
,
username
,
pid
,
**
kwargs
):
for
_
in
range
(
30
):
response
=
get_method
(
username
,
f
"projects/
{
pid
}
/backup"
,
**
kwargs
)
response
.
raise_for_status
()
if
response
.
status_code
==
HTTPStatus
.
CREATED
:
break
sleep
(
1
)
response
=
get_method
(
username
,
f
"projects/
{
pid
}
/backup"
,
action
=
"download"
,
**
kwargs
)
assert
response
.
status_code
==
HTTPStatus
.
OK
def
_test_cannot_get_project_backup
(
self
,
username
,
pid
,
**
kwargs
):
response
=
get_method
(
username
,
f
"projects/
{
pid
}
/backup"
,
**
kwargs
)
assert
response
.
status_code
==
HTTPStatus
.
FORBIDDEN
def
test_admin_can_get_project_backup
(
self
,
projects
):
project
=
list
(
projects
)[
0
]
self
.
_test_can_get_project_backup
(
'admin1'
,
project
[
'id'
])
# User that not in [project:owner, project:assignee] cannot get project backup.
def
test_user_cannot_get_project_backup
(
self
,
find_users
,
projects
,
is_project_staff
):
users
=
find_users
(
exclude_privilege
=
'admin'
)
user
,
project
=
next
(
(
user
,
project
)
for
user
,
project
in
product
(
users
,
projects
)
if
not
is_project_staff
(
user
[
'id'
],
project
[
'id'
])
)
self
.
_test_cannot_get_project_backup
(
user
[
'username'
],
project
[
'id'
])
# Org worker that not in [project:owner, project:assignee] cannot get project backup.
def
test_org_worker_cannot_get_project_backup
(
self
,
find_users
,
projects
,
is_project_staff
,
is_org_member
):
users
=
find_users
(
role
=
'worker'
,
exclude_privilege
=
'admin'
)
user
,
project
=
next
(
(
user
,
project
)
for
user
,
project
in
product
(
users
,
projects
)
if
not
is_project_staff
(
user
[
'id'
],
project
[
'id'
])
and
is_org_member
(
user
[
'id'
],
project
[
'organization'
])
)
self
.
_test_cannot_get_project_backup
(
user
[
'username'
],
project
[
'id'
],
org_id
=
project
[
'organization'
])
# Org worker that in [project:owner, project:assignee] can get project backup.
def
test_org_worker_can_get_project_backup
(
self
,
find_users
,
projects
,
is_project_staff
,
is_org_member
):
users
=
find_users
(
role
=
'worker'
,
exclude_privilege
=
'admin'
)
user
,
project
=
next
(
(
user
,
project
)
for
user
,
project
in
product
(
users
,
projects
)
if
is_project_staff
(
user
[
'id'
],
project
[
'id'
])
and
is_org_member
(
user
[
'id'
],
project
[
'organization'
])
)
self
.
_test_can_get_project_backup
(
user
[
'username'
],
project
[
'id'
],
org_id
=
project
[
'organization'
])
# Org supervisor that in [project:owner, project:assignee] can get project backup.
def
test_org_supervisor_can_get_project_backup
(
self
,
find_users
,
projects
,
is_project_staff
,
is_org_member
):
users
=
find_users
(
role
=
'supervisor'
,
exclude_privilege
=
'admin'
)
user
,
project
=
next
(
(
user
,
project
)
for
user
,
project
in
product
(
users
,
projects
)
if
is_project_staff
(
user
[
'id'
],
project
[
'id'
])
and
is_org_member
(
user
[
'id'
],
project
[
'organization'
])
)
self
.
_test_can_get_project_backup
(
user
[
'username'
],
project
[
'id'
],
org_id
=
project
[
'organization'
])
# Org supervisor that not in [project:owner, project:assignee] cannot get project backup.
def
test_org_supervisor_cannot_get_project_backup
(
self
,
find_users
,
projects
,
is_project_staff
,
is_org_member
):
users
=
find_users
(
role
=
'supervisor'
,
exclude_privilege
=
'admin'
)
user
,
project
=
next
(
(
user
,
project
)
for
user
,
project
in
product
(
users
,
projects
)
if
not
is_project_staff
(
user
[
'id'
],
project
[
'id'
])
and
is_org_member
(
user
[
'id'
],
project
[
'organization'
])
)
self
.
_test_cannot_get_project_backup
(
user
[
'username'
],
project
[
'id'
],
org_id
=
project
[
'organization'
])
# Org maintainer that not in [project:owner, project:assignee] can get project backup.
def
test_org_maintainer_can_get_project_backup
(
self
,
find_users
,
projects
,
is_project_staff
,
is_org_member
):
users
=
find_users
(
role
=
'maintainer'
,
exclude_privilege
=
'admin'
)
user
,
project
=
next
(
(
user
,
project
)
for
user
,
project
in
product
(
users
,
projects
)
if
not
is_project_staff
(
user
[
'id'
],
project
[
'id'
])
and
is_org_member
(
user
[
'id'
],
project
[
'organization'
])
)
self
.
_test_can_get_project_backup
(
user
[
'username'
],
project
[
'id'
],
org_id
=
project
[
'organization'
])
# Org owner that not in [project:owner, project:assignee] can get project backup.
def
test_org_owner_can_get_project_backup
(
self
,
find_users
,
projects
,
is_project_staff
,
is_org_member
):
users
=
find_users
(
role
=
'owner'
,
exclude_privilege
=
'admin'
)
user
,
project
=
next
(
(
user
,
project
)
for
user
,
project
in
product
(
users
,
projects
)
if
not
is_project_staff
(
user
[
'id'
],
project
[
'id'
])
and
is_org_member
(
user
[
'id'
],
project
[
'organization'
])
)
self
.
_test_can_get_project_backup
(
user
[
'username'
],
project
[
'id'
],
org_id
=
project
[
'organization'
])
@
pytest
.
mark
.
usefixtures
(
'changedb'
)
class
TestPostProjects
:
def
_test_create_project_201
(
self
,
user
,
spec
,
**
kwargs
):
...
...
@@ -243,3 +351,101 @@ class TestImportExportDatasetProject:
}
self
.
_test_import_project
(
username
,
project_id
,
'CVAT 1.1'
,
import_data
)
@
pytest
.
mark
.
usefixtures
(
'changedb'
)
class
TestPatchProjectLabel
:
def
test_admin_can_delete_label
(
self
,
projects
):
project
=
deepcopy
(
list
(
projects
)[
0
])
labels
=
project
[
'labels'
][
0
]
labels
.
update
({
'deleted'
:
True
})
response
=
patch_method
(
'admin1'
,
f
'/projects/
{
project
[
"id"
]
}
'
,
{
'labels'
:
[
labels
]})
assert
response
.
status_code
==
HTTPStatus
.
OK
assert
len
(
response
.
json
()[
'labels'
])
==
len
(
project
[
'labels'
])
-
1
def
test_admin_can_rename_label
(
self
,
projects
):
project
=
deepcopy
(
list
(
projects
)[
0
])
labels
=
project
[
'labels'
][
0
]
labels
.
update
({
'name'
:
'new name'
})
response
=
patch_method
(
'admin1'
,
f
'/projects/
{
project
[
"id"
]
}
'
,
{
'labels'
:
[
labels
]})
assert
response
.
status_code
==
HTTPStatus
.
OK
assert
DeepDiff
(
response
.
json
()[
'labels'
],
project
[
'labels'
],
ignore_order
=
True
)
==
{}
def
test_admin_can_add_label
(
self
,
projects
):
project
=
list
(
projects
)[
0
]
labels
=
{
'name'
:
'new name'
}
response
=
patch_method
(
'admin1'
,
f
'/projects/
{
project
[
"id"
]
}
'
,
{
'labels'
:
[
labels
]})
assert
response
.
status_code
==
HTTPStatus
.
OK
assert
len
(
response
.
json
()[
'labels'
])
==
len
(
project
[
'labels'
])
+
1
# Org maintainer can add label even he is not in [project:owner, project:assignee]
def
test_org_maintainer_can_add_label
(
self
,
find_users
,
projects
,
is_project_staff
,
is_org_member
):
users
=
find_users
(
role
=
'maintainer'
,
exclude_privilege
=
'admin'
)
user
,
project
=
next
(
(
user
,
project
)
for
user
,
project
in
product
(
users
,
projects
)
if
not
is_project_staff
(
user
[
'id'
],
project
[
'id'
])
and
is_org_member
(
user
[
'id'
],
project
[
'organization'
])
)
labels
=
{
'name'
:
'new name'
}
response
=
patch_method
(
user
[
'username'
],
f
'/projects/
{
project
[
"id"
]
}
'
,
{
'labels'
:
[
labels
]},
org_id
=
project
[
'organization'
])
assert
response
.
status_code
==
HTTPStatus
.
OK
assert
len
(
response
.
json
()[
'labels'
])
==
len
(
project
[
'labels'
])
+
1
# Org supervisor cannot add label
def
test_org_supervisor_can_add_label
(
self
,
find_users
,
projects
,
is_project_staff
,
is_org_member
):
users
=
find_users
(
role
=
'supervisor'
,
exclude_privilege
=
'admin'
)
user
,
project
=
next
(
(
user
,
project
)
for
user
,
project
in
product
(
users
,
projects
)
if
not
is_project_staff
(
user
[
'id'
],
project
[
'id'
])
and
is_org_member
(
user
[
'id'
],
project
[
'organization'
])
)
labels
=
{
'name'
:
'new name'
}
response
=
patch_method
(
user
[
'username'
],
f
'/projects/
{
project
[
"id"
]
}
'
,
{
'labels'
:
[
labels
]},
org_id
=
project
[
'organization'
])
assert
response
.
status_code
==
HTTPStatus
.
FORBIDDEN
# Org worker cannot add label
def
test_org_worker_cannot_add_label
(
self
,
find_users
,
projects
,
is_project_staff
,
is_org_member
):
users
=
find_users
(
role
=
'worker'
,
exclude_privilege
=
'admin'
)
user
,
project
=
next
(
(
user
,
project
)
for
user
,
project
in
product
(
users
,
projects
)
if
not
is_project_staff
(
user
[
'id'
],
project
[
'id'
])
and
is_org_member
(
user
[
'id'
],
project
[
'organization'
])
)
labels
=
{
'name'
:
'new name'
}
response
=
patch_method
(
user
[
'username'
],
f
'/projects/
{
project
[
"id"
]
}
'
,
{
'labels'
:
[
labels
]},
org_id
=
project
[
'organization'
])
assert
response
.
status_code
==
HTTPStatus
.
FORBIDDEN
# Org worker that in [project:owner, project:assignee] can add label
def
test_org_worker_can_add_label
(
self
,
find_users
,
projects
,
is_project_staff
,
is_org_member
):
users
=
find_users
(
role
=
'worker'
,
exclude_privilege
=
'admin'
)
user
,
project
=
next
(
(
user
,
project
)
for
user
,
project
in
product
(
users
,
projects
)
if
is_project_staff
(
user
[
'id'
],
project
[
'id'
])
and
is_org_member
(
user
[
'id'
],
project
[
'organization'
])
)
labels
=
{
'name'
:
'new name'
}
response
=
patch_method
(
user
[
'username'
],
f
'/projects/
{
project
[
"id"
]
}
'
,
{
'labels'
:
[
labels
]},
org_id
=
project
[
'organization'
])
assert
response
.
status_code
==
HTTPStatus
.
OK
assert
len
(
response
.
json
()[
'labels'
])
==
len
(
project
[
'labels'
])
+
1
# Org owner can add label even he is not in [project:owner, project:assignee]
def
test_org_owner_can_add_label
(
self
,
find_users
,
projects
,
is_project_staff
,
is_org_member
):
users
=
find_users
(
role
=
'owner'
,
exclude_privilege
=
'admin'
)
user
,
project
=
next
(
(
user
,
project
)
for
user
,
project
in
product
(
users
,
projects
)
if
not
is_project_staff
(
user
[
'id'
],
project
[
'id'
])
and
is_org_member
(
user
[
'id'
],
project
[
'organization'
])
)
labels
=
{
'name'
:
'new name'
}
response
=
patch_method
(
user
[
'username'
],
f
'/projects/
{
project
[
"id"
]
}
'
,
{
'labels'
:
[
labels
]},
org_id
=
project
[
'organization'
])
assert
response
.
status_code
==
HTTPStatus
.
OK
assert
len
(
response
.
json
()[
'labels'
])
==
len
(
project
[
'labels'
])
+
1
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录