from unittest.mock import patch from datetime import datetime, timedelta from tests.test_utils import FixtureLoader from models import models from tests import BaseTestCase, mock_for_user from tests.artists.fixtures.artist_roster_fixture import fixture user1 = mock_for_user(1, "dev-marketing-user-1@example.com", "sme-dna|5cf0091d6c91d310fe6fcdc6", is_admin=False) user2 = mock_for_user(2, "dev-marketing-user-2@example.com", "sme-dna|5cf0091d6c91d310fe6fcdc7", is_admin=True) class TestArtistRoster(BaseTestCase): url = "/artist-roster" 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_artist_roster_not_admin(self): response = self.execute_get(self.url, headers=self.headers, query_string={"labelId": 1}) self.assertEqual(200, response.status_code) artist_roster = response.json self.soft_assert_equal(len(artist_roster["inactive"]), 2) self.soft_assert_equal( set([artist["artist"]["id"] for artist in artist_roster["inactive"]]), {"GRAS_20", "GRAS_80"} ) self.soft_assert_equal(artist_roster["inactive"][0]["artist"]["id"], "GRAS_20") self.soft_assert_equal( artist_roster["inactive"][0]["metadata"]["earliestProjectStartDate"], datetime.strftime(datetime.now() - timedelta(days=40), "%Y-%m-%d") ) self.soft_assert_equal( artist_roster["inactive"][0]["metadata"]["latestProjectEndDate"], datetime.strftime(datetime.now() - timedelta(days=1), "%Y-%m-%d") ) self.soft_assert_equal(artist_roster["inactive"][0]["metadata"]["status"], "inactive") self.soft_assert_equal(artist_roster["inactive"][0]["metadata"]["isCurrentUserArtistTeamMember"], False) self.soft_assert_equal(len(artist_roster["live"]), 2) self.soft_assert_equal(artist_roster["live"][0]["artist"]["id"], "GRAS_10") self.soft_assert_equal(artist_roster["live"][0]["metadata"]["status"], "live") self.soft_assert_equal( artist_roster["live"][0]["metadata"]["earliestProjectStartDate"], datetime.strftime(datetime.now() - timedelta(days=10), "%Y-%m-%d") ) self.soft_assert_equal( artist_roster["live"][0]["metadata"]["latestProjectEndDate"], datetime.strftime(datetime.now() + timedelta(days=10), "%Y-%m-%d") ) self.soft_assert_equal(artist_roster["live"][0]["metadata"]["isCurrentUserArtistTeamMember"], True) self.soft_assert_equal(artist_roster["live"][1]["artist"]["id"], "GRAS_70") self.soft_assert_equal(artist_roster["live"][1]["metadata"]["status"], "live") self.soft_assert_equal( artist_roster["live"][1]["metadata"]["earliestProjectStartDate"], datetime.strftime(datetime.now() - timedelta(days=10), "%Y-%m-%d") ) self.soft_assert_equal( artist_roster["live"][1]["metadata"]["latestProjectEndDate"], datetime.strftime(datetime.now() + timedelta(days=10), "%Y-%m-%d") ) self.soft_assert_equal(artist_roster["live"][1]["metadata"]["isCurrentUserArtistTeamMember"], False) self.soft_assert_equal(len(artist_roster["planned"]), 1) self.soft_assert_equal(artist_roster["planned"][0]["artist"]["id"], "GRAS_30") self.soft_assert_equal(artist_roster["planned"][0]["metadata"]["status"], "planned") self.soft_assert_equal( artist_roster["planned"][0]["metadata"]["earliestProjectStartDate"], datetime.strftime(datetime.now() + timedelta(days=10), "%Y-%m-%d") ) self.soft_assert_equal( artist_roster["planned"][0]["metadata"]["latestProjectEndDate"], datetime.strftime(datetime.now() + timedelta(days=20), "%Y-%m-%d") ) self.soft_assert_equal(artist_roster["planned"][0]["metadata"]["isCurrentUserArtistTeamMember"], False) self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1.jwt_decode) def test_get_artist_roster_inactive_artist_should_count_completed_projects(self): response = self.execute_get(self.url, headers=self.headers, query_string={"labelId": 1}) self.assertEqual(200, response.status_code) artist_roster = response.json self.soft_assert_equal(len(artist_roster["inactive"]), 2) self.soft_assert_equal(artist_roster["inactive"][0]["artist"]["id"], "GRAS_20") self.soft_assert_equal( set([artist["artist"]["id"] for artist in artist_roster["inactive"]]), {"GRAS_20", "GRAS_80"} ) self.soft_assert_equal(artist_roster["inactive"][0]["metadata"]["projectsCount"], 3) self.soft_assert_equal(artist_roster["inactive"][1]["metadata"]["projectsCount"], 0) # only unclaimed proj self.soft_assert_equal(len(artist_roster["live"]), 2) self.soft_assert_equal(artist_roster["live"][0]["metadata"]["projectsCount"], 2) self.soft_assert_equal(artist_roster["live"][1]["metadata"]["projectsCount"], 2) self.soft_assert_equal(len(artist_roster["planned"]), 1) self.soft_assert_equal(artist_roster["planned"][0]["metadata"]["projectsCount"], 1) self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user2.jwt_decode) def test_get_artist_roster_admin(self): response = self.execute_get(self.url, headers=self.headers, query_string={"labelId": 3}) self.assertEqual(200, response.status_code) artist_roster = response.json self.soft_assert_equal(len(artist_roster["inactive"]), 1) self.soft_assert_equal(artist_roster["inactive"][0]["artist"]["id"], "GRAS_90") self.soft_assert_equal(artist_roster["live"][0]["artist"]["id"], "GRAS_50") self.soft_assert_equal(artist_roster["planned"][0]["artist"]["id"], "GRAS_60") self.soft_assert_equal(artist_roster["live"][0]["metadata"]["projectsCount"], 2) self.soft_assert_equal(artist_roster["planned"][0]["metadata"]["projectsCount"], 1) self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1.jwt_decode) def test_get_artist_roster_without_label_id(self): response = self.execute_get(self.url, headers=self.headers, query_string={}) self.assertEqual(400, response.status_code)