Allow offsck to add members to the office group #126
|
@ -2,27 +2,35 @@ import ldap3
|
|||
import pytest
|
||||
|
||||
from ceod.model import Group
|
||||
|
||||
from tests.conftest_ceod_api import expect_successful_txn
|
||||
|
||||
def test_api_group_not_found(client):
|
||||
status, data = client.get('/api/groups/no_such_group')
|
||||
assert status == 404
|
||||
|
||||
|
||||
@pytest.fixture(scope='module')
|
||||
def create_group_resp(client):
|
||||
def create_group(client, cn: str, description: str):
|
||||
status, data = client.post('/api/groups', json={
|
||||
'cn': 'test_group1',
|
||||
'description': 'Test Group One',
|
||||
'cn': cn,
|
||||
'description': description,
|
||||
})
|
||||
assert status == 200
|
||||
assert data[-1]['status'] == 'completed'
|
||||
yield status, data
|
||||
status, data = client.delete('/api/groups/test_group1')
|
||||
return status, data
|
||||
|
||||
|
||||
def delete_group(client, cn: str):
|
||||
status, data = client.delete(f'/api/groups/{cn}')
|
||||
assert status == 200
|
||||
assert data[-1]['status'] == 'completed'
|
||||
|
||||
|
||||
@pytest.fixture(scope='module')
|
||||
def create_group_resp(client):
|
||||
yield create_group(client, 'test_group1', 'Test Group One')
|
||||
delete_group(client, 'test_group1')
|
||||
|
||||
|
||||
@pytest.fixture(scope='module')
|
||||
def create_group_result(create_group_resp):
|
||||
# convenience method
|
||||
|
@ -126,12 +134,7 @@ def create_random_names():
|
|||
def create_searchable_groups(client, create_random_names):
|
||||
random_names = create_random_names
|
||||
for name in random_names:
|
||||
status, data = client.post('/api/groups', json={
|
||||
'cn': name,
|
||||
'description': 'Groups with distinct names for testing searching',
|
||||
})
|
||||
assert status == 200
|
||||
assert data[-1]['status'] == 'completed'
|
||||
create_group(name, 'Groups with distinct names for testing searching')
|
||||
yield random_names
|
||||
|
||||
|
||||
|
@ -210,3 +213,27 @@ def test_api_group_auxiliary(cfg, client, ldap_user, g_admin_ctx):
|
|||
for group in groups:
|
||||
if group.cn != 'syscom':
|
||||
group.remove_from_ldap()
|
||||
|
||||
|
||||
@pytest.mark.parametrize('desc,expect_success', [
|
||||
('in_syscom', True),
|
||||
('is_offsck', True),
|
||||
(None, False),
|
||||
])
|
||||
def test_api_add_or_remove_member_from_office(desc, expect_success, cfg, client, ldap_and_krb_user, new_user, g_admin_ctx):
|
||||
uid = ldap_and_krb_user.uid
|
||||
if desc == 'in_syscom':
|
||||
uid = 'ctdalek'
|
||||
elif desc == 'is_offsck':
|
||||
with g_admin_ctx():
|
||||
ldap_and_krb_user.set_positions(['offsck'])
|
||||
|
||||
def handle_resp(status_and_data):
|
||||
if expect_success:
|
||||
expect_successful_txn(status_and_data)
|
||||
else:
|
||||
status = status_and_data[0]
|
||||
assert status == 403
|
||||
|
||||
handle_resp(client.post(f'/api/groups/office/members/{new_user.uid}', principal=uid))
|
||||
handle_resp(client.delete(f'/api/groups/office/members/{new_user.uid}', principal=uid))
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import json
|
||||
import socket
|
||||
from typing import Any, Dict, List, Tuple
|
||||
|
||||
import flask
|
||||
from flask.testing import FlaskClient
|
||||
|
@ -76,3 +77,9 @@ class CeodTestClient:
|
|||
|
||||
def put(self, path, principal=None, need_auth=True, delegate=True, **kwargs):
|
||||
return self.request('PUT', path, principal, need_auth, delegate, **kwargs)
|
||||
|
||||
|
||||
def expect_successful_txn(status_and_data: Tuple[int, List[Dict[str, Any]]]) -> None:
|
||||
status, data = status_and_data
|
||||
assert status == 200
|
||||
assert data[-1]['status'] == 'completed'
|
||||
|
|
Loading…
Reference in New Issue