from models.performance_breakdown_option import BreakdownOptions from tests import BaseTestCase, mock_for_user from unittest.mock import patch from tests.performance.fixtures.breakdown_options_fixture import fixture user1Mock = mock_for_user(1, "dev-marketing-user-1@example.com", "sme-dna|5cf0091d6c91d310fe6fcdc6") class TestBreakdownOptions(BaseTestCase): url = "/performance/breakdown_options" fixture = fixture disabled_options = [BreakdownOptions.AGE_AND_GENDERS.value, BreakdownOptions.GOALS.value] artists_excluded_options = disabled_options + [BreakdownOptions.ARTISTS.value] projects_excluded_options = disabled_options + [BreakdownOptions.ARTISTS.value, BreakdownOptions.PROJECTS.value] campaigns_excluded_options = disabled_options + [ BreakdownOptions.ARTISTS.value, BreakdownOptions.PROJECTS.value, BreakdownOptions.CAMPAIGNS.value, BreakdownOptions.CATEGORIES.value, BreakdownOptions.OBJECTIVES.value, BreakdownOptions.CAMPAIGN_TYPES.value, ] days_ranges = { BreakdownOptions.DAYS.value: 30, BreakdownOptions.WEEKS.value: 90, BreakdownOptions.CHARTWEEKS.value: 90, BreakdownOptions.MONTH.value: 366, } def __verify_days_range(self, breakdown_option): self.soft_assert_equal(breakdown_option["daysRange"], self.days_ranges.get(breakdown_option["id"], 732)) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_breakdown_options_list_for_artists(self): response = self.execute_get(self.url + "/artists", headers=self.headers) self.__verify_breakdown_options_response(response, self.artists_excluded_options) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_breakdown_options_list_for_projects(self): response = self.execute_get(self.url + "/projects", headers=self.headers) self.__verify_breakdown_options_response(response, self.projects_excluded_options) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_breakdown_options_list_for_campaigns(self): response = self.execute_get(self.url + "/campaigns", headers=self.headers) self.__verify_breakdown_options_response(response, self.campaigns_excluded_options) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_breakdown_options_list_for_unassigned_campaigns(self): response = self.execute_get(self.url + "/unassigned_campaigns", headers=self.headers) self.__verify_breakdown_options_response(response, self.campaigns_excluded_options) def __verify_breakdown_options_response(self, response, excluded_options): self.assertEqual(200, response.status_code) breakdown_options = response.json self.soft_assert_equal(len(breakdown_options), 18 - len(excluded_options)) for option in breakdown_options: self.soft_assert(self.assertNotIn, option["id"], excluded_options) self.__verify_days_range(option) self.assert_all()