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.project_history.fixtures.project_notes_history_fixture import fixture user1Mock = mock_for_user(1, "user-1@example.com", "sme-dna|5cf0091d6c76d310fe6frtp9") user2Mock = mock_for_user(2, "user-2@example.com", "sme-dna|3po0091d6c91ty670fe6ftryf") class TestProjectNotesHistory(BaseTestCase): def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) self.project_under_test = { "targets": { "items": [ { "id": "plylistID1", "images": [{"height": 10, "url": "http://test.com/qwer", "width": 1}], "ownerName": "User1234", "provider": "spotify", "name": "Best of Mick Gordon", } ], "type": "Playlist", }, "name": "History_project_notes_1", "endDate": "2020-10-11", "startDate": "2007-09-12", } def update_project_notes(self, notes: str): self.project_under_test.update({"notes": notes}) self.execute_put("/projects/500", data=json.dumps(self.project_under_test), headers=self.headers) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_notes_history_should_return_history_list(self): response = self.execute_get("/projects/500/notes-history", headers=self.headers) self.assertEqual(200, response.status_code) items = response.json["history"] self.assertEqual(len(items), 2) self.soft_assert(self.assertEqual, items[0]["id"], 6) self.soft_assert(self.assertEqual, items[0]["action"], {"id": 16, "type": "update_project_notes"}) self.soft_assert(self.assertTrue, items[0]["campaign"] is None) self.soft_assert(self.assertEqual, items[0]["user"]["id"], "sme-dna|5cf0091d6c76d310fe6frtp9") self.soft_assert(self.assertEqual, items[0]["user"]["email"], "user-1@example.com") self.soft_assert(self.assertEqual, items[0]["user"]["name"], "user-1") self.soft_assert(self.assertEqual, items[0]["user"]["label"], {"id": 4, "name": "CMG"}) self.soft_assert(self.assertEqual, items[0]["new_value"], {"value": "test notes 2"}) self.soft_assert(self.assertEqual, items[0]["old_value"], {"value": "test notes 1"}) self.soft_assert(self.assertEqual, items[1]["id"], 5) self.soft_assert(self.assertEqual, items[1]["action"], {"id": 16, "type": "update_project_notes"}) self.soft_assert(self.assertTrue, items[1]["campaign"] is None) self.soft_assert(self.assertEqual, items[1]["user"]["id"], "sme-dna|5cf0091d6c76d310fe6frtp9") self.soft_assert(self.assertEqual, items[1]["user"]["email"], "user-1@example.com") self.soft_assert(self.assertEqual, items[1]["user"]["name"], "user-1") self.soft_assert(self.assertEqual, items[1]["user"]["label"], {"id": 4, "name": "CMG"}) self.soft_assert(self.assertEqual, items[1]["new_value"], {"value": "test notes 1"}) self.soft_assert(self.assertEqual, items[1]["old_value"], {"value": "test notes"}) self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_notes_history_project_updated_should_return_updated_history_list(self): self.update_project_notes("test notes 3") response = self.execute_get("/projects/500/notes-history", headers=self.headers) self.assertEqual(200, response.status_code) items = response.json["history"] self.assertEqual(len(items), 2) self.soft_assert(self.assertEqual, items[0]["action"], {"id": 16, "type": "update_project_notes"}) self.soft_assert(self.assertTrue, items[0]["campaign"] is None) self.soft_assert(self.assertEqual, items[0]["user"]["id"], "sme-dna|5cf0091d6c76d310fe6frtp9") self.soft_assert(self.assertEqual, items[0]["user"]["email"], "user-1@example.com") self.soft_assert(self.assertEqual, items[0]["user"]["name"], "user-1") self.soft_assert(self.assertEqual, items[0]["user"]["label"], {"id": 4, "name": "CMG"}) self.soft_assert(self.assertEqual, items[0]["new_value"], {"value": "test notes 3"}) self.soft_assert(self.assertEqual, items[0]["old_value"], {"value": "test notes 2"}) self.soft_assert(self.assertEqual, items[1]["action"], {"id": 16, "type": "update_project_notes"}) self.soft_assert(self.assertTrue, items[1]["campaign"] is None) self.soft_assert(self.assertEqual, items[1]["user"]["id"], "sme-dna|5cf0091d6c76d310fe6frtp9") self.soft_assert(self.assertEqual, items[1]["user"]["email"], "user-1@example.com") self.soft_assert(self.assertEqual, items[1]["user"]["name"], "user-1") self.soft_assert(self.assertEqual, items[1]["user"]["label"], {"id": 4, "name": "CMG"}) self.soft_assert(self.assertEqual, items[1]["new_value"], {"value": "test notes 2"}) self.soft_assert(self.assertEqual, items[1]["old_value"], {"value": "test notes 1"}) self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_notes_history_notes_not_updated_should_not_generate_new_event(self): self.update_project_notes("test notes 2") response = self.execute_get("/projects/500/notes-history", headers=self.headers) self.assertEqual(200, response.status_code) items = response.json["history"] self.assertEqual(len(items), 2) self.soft_assert(self.assertEqual, items[0]["action"], {"id": 16, "type": "update_project_notes"}) self.soft_assert(self.assertEqual, items[0]["new_value"], {"value": "test notes 2"}) self.soft_assert(self.assertEqual, items[0]["old_value"], {"value": "test notes 1"}) self.soft_assert(self.assertEqual, items[1]["action"], {"id": 16, "type": "update_project_notes"}) self.soft_assert(self.assertEqual, items[1]["new_value"], {"value": "test notes 1"}) self.soft_assert(self.assertEqual, items[1]["old_value"], {"value": "test notes"}) self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_notes_history_not_existing_project_return_404_response(self): response = self.execute_get("/projects/1/notes-history", headers=self.headers) self.assertEqual(404, response.status_code) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user2Mock.jwt_decode) def test_get_notes_history_not_shared_project_return_403_response(self): response = self.execute_get("/projects/500/notes-history", headers=self.headers) self.assertEqual(403, response.status_code)