import json from unittest.mock import patch from tests.test_utils import FixtureLoader from models import models from tests import BaseTestCase, mock_for_user from tests.permissions.fixtures.approver_fixture import fixture approverSingleRoleMock = mock_for_user(5, "user-5@example.com", "sme-dna|1mk0091d6cuhjp30fe6optiii", labels=[3]) @patch("auth.atlas.atlas_token_decoder.jwt.decode", approverSingleRoleMock.jwt_decode) class TestSingleApproverRolePermissions(BaseTestCase): update_project_data = { "targets": { "items": [{"id": "artst1", "image": None, "isSony": True, "name": "Mick Gordon"}], "type": "Artist", }, "name": "project_name", "endDate": "2020-10-11", } def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) def test_can_view_list(self): url = "/projects" response = self.execute_get(url, headers=self.headers) self.assertEqual(200, response.status_code) projects = response.json["items"] self.assertEqual(len(projects), 6) self.soft_assert_equal(projects[0]["id"], 542) self.soft_assert_equal(len(projects[0]["userRoles"]), 2) self.soft_assert_equal(projects[0]["userRoles"][0]["name"], "Editor") self.soft_assert_equal(projects[0]["userRoles"][1]["name"], "Approver") self.soft_assert_equal(projects[1]["id"], 543) self.soft_assert_equal(len(projects[1]["userRoles"]), 2) self.soft_assert_equal(projects[1]["userRoles"][0]["name"], "Labelmate") self.soft_assert_equal(projects[1]["userRoles"][1]["name"], "Approver") self.soft_assert_equal(projects[2]["id"], 500) self.soft_assert_equal(len(projects[2]["userRoles"]), 2) self.soft_assert_equal(set([role["name"] for role in projects[2]["userRoles"]]), {"Viewer", "Approver"}) # access granted using UserProject self.soft_assert_equal(projects[3]["id"], 502) self.soft_assert_equal(len(projects[3]["userRoles"]), 1) self.soft_assert_equal(projects[3]["userRoles"][0]["name"], "Approver") self.soft_assert_equal(projects[4]["id"], 600) self.soft_assert_equal(len(projects[4]["userRoles"]), 2) self.soft_assert_equal(set([role["name"] for role in projects[4]["userRoles"]]), {"Editor", "Approver"}) # access granted using ArtistTeam self.soft_assert(self.assertIsNotNone, projects[4]["budget"]) self.soft_assert(self.assertIsNotNone, projects[4]["allocation"]) self.soft_assert_equal(projects[5]["id"], 700) self.soft_assert_equal(len(projects[5]["userRoles"]), 1) self.soft_assert_equal(set([role["name"] for role in projects[5]["userRoles"]]), {"Approver"}) # Artist team access shouldn't count for confidential projects self.soft_assert_equal(projects[5]["budget"], None) self.soft_assert_equal(projects[5]["allocation"], None) self.assert_all() def test_can_view_sort_by_roles_list(self): url = "/projects?sort=userRoles" response = self.execute_get(url, headers=self.headers) self.assertEqual(200, response.status_code) projects = response.json["items"] self.assertEqual(len(projects), 6) self.soft_assert_equal(projects[0]["id"], 542) self.soft_assert_equal(len(projects[0]["userRoles"]), 2) self.soft_assert_equal(set([role["name"]for role in projects[1]["userRoles"]]), {"Editor", "Approver"}) # access granted using ArtistTeam self.soft_assert_equal(projects[1]["id"], 600) self.soft_assert_equal(len(projects[1]["userRoles"]), 2) self.soft_assert_equal(set([role["name"]for role in projects[0]["userRoles"]]), {"Editor", "Approver"}) self.soft_assert_equal(projects[2]["id"], 543) self.soft_assert_equal(len(projects[2]["userRoles"]), 2) self.soft_assert_equal(set([role["name"]for role in projects[2]["userRoles"]]), {"Labelmate", "Approver"}) self.soft_assert_equal(projects[3]["id"], 500) self.soft_assert_equal(len(projects[3]["userRoles"]), 2) self.soft_assert_equal(set([role["name"]for role in projects[3]["userRoles"]]), {"Viewer", "Approver"}) # access granted using UserProject self.soft_assert_equal(projects[4]["id"], 502) self.soft_assert_equal(len(projects[4]["userRoles"]), 1) self.soft_assert_equal(projects[4]["userRoles"][0]["name"], "Approver") self.soft_assert_equal(projects[5]["id"], 700) self.soft_assert_equal(len(projects[5]["userRoles"]), 1) self.soft_assert_equal(projects[5]["userRoles"][0]["name"], "Approver") self.assert_all() def test_can_view_project_access_artist_team(self): url = "/projects/600" response = self.execute_get(url, headers=self.headers) project = response.json self.soft_assert_equal(len(project["userRoles"]), 2) self.soft_assert_equal(set([role["name"] for role in project["userRoles"]]), {"Approver", "Editor"}) self.assert_all() def test_can_view_project(self): url = "/projects/500" response = self.execute_get(url, headers=self.headers) project = response.json self.soft_assert_equal(len(project["userRoles"]), 2) self.soft_assert_equal(set([role["name"] for role in project["userRoles"]]), {"Approver", "Viewer"}) self.assert_all() def test_can_update_project(self): url = "/projects/500" response = self.execute_put(url, data=json.dumps(self.update_project_data), headers=self.headers) self.assertEqual(403, response.status_code) def test_can_view_project_team(self): url = "/projects/500/team" response = self.execute_get(url, headers=self.headers) self.assertEqual(200, response.status_code) def test_cant_manage_project_team(self): url = "/projects/500/team" data = {"added": [{"userId": 6, "roleId": 5, "categoryIds": []}]} response = self.execute_post(url, data=json.dumps(data), headers=self.headers) self.assertEqual(403, response.status_code) def test_approver_can_update_campaign(self): url = "/projects/502/media-plans/44/campaigns/bulk-action" data = { "update": [ { "campaignUuid": "55e87545-a3b3-4bd1-9357-a5373df46270", "columns": { "name": "test description", } } ], } response = self.execute_post(url, data=json.dumps(data), headers=self.headers) self.assertEqual(200, response.status_code) # def test_approver_cant_delete_or_create_campaign(self): # url = "/media-plan/500/campaigns/bulk-action" # pass # def test_approver_cant_do_anything_with_phases(self): # url = "media-plan/502/phases" # # data = { # "name": "New phase", # "order": 1, # } # # response = self.execute_post(url, data=json.dumps(data), headers=self.headers) # # self.assertEqual(404, response.status_code) # # # change phase # # url = "media-plan/502/phases/420" # # data = { # "name": "New name", # } # # response = self.execute_patch(url, data=json.dumps(data), headers=self.headers) # # self.assertEqual(403, response.status_code) # # # delete phase # # url = "media-plan/502/phases/420" # # response = self.execute_delete(url, headers=self.headers) # # self.assertEqual(403, response.status_code)