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.projects.fixtures.projects_fixture import fixture user5Mock = mock_for_user(5, "dev-marketing-user-5@example.com", "sme-dna|1mk0091d6cuhjp30fe6optiii") user10Mock = mock_for_user(10, "dev-marketing-10@example.com", "sme-dna|phn0077d6cuhjp30fe6oadm10") user1Mock = mock_for_user(1, "dev-marketing-user-1@example.com", "sme-dna|5cf0091d6c91d310fe6fcdc6") class TestGetProjectTeam(BaseTestCase): def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user5Mock.jwt_decode) def test_get_team_list_when_user_related_to_project(self): response = self.client.get("/projects/500/team", headers=self.headers) self.assertEqual(200, response.status_code) data = response.json self.soft_assert(self.assertEqual, data[0]["id"], 1) self.soft_assert(self.assertEqual, data[0]["email"], "dev-marketing-user-1@example.com") self.soft_assert(self.assertEqual, len(data[0]["labels"]), 5) self.soft_assert(self.assertEqual, data[0]["roles"][0]["id"], 1) self.soft_assert(self.assertEqual, data[0]["roles"][0]["name"], "Editor") self.soft_assert(self.assertEqual, data[1]["id"], 4) self.soft_assert(self.assertEqual, data[1]["email"], "dev-marketing-user-4@example.com") self.soft_assert(self.assertEqual, len(data[1]["labels"]), 0) self.soft_assert(self.assertEqual, data[1]["roles"][0]["id"], 1) self.soft_assert(self.assertEqual, data[1]["roles"][0]["name"], "Editor") self.soft_assert(self.assertEqual, data[2]["id"], 5) self.soft_assert(self.assertEqual, data[2]["email"], "dev-marketing-user-5@example.com") self.soft_assert(self.assertEqual, len(data[2]["labels"]), 1) self.soft_assert(self.assertEqual, data[2]["roles"][0]["id"], 1) self.soft_assert(self.assertEqual, data[2]["roles"][0]["name"], "Editor") self.soft_assert(self.assertEqual, data[3]["id"], 6) self.soft_assert(self.assertEqual, data[3]["email"], "dev-marketing-user-6@example.com") self.soft_assert(self.assertEqual, len(data[3]["labels"]), 1) self.soft_assert(self.assertEqual, data[3]["roles"][0]["id"], 3) self.soft_assert(self.assertEqual, data[3]["roles"][0]["name"], "Viewer") self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user10Mock.jwt_decode) def test_get_team_list_with_user_is_approver_and_artist_team_editor(self): response = self.client.get("/projects/507/team", headers=self.headers) self.assertEqual(200, response.status_code) data = response.json self.soft_assert(self.assertEqual, data[0]["id"], 10) self.soft_assert(self.assertEqual, data[0]["roles"][0]["id"], 1) self.soft_assert(self.assertEqual, data[0]["roles"][0]["name"], "Editor") self.soft_assert(self.assertEqual, data[0]["roles"][1]["id"], 4) self.soft_assert(self.assertEqual, data[0]["roles"][1]["name"], "Approver") self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user5Mock.jwt_decode) def test_get_team_list_when_user_not_related_to_project(self): response = self.client.get("/projects/503/team", headers=self.headers) self.assertEqual(403, response.status_code) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_team_list_with_user_is_admin_and_is_approver(self): response = self.client.get("/projects/505/team", headers=self.headers) self.assertEqual(200, response.status_code) data = response.json self.assertEqual(data[2]['name'], "Perfect admin") self.assertEqual(data[2]['roles'][0]['name'], "Admin") self.assertEqual(data[2]['roles'][1]['name'], "Approver") @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) class TestManageProjectTeam(BaseTestCase): url = "/projects/505/team" def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) def add_user_to_project(self, user_id: int, role_id: int, categories_id=[]): data = {"added": [{"userId": user_id, "roleId": role_id, "categoryIds": categories_id}]} self.client.post(self.url, data=json.dumps(data), headers=self.headers) def test_add_team_member_to_project(self): data = {"added": [{"userId": 2, "roleId": 1, "categoryIds": [1]}]} response = self.client.post(self.url, data=json.dumps(data), headers=self.headers) self.assertEqual(200, response.status_code) data = response.json self.assertEqual(4, len(data)) self.soft_assert(self.assertEqual, data[1]["id"], 2) self.soft_assert(self.assertEqual, data[1]["roles"][0]["id"], 1) self.assert_all() def test_add_team_member_who_is_already_an_approver_to_project(self): data = {"added": [{"userId": 42, "roleId": 1, "categoryIds": [1]}]} response = self.client.post(self.url, data=json.dumps(data), headers=self.headers) self.assertEqual(200, response.status_code) data = response.json self.assertEqual(3, len(data)) self.assertEqual(2, len(data[0]["roles"])) self.soft_assert_equal(set([role["name"] for role in data[0]["roles"]]), {"Approver", "Editor"}) response = self.client.get("/projects/505/team", headers=self.headers) self.soft_assert_equal(200, response.status_code) data = response.json self.soft_assert_equal(len(data), 3) self.soft_assert(self.assertEqual, data[0]["id"], 42) self.soft_assert(self.assertEqual, set([role["name"] for role in data[0]["roles"]]), {"Approver", "Editor"}) self.assert_all() def test_add_existing_team_member_to_project(self): self.add_user_to_project(user_id=2, role_id=1, categories_id=[1, 2, 3]) data = {"added": [{"userId": 2, "roleId": 1, "categoryIds": [1]}]} response = self.client.post(self.url, data=json.dumps(data), headers=self.headers) self.assertEqual(422, response.status_code) def test_add_editor_member_without_categories_to_project(self): data = {"added": [{"userId": 2, "roleId": 1, "categoryIds": []}]} response = self.client.post(self.url, data=json.dumps(data), headers=self.headers) self.assertEqual(400, response.status_code) def test_add_editor_member_with_non_existing_categories_to_project(self): data = {"added": [{"userId": 2, "roleId": 1, "categoryIds": [6, 7]}]} response = self.client.post(self.url, data=json.dumps(data), headers=self.headers) self.assertEqual(404, response.status_code) def test_update_team_member_in_project(self): self.add_user_to_project(user_id=2, role_id=1, categories_id=[1, 2]) new_data = {"updated": [{"userId": 2, "roleId": 3, "categoryIds": []}]} response = self.client.post(self.url, data=json.dumps(new_data), headers=self.headers) self.assertEqual(200, response.status_code) data = response.json self.soft_assert(self.assertEqual, data[0]["id"], 1) self.soft_assert(self.assertEqual, data[0]["roles"][0]["id"], 1) self.soft_assert(self.assertEqual, data[0]["roles"][0]["categoryIds"], []) self.soft_assert(self.assertEqual, data[1]["id"], 2) self.soft_assert(self.assertEqual, data[1]["roles"][0]["id"], 3) self.soft_assert(self.assertEqual, data[1]["roles"][0]["categoryIds"], []) self.assert_all() def test_delete_team_member_from_project(self): self.add_user_to_project(user_id=2, role_id=1, categories_id=[1, 2, 3]) new_data = {"deleted": [{"userId": 2, "roleId": 1, "categoryIds": []}]} response = self.client.post(self.url, data=json.dumps(new_data), headers=self.headers) self.assertEqual(200, response.status_code) def test_delete_non_existed_team_member_from_project(self): new_data = {"deleted": [{"userId": 2, "roleId": 1, "categoryIds": []}]} response = self.client.post(self.url, data=json.dumps(new_data), headers=self.headers) self.assertEqual(404, response.status_code) def test_duplication_team_member(self): data = { "added": [{"userId": 2, "roleId": 4, "categoryIds": []}], "deleted": [{"userId": 2, "roleId": 1, "categoryIds": []}], } response = self.client.post(self.url, data=json.dumps(data), headers=self.headers) self.assertEqual(400, response.status_code)