"""Mocks for SubgenreQuery.""" from copy import deepcopy from oto.response import Response from backend.models.subgenre_query import SubgenreQuery from tests.testutils.functions import wrap_api_results def get_genre_subgenres(mocker, subgenres): """ Mock SubgenreClient.get_genre_subgenres. Args: subgenres (Response or list of raw subgenre dicts) """ # If they passed in an actual Response, use it directly if isinstance(subgenres, Response): response = subgenres else: # Otherwise wrap each raw dict through your factory prep and envelope response = Response(wrap_api_results( [_prepare_subgenre(subgenre) for subgenre in subgenres])) return mocker.patch.object( SubgenreQuery, 'get_genre_subgenres', return_value=response ) def _prepare_subgenre(subgenre): """Make subgenre dictionary. Args: subgenre (dict or Subgenre): subgenre object or dict Returns: dict: dict representation of subgenre """ if isinstance(subgenre, dict): return deepcopy(subgenre) else: return subgenre.to_dict()