"""Integration tests.""" import json import requests from tests.integration.consts import api def create_promo_player(headers, product_id=None): """Create a promo player for specified product.""" response = requests.post( api.CREATE_PLAYER_PRODUCT_ID.format(product_id), headers=headers, data=json.dumps({ 'expiration_mode': 'none', 'skin': 'dark' }) ) return response def create_track(headers, promo_player_id, track_id): """Create specified track for specified promo player.""" response = requests.post( api.CREATE_PLAYER_TRACK.format(promo_player_id, track_id), headers=headers ) return response def delete_track(headers, promo_player_id, track_id): """Delete specified track for specified promo player.""" response = requests.delete( api.DELETE_PUT_PLAYER_TRACK.format(promo_player_id, track_id), headers=headers ) return response def test_get_hello(): """Get Hello Endpoint.""" response = requests.get(api.HEALTH_CHECK) assert response.status_code == 200, '\nReason: {}\nURL: {}'.format( response.reason, response.url ) response_body = response.json() assert 'status' in response_body assert 'ok' in response_body['status'] def test_post_player_with_product_id(fixture_product_id, get_headers): """Test create new promo player without product id.""" response = create_promo_player(get_headers, fixture_product_id) assert response.status_code == 200 response_json = response.json() expected_keys = ['promo_player_id', 'product_id', 'vendor_id', 'code', 'active', 'expiration_mode', 'skin'] for key in expected_keys: assert response_json[key] is not None def test_post_player_track(fixture_product_id, fixture_track_id, get_headers): """Test creating new promo player track.""" promo_player = create_promo_player(get_headers, fixture_product_id) promo_player_id = promo_player.json()['promo_player_id'] response = create_track(get_headers, promo_player_id, fixture_track_id) assert response.status_code == 200 response_json = response.json() assert response_json['promo_player_id'] == promo_player_id assert response_json['track_id'] == fixture_track_id # Clean up delete_track(get_headers, promo_player_id, fixture_track_id) def test_put_player_with_product_id(get_headers, fixture_product_id): """Test updating an existing promo player with product_id.""" promo_player = create_promo_player(get_headers, fixture_product_id) promo_player_id = promo_player.json()['promo_player_id'] response = requests.put( api.PUT_PLAYER_PRODUCT_ID.format(fixture_product_id, promo_player_id), headers=get_headers, data=json.dumps({ 'skin': 'light' }) ) assert response.status_code == 200 response_json = response.json() assert response_json['product_id'] == fixture_product_id assert response_json['skin'] == 'light' def test_put_player_track(fixture_product_id, fixture_track_id, get_headers): """Test updating an existing promo player track.""" promo_player = create_promo_player(get_headers, fixture_product_id) promo_player_id = promo_player.json()['promo_player_id'] create_track(get_headers, promo_player_id, fixture_track_id) response = requests.put( api.DELETE_PUT_PLAYER_TRACK.format(promo_player_id, fixture_track_id), headers=get_headers, data=json.dumps({ 'sequence_number': 1 }) ) assert response.status_code == 200 response_json = response.json() assert response_json['promo_player_id'] == promo_player_id assert response_json['track_id'] == fixture_track_id assert response_json['sequence_number'] == 1 # Clean up delete_track(get_headers, promo_player_id, fixture_track_id) def test_get_active_player_by_product_id(get_headers, fixture_product_id): """Test get acitve promo player for a product.""" response = requests.get( api.GET_ACTIVE_PLAYER.format(fixture_product_id), headers=get_headers ) assert response.status_code == 200 response_json = response.json() assert response_json['product_id'] == fixture_product_id assert response_json['active'] is True def test_get_players_by_product_id(get_headers, fixture_product_id): """Test get all promo players associated with product_id.""" response = requests.get( api.GET_PLAYERS_PRODUCT_ID.format(fixture_product_id), headers=get_headers ) assert response.status_code == 200 response_json = response.json() assert len(response_json['items']) > 0 for item in response_json['items']: assert item['product_id'] == fixture_product_id def test_get_players_by_vendor_id(get_headers, fixture_vendor_id): """Test get all promo players associated with vendor_id.""" response = requests.get( api.GET_PLAYERS_VENDOR_ID.format(fixture_vendor_id), headers=get_headers ) assert response.status_code == 200 response_json = response.json() assert len(response_json['items']) > 0 for item in response_json['items']: assert item['vendor_id'] == fixture_vendor_id def test_get_player_by_code(get_headers, fixture_product_id): """Test get promo player by code.""" promo_player = create_promo_player(get_headers, fixture_product_id) promo_player_json = promo_player.json() promo_player_id = promo_player_json['promo_player_id'] promo_player_code = promo_player_json['code'] response = requests.get( api.GET_PLAYER_CODE.format(promo_player_code), headers=get_headers ) assert response.status_code == 200 response_json = response.json() assert response_json['promo_player_id'] == promo_player_id assert response_json['product_id'] == fixture_product_id assert response_json['code'] == promo_player_code def test_delete_track_by_code( get_headers, fixture_product_id, fixture_track_id): """Test deleting a track with promo player code.""" promo_player = create_promo_player(get_headers, fixture_product_id) promo_player_id = promo_player.json()['promo_player_id'] create_track(get_headers, promo_player_id, fixture_track_id) response = delete_track(get_headers, promo_player_id, fixture_track_id) assert response.status_code == 200 response_json = response.json() assert response_json['promo_player_id'] == promo_player_id assert response_json['track_id'] == fixture_track_id def test_delete_players_by_product_id(fixture_product_id, get_headers): """Test delete all promo players associated with product_id. Also cleans up all promo players created for the test product. """ response = requests.delete( api.DELETE_PLAYER_PRODUCT_ID.format(fixture_product_id), headers=get_headers ) assert response.status_code == 200 response_json = response.json() assert len(response_json['items']) > 0 for item in response_json['items']: assert item['product_id'] == fixture_product_id