-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tests de la commande 'crm_brevo_sync_companies'
- Loading branch information
Showing
1 changed file
with
92 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
from unittest.mock import MagicMock, patch | ||
|
||
from django.core.management import call_command | ||
from django.test import TestCase | ||
|
||
from lemarche.siaes.factories import SiaeFactory | ||
from lemarche.utils.apis.api_brevo import create_or_update_company | ||
from lemarche.utils.urls import get_object_admin_url, get_object_share_url | ||
|
||
|
||
class CrmBrevoSyncCompaniesCommandTests(TestCase): | ||
@classmethod | ||
def setUpTestData(cls): | ||
"""Siae instances initialization""" | ||
cls.siae1 = SiaeFactory(name="Test Company 1") | ||
cls.siae2 = SiaeFactory() | ||
|
||
@patch("lemarche.utils.apis.api_brevo.sib_api_v3_sdk.Body") | ||
def test_create_or_update_company_with_mocked_body(self, mock_body): | ||
"""Test create_or_update_company with mocked body""" | ||
mock_body_instance = MagicMock() | ||
mock_body.return_value = mock_body_instance | ||
|
||
create_or_update_company(self.siae1) | ||
|
||
expected_attributes = { | ||
"domain": self.siae1.website, | ||
"phone_number": self.siae1.contact_phone_display, | ||
"app_id": self.siae1.id, | ||
"siae": True, | ||
"active": self.siae1.is_active, | ||
"description": self.siae1.description, | ||
"kind": self.siae1.kind, | ||
"address_street": self.siae1.address, | ||
"address_post_code": self.siae1.post_code, | ||
"address_city": self.siae1.city, | ||
"contact_email": self.siae1.contact_email, | ||
"logo_url": self.siae1.logo_url, | ||
"geo_range": self.siae1.geo_range, | ||
"app_url": get_object_share_url(self.siae1), | ||
"app_admin_url": get_object_admin_url(self.siae1), | ||
**self.siae1.extra_data, # includes completion_rate, tender_email_send_count, etc. | ||
} | ||
|
||
mock_body.assert_called_once_with(name="Test Company 1", attributes=expected_attributes) | ||
|
||
@patch("lemarche.utils.apis.api_brevo.create_or_update_company") | ||
def test_new_siaes_are_synced_in_brevo(self, mock_create_or_update_company): | ||
"""Test new siaes are synced in brevo""" | ||
call_command("crm_brevo_sync_companies") | ||
|
||
mock_create_or_update_company.assert_any_call(self.siae1) | ||
mock_create_or_update_company.assert_any_call(self.siae2) | ||
self.assertEqual(mock_create_or_update_company.call_count, 2) | ||
|
||
@patch("lemarche.utils.apis.api_brevo.create_or_update_company") | ||
def test_siae_extra_data_is_updated(self, mock_create_or_update_company): | ||
"""Test siae is updated if extra_data is changed.""" | ||
initial_extra_data = self.siae2.extra_data.copy() | ||
|
||
self.siae2.completion_rate = 70 | ||
self.siae2.tender_email_send_count = 10 | ||
self.siae2.save() | ||
|
||
call_command("crm_brevo_sync_companies", recently_updated=True) | ||
|
||
self.assertTrue(mock_create_or_update_company.called) | ||
|
||
self.siae2.refresh_from_db() | ||
expected_extra_data = { | ||
"completion_rate": self.siae2.completion_rate, | ||
"tender_email_send_count": self.siae2.tender_email_send_count, | ||
"recent_tender_detail_click_count": self.siae2.recent_tender_detail_click_count, | ||
} | ||
|
||
self.assertNotEqual(initial_extra_data, expected_extra_data, "siae.extra_data aurait dût être mis à jour.") | ||
|
||
@patch("lemarche.utils.apis.api_brevo.create_or_update_company") | ||
def test_siae_extra_data_is_not_updated_if_no_change(self, mock_create_or_update_company): | ||
"""Test siae is not updated if no change in extra_data.""" | ||
initial_extra_data = self.siae2.extra_data.copy() | ||
|
||
call_command("crm_brevo_sync_companies", recently_updated=True) | ||
|
||
self.assertTrue(mock_create_or_update_company.called) | ||
|
||
self.siae2.refresh_from_db() | ||
self.assertEqual( | ||
initial_extra_data, | ||
self.siae2.extra_data, | ||
"siae.extra_data a été mis à jour alors qu'il n'y avait pas de changement.", | ||
) |