from datetime import timedelta, date from unittest.mock import patch, MagicMock from tests.test_utils import FixtureLoader from models import models, CampaignAd from tests import BaseTestCase, get_file_path, mock_for_user from tests.campaign_ads.fixtures.campaign_ads_export_fixture import fixture user1 = mock_for_user(1, "dev-marketing-user-1@example.com", "sme-dna|5cf0091d6c91d310fe6fcdc6") user2 = mock_for_user(2, "dev-marketing-user-2@example.com", "sme-dna|3po0091d6c91ty670fe6ftryf") class TestCampaignAdsExport(BaseTestCase): url = "/campaigns/0b70c231-1997-417b-a23f-9a89ffa4f6bf/ads" def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1.jwt_decode) def test_ads_export(self): url = self.url + "/export" path = get_file_path("campaign_ads/fixtures/campaign_ads_export.csv") file = open(path) response = self.execute_get(url, headers=self.headers) expected_csv = ( file.read() .replace("{end_date1}", date.strftime(date.today() + timedelta(days=10), "%Y-%m-%d")) .replace("{end_date2}", date.strftime(date.today() - timedelta(days=1), "%Y-%m-%d")) ) 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", ""), expected_csv) self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1.jwt_decode) @patch.object(CampaignAd, "search", MagicMock(return_value=[100])) def test_ads_export_with_filters(self): url = self.url + "/export" path = get_file_path("campaign_ads/fixtures/campaign_ads_export_with_filters.csv") file = open(path) response = self.execute_get(url, headers=self.headers, query_string={"freeText": "Chris Brown"}) expected_csv = file.read().replace("{end_date}", date.strftime(date.today() + timedelta(days=10), "%Y-%m-%d")) 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", ""), expected_csv) self.assert_all()