"""Functional tests for delete a marketing highlight projections. Test endpoint: DELETE /marketing//projection/ """ import json from product_digital_marketing.connectors import mysql from product_digital_marketing.constants import header from product_digital_marketing.constants import services from product_digital_marketing.models.highlight_projection import \ MarketingHighlightProjection from tests.unit.factories import highlight_projection_factory from tests.unit.test_utils import db PRODUCT_ID = 42 TERRITORY_ID = 123 @db.test_schema def test_delete_projection_success(client, request_engine, grass_headers): """Check that delete projection works.""" request_engine[services.OWS_PRODUCT].add_spec( 'HEAD', '/vendor/1234/product/{}'.format(PRODUCT_ID)) highlight_projection_obj = \ highlight_projection_factory.HighlightProjectionFactory( product_id=PRODUCT_ID, territory_id=TERRITORY_ID, spotify_projection=1, apple_projection=9000, downloads_projection=9001, highlight='frosted tips', priority='A' ) db.seed_models([highlight_projection_obj]) response = client.delete( '/marketing/{}/projection/{}'.format( PRODUCT_ID, highlight_projection_obj.pk), headers=grass_headers) assert response.status_code == 200 with mysql.db_session() as session: assert session.query(MarketingHighlightProjection).get( highlight_projection_obj.pk) is None @db.test_schema def test_delete_projection_missed(client, request_engine, grass_headers): """Check that delete projection with wrong projection id.""" request_engine[services.OWS_PRODUCT].add_spec( 'HEAD', '/vendor/1234/product/{}'.format(PRODUCT_ID)) response = client.delete( '/marketing/{}/projection/{}'.format(PRODUCT_ID, 100500), headers=grass_headers) assert response.status_code == 404 def test_delete_projection_ownership_fails( client, grass_headers, request_engine): """Check that endpoint is not accessible for wrong user.""" request_engine[services.OWS_PRODUCT].add_spec( 'HEAD', '/vendor/1234/product/{}'.format(PRODUCT_ID), status=403) response = client.delete( '/marketing/{}/projection/{}'.format(PRODUCT_ID, 100500), headers=grass_headers) assert response.status_code == 403 data = json.loads(response.data.decode()) assert data['message'] == 'Product is not owned by account' def test_delete_projection_invalid_headers(client, grass_headers): """Check that endpoint is not with wrong GRASS headers.""" del grass_headers[header.GRASS_ACCOUNT_ID] response = client.delete( '/marketing/{}/projection/{}'.format(PRODUCT_ID, 100500), headers=grass_headers) assert response.status_code == 400 data = json.loads(response.data.decode()) assert data['message'] == 'Incomplete Grass Headers'