import json from unittest.mock import patch from db import db from tests.test_utils import FixtureLoader from models import models, Campaign from tests import BaseTestCase, mock_for_user from tests.unassigned_projects.fixtures.unassigned_projects_fixture import fixture user1Mock = mock_for_user(1, "dev-marketing-user-1@example.com", "sme-dna|5cf0091d6c91d310fe6fcdc6", is_admin=True) class TestUnassignedProjectsHistory(BaseTestCase): url = "/unassigned-projects/{}/history" def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_project_history(self): url = self.url.format(505) response = self.execute_get(url, headers=self.headers) histories = response.json self.soft_assert(self.assertEqual, histories["items"][0]["id"], 4) self.soft_assert(self.assertEqual, histories["items"][0]["is_gras"], True) self.soft_assert(self.assertEqual, histories["items"][0]["user"], None) self.soft_assert(self.assertEqual, histories["items"][0]["new_value"], {"value": "Gras Project Title 1"}) self.soft_assert(self.assertEqual, histories["items"][0]["campaign"], None) self.soft_assert(self.assertEqual, histories["items"][0]["action"], {"id": 14, "type": "add_project"}) self.soft_assert(self.assertEqual, histories["limit"], 20) self.soft_assert(self.assertEqual, histories["offset"], 0) self.soft_assert(self.assertEqual, histories["total"], 1) self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_project_history_after_claim_ownership(self): url = "/unassigned-projects/505" data = { "targets": { "items": [ { "id": "GRAS_21122", "image": None, "isSony": True, "isUnknown": False, "name": "TestAtrist", "type": "Primary", }, { "id": "GRAS_21123", "image": None, "isSony": True, "isUnknown": False, "name": "TestingUpdate", "type": "Primary", }, ], "type": "Artist", }, "name": "Gras Project Title 1", "endDate": "2020-10-11", "notes": "abracadabra", "startDate": "2007-02-02", } claimed_response = self.execute_post(url, headers=self.headers, data=json.dumps(data)) project_id = claimed_response.json["id"] history_response = self.execute_get(f"/projects/{project_id}/history", headers=self.headers) note_history_response = self.execute_get(f"/projects/{project_id}/notes-history", headers=self.headers) histories = history_response.json notes_history = note_history_response.json["history"] self.soft_assert(self.assertEqual, histories["items"][0]["id"], 8) self.soft_assert(self.assertEqual, histories["items"][0]["is_gras"], False) self.soft_assert(self.assertEqual, histories["items"][0]["new_value"], None) self.soft_assert(self.assertEqual, histories["items"][0]["campaign"], None) self.soft_assert( self.assertEqual, histories["items"][0]["action"], {"id": 21, "type": "remove_primary_artists"} ) self.soft_assert( self.assertEqual, histories["items"][0]["user"], { "email": "dev-marketing-user-1@example.com", "id": "sme-dna|5cf0091d6c91d310fe6fcdc6", "label": {"id": 1, "name": "Columbia Records"}, "name": "dev-marketing-user-1", "role": {"categoryIds": [], "id": 0, "name": "Admin"}, }, ) self.soft_assert( self.assertEqual, histories["items"][0]["old_value"], [{"id": 10, "name": "TestAtrist"}, {"id": 20, "name": "TestingUpdate"}], ) self.soft_assert(self.assertEqual, histories["items"][1]["id"], 7) self.soft_assert(self.assertEqual, histories["items"][1]["is_gras"], False) self.soft_assert( self.assertEqual, histories["items"][1]["new_value"], [{"id": 1, "name": "TestAtrist"}, {"id": 2, "name": "TestingUpdate"}], ) self.soft_assert(self.assertEqual, histories["items"][1]["campaign"], None) self.soft_assert(self.assertEqual, histories["items"][1]["action"], {"id": 19, "type": "add_primary_artists"}) self.soft_assert(self.assertEqual, histories["limit"], 20) self.soft_assert(self.assertEqual, histories["offset"], 0) self.soft_assert(self.assertEqual, histories["total"], 4) self.soft_assert(self.assertEqual, notes_history[0]["id"], 6) self.soft_assert(self.assertEqual, notes_history[0]["action"], {"id": 16, "type": "update_project_notes"}) self.soft_assert(self.assertTrue, notes_history[0]["campaign"] is None) self.soft_assert(self.assertEqual, notes_history[0]["user"]["id"], "sme-dna|5cf0091d6c91d310fe6fcdc6") self.soft_assert(self.assertEqual, notes_history[0]["user"]["email"], "dev-marketing-user-1@example.com") self.soft_assert(self.assertEqual, notes_history[0]["user"]["name"], "dev-marketing-user-1") self.soft_assert(self.assertEqual, notes_history[0]["user"]["label"], {"id": 1, "name": "Columbia Records"}) self.soft_assert(self.assertEqual, notes_history[0]["new_value"], {"value": "abracadabra"}) self.soft_assert(self.assertEqual, notes_history[0]["old_value"], {"value": None}) response = self.execute_get("projects/505/media-plans", headers=self.headers) media_plans = response.json self.soft_assert_equal(len(media_plans), 1) media_plan_id = media_plans[0]["id"] response = self.execute_get(f"projects/505/media-plans/{media_plan_id}", headers=self.headers) self.soft_assert_equal(200, response.status_code) media_plan_data = response.json phases = media_plan_data["phases"] self.soft_assert_equal(len(phases), 1) campaigns = phases[0].get("campaigns") self.soft_assert_equal(len(campaigns), 1) self.soft_assert_equal(campaigns[0]["columns"]['workflowStatus']['status'], 'Draft') self.soft_assert_equal(campaigns[0]["columns"]['name'], None) self.soft_assert_equal(campaigns[0]["columns"]['namingConvention'], None) self.soft_assert_equal(campaigns[0]["columns"]['orderInPhase'], 0) campaign = db.session.query(Campaign.project_id).filter(Campaign.media_plan_phase_id == phases[0]["id"]).first() self.soft_assert_equal(campaign[0], 505) self.assert_all()