import pytest from users.utils.dataloader_util import format_for_dataloader @pytest.mark.parametrize( 'items, keys, expected', [ pytest.param( [], [], [], id='Empty still populates', ), pytest.param( [], ['123', '456'], [None, None], id='Empty items populates', ), pytest.param( [{'user_id': '123'}], ['123', '456'], [{'user_id': '123'}, None], id='Empty items populates', ), pytest.param( [{'user_id': 789}], ['123', '456'], [None, None], id='Disregards irrelevant items', ), pytest.param( [{'user_id': '456'}, {'user_id': '123'}], ['123', '456'], [{'user_id': '123'}, {'user_id': '456'}], id='Orders items based on keys', ), pytest.param( [{'user_id': '123'}, {'user_id': '123', 'something': 'else'}], ['123', '456'], [{'user_id': '123', 'something': 'else'}, None], id='When duplicate key is present in list, uses the latter item', ), pytest.param( [{'user_id': '123'}, {'user_id': '456'}], ['123', '456'], [{'user_id': '123'}, {'user_id': '456'}], id='Returns items matching keys', ), ], ) def test_format_for_dataloader( items, keys, expected, ) -> None: """Test format_for_dataloader.""" result = format_for_dataloader(items, keys, 'user_id') assert result == expected def test_format_for_dataloader_exceptions(): """Test format for dataloader raises exception when lookup key does not exist""" with pytest.raises(KeyError): format_for_dataloader( [{'user_id': '123'}], ['123'], 'lookup_key_does_not_exist', )