from unittest.mock import patch, MagicMock from tests.test_utils import FixtureLoader from models import models, CampaignAd from tests import BaseTestCase, mock from tests.campaign_ads.fixtures.campaign_ads_fixture import fixture @patch("auth.atlas.atlas_token_decoder.jwt.decode", mock.jwt_decode) class TestCampaignAds(BaseTestCase): url = "/campaigns/{}/ads" def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) def test_get_ad_sets_for_campaign(self): response = self.execute_get( self.url.format("34ed4c22-e1f9-4184-a06d-f04cbdb97455"), headers=self.headers ) self.assertEqual(200, response.status_code) data = response.json items = data["items"] self.assertIs(list, type(items)) self.assertEqual(3, len(items)) self.soft_assert(self.assertEqual, items[0]["id"], 101) self.soft_assert(self.assertEqual, items[0]["name"], "Campaign Ad 1") self.soft_assert(self.assertEqual, items[0]["budgetSpend"], 15000) self.soft_assert(self.assertEqual, items[0]["plannedBudget"], 14000.0) self.soft_assert(self.assertEqual, items[0]["currency"], 'USD') self.soft_assert(self.assertEqual, items[0]["audienceAge"], {"higherAge": 60, "lowerAge": 0}) self.soft_assert(self.assertEqual, items[0]["destinationLinks"], ["www.sony.com"]) self.soft_assert(self.assertEqual, items[0]["endDate"], "2015-02-12") self.soft_assert(self.assertEqual, items[0]["genders"], []) self.soft_assert(self.assertEqual, items[0]["objective"], {"id": 1, "name": "App Promotion"}) self.soft_assert(self.assertEqual, items[0]["platform"], "Google") self.soft_assert(self.assertEqual, items[0]["startDate"], "2015-02-05") self.soft_assert(self.assertEqual, items[0]["territories"], [{"id": 1, "name": "USA"}]) self.soft_assert(self.assertEqual, items[1]["id"], 202) self.soft_assert(self.assertEqual, items[1]["name"], "Campaign Ad 2") self.soft_assert(self.assertEqual, items[1]["budgetSpend"], 0) self.soft_assert(self.assertEqual, items[1]["plannedBudget"], 0.0) self.soft_assert(self.assertEqual, items[1]["currency"], 'USD') self.soft_assert(self.assertEqual, items[1]["audienceAge"], {"higherAge": 40, "lowerAge": 0}) self.soft_assert(self.assertEqual, items[1]["destinationLinks"], ["www.decibel.com"]) self.soft_assert(self.assertEqual, items[1]["endDate"], "2016-02-12") self.soft_assert(self.assertEqual, items[1]["genders"], []) self.soft_assert(self.assertEqual, items[1]["objective"], {"id": 1, "name": "App Promotion"}) self.soft_assert(self.assertEqual, items[1]["platform"], "Google, Youtube") self.soft_assert(self.assertEqual, items[1]["startDate"], "2016-02-05") self.soft_assert(self.assertEqual, items[1]["territories"], [{"id": 2, "name": "Ukraine"}]) self.soft_assert(self.assertEqual, items[2]["id"], 303) self.soft_assert(self.assertEqual, items[2]["name"], "Campaign Ad 3") self.soft_assert(self.assertEqual, items[2]["budgetSpend"], 0) self.soft_assert(self.assertEqual, items[2]["plannedBudget"], 100.0) self.soft_assert(self.assertEqual, items[2]["currency"], 'USD') self.soft_assert(self.assertEqual, items[2]["audienceAge"], {"higherAge": 30, "lowerAge": 0}) self.soft_assert(self.assertEqual, items[2]["destinationLinks"], ["www.decibel1.com"]) self.soft_assert(self.assertEqual, items[2]["endDate"], "2017-02-12") self.soft_assert(self.assertEqual, items[2]["genders"], []) self.soft_assert(self.assertEqual, items[2]["objective"], {"id": 1, "name": "App Promotion"}) self.soft_assert(self.assertEqual, items[2]["platform"], "Youtube") self.soft_assert(self.assertEqual, items[2]["startDate"], "2017-02-05") self.soft_assert(self.assertEqual, items[2]["territories"], [{"id": 1, "name": "USA"}]) self.soft_assert(self.assertEqual, data["total"], 3) self.soft_assert(self.assertEqual, data["limit"], 10) self.soft_assert(self.assertEqual, data["offset"], 0) self.assert_all() @patch.object(CampaignAd, "search", MagicMock(return_value=[101, 202])) def tests_get_filtered_ad_sets_for_campaign_by_platform(self): response = self.execute_get( self.url.format("34ed4c22-e1f9-4184-a06d-f04cbdb97455"), headers=self.headers, query_string={"freeText": "Google"} ) self.assertEqual(200, response.status_code) data = response.json items = data["items"] self.assertIs(list, type(items)) self.assertEqual(2, len(items)) self.soft_assert(self.assertEqual, items[0]["id"], 101) self.soft_assert(self.assertEqual, items[0]["name"], "Campaign Ad 1") self.soft_assert(self.assertEqual, items[0]["budgetSpend"], 15000) self.soft_assert(self.assertEqual, items[0]["plannedBudget"], 14000.0) self.soft_assert(self.assertEqual, items[0]["audienceAge"], {"higherAge": 60, "lowerAge": 0}) self.soft_assert(self.assertEqual, items[0]["destinationLinks"], ["www.sony.com"]) self.soft_assert(self.assertEqual, items[0]["endDate"], "2015-02-12") self.soft_assert(self.assertEqual, items[0]["genders"], []) self.soft_assert(self.assertEqual, items[0]["objective"], {"id": 1, "name": "App Promotion"}) self.soft_assert(self.assertEqual, items[0]["platform"], "Google") self.soft_assert(self.assertEqual, items[0]["startDate"], "2015-02-05") self.soft_assert(self.assertEqual, items[0]["territories"], [{"id": 1, "name": "USA"}]) self.soft_assert(self.assertEqual, items[1]["id"], 202) self.soft_assert(self.assertEqual, items[1]["name"], "Campaign Ad 2") self.soft_assert(self.assertEqual, items[1]["budgetSpend"], 0) self.soft_assert(self.assertEqual, items[1]["plannedBudget"], 0.0) self.soft_assert(self.assertEqual, items[1]["audienceAge"], {"higherAge": 40, "lowerAge": 0}) self.soft_assert(self.assertEqual, items[1]["destinationLinks"], ["www.decibel.com"]) self.soft_assert(self.assertEqual, items[1]["endDate"], "2016-02-12") self.soft_assert(self.assertEqual, items[1]["genders"], []) self.soft_assert(self.assertEqual, items[1]["objective"], {"id": 1, "name": "App Promotion"}) self.soft_assert(self.assertEqual, items[1]["platform"], "Google, Youtube") self.soft_assert(self.assertEqual, items[1]["startDate"], "2016-02-05") self.soft_assert(self.assertEqual, items[1]["territories"], [{"id": 2, "name": "Ukraine"}]) self.assert_all() @patch.object(CampaignAd, "search", MagicMock(return_value=[101])) def tests_get_filtered_ad_sets_for_campaign_by_name(self): response = self.execute_get( self.url.format("34ed4c22-e1f9-4184-a06d-f04cbdb97455"), headers=self.headers, query_string={"freeText": "Campaign Ad 1"} ) self.assertEqual(200, response.status_code) data = response.json items = data["items"] self.assertIs(list, type(items)) self.assertEqual(1, len(items)) self.soft_assert(self.assertEqual, items[0]["id"], 101) self.soft_assert(self.assertEqual, items[0]["name"], "Campaign Ad 1") self.soft_assert(self.assertEqual, items[0]["budgetSpend"], 15000) self.soft_assert(self.assertEqual, items[0]["plannedBudget"], 14000.0) self.soft_assert(self.assertEqual, items[0]["audienceAge"], {"higherAge": 60, "lowerAge": 0}) self.soft_assert(self.assertEqual, items[0]["destinationLinks"], ["www.sony.com"]) self.soft_assert(self.assertEqual, items[0]["endDate"], "2015-02-12") self.soft_assert(self.assertEqual, items[0]["genders"], []) self.soft_assert(self.assertEqual, items[0]["objective"], {"id": 1, "name": "App Promotion"}) self.soft_assert(self.assertEqual, items[0]["platform"], "Google") self.soft_assert(self.assertEqual, items[0]["startDate"], "2015-02-05") self.soft_assert(self.assertEqual, items[0]["territories"], [{"id": 1, "name": "USA"}]) self.assert_all() def tests_get_ordered_ad_sets_for_campaign_by_start_date(self): response = self.execute_get( self.url.format("34ed4c22-e1f9-4184-a06d-f04cbdb97455"), headers=self.headers, query_string={"sort": "-startDate"} ) self.assertEqual(200, response.status_code) data = response.json items = data["items"] self.assertIs(list, type(items)) self.soft_assert(self.assertEqual, items[0]["id"], 303) self.soft_assert(self.assertEqual, items[0]["name"], "Campaign Ad 3") self.soft_assert(self.assertEqual, items[0]["budgetSpend"], 0) self.soft_assert(self.assertEqual, items[0]["plannedBudget"], 100.0) self.soft_assert(self.assertEqual, items[0]["audienceAge"], {"higherAge": 30, "lowerAge": 0}) self.soft_assert(self.assertEqual, items[0]["destinationLinks"], ["www.decibel1.com"]) self.soft_assert(self.assertEqual, items[0]["endDate"], "2017-02-12") self.soft_assert(self.assertEqual, items[0]["genders"], []) self.soft_assert(self.assertEqual, items[0]["objective"], {"id": 1, "name": "App Promotion"}) self.soft_assert(self.assertEqual, items[0]["platform"], "Youtube") self.soft_assert(self.assertEqual, items[0]["startDate"], "2017-02-05") self.soft_assert(self.assertEqual, items[0]["territories"], [{"id": 1, "name": "USA"}]) self.soft_assert(self.assertEqual, items[1]["id"], 202) self.soft_assert(self.assertEqual, items[1]["name"], "Campaign Ad 2") self.soft_assert(self.assertEqual, items[1]["budgetSpend"], 0) self.soft_assert(self.assertEqual, items[1]["plannedBudget"], 0.0) self.soft_assert(self.assertEqual, items[1]["audienceAge"], {"higherAge": 40, "lowerAge": 0}) self.soft_assert(self.assertEqual, items[1]["destinationLinks"], ["www.decibel.com"]) self.soft_assert(self.assertEqual, items[1]["endDate"], "2016-02-12") self.soft_assert(self.assertEqual, items[1]["genders"], []) self.soft_assert(self.assertEqual, items[1]["objective"], {"id": 1, "name": "App Promotion"}) self.soft_assert(self.assertEqual, items[1]["platform"], "Google, Youtube") self.soft_assert(self.assertEqual, items[1]["startDate"], "2016-02-05") self.soft_assert(self.assertEqual, items[1]["territories"], [{"id": 2, "name": "Ukraine"}]) self.soft_assert(self.assertEqual, items[2]["id"], 101) self.soft_assert(self.assertEqual, items[2]["name"], "Campaign Ad 1") self.soft_assert(self.assertEqual, items[2]["budgetSpend"], 15000) self.soft_assert(self.assertEqual, items[2]["plannedBudget"], 14000.0) self.soft_assert(self.assertEqual, items[2]["audienceAge"], {"higherAge": 60, "lowerAge": 0}) self.soft_assert(self.assertEqual, items[2]["destinationLinks"], ["www.sony.com"]) self.soft_assert(self.assertEqual, items[2]["endDate"], "2015-02-12") self.soft_assert(self.assertEqual, items[2]["genders"], []) self.soft_assert(self.assertEqual, items[2]["objective"], {"id": 1, "name": "App Promotion"}) self.soft_assert(self.assertEqual, items[2]["platform"], "Google") self.soft_assert(self.assertEqual, items[2]["startDate"], "2015-02-05") self.soft_assert(self.assertEqual, items[2]["territories"], [{"id": 1, "name": "USA"}]) self.soft_assert(self.assertEqual, data["total"], 3) self.soft_assert(self.assertEqual, data["limit"], 10) self.soft_assert(self.assertEqual, data["offset"], 0) self.assert_all() def test_access_for_ad_sets_with_unavailable_campaign(self): response = self.execute_get( self.url.format("c40fe4e8-58ce-4ba6-ab10-4932e685a389"), headers=self.headers ) self.assertEqual(403, response.status_code) resp = response.json self.soft_assert(self.assertEqual, resp["code"], "ad_set_view_restricted") self.soft_assert(self.assertEqual, resp["detail"], "You can't view Ad Sets for this campaign.") self.assert_all() def test_access_for_ad_sets_for_unassigned_project_with_the_same_label_as_user(self): response = self.execute_get( self.url.format("9d6211cf-1e47-487d-bb01-e08f6472d71e"), headers=self.headers ) self.assertEqual(200, response.status_code) def test_access_for_ad_sets_for_project_for_the_editor(self): response = self.execute_get( self.url.format("20618d97-5190-4589-8fed-9e109e5ac5b5"), headers=self.headers ) self.assertEqual(200, response.status_code) def test_access_for_ad_sets_for_claimed_project(self): response = self.execute_get( self.url.format("0b70c231-1997-417b-a23f-9a89ffa4f6bf"), headers=self.headers ) self.assertEqual(200, response.status_code) def test_get_ads_for_campaign_that_doesnt_exist(self): response = self.execute_get( self.url.format("0b70c231-1997-417b-a23f-9a89ffa4f60f"), headers=self.headers ) self.assertEqual(404, response.status_code) def test_get_ads_fo_unassigned_campaign_without_label_access(self): response = self.execute_get( self.url.format("34ed4c22-e1f9-4184-a06d-f04cbdb97888"), headers=self.headers ) resp = response.json self.assertEqual(403, response.status_code) self.soft_assert(self.assertEqual, resp["code"], "ad_set_view_restricted") self.soft_assert(self.assertEqual, resp["detail"], "You can't view Ad Sets for this campaign.") self.assert_all() def test_get_ads_for_invalid_uuid(self): response = self.execute_get( self.url.format("0b70c231-1997-417b-a23f-9a89ffa4f60fsdgsdgdg123123asdas"), headers=self.headers ) self.assertEqual(404, response.status_code)