from unittest.mock import patch from tests.test_utils import FixtureLoader from models import models from tests import BaseTestCase, mock_for_user from tests.labels.fixtures.labels_fixture import fixture user1Mock = mock_for_user(1, "user-1@example.com", "sme-dna|user-1", labels=[1, 2, 3, 4, 5]) user2Mock = mock_for_user(2, "user-2@example.com", "sme-dna|user-2", is_admin=True, labels=[1, 2, 3, 4, 5]) user42Mock = mock_for_user(42, "mulinette@universe.galaxy", "sme-dna|mulinette", labels=[5]) user43Mock = mock_for_user(43, "43@universe.galaxy", "sme-dna|universe", is_admin=True, name="WUniverse") ADMIN_ROLE = 0 EDITOR_ROLE = 1 class TestGetLabels(BaseTestCase): url = "/labels/{}/permissions/{}" 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_label_permissions_team_members(self): response = self.execute_get(self.url.format(1, "team-members"), headers=self.headers) self.assertEqual(200, response.status_code) team_members = response.json self.soft_assert_equal(len(team_members), 2) # Admin go first self.soft_assert_equal(team_members[0]["role"], ADMIN_ROLE) self.soft_assert_equal( team_members[0]["user"], { "id": 2, "name": "user-2", "email": "user-2@example.com", "avatarUrl": None } ) self.soft_assert_equal(len(team_members[0]["artists"]), 0) self.soft_assert_equal(team_members[1]["role"], EDITOR_ROLE) self.soft_assert_equal( team_members[1]["user"], { "id": 1, "name": "User 1", "email": "user-1@example.com", "avatarUrl": None } ) self.soft_assert_equal(len(team_members[1]["artists"]), 1) self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user2Mock.jwt_decode) def test_get_label_permissions_team_members_for_another_label(self): response = self.execute_get(self.url.format(3, "team-members"), headers=self.headers) self.assertEqual(200, response.status_code) team_members = response.json self.soft_assert_equal(len(team_members), 2) # Admin go first self.soft_assert_equal(team_members[0]["role"], ADMIN_ROLE) self.soft_assert_equal(team_members[0]["user"]["id"], 2) self.soft_assert_equal(len(team_members[0]["artists"]), 1) self.soft_assert_equal(team_members[1]["role"], EDITOR_ROLE) self.soft_assert_equal(team_members[1]["user"]["id"], 1) self.soft_assert_equal(team_members[1]["user"]["avatarUrl"], None) artists = team_members[1]["artists"] self.soft_assert_equal(len(artists), 2) self.soft_assert_equal(artists[0]["id"], "GRAS_124126") self.soft_assert_equal(artists[0]["name"], "AAATestArtist6") self.soft_assert_equal(artists[1]["id"], "GRAS_124125") self.soft_assert_equal(artists[1]["name"], "YaYTestArtist5") self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_not_existed_label_return_404(self): response = self.execute_get(self.url.format(6666, "team-members"), headers=self.headers) self.assertEqual(404, response.status_code) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user42Mock.jwt_decode) def test_user_without_label_return_403(self): response = self.execute_get(self.url.format(1, "team-members"), headers=self.headers) self.assertEqual(403, response.status_code) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_label_permissions_counter(self): response = self.execute_get(self.url.format(1, "counters"), headers=self.headers) self.assertEqual(200, response.status_code) counters = response.json self.soft_assert_equal(counters['teamMembers'], 2) self.soft_assert_equal(counters['artists'], 3) self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_not_existed_label_label_permissions_counters_404(self): response = self.execute_get(self.url.format(666, "counters"), headers=self.headers) self.assertEqual(404, response.status_code) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user42Mock.jwt_decode) def test_user_without_label_label_permissions_counters_403(self): response = self.execute_get(self.url.format(1, "counters"), headers=self.headers) self.assertEqual(403, response.status_code) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_label_permissions_team_member_equal_counter(self): response = self.execute_get(self.url.format(1, "counters"), headers=self.headers) self.assertEqual(200, response.status_code) counters = response.json response = self.execute_get(self.url.format(1, "team-members"), headers=self.headers) self.assertEqual(200, response.status_code) team_members = response.json self.soft_assert_equal(counters['teamMembers'], len(team_members)) self.soft_assert_equal(counters['artists'], 3) self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_label_permissions_artists(self): response = self.execute_get(self.url.format(1, "artists"), headers=self.headers) self.assertEqual(200, response.status_code) artists = response.json self.assertEqual(len(artists), 3) self.assertEqual(artists[0]["artist"]["name"], "Anna Berbok") self.assertEqual(artists[1]["artist"]["name"], "Kalush") self.assertEqual(artists[2]["artist"]["name"], "mOZart") self.assertEqual(artists[2]["teamMembers"][0]["name"], "WUniverse") self.assertEqual(artists[2]["teamMembers"][0]["role"], ADMIN_ROLE) self.assertEqual(artists[2]["teamMembers"][1]["name"], "User 1") self.assertEqual(artists[2]["teamMembers"][1]["role"], EDITOR_ROLE) response_counter = self.execute_get(self.url.format(1, "counters"), headers=self.headers) self.assertEqual(200, response_counter.status_code) resp = response_counter.json self.assertEqual(len(artists), resp["artists"]) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user42Mock.jwt_decode) def test_label_permissions_artists_should_return_403(self): response = self.execute_get(self.url.format(1, "artists"), headers=self.headers) self.assertEqual(403, response.status_code) self.assertEqual("access_to_label_restricted", response.json["code"]) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_label_permissions_artist_doesnt_get_team_members_from_another_label(self): response = self.execute_get(self.url.format(1, "artists"), headers=self.headers) self.assertEqual(200, response.status_code) items = response.json self.assertEqual(items[1]["artist"]["name"], "Kalush") self.assertEqual(items[1]["teamMembers"], []) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_label_permissions_artists_with_multiple_projects(self): response = self.execute_get(self.url.format(5, "artists"), headers=self.headers) self.assertEqual(200, response.status_code) items = response.json self.soft_assert_equal(items[0]["artist"]["name"], "artist_70") self.soft_assert_equal(len(items[0]["teamMembers"]), 1) self.soft_assert_equal(items[0]["teamMembers"][0]["name"], "User 1") self.assert_all()