"""Tests for the POST /users/orchadmin/dataloader endpoint.""" import json from typing import Any import pytest import requests from tests.integration import config @pytest.mark.parametrize( 'profile_fixture, user_ids, expected_status, expected_response', [ pytest.param( 'oa_profile_grass_headers', [ '100002', '100003', ], 200, { 'users': [ { 'user_id': '100002', 'first_name': 'cypress', 'last_name': 'qa', 'active': True, }, { 'user_id': '100003', 'first_name': 'cypress', 'last_name': 'qa 1', 'active': True, }, ] }, id='success', ), pytest.param( 'oa_profile_grass_headers', ['100002', '9999999'], 200, { 'users': [ { 'user_id': '100002', 'first_name': 'cypress', 'last_name': 'qa', 'active': True, }, None, ] }, id='partial success with null users', ), pytest.param( None, [ '100002', '100003', ], 403, {'code': 'authorization_error', 'message': 'access denied'}, id='forbidden error', ), pytest.param( 'oa_profile_grass_headers', [ 100002, 100003, ], 400, { 'code': 'validation_error', 'message': { 'user_ids': {'0': ['Not a valid string.'], '1': ['Not a valid string.']} }, }, id='invalid user_ids as int', ), ], ) def test_get_orchadmin_users( profile_fixture: str, user_ids: list[str], expected_status: int, expected_response: list[dict[str, Any]], request: Any, ): """POST /users/orchadmin/dataloader returns users or access denied.""" full_headers = { 'Content-Type': 'application/json', 'Orchard-Requestor-Service': 'ows-grass', } # Add profile headers if provided in the parameters. profile = request.getfixturevalue(profile_fixture) if profile_fixture else None if profile: full_headers.update(profile) url = f'{config.QA_BASE_URL}/users/orchadmin/dataloader' payload = {'user_ids': user_ids} response = requests.post(url, headers=full_headers, data=json.dumps(payload)) assert response.status_code == expected_status assert response.json() == expected_response