async def test_delete_sms_template(self, fs):
        # Instantiate Mock Client
        client = MockOktaClient(fs)

        # Create SMS Template
        sms_translations = models.SmsTemplateTranslations()
        sms_translations.es = \
            "${org.name}: el código de verificación es ${code}"
        sms_translations.fr = \
            "${org.name}: votre code de vérification est ${code}"
        sms_translations.it = "${org.name}: il codice di verifica è ${code}"

        sms_template_model = models.SmsTemplate({
            "name":
            f"{TestTemplatesResource.SDK_PREFIX}-test-template",
            "type":
            models.SmsTemplateType.SMS_VERIFY_CODE,
            "template":
            "${org.name}: your verification code is ${code}",
            "translations":
            sms_translations
        })

        try:
            created_template, _, err = await client.\
                create_sms_template(sms_template_model)
            assert err is None
            assert isinstance(created_template, models.SmsTemplate)
            assert created_template.name == sms_template_model.name
            assert created_template.type == sms_template_model.type
            assert created_template.template == sms_template_model.template

            # Retrieve
            retrieved_template, _, err = await client.\
                get_sms_template(created_template.id)
            assert err is None
            assert retrieved_template.id == created_template.id
            assert retrieved_template.name == created_template.name
            assert retrieved_template.template == created_template.template
            assert retrieved_template.translations.es == sms_translations.es
            assert retrieved_template.translations.it == sms_translations.it
            assert retrieved_template.translations.fr == sms_translations.fr

            # Delete
            _, err = await client.delete_sms_template(created_template.id)
            assert err is None

            # Retrieve
            retrieved_template, resp, err = await client.\
                get_sms_template(created_template.id)
            assert err is not None
            assert isinstance(err, OktaAPIError)
            assert resp.get_status() == HTTPStatus.NOT_FOUND
            assert retrieved_template is None
        finally:
            try:
                _, err = await client.delete_sms_template(created_template.id)
            except Exception:
                pass
    async def test_create_list_sms_templates(self, fs):
        # Instantiate Mock Client
        client = MockOktaClient(fs)

        # Create SMS Template
        sms_translations = models.SmsTemplateTranslations()
        sms_translations.es = \
            "${org.name}: el código de verificación es ${code}"
        sms_translations.fr = \
            "${org.name}: votre code de vérification est ${code}"
        sms_translations.it = "${org.name}: il codice di verifica è ${code}"

        sms_template_model = models.SmsTemplate({
            "name":
            f"{TestTemplatesResource.SDK_PREFIX}-test-template",
            "type":
            models.SmsTemplateType.SMS_VERIFY_CODE,
            "template":
            "${org.name}: your verification code is ${code}",
            "translations":
            sms_translations
        })

        try:
            created_template, _, err = await client.\
                create_sms_template(sms_template_model)
            assert err is None
            assert isinstance(created_template, models.SmsTemplate)
            assert created_template.name == sms_template_model.name
            assert created_template.type == sms_template_model.type
            assert created_template.template == sms_template_model.template
            assert created_template.translations.es == sms_translations.es
            assert created_template.translations.it == sms_translations.it
            assert created_template.translations.fr == sms_translations.fr

            # List
            sms_templates, _, err = await client.list_sms_templates()
            assert err is None
            assert isinstance(sms_templates, list)
            assert next((template for template in sms_templates
                         if template.id == created_template.id),
                        None) is not None

        finally:
            # Delete
            _, err = await client.delete_sms_template(created_template.id)
            assert err is None
    async def test_partial_update_sms_template(self, fs):
        # Instantiate Mock Client
        client = MockOktaClient(fs)

        # Create SMS Template
        sms_translations = models.SmsTemplateTranslations()
        sms_translations.es = \
            "${org.name}: el código de verificación es ${code}"
        sms_translations.fr = \
            "${org.name}: votre code de vérification est ${code}"
        sms_translations.it = "${org.name}: il codice di verifica è ${code}"

        sms_template_model = models.SmsTemplate({
            "name":
            f"{TestTemplatesResource.SDK_PREFIX}-test-template",
            "type":
            models.SmsTemplateType.SMS_VERIFY_CODE,
            "template":
            "${org.name}: your verification code is ${code}",
            "translations":
            sms_translations
        })

        try:
            created_template, _, err = await client.\
                create_sms_template(sms_template_model)
            assert err is None
            assert isinstance(created_template, models.SmsTemplate)
            assert created_template.name == sms_template_model.name
            assert created_template.type == sms_template_model.type
            assert created_template.template == sms_template_model.template

            # Retrieve
            retrieved_template, _, err = await client.\
                get_sms_template(created_template.id)
            assert err is None
            assert retrieved_template.id == created_template.id
            assert retrieved_template.name == created_template.name
            assert retrieved_template.template == created_template.template
            assert retrieved_template.translations.es == sms_translations.es
            assert retrieved_template.translations.it == sms_translations.it
            assert retrieved_template.translations.fr == sms_translations.fr

            # Update
            temporary_template = models.SmsTemplate({
                "translations":
                models.SmsTemplateTranslations(
                    {"de": "${org.name}: ihre bestätigungscode ist ${code}."})
            })
            updated_template, _, err = await client.\
                partial_update_sms_template(
                    created_template.id, temporary_template)
            assert err is None
            assert updated_template.id == created_template.id
            assert updated_template.name == created_template.name
            assert updated_template.type == created_template.type
            assert updated_template.translations.de ==\
                temporary_template.translations.de

            # Retrieve
            retrieved_template, _, err = await client.\
                get_sms_template(created_template.id)
            assert err is None
            assert retrieved_template.id == created_template.id
            assert retrieved_template.name == updated_template.name
            assert retrieved_template.template == created_template.template
            assert retrieved_template.translations.es == sms_translations.es
            assert retrieved_template.translations.it == sms_translations.it
            assert retrieved_template.translations.fr == sms_translations.fr
            assert retrieved_template.translations.de ==\
                temporary_template.translations.de

        finally:
            # Delete
            _, err = await client.delete_sms_template(created_template.id)
            assert err is None