REST API tests: patch tasks, post/patch issues (#4465)
Co-authored-by: Kirill Sizov <kirill.sizov@intel.com>main
parent
d42e37c714
commit
dd60b2d8e0
@ -0,0 +1,221 @@
|
||||
{
|
||||
"count": 5,
|
||||
"next": null,
|
||||
"previous": null,
|
||||
"results": [
|
||||
{
|
||||
"assignee": null,
|
||||
"comments": [
|
||||
{
|
||||
"created_date": "2022-03-16T12:49:29.372000Z",
|
||||
"id": 6,
|
||||
"issue": 5,
|
||||
"message": "Wrong position",
|
||||
"owner": {
|
||||
"first_name": "User",
|
||||
"id": 20,
|
||||
"last_name": "Sixth",
|
||||
"url": "http://localhost:8080/api/users/20",
|
||||
"username": "user6"
|
||||
},
|
||||
"updated_date": "2022-03-16T12:49:29.372000Z"
|
||||
}
|
||||
],
|
||||
"created_date": "2022-03-16T12:49:29.369000Z",
|
||||
"frame": 0,
|
||||
"id": 5,
|
||||
"job": 11,
|
||||
"owner": {
|
||||
"first_name": "User",
|
||||
"id": 20,
|
||||
"last_name": "Sixth",
|
||||
"url": "http://localhost:8080/api/users/20",
|
||||
"username": "user6"
|
||||
},
|
||||
"position": [
|
||||
65.6189987163034,
|
||||
100.96585365853753,
|
||||
142.12734274711147,
|
||||
362.6243902439037
|
||||
],
|
||||
"resolved": false,
|
||||
"updated_date": null
|
||||
},
|
||||
{
|
||||
"assignee": null,
|
||||
"comments": [
|
||||
{
|
||||
"created_date": "2022-03-16T12:40:00.767000Z",
|
||||
"id": 5,
|
||||
"issue": 4,
|
||||
"message": "Issue with empty frame",
|
||||
"owner": {
|
||||
"first_name": "User",
|
||||
"id": 2,
|
||||
"last_name": "First",
|
||||
"url": "http://localhost:8080/api/users/2",
|
||||
"username": "user1"
|
||||
},
|
||||
"updated_date": "2022-03-16T12:40:00.767000Z"
|
||||
}
|
||||
],
|
||||
"created_date": "2022-03-16T12:40:00.764000Z",
|
||||
"frame": 5,
|
||||
"id": 4,
|
||||
"job": 10,
|
||||
"owner": {
|
||||
"first_name": "User",
|
||||
"id": 2,
|
||||
"last_name": "First",
|
||||
"url": "http://localhost:8080/api/users/2",
|
||||
"username": "user1"
|
||||
},
|
||||
"position": [
|
||||
295.36328125,
|
||||
243.6044921875,
|
||||
932.23046875,
|
||||
561.4921875
|
||||
],
|
||||
"resolved": false,
|
||||
"updated_date": null
|
||||
},
|
||||
{
|
||||
"assignee": null,
|
||||
"comments": [
|
||||
{
|
||||
"created_date": "2022-03-16T11:08:18.370000Z",
|
||||
"id": 4,
|
||||
"issue": 3,
|
||||
"message": "Another one issue",
|
||||
"owner": {
|
||||
"first_name": "Business",
|
||||
"id": 11,
|
||||
"last_name": "Second",
|
||||
"url": "http://localhost:8080/api/users/11",
|
||||
"username": "business2"
|
||||
},
|
||||
"updated_date": "2022-03-16T11:08:18.370000Z"
|
||||
}
|
||||
],
|
||||
"created_date": "2022-03-16T11:08:18.367000Z",
|
||||
"frame": 5,
|
||||
"id": 3,
|
||||
"job": 16,
|
||||
"owner": {
|
||||
"first_name": "Business",
|
||||
"id": 11,
|
||||
"last_name": "Second",
|
||||
"url": "http://localhost:8080/api/users/11",
|
||||
"username": "business2"
|
||||
},
|
||||
"position": [
|
||||
108.1845703125,
|
||||
235.0,
|
||||
720.0087890625,
|
||||
703.3505859375
|
||||
],
|
||||
"resolved": false,
|
||||
"updated_date": null
|
||||
},
|
||||
{
|
||||
"assignee": null,
|
||||
"comments": [
|
||||
{
|
||||
"created_date": "2022-03-16T11:07:22.173000Z",
|
||||
"id": 3,
|
||||
"issue": 2,
|
||||
"message": "Something should be here",
|
||||
"owner": {
|
||||
"first_name": "Business",
|
||||
"id": 11,
|
||||
"last_name": "Second",
|
||||
"url": "http://localhost:8080/api/users/11",
|
||||
"username": "business2"
|
||||
},
|
||||
"updated_date": "2022-03-16T11:07:22.173000Z"
|
||||
}
|
||||
],
|
||||
"created_date": "2022-03-16T11:07:22.170000Z",
|
||||
"frame": 0,
|
||||
"id": 2,
|
||||
"job": 9,
|
||||
"owner": {
|
||||
"first_name": "Business",
|
||||
"id": 11,
|
||||
"last_name": "Second",
|
||||
"url": "http://localhost:8080/api/users/11",
|
||||
"username": "business2"
|
||||
},
|
||||
"position": [
|
||||
98.48046875,
|
||||
696.72265625,
|
||||
326.1220703125,
|
||||
841.5859375
|
||||
],
|
||||
"resolved": false,
|
||||
"updated_date": null
|
||||
},
|
||||
{
|
||||
"assignee": null,
|
||||
"comments": [
|
||||
{
|
||||
"created_date": "2022-03-16T11:04:39.447000Z",
|
||||
"id": 1,
|
||||
"issue": 1,
|
||||
"message": "Why are we still here?",
|
||||
"owner": {
|
||||
"first_name": "User",
|
||||
"id": 2,
|
||||
"last_name": "First",
|
||||
"url": "http://localhost:8080/api/users/2",
|
||||
"username": "user1"
|
||||
},
|
||||
"updated_date": "2022-03-16T11:04:39.447000Z"
|
||||
},
|
||||
{
|
||||
"created_date": "2022-03-16T11:04:49.821000Z",
|
||||
"id": 2,
|
||||
"issue": 1,
|
||||
"message": "Just to suffer?",
|
||||
"owner": {
|
||||
"first_name": "User",
|
||||
"id": 2,
|
||||
"last_name": "First",
|
||||
"url": "http://localhost:8080/api/users/2",
|
||||
"username": "user1"
|
||||
},
|
||||
"updated_date": "2022-03-16T11:04:49.821000Z"
|
||||
}
|
||||
],
|
||||
"created_date": "2022-03-16T11:04:39.444000Z",
|
||||
"frame": 0,
|
||||
"id": 1,
|
||||
"job": 7,
|
||||
"owner": {
|
||||
"first_name": "User",
|
||||
"id": 2,
|
||||
"last_name": "First",
|
||||
"url": "http://localhost:8080/api/users/2",
|
||||
"username": "user1"
|
||||
},
|
||||
"position": [
|
||||
244.58581235698148,
|
||||
319.63386727689067,
|
||||
326.9656750572103,
|
||||
192.76887871853796,
|
||||
543.6247139588122,
|
||||
175.4691075514893,
|
||||
835.2494279176244,
|
||||
360.0000000000018,
|
||||
609.5286041189956,
|
||||
586.544622425632,
|
||||
364.0361328125,
|
||||
528.87890625,
|
||||
244.58581235698148,
|
||||
319.63386727689067
|
||||
],
|
||||
"resolved": false,
|
||||
"updated_date": null
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,140 @@
|
||||
# Copyright (C) 2022 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
import pytest
|
||||
from http import HTTPStatus
|
||||
from deepdiff import DeepDiff
|
||||
from copy import deepcopy
|
||||
|
||||
from .utils.config import post_method, patch_method
|
||||
|
||||
class TestPostIssues:
|
||||
def _test_check_response(self, user, data, is_allow, **kwargs):
|
||||
response = post_method(user, 'issues', data, **kwargs)
|
||||
|
||||
if is_allow:
|
||||
assert response.status_code == HTTPStatus.CREATED
|
||||
assert user == response.json()['owner']['username']
|
||||
assert data['message'] == response.json()['comments'][0]['message']
|
||||
assert DeepDiff(data, response.json(),
|
||||
exclude_regex_paths=r"root\['created_date|updated_date|comments|id|owner|message'\]") == {}
|
||||
else:
|
||||
assert response.status_code == HTTPStatus.FORBIDDEN
|
||||
|
||||
@pytest.mark.parametrize('org', [''])
|
||||
@pytest.mark.parametrize('privilege, job_staff, is_allow', [
|
||||
('admin', True, True), ('admin', False, True),
|
||||
('business', True, True), ('business', False, False),
|
||||
('worker', True, True), ('worker', False, False),
|
||||
('user', True, True), ('user', False, False)
|
||||
])
|
||||
def test_user_create_issue(self, org, privilege, job_staff, is_allow,
|
||||
find_job_staff_user, find_users, jobs_by_org):
|
||||
users = find_users(privilege=privilege)
|
||||
jobs = jobs_by_org[org]
|
||||
username, jid = find_job_staff_user(jobs, users, job_staff)
|
||||
job, = filter(lambda job: job['id'] == jid, jobs)
|
||||
|
||||
data = {
|
||||
"assignee": None,
|
||||
"comments": [],
|
||||
"job": jid,
|
||||
"frame": job['start_frame'],
|
||||
"position": [
|
||||
0., 0., 1., 1.,
|
||||
],
|
||||
"resolved": False,
|
||||
"message": "lorem ipsum",
|
||||
}
|
||||
|
||||
self._test_check_response(username, data, is_allow)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('org', [2])
|
||||
@pytest.mark.parametrize('role, job_staff, is_allow', [
|
||||
('maintainer', False, True), ('owner', False, True),
|
||||
('supervisor', False, False), ('worker', False, False),
|
||||
('maintainer', True, True), ('owner', True, True),
|
||||
('supervisor', True, True), ('worker', True, True)
|
||||
])
|
||||
def test_member_create_issue(self, org, role, job_staff, is_allow,
|
||||
find_job_staff_user, find_users, jobs_by_org, jobs):
|
||||
users = find_users(role=role, org=org)
|
||||
username, jid = find_job_staff_user(jobs_by_org[org], users, job_staff)
|
||||
job = jobs[jid]
|
||||
|
||||
data = {
|
||||
"assignee": None,
|
||||
"comments": [],
|
||||
"job": jid,
|
||||
"frame": job['start_frame'],
|
||||
"position": [
|
||||
0., 0., 1., 1.,
|
||||
],
|
||||
"resolved": False,
|
||||
"message": "lorem ipsum",
|
||||
}
|
||||
|
||||
self._test_check_response(username, data, is_allow, org_id=org)
|
||||
|
||||
|
||||
class TestPatchIssues:
|
||||
def _test_check_response(self, user, issue_id, data, is_allow, **kwargs):
|
||||
response = patch_method(user, f'issues/{issue_id}', data,
|
||||
action='update', **kwargs)
|
||||
|
||||
if is_allow:
|
||||
assert response.status_code == HTTPStatus.OK
|
||||
assert DeepDiff(data, response.json(),
|
||||
exclude_regex_paths=r"root\['created_date|updated_date|comments|id|owner'\]") == {}
|
||||
else:
|
||||
assert response.status_code == HTTPStatus.FORBIDDEN
|
||||
|
||||
@pytest.fixture(scope='class')
|
||||
def request_data(self, issues):
|
||||
def get_data(issue_id):
|
||||
data = deepcopy(issues[issue_id])
|
||||
data['resolved'] = not data['resolved']
|
||||
data.pop('comments')
|
||||
data.pop('updated_date')
|
||||
data.pop('id')
|
||||
data.pop('owner')
|
||||
return data
|
||||
return get_data
|
||||
|
||||
@pytest.mark.parametrize('org', [''])
|
||||
@pytest.mark.parametrize('privilege, issue_staff, issue_admin, is_allow', [
|
||||
('admin', True, None, True), ('admin', False, None, True),
|
||||
('business', True, None, True), ('business', False, None, False),
|
||||
('user', True, None, True), ('user', False, None, False),
|
||||
('worker', False, True, True), ('worker', True, False, False),
|
||||
('worker', False, False, False)
|
||||
])
|
||||
def test_user_update_issue(self, org, privilege, issue_staff, issue_admin, is_allow,
|
||||
find_issue_staff_user, find_users, issues_by_org, request_data):
|
||||
users = find_users(privilege=privilege)
|
||||
issues = issues_by_org[org]
|
||||
username, issue_id = find_issue_staff_user(issues, users, issue_staff, issue_admin)
|
||||
|
||||
data = request_data(issue_id)
|
||||
self._test_check_response(username, issue_id, data, is_allow)
|
||||
|
||||
@pytest.mark.parametrize('org', [2])
|
||||
@pytest.mark.parametrize('role, issue_staff, issue_admin, is_allow', [
|
||||
('maintainer', True, None, True), ('maintainer', False, None, True),
|
||||
('supervisor', True, None, True), ('supervisor', False, None, False),
|
||||
('owner', True, None, True), ('owner', False, None, True),
|
||||
('worker', False, True, True), ('worker', True, False, False),
|
||||
('worker', False, False, False)
|
||||
])
|
||||
def test_member_update_issue(self, org, role, issue_staff, issue_admin, is_allow,
|
||||
find_issue_staff_user, find_users, issues_by_org, request_data):
|
||||
users = find_users(role=role, org=org)
|
||||
issues = issues_by_org[org]
|
||||
username, issue_id = find_issue_staff_user(issues, users, issue_staff, issue_admin)
|
||||
|
||||
data = request_data(issue_id)
|
||||
self._test_check_response(username, issue_id, data, is_allow, org_id=org)
|
||||
|
||||
|
||||
Loading…
Reference in New Issue