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

# Copyright (C) 2021 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)