"""Lambda test module.""" import pytest import config from gql import Client, gql from gql.transport.requests import RequestsHTTPTransport from queries import product @pytest.fixture def client(): """Create graphQL test client.""" transport = RequestsHTTPTransport( url=config.GRAPHQL_URL, use_json=True, headers={ 'Orchard-User-Id': config.OA_USER_ID }, verify=True ) client = Client( retries=3, transport=transport, fetch_schema_from_transport=False, ) return client def test_product_with_metadata(client): """Test query for a product with metadata.""" query = gql( """ { product(productId:"2749347", cached: false) { productId format } } """ ) expected = {'productId': 2749347, 'format': 'Full Length'} result = client.execute(query) product_metadata = result['product'] assert product_metadata == expected def test_product_no_metadata(client): """Test query for a product with no metadata.""" query = gql( """ { product(productId:"0", cached: false) { productId format } } """ ) expected = {'productId': 0, 'format': None} result = client.execute(query) product_metadata = result['product'] assert product_metadata == expected @pytest.fixture def expected_data_for_product_id_1536373(): """Test data for graphql response.""" return { 'format': 'Full Length', 'genreId': 4, 'productId': 1536373, 'productName': 'Crash Course (Live)', 'releaseDate': '2014-12-08', 'subgenreId': 55, 'tracks': [{'durationMinutes': 2, 'durationSeconds': 11, 'explicit': 'N', 'isrc': 'GBBPJ8000005', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'C.I.D.', 'trackNumber': 1, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 57, 'explicit': 'N', 'isrc': 'GBBPJ8000006', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': "I Couldn't Be You", 'trackNumber': 2, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 21, 'explicit': 'N', 'isrc': 'GBBPJ8000007', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'I Live in a Car', 'trackNumber': 3, 'volumeNumber': 1}, {'durationMinutes': 2, 'durationSeconds': 23, 'explicit': 'N', 'isrc': 'GBBPJ8000008', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Tomorrows Girls', 'trackNumber': 4, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 22, 'explicit': 'N', 'isrc': 'GBBPJ8000009', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Left for Dead', 'trackNumber': 5, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 50, 'explicit': 'N', 'isrc': 'GBBPJ8000010', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Kicks', 'trackNumber': 6, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 43, 'explicit': 'N', 'isrc': 'GBBPJ8000011', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Rat Race', 'trackNumber': 7, 'volumeNumber': 1}, {'durationMinutes': 2, 'durationSeconds': 38, 'explicit': 'N', 'isrc': 'GBBPJ8000012', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'New York State Police', 'trackNumber': 8, 'volumeNumber': 1}, {'durationMinutes': 3, 'durationSeconds': 20, 'explicit': 'N', 'isrc': 'GBBPJ8000013', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Warhead', 'trackNumber': 9, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 49, 'explicit': 'N', 'isrc': 'GBBPJ8000014', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Public Servant', 'trackNumber': 10, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 5, 'explicit': 'N', 'isrc': 'GBBPJ8000015', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Telephone Numbers', 'trackNumber': 11, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 56, 'explicit': 'N', 'isrc': 'GBBPJ8000016', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Organised Crime', 'trackNumber': 12, 'volumeNumber': 1}, {'durationMinutes': 2, 'durationSeconds': 43, 'explicit': 'N', 'isrc': 'GBBPJ8000017', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Rockers', 'trackNumber': 13, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 27, 'explicit': 'N', 'isrc': 'GBBPJ8000018', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Brand New Age', 'trackNumber': 14, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 35, 'explicit': 'N', 'isrc': 'GBBPJ8000019', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Dirty Girls', 'trackNumber': 15, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 10, 'explicit': 'N', 'isrc': 'GBBPJ8000020', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'The Same Thing', 'trackNumber': 16, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 29, 'explicit': 'N', 'isrc': 'GBBPJ8000021', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Crash Course', 'trackNumber': 17, 'volumeNumber': 1}, {'durationMinutes': 2, 'durationSeconds': 46, 'explicit': 'N', 'isrc': 'GBBPJ8000022', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Teenage', 'trackNumber': 18, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 19, 'explicit': 'N', 'isrc': 'GBBPJ8000023', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Killer', 'trackNumber': 19, 'volumeNumber': 1}, {'durationMinutes': 3, 'durationSeconds': 7, 'explicit': 'N', 'isrc': 'GBBPJ8000024', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Emotional Blackmail', 'trackNumber': 20, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 37, 'explicit': 'N', 'isrc': 'GBBPJ8000025', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'I.O.D.', 'trackNumber': 21, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 51, 'explicit': 'N', 'isrc': 'GBBPJ8000026', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Lady Esquire', 'trackNumber': 22, 'volumeNumber': 1}, {'durationMinutes': 1, 'durationSeconds': 47, 'explicit': 'N', 'isrc': 'GBBPJ8000027', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Blues', 'trackNumber': 23, 'volumeNumber': 1}, {'durationMinutes': 2, 'durationSeconds': 11, 'explicit': 'N', 'isrc': 'GBBPJ8000028', 'metaLanguageCode': 'ENG', 'pInfo': '1980 GEM Records Ltd.', 'primaryArtists': [{'artistName': 'UK Subs', 'artistType': 'performer'}], 'trackName': 'Young Criminals', 'trackNumber': 24, 'volumeNumber': 1}] } def test_query_returns_with_data(client, expected_data_for_product_id_1536373): """Test query for a product with metadata.""" query = gql(product.product_query) result = client.execute( query, variable_values={'productId': '1536373'} ) product_metadata = result['product'] assert product_metadata == expected_data_for_product_id_1536373