diff --git a/home/migrations/0081_alter_whatsapptemplate_submission_status.py b/home/migrations/0081_alter_whatsapptemplate_submission_status.py new file mode 100644 index 00000000..8ea46152 --- /dev/null +++ b/home/migrations/0081_alter_whatsapptemplate_submission_status.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2.11 on 2024-08-06 03:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("home", "0080_assessment_skip_high_result_page_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="whatsapptemplate", + name="submission_status", + field=models.CharField( + blank=True, + choices=[ + ("NOT_SUBMITTED_YET", "Not Submitted Yet"), + ("SUBMITTED", "Submitted"), + ("FAILED", "Failed"), + ], + default="", + max_length=30, + ), + ), + ] diff --git a/home/models.py b/home/models.py index 8e598461..fb54ee96 100644 --- a/home/models.py +++ b/home/models.py @@ -1558,7 +1558,7 @@ class SubmissionStatus(models.TextChoices): max_length=30, choices=SubmissionStatus.choices, blank=True, - default=SubmissionStatus.NOT_SUBMITTED_YET, + default="", ) submission_result = models.TextField( @@ -1629,6 +1629,8 @@ def save_revision( return revision self.template_name = self.create_whatsapp_template_name() + self.submission_status = "" + self.submission_result = "" try: response_json = create_standalone_whatsapp_template( name=self.template_name, @@ -1639,22 +1641,32 @@ def save_revision( image_obj=self.image, example_values=[v["value"] for v in self.example_values.raw_data], ) - revision.content["name"] = self.name - revision.content["submission_name"] = self.template_name - revision.content["submission_status"] = self.SubmissionStatus.SUBMITTED - revision.content["submission_result"] = ( - f"Success! Template ID = {response_json['id']}" - ) + self.submission_status = _(self.SubmissionStatus.SUBMITTED) + self.submission_result = f"Success! Template ID = {response_json['id']}" + except TemplateSubmissionException as e: # The submission failed - revision.content["name"] = self.name - revision.content["submission_name"] = self.template_name - revision.content["submission_status"] = self.SubmissionStatus.FAILED - revision.content["submission_result"] = ( + self.submission_status = _(self.SubmissionStatus.FAILED) + self.submission_result = ( f"Error! {e.response_json['error']['error_user_msg']} " ) + revision.content["name"] = self.name + revision.content["submission_name"] = self.template_name + revision.content["submission_status"] = self.submission_status + revision.content["submission_result"] = self.submission_result + revision.save(update_fields=["content"]) + # TODO this publish is a workaround for now, as described in ticket Delta-877 + revision.publish() + + # Update the submissions status fields for all revisions, regardless of Draft vs Live status + revisions = self.revisions + for r in revisions: + r.content["submission_name"] = self.template_name + r.content["submission_status"] = self.submission_status + r.content["submission_result"] = self.submission_result + r.save() return revision def clean(self): @@ -1669,7 +1681,8 @@ def clean(self): message = self.message - # TODO: Explain what this does, or find a cleaner implementation + if len(message) > 1024: + errors["message"] = ValidationError("Message cannot exceed 1024 characters") # Checks for mismatches in the number of opening and closing brackets. First from right to left, then from left to right # TODO: Currently "{1}" is allowed to pass and throws an error. Add a check for this, or redo this section in a cleaner way diff --git a/home/tests/test_models.py b/home/tests/test_models.py index 6f4ae652..259d7b45 100644 --- a/home/tests/test_models.py +++ b/home/tests/test_models.py @@ -801,6 +801,24 @@ def test_variables_are_ordered(self) -> None: ], } + def test_message_max_char_count(self) -> None: + """ + Template message field cannot exceed 1024. + """ + + with pytest.raises(ValidationError) as err_info: + wat = WhatsAppTemplate( + name="wa_title", + message="a" * 1025, + category="UTILITY", + locale=Locale.objects.get(language_code="en"), + ) + wat.full_clean() + + assert err_info.value.message_dict == { + "message": ["Message cannot exceed 1024 characters"], + } + @override_settings(WHATSAPP_CREATE_TEMPLATES=False) @responses.activate def test_template_is_not_submitted_if_template_creation_is_disabled(self) -> None: diff --git a/home/wagtail_hooks.py b/home/wagtail_hooks.py index b16264ca..901665b2 100644 --- a/home/wagtail_hooks.py +++ b/home/wagtail_hooks.py @@ -251,6 +251,7 @@ class WhatsAppTemplateAdmin(SnippetViewSet): "locale", "status", "submission_status", + "submission_result", ) list_filter = ("locale",)