from tests import BaseTestCase, mock from unittest.mock import patch, MagicMock from tests.test_utils import FixtureLoader from models import models, Campaign from tests.campaigns.fixtures.assignable_campaigns_fixture import fixture @patch("auth.atlas.atlas_token_decoder.jwt.decode", mock.jwt_decode) class TestAssignableCampaigns(BaseTestCase): url = "/projects/500/assignable-campaigns" def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) def test_get_assignable_campaigns(self): params = { "limit": 20, "offset": 0 } response = self.execute_get(self.url, query_string=params, headers=self.headers) self.assertEqual(200, response.status_code) campaigns = response.json['items'] self.assertEqual(len(campaigns), 7) self.assertEqual(response.json['total'], 7) self.assertEqual(campaigns[0]["id"], 6) self.assertEqual(campaigns[0]["name"], "pending_campaign_for_500_project") self.assertEqual(campaigns[0]["isPending"], True) self.assertEqual(campaigns[0]["editDate"], "2019-07-22T20:14:55.355226+00:00") self.assertEqual(campaigns[1]["id"], 5) self.assertEqual(campaigns[1]["name"], "pending_campaign2_for_500_project") self.assertEqual(campaigns[1]["isPending"], True) self.assertEqual(campaigns[1]["editDate"], "2019-07-22T18:14:55.355226+00:00") self.assertEqual(campaigns[2]["id"], 7) self.assertEqual(campaigns[2]["name"], "approved_campaign_for_500_project") self.assertEqual(campaigns[2]["isPending"], False) self.assertEqual(campaigns[2]["editDate"], "2019-07-22T21:14:55.355226+00:00") self.assertEqual(campaigns[3]["id"], 4) self.assertEqual(campaigns[3]["name"], "approved_campaign2_for_500_project") self.assertEqual(campaigns[3]["isPending"], False) self.assertEqual(campaigns[3]["editDate"], "2019-07-22T20:14:55.355226+00:00") self.assertEqual(campaigns[4]["id"], 9) self.assertEqual(campaigns[4]["name"], "test_campaign_9") self.assertEqual(campaigns[4]["isPending"], False) self.assertEqual(campaigns[4]["editDate"], "2019-07-22T22:14:55.355226+00:00") self.assertEqual(campaigns[5]["id"], 10) self.assertEqual(campaigns[5]["name"], "Unassigned Campaign") self.assertEqual(campaigns[5]["isPending"], False) self.assertEqual(campaigns[5]["editDate"], "2019-07-22T20:14:55.355226+00:00") self.assertEqual(campaigns[6]["id"], 3) self.assertEqual(campaigns[6]["name"], "assigned_pending_campaign_to_another_project_with_same_label") self.assertEqual(campaigns[6]["isPending"], False) self.assertEqual(campaigns[6]["editDate"], "2019-07-22T20:14:55.355226+00:00") @patch.object(Campaign, "search", MagicMock(return_value=[9])) def test_search_assignable_campaign_by_name(self): params = { "limit": 20, "offset": 0, "freeText": "test_campaign_9" } response = self.execute_get(self.url, query_string=params, headers=self.headers) self.assertEqual(200, response.status_code) campaigns = response.json['items'] self.assertEqual(campaigns[0]["id"], 9) self.assertEqual(campaigns[0]["name"], "test_campaign_9") self.assertEqual(campaigns[0]["source"], "facebook") self.assertEqual(campaigns[0]["isPending"], False) @patch.object(Campaign, "search", MagicMock(return_value=[6])) def test_search_assignable_pending_campaign_by_external_id(self): params = { "limit": 20, "offset": 0, "freeText": "jrvnvfvfffvw22" } response = self.execute_get(self.url, query_string=params, headers=self.headers) self.assertEqual(200, response.status_code) campaigns = response.json['items'] self.assertEqual(campaigns[0]["id"], 6) self.assertEqual(campaigns[0]["name"], "pending_campaign_for_500_project") self.assertEqual(campaigns[0]["source"], "google") self.assertEqual(campaigns[0]["isPending"], True) @patch.object(Campaign, "search", MagicMock(return_value=[7])) def test_search_assignable_approved_campaign_by_id(self): params = { "limit": 20, "offset": 0, "freeText": "jrvnvfvfffvw" } response = self.execute_get(self.url, query_string=params, headers=self.headers) self.assertEqual(200, response.status_code) campaigns = response.json['items'] self.assertEqual(campaigns[0]["id"], 7) self.assertEqual(campaigns[0]["name"], "approved_campaign_for_500_project") self.assertEqual(campaigns[0]["source"], "google") self.assertEqual(campaigns[0]["isPending"], False) @patch.object(Campaign, "search", MagicMock(return_value=[2])) def test_search_already_assigned_to_another_project_campaign(self): params = { "limit": 20, "offset": 0, "freeText": "assigned_approved_campaign_to_another_project_with_same_label" } response = self.execute_get(self.url, query_string=params, headers=self.headers) self.assertEqual(200, response.status_code) campaigns = response.json['items'] self.assertEqual(len(campaigns), 0) @patch.object(Campaign, "search", MagicMock(return_value=[11])) def test_search_campaign_from_different_label(self): params = { "limit": 20, "offset": 0, "freeText": "Unassigned Campaign from different label" } response = self.execute_get(self.url, query_string=params, headers=self.headers) self.assertEqual(200, response.status_code) campaigns = response.json['items'] self.assertEqual(len(campaigns), 0) @patch.object(Campaign, "search", MagicMock(return_value=[12])) def test_search_campaign_with_different_currency(self): params = { "limit": 20, "offset": 0, "freeText": "Unassigned Campaign with different currency" } response = self.execute_get(self.url, query_string=params, headers=self.headers) self.assertEqual(200, response.status_code) campaigns = response.json['items'] self.assertEqual(len(campaigns), 0)