diff --git a/modoboa/pdfcredentials/api/v2/serializers.py b/modoboa/pdfcredentials/api/v2/serializers.py index 0a0bab668..ffb8dcf4b 100644 --- a/modoboa/pdfcredentials/api/v2/serializers.py +++ b/modoboa/pdfcredentials/api/v2/serializers.py @@ -44,10 +44,12 @@ class PDFCredentialsSettingsSerializer(serializers.Serializer): def validate(self, data): """Check that directory exists.""" - enabled_pdfcredentials = data.get("enabled_pdfcredentials", False) + enabled_pdfcredentials = data.get("enabled_pdfcredentials", None) condition = (enabled_pdfcredentials or - param_tools.get_global_parameter("enabled_pdfcredentials") + (enabled_pdfcredentials is None and + param_tools.get_global_parameter("enabled_pdfcredentials") ) + ) if condition: storage_dir = data.get("storage_dir", None) if storage_dir is not None: diff --git a/modoboa/pdfcredentials/api/v2/tests.py b/modoboa/pdfcredentials/api/v2/tests.py index 2c3d79817..88cb981c3 100644 --- a/modoboa/pdfcredentials/api/v2/tests.py +++ b/modoboa/pdfcredentials/api/v2/tests.py @@ -170,12 +170,19 @@ class PDFCredentialViewTestCase(ModoAPITestCase): self.set_global_parameter("storage_dir", "/nonexistentdir") self.set_global_parameter("enabled_pdfcredentials", False) url = reverse("v2:parameter-detail", args=["pdfcredentials"]) + data = { + "webpanel_url": "http://localhost", + "smtp_server_address": "mail.localhost", + "imap_server_address": "mail.localhost", + } + # Test that we can't activate it without providing a valid storage dir. - data = {"enabled_pdfcredentials": True} + data["enabled_pdfcredentials"] = True resp = self.client.put(url, data, format="json") self.assertEqual(resp.status_code, 400) + self.assertIn(b"Directory not found", resp.content) # Test that we can disable it even if the directory is not right. - self.set_global_parameter("enabled_pdfcredentials", False) - data = {"enabled_pdfcredentials": True} + self.set_global_parameter("enabled_pdfcredentials", True) + data["enabled_pdfcredentials"] = False resp = self.client.put(url, data, format="json") self.assertEqual(resp.status_code, 200)