diff --git a/tests/app/v1/routers/test_groups.py b/tests/app/v1/routers/test_groups.py index c0d969495e8ee7d442fe29d3753ed41da2240eff..e444152d2e450e27bd0df8ad94132cb7775f5bf3 100644 --- a/tests/app/v1/routers/test_groups.py +++ b/tests/app/v1/routers/test_groups.py @@ -38,7 +38,7 @@ def test_get_groups( assert_response(response, expected_status_code) groups = UserGroups.parse_raw(response.content) - for group, ex_group in zip(groups.data, user_groups_module): + for group, ex_group in zip(groups.data, user_groups_module.values()): ex_group = UserGroup.from_orm(ex_group) assert group == ex_group diff --git a/tests/app/v1/routers/uploads/common.py b/tests/app/v1/routers/uploads/common.py index c915b2189293a2bee34e0a7abb9b61f085abeb58..a3432721be44576bc738c3855ff0b581aea8040c 100644 --- a/tests/app/v1/routers/uploads/common.py +++ b/tests/app/v1/routers/uploads/common.py @@ -18,4 +18,4 @@ def assert_upload(response_json, **kwargs): for key, value in kwargs.items(): assert data.get(key, None) == value - return data \ No newline at end of file + return data diff --git a/tests/app/v1/routers/uploads/test_group_uploads.py b/tests/app/v1/routers/uploads/test_group_uploads.py index 74b35b8e14caf8bfd7fd5a2110108f169b9aad28..b1de5eba451bdaad280010c3df5355d1341d1758 100644 --- a/tests/app/v1/routers/uploads/test_group_uploads.py +++ b/tests/app/v1/routers/uploads/test_group_uploads.py @@ -1,7 +1,10 @@ import pytest -from ..common import assert_response, perform_get + +from nomad.processing.data import Upload +from ..common import assert_response, perform_get, perform_post from .common import assert_upload + @pytest.mark.parametrize( 'kwargs', [ @@ -124,3 +127,65 @@ def test_get_group_upload( assert_response(response, expected_status_code) if expected_status_code == 200: assert_upload(response.json()) + + +@pytest.mark.parametrize( + 'user, expected_status_code, group_quantity, new_groups', + [ + pytest.param( + 'test_user', + 200, + 'coauthor_groups', + ['other_owner_group'], + id='coauthor-other-group', + ), + pytest.param( + 'test_user', + 200, + 'coauthor_groups', + ['user_owner_group', 'other_owner_group', 'mixed_group'], + id='coauthor-multiple-groups', + ), + pytest.param( + 'test_user', + 200, + 'reviewer_groups', + ['other_owner_group'], + id='reviewer-other-group', + ), + pytest.param( + 'other_test_user', + 422, + 'reviewer_groups', + ['other_owner_group'], + id='other-user-reviewer-other-group', + ), + ], +) +def test_add_groups_to_upload( + client, + user_groups_module, + proc_infra, + upload_no_group, + test_auth_dict, + user, + expected_status_code, + group_quantity, + new_groups, +): + user_auth, __token = test_auth_dict[user] + upload_id = list(upload_no_group.uploads)[0] + new_group_ids = [user_groups_module[label].group_id for label in new_groups] + + url = f'uploads/{upload_id}/edit' + metadata = {group_quantity: new_group_ids} + edit_request = dict(metadata=metadata) + response = perform_post(client, url, user_auth, json=edit_request) + + assert_response(response, expected_status_code) + if expected_status_code != 200: + return + + upload = Upload.get(upload_id) + upload.block_until_complete() + assert getattr(upload, group_quantity) == new_group_ids diff --git a/tests/conftest.py b/tests/conftest.py index 66975740b499843388816d44b9d941b79ee7bc57..845dcc3b7e1bde12db5b3c515a54d71f966f4934 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -531,10 +531,10 @@ def mixed_group(): def _user_groups(): - user_groups = [] - for group in test_user_groups.values(): + user_groups = {} + for label, group in test_user_groups.items(): user_group = create_user_group(**group) - user_groups.append(user_group) + user_groups[label] = user_group return user_groups @@ -1332,6 +1332,17 @@ def example_data_groups( data.save(with_files=False) +@pytest.fixture(scope='function') +def upload_no_group(mongo_function, test_user): + data = ExampleData(main_author=test_user) + data.create_upload(upload_id='id_no_group') + data.save() + + yield data + + data.delete() + + @pytest.fixture(scope='function') def example_datasets(mongo_function, test_user, other_test_user): dataset_specs = (