from unittest.mock import patch import json from tests import BaseTestCase, mock from tests.media_plan.fixtures.media_plan_phases_fixture import fixture @patch("auth.atlas.atlas_token_decoder.jwt.decode", mock.jwt_decode) class TestPhasesCrudCampaign(BaseTestCase): url = "/projects/500/media-plans/42/phases" fixture = fixture def test_create_phase_in_the_middle(self): data = { "name": "New phase", "order": 1, } response = self.execute_post(self.url, data=json.dumps(data), headers=self.headers) data = response.json self.assertEqual(200, response.status_code) new_phase_id = data.get("id") self.assertIsNotNone(new_phase_id) self.assertEqual(data.get("media_plan_id"), 42) self.assertEqual(data.get("name"), data["name"]) self.assertEqual(data.get("order"), 1) self.assertEqual(len(data.get("campaigns")), 1) self.assertEqual(data.get("campaigns")[0]["columns"]['workflowStatus']['status'], 'Draft') self.assertEqual(data.get("campaigns")[0]["columns"]['name'], None) self.assertEqual(data.get("campaigns")[0]["columns"]['namingConvention'], None) self.assertEqual(data.get("campaigns")[0]["columns"]['orderInPhase'], 0) response = self.execute_get(self.url, data=json.dumps(data), headers=self.headers) self.assertEqual(200, response.status_code) resp = response.json phase_in_order = [450, 560, 550, 555] phase_in_order.insert(1, new_phase_id) self.assertEqual( [phase.get('id') for phase in sorted(resp, key=lambda d: d['order'])], phase_in_order ) def test_create_phase_in_the_start_with_order(self): data = { "order": 0, } response = self.execute_post(self.url, data=json.dumps(data), headers=self.headers) data = response.json self.assertEqual(200, response.status_code) new_phase_id = data.get("id") self.assertIsNotNone(new_phase_id) self.assertEqual(data.get("media_plan_id"), 42) self.assertEqual(data.get("name"), 'Phase') self.assertEqual(data.get("order"), 0) self.assertEqual(len(data.get("campaigns")), 1) self.assertEqual(data.get("campaigns")[0]["columns"]['workflowStatus']['status'], 'Draft') self.assertEqual(data.get("campaigns")[0]["columns"]['name'], None) self.assertEqual(data.get("campaigns")[0]["columns"]['namingConvention'], None) self.assertEqual(data.get("campaigns")[0]["columns"]['orderInPhase'], 0) response = self.execute_get(self.url, headers=self.headers) self.assertEqual(200, response.status_code) resp = response.json phase_in_order = [450, 560, 550, 555] phase_in_order.insert(0, new_phase_id) self.assertEqual( [phase.get('id') for phase in sorted(resp, key=lambda d: d['order'])], phase_in_order ) def test_create_phase_without_order_and_name_should_create_default_phase_at_the_end(self): response = self.execute_post(self.url, data=json.dumps({}), headers=self.headers) self.assertEqual(200, response.status_code) self.assertIsNotNone(response.json.get("id")) self.assertEqual(response.json.get("media_plan_id"), 42) self.assertEqual(response.json.get("name"), "Phase") self.assertEqual(response.json.get("order"), 4) new_phase_id = response.json.get("id") response = self.execute_get(self.url, headers=self.headers) self.assertEqual(200, response.status_code) resp = response.json phase_in_order = [450, 560, 550, 555] phase_in_order.append(new_phase_id) self.assertEqual( [phase.get('id') for phase in sorted(resp, key=lambda d: d['order'])], phase_in_order ) def test_delete_single_phase_should_raise_error(self): url = "/projects/501/media-plans/44/phases/780" response = self.execute_delete(url, headers=self.headers) self.assertEqual(response.status_code, 400) def test_delete_phase_should_delete_campaign_to_and_reorder_project_phases(self): response = self.execute_get(self.url, data=json.dumps({}), headers=self.headers) self.assertEqual(response.status_code, 200) previous_phases_state = response.json response = self.execute_delete(self.url + '/450', headers=self.headers) self.assertEqual(response.status_code, 204) response = self.execute_get(self.url, headers=self.headers) self.assertEqual(response.status_code, 200) data = response.json self.assertEqual(len(data), len(previous_phases_state) - 1) self.assertEqual([560, 550, 555], [phase.get('id') for phase in data]) self.assertEqual([0, 1, 2], [phase.get('order') for phase in data]) def test_update_phase_name(self): data = { "name": "Updated phase", } response = self.execute_patch(self.url + "/450", data=json.dumps(data), headers=self.headers) self.assertEqual(200, response.status_code) self.assertEqual(response.json.get("name"), data["name"]) self.assertEqual(response.json.get("id"), 450)