from unittest.mock import patch import json import pytest from tests.test_utils import FixtureLoader from models import models from tests import BaseTestCase, mock from tests.campaigns.fixtures.campaigns_fixture import fixture SELECT_WIDGET = {"id": 1, "name": "select"} TOGGLE_WIDGET = {"id": 4, "name": "toggle"} MULTI_SELECT = {"id": 2, "name": "multi-select"} GROUP_SELECT = {"id": 3, "name": "group-select"} def create_category_json(id, name, values, widget): return {"categoryId": id, "name": name, "values": values, "widget": widget} def create_value_json(id, name, subTypes, text=None): result = {"id": id, "name": name, "subTypes": subTypes, "isHidden": False, "spendVisibilityOption": None} if text is not None: result["value_text"] = text return result @pytest.mark.skip(reason="Test skipped because Phase logic changed") class TestCampaignPlatforms(BaseTestCase): url = "/projects/500/campaigns" def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) @patch("auth.atlas.atlas_token_decoder.jwt.decode", mock.jwt_decode) def create_campaign(self, taxonomy_fields): data = { "name": "test111", "territories": [2], "startDate": "2020-04-05", "endDate": "2020-06-05", "budgetSpend": 1999, "plannedBudget": 2000, "objective": 2, "genders": [2], "provider": 2, "audienceLowerAge": 5, "audienceHigherAge": 25, "notes": "Some notes", **taxonomy_fields, } return self.execute_post(self.url, headers=self.headers, data=json.dumps(data)) def test_create_campaign_with_simple_taxomony(self): taxonomy_fields = {"campaignType": 5, "platforms": [2], "gratis": False} response = self.create_campaign(taxonomy_fields) created_campaign = response.json self.assertEqual(201, response.status_code) self.soft_assert( self.assertEqual, created_campaign["type"], {"category": {"id": 1, "name": "Digital"}, "id": 5, "name": "Display Ads"}, ) self.assert_all() def test_create_campaign_with_multi_platform_taxomony(self): taxonomy_fields = {"campaignType": 5, "platforms": [41, 47], "gratis": False} response = self.create_campaign(taxonomy_fields) created_campaign = response.json self.assertEqual(201, response.status_code) self.soft_assert( self.assertEqual, created_campaign["type"], {"category": {"id": 1, "name": "Digital"}, "id": 5, "name": "Display Ads"}, ) self.soft_assert( self.assertEqual, created_campaign["platforms"], [{"id": 41, "labelId": None, "name": "Facebook"}, {"id": 47, "labelId": None, "name": "Instagram"}], ) self.assert_all() def test_create_campaign_with_grouped_platform_taxomony(self): taxonomy_fields = {"campaignType": 2, "platforms": [41, 50, 11, 47], "gratis": True} response = self.create_campaign(taxonomy_fields) created_campaign = response.json self.assertEqual(201, response.status_code) self.soft_assert( self.assertEqual, created_campaign["type"], {"category": {"id": 2, "name": "Traditional"}, "id": 2, "name": "Other Traditional"}, ) self.soft_assert( self.assertEqual, created_campaign["platforms"], [ {"id": 11, "labelId": None, "name": "Audience Network"}, {"id": 41, "labelId": None, "name": "Facebook"}, {"id": 47, "labelId": None, "name": "Instagram"}, {"id": 50, "labelId": None, "name": "Messenger"}, ], ) self.soft_assert(self.assertEqual, created_campaign["gratis"], True) self.assert_all() def test_create_campaign_with_grouped_platform_taxomony_single_selection(self): taxonomy_fields = {"campaignType": 2, "platforms": [7], "gratis": True} response = self.create_campaign(taxonomy_fields) created_campaign = response.json self.assertEqual(201, response.status_code) self.soft_assert( self.assertEqual, created_campaign["type"], {"category": {"id": 2, "name": "Traditional"}, "id": 2, "name": "Other Traditional"}, ) self.soft_assert( self.assertEqual, created_campaign["platforms"], [{"id": 7, "labelId": None, "name": "Pandora"}] ) self.soft_assert(self.assertEqual, created_campaign["gratis"], True) self.assert_all() @pytest.mark.skip(reason="No way of currently testing this. We will add this feature in the next sprint") def test_create_campaign_with_grouped_platform_taxomony_custom_platform(self): types = [ {"category_id": 1, "value_id": 9}, {"category_id": 10, "value_id": None, "value_text": "Vkontakte"}, {"category_id": 45, "value_id": 186}, ] response = self.create_campaign(types) created_campaign = response.json self.assertEqual(201, response.status_code) custom_platform = create_value_json(500, "Vkontakte", []) platforms_category = create_category_json(10, "Platforms", [custom_platform], GROUP_SELECT) gratis_value = create_value_json(186, "Gratis", []) gratis_category = create_category_json(45, "Gratis", [gratis_value], TOGGLE_WIDGET) social_ads = create_value_json(9, "Social Ads", [platforms_category, gratis_category]) campaign_type = create_category_json(1, "Campaign Type", [social_ads], SELECT_WIDGET) self.soft_assert(self.assertEqual, created_campaign["types"], [campaign_type]) self.assert_all() def test_create_campaign_with_grouped_platform_taxomony_wrong_values_selected(self): response = self.create_campaign({"campaignType": 97}) self.assertEqual(422, response.status_code) self.assert_all()