from __future__ import annotations import unittest from govoplan_core.mail.config import ImapServerConfig, normalize_split_transport_credentials class MailConfigTests(unittest.TestCase): def test_legacy_sent_folder_populates_standard_mapping(self) -> None: config = ImapServerConfig.model_validate( {"host": "imap.example.test", "sent_folder": " Sent Items "} ) self.assertEqual("Sent Items", config.sent_folder) self.assertIsNotNone(config.folder_mappings) assert config.folder_mappings is not None self.assertEqual("Sent Items", config.folder_mappings.sent) def test_standard_sent_mapping_remains_legacy_append_default(self) -> None: config = ImapServerConfig.model_validate( { "host": "imap.example.test", "sent_folder": "Old Sent", "folder_mappings": { "inbox": " INBOX ", "sent": "Sent Items", "junk": " ", }, } ) self.assertEqual("Sent Items", config.sent_folder) assert config.folder_mappings is not None self.assertEqual("INBOX", config.folder_mappings.inbox) self.assertEqual("Sent Items", config.folder_mappings.sent) self.assertIsNone(config.folder_mappings.junk) def test_normalize_split_transport_credentials_moves_legacy_auth_fields(self) -> None: payload = normalize_split_transport_credentials( { "smtp": {"host": "smtp.example.test", "username": "smtp-user", "password": "smtp-secret"}, "imap": {"host": "imap.example.test", "enabled": True, "username": "imap-user"}, "credentials": {"smtp": {"username": "existing"}}, } ) self.assertEqual( { "smtp": {"host": "smtp.example.test"}, "imap": {"host": "imap.example.test"}, "credentials": { "smtp": {"username": "existing", "password": "smtp-secret"}, "imap": {"username": "imap-user"}, }, }, payload, ) if __name__ == "__main__": unittest.main()