Skip to content

Commit

Permalink
fix merge
Browse files Browse the repository at this point in the history
  • Loading branch information
kolok committed Apr 17, 2024
1 parent fd17de0 commit 2fa620b
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 166 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,5 @@ node_modules/
# celery beat schedule files
celerybeat-schedule.dat
celerybeat-schedule.dir
celerybeat-schedule.bak
celerybeat-schedule.bak
celerybeat-schedule
10 changes: 7 additions & 3 deletions conventions/services/convention_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,17 +85,21 @@ def _compute_total_locaux_collectifs(convention):

def get_or_generate_convention_doc(
convention: Convention, save_data=False
) -> DocxTemplate:
) -> io.BytesIO:
if convention.fichier_override_cerfa and convention.fichier_override_cerfa != "{}":
files_dict = json.loads(convention.fichier_override_cerfa)
files = list(files_dict["files"].values())
if len(files) > 0:
file_dict = files[0]
uploaded_file = UploadedFile.objects.get(uuid=file_dict["uuid"])
return UploadService().get_file(
return UploadService().get_io_file(
uploaded_file.filepath(str(convention.uuid))
)
return generate_convention_doc(convention=convention, save_data=save_data)
doc = generate_convention_doc(convention=convention, save_data=save_data)
file_stream = io.BytesIO()
doc.save(file_stream)
file_stream.seek(0)
return file_stream


def generate_convention_doc(convention: Convention, save_data=False) -> DocxTemplate:
Expand Down
219 changes: 64 additions & 155 deletions conventions/tests/test_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"conventions.models.convention.Convention.get_email_bailleur_users",
Mock(return_value=["[email protected]"]),
)
@patch("conventions.tasks.task_generate_and_send", autospec=True)
@patch("conventions.tasks.generate_pdf", autospec=True)
@patch("conventions.tasks.get_or_generate_convention_doc", autospec=True)
class GenerateAndSendTest(TestCase):
def _create_pdf_file_in_storage(self, convention_uuid: str):
Expand Down Expand Up @@ -50,7 +50,7 @@ def setUp(self):
self._create_pdf_file_in_storage(convention_uuid=str(self.convention.uuid))

def test_generate_and_send_logement_ordinaire(
self, mock_generate_convention_doc, mock_generate_pdf
self, mock_get_or_generate_convention_doc, mock_generate_pdf
):
self.programme.nature_logement = NatureLogement.LOGEMENTSORDINAIRES
self.programme.save()
Expand All @@ -63,12 +63,12 @@ def test_generate_and_send_logement_ordinaire(

task_generate_and_send(**task_kwargs)

mock_generate_convention_doc.assert_called_once_with(
mock_get_or_generate_convention_doc.assert_called_once_with(
convention=self.convention, save_data=True
)
mock_generate_pdf.assert_called_once_with(
convention_uuid=str(self.convention.uuid),
doc=mock_generate_convention_doc.return_value,
doc=mock_get_or_generate_convention_doc.return_value,
)

self.assertEqual(
Expand All @@ -91,126 +91,33 @@ def test_generate_and_send_logement_ordinaire(
},
)

with patch("conventions.tasks.get_or_generate_convention_doc", autospec=True):
with patch(
"conventions.tasks.generate_pdf", autospec=True
) as mocked_generate_pdf:
mocked_generate_pdf.return_value = "convention.pdf"
args = {
"convention_uuid": str(self.convention.uuid),
"convention_url": "https://target.to.convention.display",
"convention_email_validator": "[email protected]",
}
generate_and_send(args)
self.assertEqual(
mail.outbox[0].anymail_test_params["attachments"][0].name,
"convention.pdf",
)
self.assertEqual(
mail.outbox[0].anymail_test_params["template_id"],
EmailTemplateID.ItoB_CONVENTION_VALIDEE.value,
)
self.assertDictEqual(
mail.outbox[0].anymail_test_params["merge_global_data"],
{
"convention_url": "https://target.to.convention.display",
"convention": str(self.convention),
"adresse": "1 rue de la paix",
"code_postal": "75000",
"ville": "Paris",
"nb_convention_exemplaires": 12,
},
)
self.convention.programme.nature_logement = (
NatureLogement.RESIDENCEUNIVERSITAIRE
)
self.convention.programme.save()
generate_and_send(args)
self.assertEqual(
mail.outbox[0].anymail_test_params["attachments"][0].name,
"convention.pdf",
)
self.assertEqual(
mail.outbox[0].anymail_test_params["template_id"],
EmailTemplateID.ItoB_CONVENTION_VALIDEE.value,
)
self.assertDictEqual(
mail.outbox[0].anymail_test_params["merge_global_data"],
{
"convention_url": "https://target.to.convention.display",
"convention": str(self.convention),
"adresse": "1 rue de la paix",
"code_postal": "75000",
"ville": "Paris",
"nb_convention_exemplaires": 12,
},
)

self.programme.nature_logement = NatureLogement.RESIDENCEUNIVERSITAIRE
self.programme.save()

with patch("conventions.tasks.get_or_generate_convention_doc", autospec=True):
with patch(
"conventions.tasks.generate_pdf", autospec=True
) as mocked_generate_pdf:
mocked_generate_pdf.return_value = "convention.pdf"
generate_and_send(args)
self.assertEqual(
mail.outbox[0].anymail_test_params["attachments"][0].name,
f"convention_{self.convention.uuid}.zip",
)
self.assertEqual(
mail.outbox[0].anymail_test_params["template_id"],
EmailTemplateID.ItoB_CONVENTION_VALIDEE.value,
)
self.assertDictEqual(
mail.outbox[0].anymail_test_params["merge_global_data"],
{
"convention_url": "https://target.to.convention.display",
"convention": str(self.convention),
"adresse": "1 rue de la paix",
"code_postal": "75000",
"ville": "Paris",
"nb_convention_exemplaires": 12,
},
)

mock_generate_convention_doc.assert_called_once_with(
convention=self.convention, save_data=True
self.convention.programme.nature_logement = (
NatureLogement.RESIDENCEUNIVERSITAIRE
)
mock_generate_pdf.assert_called_once_with(
convention_uuid=str(self.convention.uuid),
doc=mock_generate_convention_doc.return_value,
self.convention.programme.save()
task_generate_and_send(**task_kwargs)
self.assertEqual(
mail.outbox[0].anymail_test_params["attachments"][0].name,
f"{self.convention.uuid}.pdf",
)
self.assertEqual(
mail.outbox[0].anymail_test_params["template_id"],
EmailTemplateID.ItoB_CONVENTION_VALIDEE.value,
)
self.assertDictEqual(
mail.outbox[0].anymail_test_params["merge_global_data"],
{
"convention_url": "https://target.to.convention.display",
"convention": str(self.convention),
"adresse": "1 rue de la paix",
"code_postal": "75000",
"ville": "Paris",
"nb_convention_exemplaires": 12,
},
)

with patch("conventions.tasks.get_or_generate_convention_doc", autospec=True):
with patch(
"conventions.tasks.generate_pdf", autospec=True
) as mocked_generate_pdf:
mocked_generate_pdf.return_value = "convention.pdf"
task_generate_and_send(args)
self.assertEqual(
mail.outbox[0].anymail_test_params["attachments"][0].name,
f"convention_{self.convention.uuid}.zip",
)
self.assertEqual(
mail.outbox[0].anymail_test_params["template_id"],
EmailTemplateID.ItoB_CONVENTION_VALIDEE.value,
)
self.assertDictEqual(
mail.outbox[0].anymail_test_params["merge_global_data"],
{
"convention_url": "https://target.to.convention.display",
"convention": str(self.convention),
"adresse": "1 rue de la paix",
"code_postal": "75000",
"ville": "Paris",
"nb_convention_exemplaires": 12,
},
)

def test_generate_and_send_foyer(
self, mock_generate_convention_doc, mock_generate_pdf
self, mock_get_or_generate_convention_doc, mock_generate_pdf
):
self.programme.nature_logement = NatureLogement.AUTRE
self.programme.save()
Expand All @@ -221,12 +128,12 @@ def test_generate_and_send_foyer(
convention_email_validator="[email protected]",
)

mock_generate_convention_doc.assert_called_once_with(
mock_get_or_generate_convention_doc.assert_called_once_with(
convention=self.convention, save_data=True
)
mock_generate_pdf.assert_called_once_with(
convention_uuid=str(self.convention.uuid),
doc=mock_generate_convention_doc.return_value,
doc=mock_get_or_generate_convention_doc.return_value,
)

self.assertEqual(
Expand All @@ -250,7 +157,7 @@ def test_generate_and_send_foyer(
)

def test_generate_and_send_residence(
self, mock_generate_convention_doc, mock_generate_pdf
self, mock_get_or_generate_convention_doc, mock_generate_pdf
):
self.programme.nature_logement = NatureLogement.RESIDENCEDACCUEIL
self.programme.save()
Expand All @@ -261,12 +168,12 @@ def test_generate_and_send_residence(
convention_email_validator="[email protected]",
)

mock_generate_convention_doc.assert_called_once_with(
mock_get_or_generate_convention_doc.assert_called_once_with(
convention=self.convention, save_data=True
)
mock_generate_pdf.assert_called_once_with(
convention_uuid=str(self.convention.uuid),
doc=mock_generate_convention_doc.return_value,
doc=mock_get_or_generate_convention_doc.return_value,
)

self.assertEqual(
Expand All @@ -290,7 +197,7 @@ def test_generate_and_send_residence(
)

def test_generate_and_send_avenant(
self, mock_generate_convention_doc, mock_generate_pdf
self, mock_get_or_generate_convention_doc, mock_generate_pdf
):
self.programme.nature_logement = NatureLogement.RESIDENCEDACCUEIL
self.programme.save()
Expand All @@ -301,32 +208,34 @@ def test_generate_and_send_avenant(
"convention_url": "https://target.to.convention.display",
"convention_email_validator": "[email protected]",
}
with patch("conventions.tasks.get_or_generate_convention_doc", autospec=True):
with patch(
"conventions.tasks.generate_pdf", autospec=True
) as mocked_generate_pdf:
args = {
"convention_uuid": str(avenant.uuid),
"convention_url": "https://target.to.convention.display",
"convention_email_validator": "[email protected]",
}
task_generate_and_send(args)
self.assertEqual(
mail.outbox[0].anymail_test_params["attachments"][0].name,
"convention.pdf",
)
self.assertEqual(
mail.outbox[0].anymail_test_params["template_id"],
EmailTemplateID.ItoB_AVENANT_VALIDE.value,
)
self.assertDictEqual(
mail.outbox[0].anymail_test_params["merge_global_data"],
{
"convention_url": "https://target.to.convention.display",
"convention": str(avenant),
"adresse": "1 rue de la paix",
"code_postal": "75000",
"ville": "Paris",
"nb_convention_exemplaires": 12,
},
)
self._create_pdf_file_in_storage(convention_uuid=str(avenant.uuid))

task_generate_and_send(**args)

mock_get_or_generate_convention_doc.assert_called_once_with(
convention=avenant, save_data=True
)
mock_generate_pdf.assert_called_once_with(
convention_uuid=str(avenant.uuid),
doc=mock_get_or_generate_convention_doc.return_value,
)

self.assertEqual(
mail.outbox[0].anymail_test_params["attachments"][0].name,
f"{avenant.uuid}.pdf",
)
self.assertEqual(
mail.outbox[0].anymail_test_params["template_id"],
EmailTemplateID.ItoB_AVENANT_VALIDE.value,
)
self.assertDictEqual(
mail.outbox[0].anymail_test_params["merge_global_data"],
{
"convention_url": "https://target.to.convention.display",
"convention": str(avenant),
"adresse": "1 rue de la paix",
"code_postal": "75000",
"ville": "Paris",
"nb_convention_exemplaires": 12,
},
)
18 changes: 11 additions & 7 deletions upload/services.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import errno
import io

from django.conf import settings
from django.core.files import File
Expand Down Expand Up @@ -62,17 +63,20 @@ def upload_file_io(self, file_io) -> None:
destination.write(file_io.getbuffer())
destination.close()

def get_file(self, filepath=None):
if filepath:
return default_storage.open(
filepath,
"rb",
)
def get_file(self, filepath=None) -> File:
filepath = filepath or self.path
return default_storage.open(
self.path,
filepath,
"rb",
)

def get_io_file(self, filepath=None) -> io.BytesIO:
filepath = filepath or self.path
content = b""
with default_storage.open(filepath, "rb") as file:
content = file.read()
return io.BytesIO(content)

@property
def path(self):
return f"{self.convention_dirpath}/{self.filename}"

0 comments on commit 2fa620b

Please sign in to comment.