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 datetime import datetime, timedelta 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"} DATETIME_FORMAT = "%Y-%m-%d %H-%M" @pytest.mark.skip(reason="Test skipped because Phase logic changed") @patch("auth.atlas.atlas_token_decoder.jwt.decode", mock.jwt_decode) class TestMediaPlan(BaseTestCase): url = "/projects/500/campaigns" maxDiff = None def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) def test_create_campaign(self): end_date = datetime.now() + timedelta(days=180) start_date = datetime.now() - timedelta(days=180) data = { "name": "test111", "startDate": datetime.strftime(start_date, "%Y-%m-%d"), "endDate": datetime.strftime(end_date, "%Y-%m-%d"), "platforms": [41, 50], } response = self.execute_post(self.url, headers=self.headers, data=json.dumps(data)) self.assertEqual(201, response.status_code) created_campaign = response.json self.soft_assert(self.assertEqual, created_campaign["id"], 1) self.soft_assert(self.assertEqual, created_campaign["name"], "test111") self.soft_assert(self.assertEqual, created_campaign["budgetSpend"], None) self.soft_assert(self.assertEqual, created_campaign["plannedBudget"], 0.0) self.soft_assert(self.assertEqual, created_campaign["projectId"], 500) self.soft_assert(self.assertEqual, created_campaign["createUser"]["id"], "sme-dna|5cf0091d6c91d310fe6fcdc6") self.soft_assert(self.assertEqual, created_campaign["createUser"]["email"], "dev-marketing-user-1@example.com") self.soft_assert(self.assertEqual, created_campaign["editUser"]["id"], "sme-dna|5cf0091d6c91d310fe6fcdc6") self.soft_assert(self.assertEqual, created_campaign["editUser"]["email"], "dev-marketing-user-1@example.com") self.soft_assert(self.assertEqual, created_campaign["startDate"], datetime.strftime(start_date, "%Y-%m-%d")) self.soft_assert(self.assertEqual, created_campaign["endDate"], datetime.strftime(end_date, "%Y-%m-%d")) self.soft_assert(self.assertEqual, created_campaign["status"], 2) self.assertEqual(1, len(created_campaign["territories"])) self.soft_assert(self.assertEqual, created_campaign["territories"][0]["id"], 0) self.soft_assert(self.assertEqual, created_campaign["territories"][0]["name"], "GLBL") self.soft_assert(self.assertEqual, created_campaign["notes"], None) self.soft_assert(self.assertEqual, created_campaign["phases"], [555]) self.soft_assert(self.assertEqual, len(created_campaign["genders"]), 3) self.soft_assert( self.assertEqual, created_campaign["genders"], [{"id": 1, "name": "Male"}, {"id": 2, "name": "Female"}, {"id": 3, "name": "Non-Binary"}], ) self.soft_assert(self.assertEqual, created_campaign["audienceAge"]["lowerAge"], 13) self.soft_assert(self.assertEqual, created_campaign["audienceAge"]["higherAge"], 65) self.assert_all() def test_create_campaign_with_invalid_platform(self): """Creating campaign with platforms from not the same PlatformGroup""" end_date = datetime.now() + timedelta(days=180) start_date = datetime.now() - timedelta(days=180) data = { "name": "test111", "startDate": datetime.strftime(start_date, "%Y-%m-%d"), "endDate": datetime.strftime(end_date, "%Y-%m-%d"), "platforms": [2, 3], } response = self.execute_post(self.url, headers=self.headers, data=json.dumps(data)) self.assertEqual(400, response.status_code) self.assertEqual( "Campaign platforms should be from the same group", response.json["detail"] )