import pytest from datetime import date from unittest.mock import patch from db import db from workers.gras_project_worker import GRASProjectWorker from utils.snowflake.models import GRASProjectModel, GRASArtist from workers.prs.prs_projects_worker import PRSProjectsWorker from tests.delphi_tables.utils import Verifier, Requests from tests.delphi_tables.models import ExternalProjectModel from tests import BaseTestCase, mock_for_user from tests.test_utils import FixtureLoader from models import models from tests.delphi_tables.fixtures.delphi_tables_fixture import fixture from migrations.fixtures.delphi_tables.v9.data_migrator import DataMigrator from migrations.fixtures.delphi_tables.views import DelphiViewsV9 from migrations.fixtures.delphi_tables.v9.tables import DelphiTables user1Mock = mock_for_user(1, "dev-marketing-user-1@example.com", "sme-dna|5cf0091d6c91d310fe6fcdc6", is_admin=True) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) class TestExternalProjectsTable(BaseTestCase): def setUp(self): super().setUp() self.verifier = Verifier(self) self.requests = Requests(self) self.restore_tables_and_triggers() def restore_tables_and_triggers(self): FixtureLoader(models=models).import_as_sql(fixture) DelphiViewsV9(db.session).create() delphi_tables = DelphiTables(db.session) delphi_tables.drop() delphi_tables.create() DataMigrator(db.session).execute() db.session.commit() def test_project_created_from_external_source_should_create_entity_in_projects_table(self): project = ExternalProjectModel( prs_id="PRS_012345510", gras_id="GRAS_12345510", name="PRS project title", budget=2000, label=4, start_date=date(2019, 2, 2), end_date=date(2021, 6, 19), artists=["GRAS_562122", "GRAS_142120"], ) self.requests.claim_project(500, project) self.verifier.verify_project(project) self.verifier.verify_project_artists(project.prs_id, project.artists) self.verifier.verify_project_campaigns(project.prs_id, ["facebook_253678", "google_6378939"]) def test_project_created_from_ccp_should_create_entity_in_projects_table(self): project = ExternalProjectModel( gras_id="GRAS_12345515", name="CCP project title", ccp_id="CCP_2456799876543", budget=2000, label=4, start_date=date(2019, 2, 2), end_date=date(2021, 6, 19), artists=["GRAS_562122", "GRAS_142120"], ) self.requests.claim_project(505, project) self.verifier.verify_project(project) self.verifier.verify_project_artists(project.ccp_id, project.artists) self.verifier.verify_project_campaigns(project.ccp_id, ["facebook_253780"]) def test_project_updates_should_update_entity_in_delphi_tables(self): project = ExternalProjectModel( prs_id="PRS_012345512", gras_id="GRAS_12345512", name="updated_project_name", budget=88899.00, label=6, start_date=date(2019, 9, 12), end_date=date(2021, 10, 11), artists=["GRAS_562122", "GRAS_2031"], ) self.requests.update_project(project_id=502, model=project) self.verifier.verify_project(project) self.verifier.verify_project_artists(project.prs_id, project.artists) self.verifier.verify_project_campaigns(project.prs_id, ["facebook_123456789", "facebook_654783978"]) def test_assign_campaign_to_project_should_update_entity_in_delphi_tables(self): self.requests.assign_campaign_to_project(project_id=503, campaign_uuid="20618d97-5190-4589-8fed-9e109e5ac5b5") self.verifier.verify_project_campaigns("PRS_012345513", ["google_123456797"]) def test_assign_campaign_after_unassigning_should_update_entity_in_delphi_tables(self): self.requests.assign_campaign_to_project(project_id=503, campaign_uuid="20618d97-5190-4589-8fed-9e109e5ac5b5") self.requests.unassign_campaign_from_project( project_id=503, campaign_uuid="20618d97-5190-4589-8fed-9e109e5ac5b5" ) self.requests.assign_campaign_to_project(project_id=503, campaign_uuid="20618d97-5190-4589-8fed-9e109e5ac5b5") self.verifier.verify_project_campaigns("PRS_012345513", ["google_123456797"]) def test_approve_campaign_to_project_should_update_entity_in_delphi_tables(self): self.requests.assign_campaign_to_project(project_id=504, campaign_uuid="20618d97-5190-4589-8fed-9e109e5ac5b5") self.verifier.verify_project_campaigns("PRS_012345514", ["google_123456797"]) def test_approve_and_unassign_campaign_to_project_should_update_entity_in_delphi_tables(self): self.requests.assign_campaign_to_project( project_id=504, campaign_uuid="20618d97-5190-4589-8fed-9e109e5ac5b5" ) self.requests.unassign_campaign_from_project( project_id=504, campaign_uuid="20618d97-5190-4589-8fed-9e109e5ac5b5" ) self.verifier.verify_project_campaigns("PRS_012345514", []) def test_reject_campaign_to_project_should_update_entity_in_delphi_tables(self): self.requests.unassign_campaign_from_project( project_id=506, campaign_uuid="20618d97-5190-4589-8fed-9e109e5ac5cc" ) self.verifier.verify_project_campaigns("CCP_91865312", []) def test_add_team_member_to_project_should_update_entity_in_delphi_tables(self): self.requests.add_user_to_project_team(project_id=502, user_id=2) self.verifier.verify_user_project("PRS_012345512", [1, 2, 4, 100]) def test_remove_team_member_from_project_should_update_entity_in_delphi_tables(self): self.requests.remove_user_from_project_team(project_id=502, user_id=100) self.verifier.verify_user_project("PRS_012345512", [1, 4]) def test_update_team_member_in_project_should_not_take_affect_in_delphi_tables(self): self.requests.update_user_in_project_team(project_id=502, user_id=4) self.verifier.verify_user_project("PRS_012345512", [1, 4, 100]) def test_add_and_remove_team_member_in_project_should_not_take_affect_in_delphi_tables(self): self.requests.add_user_to_project_team(project_id=502, user_id=2) self.requests.remove_user_from_project_team(project_id=502, user_id=2) self.verifier.verify_user_project("PRS_012345512", [1, 4, 100]) def test_PRS_import_should_update_delphi_tables(self): project = ExternalProjectModel( prs_id="PRS_012345512", gras_id="GRAS_12345512", name="test_project_3", budget=88899.00, label=6, start_date=date(2019, 9, 12), end_date=date(2020, 10, 11), artists=["GRAS_562122", "GRAS_562126"], ) PRSProjectsWorker().execute() self.verifier.verify_project(project) self.verifier.verify_project_artists(project.prs_id, project.artists) self.verifier.verify_project_campaigns(project.prs_id, ["facebook_123456789", "facebook_654783978"]) def test_GRAS_import_should_update_delphi_tables(self): project = ExternalProjectModel( prs_id="PRS_012345512", gras_id="GRAS_12345512", name="test_project_3", budget=88899.00, label=6, start_date=date(2019, 9, 12), end_date=date(2020, 10, 11), artists=["GRAS_562122", "GRAS_562126", "GRAS_39"], ) sut = GRASProjectWorker() model = GRASProjectModel( id="12345512", title="DJ GRAS feat. 100 id", rep_owner_key="E008", start_date=date.today(), deleted=False ) model.featured_artists = [ GRASArtist(id="30", name="Terry", is_main=False, is_primary=False, popularity=10), GRASArtist(id="190", name="Greg", is_main=False, is_primary=False, popularity=8), ] model.primary_artists = [GRASArtist(id="39", name="Alexa", is_main=True, is_primary=True, popularity=2)] sut.perform([model]) self.verifier.verify_project(project) self.verifier.verify_project_artists(project.prs_id, project.artists) self.verifier.verify_project_campaigns(project.prs_id, ["facebook_123456789", "facebook_654783978"]) @pytest.mark.skip(reason="test is incomplete") def test_delete_last_user_from_project_team_should_delete_project_from_delphi_tables(self): self.requests.remove_user_from_project_team(project_id=506, user_id=1) self.verifier.verify_user_project("CCP_91865312", []) self.verifier.verify_project_absent("CCP_91865312")