from unittest.mock import patch import pytest from tests.test_utils import FixtureLoader from models import models from tests import BaseTestCase, mock, get_file_path, mock_for_user from tests.projects.fixtures.projects_fixture import fixture user1 = mock_for_user(1, "dev-marketing-user-1@example.com", "sme-dna|3po0091d6c91ty670fe6ftrya") @pytest.mark.skip(reason="Test skipped because Phase logic changed") @patch("auth.atlas.atlas_token_decoder.jwt.decode", mock.jwt_decode) class TestMediaPlanExport(BaseTestCase): url = "/projects/{}/media_plan/export" all_fields = list(range(1, 18)) def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) def perform_request_check_csv(self, csv_path, query_string): url = self.url.format(500) path = get_file_path(csv_path) fixture_file = open(path) response = self.execute_get(url, headers=self.headers, query_string=query_string) self.soft_assert(self.assertEqual, 200, response.status_code) self.soft_assert(self.assertEqual, "text/csv", response.mimetype) self.soft_assert(self.assertTrue, response.headers["Content-Disposition"] is not None) self.soft_assert(self.assertEqual, response.data.decode("utf-8").replace("\r", ""), fixture_file.read()) self.assert_all() def test_media_plan_export(self): self.perform_request_check_csv( "projects/fixtures/media_plan_export_csvs/media_plan_export.csv", {"requiredFields": self.all_fields} ) def test_media_plan_export_filter_by_phase(self): self.perform_request_check_csv( "projects/fixtures/media_plan_export_csvs/media_plan_export_filter_by_phase.csv", {"requiredFields": self.all_fields, "phaseId": 451} ) def test_media_plan_export_not_all_fields(self): self.perform_request_check_csv( "projects/fixtures/media_plan_export_csvs/media_plan_export_not_all_fields.csv", {"requiredFields": [1, 2, 3, 4, 6, 7, 8]} ) def test_media_plan_export_with_fields_reversed(self): self.perform_request_check_csv( "projects/fixtures/media_plan_export_csvs/media_plan_export_fields_reversed.csv", {"requiredFields": list(reversed(self.all_fields))} ) def test_media_plan_export_project_doesnt_exist(self): url = self.url.format(999999) response = self.execute_get(url, headers=self.headers, query_string={"requiredFields": self.all_fields}) self.assertEqual(404, response.status_code) def test_media_plan_export_no_required_fields(self): url = self.url.format(500) response = self.execute_get(url, headers=self.headers) self.assertEqual(400, response.status_code) def test_media_plan_should_not_export_deleted_campaign(self): url = self.url.format(505) response = self.execute_get(url, headers=self.headers, query_string={"requiredFields": self.all_fields}) self.assertEqual(200, response.status_code) self.assertEqual(response.data.decode("utf-8").replace("\r\n", ""), "")