from unittest.mock import patch from tests.test_utils import FixtureLoader from models import models from tests import BaseTestCase, mock_for_user from tests.projects.fixtures.projects_marketing_mix_stats_fixture import fixture user1Mock = mock_for_user(1, "user-1@example.com", "sme-dna|5cf0091d6c91d310fe6fcdc6") user2Mock = mock_for_user(5, "user-2@example.com", "sme-dna|3po0091d6c91ty670fe6ftryf") class TestProjectMarketingMix(BaseTestCase): def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) def __verify_marketing_mix_item(self, sut, id, name, budget): self.assertEqual(sut["id"], id) self.assertEqual(sut["name"], name) self.assertEqual(sut["budget"], budget) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_marketing_mix_stats_should_return_valid_statistics(self): response = self.app.test_client().get("/projects/500/marketing-mix", headers=self.headers) self.assertEqual(200, response.status_code) self.assertEqual(len(response.json), 4) self.__verify_marketing_mix_item(response.json[0], 1, "Digital", 2950.0) self.assertEqual(len(response.json[0]["subtypes"]), 3) self.__verify_marketing_mix_item(response.json[0]["subtypes"][0], 1, "Apple TV", 1000.00) self.__verify_marketing_mix_item(response.json[0]["subtypes"][1], 3, "High Society", 900.0) self.__verify_marketing_mix_item(response.json[0]["subtypes"][2], 4, "Live", 1050.0) self.__verify_marketing_mix_item(response.json[1], 2, "Traditional", 390.0) self.assertEqual(len(response.json[1]["subtypes"]), 2) self.__verify_marketing_mix_item(response.json[1]["subtypes"][0], 6, "HypeBeast", 200.0) self.__verify_marketing_mix_item(response.json[1]["subtypes"][1], 8, "Megaphone", 190.0) self.__verify_marketing_mix_item(response.json[2], 3, "Radio", 6230.0) self.__verify_marketing_mix_item(response.json[3], 4, "Other", 27195.43) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_budget_stats_no_campaigns_should_return_empty_statistics(self): response = self.app.test_client().get("/projects/501/marketing-mix", headers=self.headers) self.assertEqual(200, response.status_code) self.assertEqual(len(response.json), 0) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user2Mock.jwt_decode) def test_get_marketing_mix_stats_no_permission_should_return_403(self): response = self.app.test_client().get("/projects/500/marketing-mix", headers=self.headers) self.assertEqual(403, response.status_code) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_marketing_mix_stats_no_project_should_return_404(self): response = self.app.test_client().get("/projects/51/marketing-mix", headers=self.headers) self.assertEqual(404, response.status_code)