import json from unittest.mock import patch from tests.test_utils import FixtureLoader from models import models from tests import BaseTestCase, mock from tests.projects.fixtures.recently_viewed_projects_fixture import fixture @patch("auth.atlas.atlas_token_decoder.jwt.decode", mock.jwt_decode) class TestRecentlyViewedProjects(BaseTestCase): url = "/projects/recently-viewed" def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) def claim_project(self, project_id): data = { "targets": { "items": [ { "id": "GRAS_1421", "image": None, "isSony": True, "isUnknown": False, "name": "TestAtrist", "type": "Primary", } ], "type": "Artist", }, "name": "Project Title 1", "endDate": "2020-10-11", "startDate": "2007-02-02", } self.execute_post(f"/projects/{project_id}/claim", headers=self.headers, data=json.dumps(data)) def test_list_of_recently_viewed_projects(self): response = self.execute_get(self.url, headers=self.headers) self.assertEqual(response.status_code, 200) items = response.json self.assertEqual(items[0]['id'], 505) self.assertEqual(items[0]['name'], "test_project_4") self.assertEqual(items[0]['label']["id"], 4) self.assertEqual(items[0]['label']["name"], "CMG") self.assertEqual(items[0]["editDate"], "2019-07-23T16:14:55.446196+00:00") self.assertEqual(items[0]['isConfidential'], False) self.assertEqual(len(items[0]["targets"]["items"]), 1) self.assertEqual(items[1]['id'], 500) self.assertEqual(items[1]['name'], "test_project_1") self.assertEqual(items[1]['label']["id"], 4) self.assertEqual(items[1]['label']["name"], "CMG") self.assertEqual(items[1]["editDate"], "2019-07-23T16:14:55.446196+00:00") self.assertEqual(items[1]['isConfidential'], False) self.assertEqual(len(items[0]["targets"]["items"]), 1) def test_viewed_project_should_be_first(self): response = self.execute_get("/projects/502", headers=self.headers) self.assertEqual(response.status_code, 200) response = self.execute_get(self.url, headers=self.headers) self.assertEqual(response.status_code, 200) items = response.json self.assertEqual(items[0]['id'], 502) self.assertEqual(items[0]['name'], "test_project_3") self.assertEqual(items[1]['id'], 505) self.assertEqual(items[1]['name'], "test_project_4") self.assertEqual(items[2]['id'], 500) self.assertEqual(items[2]['name'], "test_project_1") def test_viewed_project_without_access_should_not_be_recently_viewed(self): response = self.execute_get("/projects/503", headers=self.headers) self.assertEqual(response.status_code, 403) response = self.execute_get(self.url, headers=self.headers) self.assertEqual(response.status_code, 200) items = response.json self.assertEqual(items[0]['id'] == 503, False) self.assertEqual(items[0]['id'], 505) self.assertEqual(items[0]['name'], "test_project_4") self.assertEqual(items[1]['id'], 500) self.assertEqual(items[1]['name'], "test_project_1") def test_viewed_unclaimed_project_should_be_recently_viewed(self): response = self.execute_get("/projects/509", headers=self.headers) self.assertEqual(response.status_code, 200) response = self.execute_get(self.url, headers=self.headers) self.assertEqual(response.status_code, 200) items = response.json self.assertEqual(items[0]['id'], 509) self.assertEqual(items[0]['name'], "test_unclaimed_project_9") self.assertEqual(items[0]['editDate'], None) self.assertEqual(items[1]['id'], 505) self.assertEqual(items[1]['name'], "test_project_4") self.assertEqual(items[2]['id'], 500) self.assertEqual(items[2]['name'], "test_project_1") def test_recently_viewed_project_open_again_should_change_projects_order(self): response = self.execute_get(self.url, headers=self.headers) self.assertEqual(response.status_code, 200) items = response.json self.assertEqual(items[0]['id'], 505) self.assertEqual(items[0]['name'], "test_project_4") self.assertEqual(items[1]['id'], 500) self.assertEqual(items[1]['name'], "test_project_1") self.execute_get("/projects/500", headers=self.headers) response = self.execute_get(self.url, headers=self.headers) self.assertEqual(response.status_code, 200) items = response.json self.assertEqual(items[0]['id'], 500) self.assertEqual(items[0]['name'], "test_project_1") self.assertEqual(items[1]['id'], 505) self.assertEqual(items[1]['name'], "test_project_4") def test_recently_viewed_projects_with_invalid_label_for_current_user(self): response = self.execute_get(self.url, headers=self.headers, query_string={"label": 6}) self.assertEqual(response.status_code, 403) def test_edited_date_in_recently_viewed_project_after_claim(self): response = self.execute_get("/projects/509", headers=self.headers) self.assertEqual(response.status_code, 200) response = self.execute_get(self.url, headers=self.headers) self.assertEqual(response.status_code, 200) items = response.json self.assertEqual(items[0]['id'], 509) self.assertEqual(items[0]['name'], "test_unclaimed_project_9") self.assertEqual(items[0]['editDate'], None) self.claim_project(project_id=509) response = self.execute_get(self.url, headers=self.headers) self.assertEqual(response.status_code, 200) items = response.json self.assertEqual(items[0]['id'], 509) self.assertEqual(items[0]['name'], "Project Title 1") self.assertNotEqual(items[0]['editDate'], "2019-07-23T16:14:55.446196+00:00") self.assertIsNotNone(items[0]['editDate'])