"""Get product subgenres functional test.""" from collections import namedtuple import json import pytest from project_manager.constant import header_const from tests.common_assert import assert_header from tests.utils import logger ExpectedResponse = namedtuple( 'ExpectedResponse', ['genre_id', 'expected_message']) @pytest.fixture(params=[ ExpectedResponse(genre_id=2, expected_message=[{ 'id': 996, 'composer': True, 'name': 'Electro House' }, { 'id': 355, 'composer': False, 'name': 'Trance' }]), ExpectedResponse(genre_id=12345, expected_message=[])]) def expected_response(request): """Expected response.""" return request.param def test_get_product_subgenres( product_subgenres_db_fixture, expected_response, client, header, mocker): """Test getting product subgenres for a given genre id. Asserts GET /product/genres/{genre_id}/subgenres returns a list of product subgenre options. """ logger.patch(mocker) request_url = '/product/genres/{}/subgenres'.format( expected_response.genre_id) server_response = client.get(request_url, headers=header) assert server_response.status_code == 200 assert_header(header, server_response.headers) response_message = json.loads(server_response.data.decode()) assert response_message == expected_response.expected_message logger.assert_logger_calls( status=server_response.status_code, verb='GET', path=request_url, resources=dict( account_type=header[header_const.GRASS_ACCOUNT_TYPE], account_id=str(header[header_const.GRASS_ACCOUNT_ID])))