from datetime import datetime, timedelta, date from unittest.mock import patch from tests.test_utils import FixtureLoader from models import models from tests import BaseTestCase, mock_for_user from tests.artists.fixtures.artist_roster_projects_fixture import fixture from constants.project_statuses import ProjectStatuses user1 = mock_for_user(1, "dev-marketing-user-1@example.com", "sme-dna|5cf0091d6c91d310fe6fcdc6", is_admin=False) class TestArtistRosterProjects(BaseTestCase): url = "/artist-roster/{}/projects" def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1.jwt_decode) def test_get_projects_for_artist_in_roster_should_return_all_available_projects(self): response = self.execute_get(self.url.format("GRAS_10"), headers=self.headers, query_string={"labelId": 1}) self.assertEqual(200, response.status_code) projects = response.json self.soft_assert_equal(len(projects), 2) self.soft_assert_equal(projects[0]["id"], 500) self.soft_assert_equal(projects[0]["name"], "test_project_1") self.soft_assert_equal(projects[0]["status"], 2) self.soft_assert_equal(projects[0]["totalBudget"], 30000.0) self.soft_assert_equal(projects[0]["allocatedBudget"], 66666.0) self.soft_assert_equal(projects[0]["currency"], "USD") self.soft_assert_equal(projects[0]["startDate"], date.strftime(datetime.now() - timedelta(days=15), "%Y-%m-%d")) self.soft_assert_equal(projects[0]["endDate"], date.strftime(datetime.now() + timedelta(days=20), "%Y-%m-%d")) self.soft_assert_equal(len(projects[0]["mediaPlans"]), 2) self.soft_assert_equal(projects[0]["mediaPlans"][0]["id"], 42) self.soft_assert_equal(projects[0]["mediaPlans"][0]["name"], "Untitled For Test") self.soft_assert_equal(projects[0]["mediaPlans"][1]["id"], 41) self.soft_assert_equal(projects[0]["mediaPlans"][1]["name"], "MediaPlan2") self.soft_assert_equal(projects[1]["id"], 502) self.soft_assert_equal(projects[1]["name"], "Project 3") self.soft_assert_equal(projects[1]["status"], 1) self.soft_assert_equal(projects[1]["totalBudget"], 1000.0) self.soft_assert_equal(projects[1]["allocatedBudget"], 500.0) self.soft_assert_equal(projects[1]["currency"], "GBP") self.soft_assert_equal(projects[1]["startDate"], date.strftime(datetime.now() + timedelta(days=20), "%Y-%m-%d")) self.soft_assert_equal(projects[1]["endDate"], date.strftime(datetime.now() + timedelta(days=40), "%Y-%m-%d")) self.soft_assert_equal(len(projects[1]["mediaPlans"]), 1) self.soft_assert_equal(projects[1]["mediaPlans"][0]["id"], 44) self.soft_assert_equal(projects[1]["mediaPlans"][0]["name"], "Untitled For Test") self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1.jwt_decode) def test_get_projects_for_artist_in_roster_no_projects_should_return_empty_response(self): response = self.execute_get(self.url.format("GRAS_40"), headers=self.headers, query_string={"labelId": 1}) self.assertEqual(200, response.status_code) projects = response.json self.assertEqual(len(projects), 0) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1.jwt_decode) def test_get_projects_for_artist_in_roster_without_label_id(self): response = self.execute_get(self.url.format("GRAS_20"), headers=self.headers, query_string={}) self.assertEqual(422, response.status_code) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1.jwt_decode) def test_get_projects_for_artist_in_roster_with_status_completed(self): response = self.execute_get(self.url.format("GRAS_20"), headers=self.headers, query_string={ "statuses": ProjectStatuses.COMPLETED.value, "labelId": 1}) self.assertEqual(200, response.status_code) projects = response.json self.assertEqual(len(projects), 1) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1.jwt_decode) def test_get_projects_for_artist_in_roster_with_status_inprogress(self): response = self.execute_get(self.url.format("GRAS_20"), headers=self.headers, query_string={ "statuses": ProjectStatuses.INPROGRESS.value, "labelId": 1}) self.assertEqual(200, response.status_code) projects = response.json self.assertEqual(len(projects), 1) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1.jwt_decode) def test_get_projects_for_artist_in_roster_with_status_scheduled(self): response = self.execute_get(self.url.format("GRAS_20"), headers=self.headers, query_string={ "statuses": [ProjectStatuses.SCHEDULED.value], "labelId": 1}) self.assertEqual(200, response.status_code) projects = response.json self.assertEqual(len(projects), 1) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1.jwt_decode) def test_get_projects_for_artist_in_roster_with_mutiple_statuses(self): response = self.execute_get(self.url.format("GRAS_20"), headers=self.headers, query_string={ "statuses": [ProjectStatuses.INPROGRESS.value, ProjectStatuses.COMPLETED.value], "labelId": 1}) self.assertEqual(200, response.status_code) projects = response.json self.assertEqual(len(projects), 2)