import json from unittest.mock import patch import pytest from tests.test_utils import FixtureLoader from models import models from tests import BaseTestCase, mock_for_user from tests.performance.fixtures.performance_metrics_fixture import fixture user1Mock = mock_for_user(1, "dev-marketing-user-1@example.com", "sme-dna|5cf0091d6c91d310fe6fcdc6") user2Mock = mock_for_user(2, "dev-marketing-user-2@example.com", "sme-dna|3po0091d6c91ty670fe6ftryf") class TestMetricsFields(BaseTestCase): url = "/performance" def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) @pytest.mark.skip(reason="no way of currently testing this") def test_get_user_fields_list(self): response = self.execute_get(self.url + "/user-metrics", headers=self.headers) items = response.json self.soft_assert(self.assertEqual, len(items), 4) self.soft_assert(self.assertEqual, items[0]["id"], 1) self.soft_assert(self.assertEqual, items[0]["format"]["id"], 3) self.soft_assert(self.assertEqual, items[0]["format"]["name"], "percentage") self.soft_assert(self.assertEqual, items[0]["name"], "App Installs") self.soft_assert(self.assertEqual, items[0]["objective"], None) self.soft_assert(self.assertEqual, items[0]["type"]["id"], 1) self.soft_assert(self.assertEqual, items[0]["type"]["name"], "advertising") self.soft_assert(self.assertEqual, items[1]["id"], 2) self.soft_assert(self.assertEqual, items[1]["format"]["id"], 3) self.soft_assert(self.assertEqual, items[1]["format"]["name"], "percentage") self.soft_assert(self.assertEqual, items[1]["name"], "Leads") self.soft_assert(self.assertEqual, items[1]["objective"], {"id": 3, "name": "Leads"}) self.soft_assert(self.assertEqual, items[1]["type"]["id"], 1) self.soft_assert(self.assertEqual, items[1]["type"]["name"], "advertising") self.soft_assert(self.assertEqual, items[2]["id"], 3) self.soft_assert(self.assertEqual, items[2]["format"]["id"], 7) self.soft_assert(self.assertEqual, items[2]["format"]["name"], "integer") self.soft_assert(self.assertEqual, items[2]["name"], "App Registrations") self.soft_assert(self.assertEqual, items[2]["objective"], {"id": 3, "name": "Leads"}) self.soft_assert(self.assertEqual, items[2]["type"]["id"], 1) self.soft_assert(self.assertEqual, items[2]["type"]["name"], "advertising") self.soft_assert(self.assertEqual, items[3]["id"], 4) self.soft_assert(self.assertEqual, items[3]["format"]["id"], 8) self.soft_assert(self.assertEqual, items[3]["format"]["name"], "currency") self.soft_assert(self.assertEqual, items[3]["name"], "CP Lead") self.soft_assert(self.assertEqual, items[3]["objective"]["id"], 4) self.soft_assert(self.assertEqual, items[3]["objective"]["name"], "Leads") self.soft_assert(self.assertEqual, items[3]["type"]["id"], 1) self.soft_assert(self.assertEqual, items[3]["type"]["name"], "advertising") self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) @pytest.mark.skip(reason="no way of currently testing this") def test_update_fields_list(self): response = self.execute_put( self.url + "/user-metrics", data=json.dumps({"metrics": [9, 10]}), headers=self.headers ) items = response.json self.assertEqual(len(items), 2) self.soft_assert(self.assertEqual, items[0]["id"], 9) self.soft_assert(self.assertEqual, items[0]["format"]["id"], 7) self.soft_assert(self.assertEqual, items[0]["format"]["name"], "integer") self.soft_assert(self.assertEqual, items[0]["name"], "Streams") self.soft_assert(self.assertEqual, items[0]["objective"]["id"], 8) self.soft_assert(self.assertEqual, items[0]["objective"]["name"], "Streams") self.soft_assert(self.assertEqual, items[0]["type"]["id"], 2) self.soft_assert(self.assertEqual, items[0]["type"]["name"], "streaming") self.soft_assert(self.assertEqual, items[1]["id"], 10) self.soft_assert(self.assertEqual, items[1]["format"]["id"], 8) self.soft_assert(self.assertEqual, items[1]["format"]["name"], "currency") self.soft_assert(self.assertEqual, items[1]["name"], "CP Sale") self.soft_assert(self.assertEqual, items[1]["objective"]["id"], 7) self.soft_assert(self.assertEqual, items[1]["objective"]["name"], "Sales") self.soft_assert(self.assertEqual, items[1]["type"]["id"], 3) self.soft_assert(self.assertEqual, items[1]["type"]["name"], "finance") self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) @pytest.mark.skip(reason="no way of currently testing this") def test_update_fields_list_wrong_id_should_rise(self): response = self.execute_put( self.url + "/user-metrics", data=json.dumps({"metrics": [259]}), headers=self.headers ) self.assertEqual(response.status_code, 400) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) @pytest.mark.skip(reason="no way of currently testing this") def test_update_fields_list_invalid_format_should_rise(self): response = self.execute_put( self.url + "/user-metrics", data=json.dumps({"metrics": ["abd"]}), headers=self.headers ) self.assertEqual(response.status_code, 400) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1Mock.jwt_decode) def test_get_all_fields_list(self): response = self.execute_get(self.url + "/metrics", headers=self.headers) items = response.json["objectives"] self.soft_assert(self.assertEqual, len(items), 8) self.soft_assert(self.assertEqual, items[0]["id"], 2) self.soft_assert(self.assertEqual, items[0]["name"], "Conversions") self.soft_assert(self.assertEqual, items[0]["fields"][0]["format"], {"id": 3, "name": "percentage"}) self.soft_assert(self.assertEqual, items[0]["fields"][0]["id"], 1) self.soft_assert(self.assertEqual, items[0]["fields"][0]["name"], "App Installs") self.soft_assert(self.assertEqual, items[0]["fields"][0]["title"], "title") self.soft_assert(self.assertEqual, items[0]["fields"][0]["subtitle"], "sub title") self.soft_assert(self.assertEqual, items[0]["fields"][0]["totalName"], "Total name") self.soft_assert(self.assertEqual, items[0]["fields"][0]["description"], "desc") self.soft_assert(self.assertEqual, items[0]["fields"][1]["id"], 2) self.soft_assert(self.assertEqual, items[0]["fields"][1]["name"], "Leads") self.soft_assert(self.assertEqual, items[0]["fields"][2]["id"], 3) self.soft_assert(self.assertEqual, items[0]["fields"][2]["name"], "App Registrations") self.soft_assert(self.assertEqual, items[0]["fields"][3]["id"], 4) self.soft_assert(self.assertEqual, items[0]["fields"][3]["name"], "CP Lead") self.soft_assert(self.assertEqual, items[0]["fields"][4]["id"], 5) self.soft_assert(self.assertEqual, items[0]["fields"][4]["name"], "U New Sessions") self.soft_assert(self.assertEqual, items[0]["fields"][5]["id"], 7) self.soft_assert(self.assertEqual, items[0]["fields"][5]["name"], "CP U New Session") self.soft_assert(self.assertEqual, items[0]["fields"][6]["id"], 6) self.soft_assert(self.assertEqual, items[0]["fields"][6]["name"], "Conversions") self.soft_assert(self.assertEqual, items[0]["fields"][7]["id"], 8) self.soft_assert(self.assertEqual, items[0]["fields"][7]["name"], "Sales") self.soft_assert(self.assertEqual, items[0]["fields"][8]["id"], 9) self.soft_assert(self.assertEqual, items[0]["fields"][8]["name"], "Streams") self.soft_assert(self.assertEqual, items[1]["id"], 3) self.soft_assert(self.assertEqual, items[2]["id"], 5) self.soft_assert(self.assertEqual, items[3]["id"], 6) self.soft_assert(self.assertEqual, items[4]["id"], 7) self.soft_assert(self.assertEqual, items[5]["id"], 8) self.soft_assert(self.assertEqual, items[6]["id"], 9) self.soft_assert(self.assertEqual, items[7]["id"], 10) self.assert_all()