You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
3.0 KiB
Python
74 lines
3.0 KiB
Python
# Copyright (C) 2021-2022 Intel Corporation
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
from http import HTTPStatus
|
|
import pytest
|
|
from rest_api.utils.config import post_method
|
|
|
|
@pytest.mark.usefixtures('changedb')
|
|
class TestCreateInvitations:
|
|
def _test_post_invitation_201(self, user, data, invitee, **kwargs):
|
|
response = post_method(user, 'invitations', data, **kwargs)
|
|
|
|
assert response.status_code == HTTPStatus.CREATED
|
|
assert data['role'] == response.json()['role']
|
|
assert invitee['id'] == response.json()['user']['id']
|
|
assert kwargs['org_id'] == response.json()['organization']
|
|
|
|
def _test_post_invitation_403(self, user, data, **kwargs):
|
|
response = post_method(user, 'invitations', data, **kwargs)
|
|
assert response.status_code == HTTPStatus.FORBIDDEN
|
|
|
|
@staticmethod
|
|
def get_non_member_users(memberships, users):
|
|
organization_users = set(m['user']['id'] for m in memberships if m['user'] is not None)
|
|
non_member_users = [u for u in users if u['id'] not in organization_users]
|
|
|
|
return non_member_users
|
|
|
|
@staticmethod
|
|
def get_member(role, memberships, org_id):
|
|
member = [m['user'] for m in memberships if m['role'] == role and
|
|
m['organization'] == org_id and m['user'] is not None][0]
|
|
|
|
return member
|
|
|
|
@pytest.mark.parametrize('org_id', [2])
|
|
@pytest.mark.parametrize('org_role', ['worker', 'supervisor', 'maintainer', 'owner'])
|
|
def test_create_invitation(self, organizations, memberships, users,
|
|
org_id, org_role):
|
|
member = self.get_member(org_role, memberships, org_id)
|
|
non_member_users = self.get_non_member_users(memberships, users)
|
|
|
|
if org_role in ['worker', 'supervisor']:
|
|
for invitee_role in ['worker', 'supervisor', 'maintainer', 'owner']:
|
|
self._test_post_invitation_403(member['username'], {
|
|
'role': invitee_role,
|
|
'email': non_member_users[0]['email']
|
|
}, org_id=org_id)
|
|
else:
|
|
for idx, invitee_role in enumerate(['worker', 'supervisor']):
|
|
self._test_post_invitation_201(member['username'], {
|
|
'role': invitee_role,
|
|
'email': non_member_users[idx]['email']
|
|
}, non_member_users[idx], org_id=org_id)
|
|
|
|
# only the owner can invite a maintainer
|
|
if org_role == 'owner':
|
|
self._test_post_invitation_201(member['username'], {
|
|
'role': 'maintainer',
|
|
'email': non_member_users[2]['email']
|
|
}, non_member_users[2], org_id=org_id)
|
|
else:
|
|
self._test_post_invitation_403(member['username'], {
|
|
'role': 'maintainer',
|
|
'email': non_member_users[3]['email']
|
|
}, org_id=org_id)
|
|
|
|
# nobody can invite an owner
|
|
self._test_post_invitation_403(member['username'], {
|
|
'role': 'owner',
|
|
'email': non_member_users[4]['email']
|
|
}, org_id=org_id)
|