mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-30 17:53:31 -04:00 
			
		
		
		
	* feat(frontend): ✨ add UI for testing email configuration * feat(backend): ✨ add email service with common templates (WIP) * test(backend): ✅ add basic tests for email configuration * set defaults * add email variables Co-authored-by: Hayden <hay-kot@pm.me>
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import pytest
 | |
| 
 | |
| from mealie.core.config import AppSettings
 | |
| from mealie.services.email import EmailService
 | |
| from mealie.services.email.email_senders import ABCEmailSender
 | |
| 
 | |
| FAKE_ADDRESS = "my_secret_email@email.com"
 | |
| 
 | |
| SUBJECTS = {"Mealie Forgot Password", "Invitation to join Mealie", "Test Email"}
 | |
| 
 | |
| 
 | |
| class TestEmailSender(ABCEmailSender):
 | |
|     def send(self, email_to: str, subject: str, html: str) -> bool:
 | |
| 
 | |
|         # check email_to:
 | |
|         assert email_to == FAKE_ADDRESS
 | |
| 
 | |
|         # check subject:
 | |
|         assert subject in SUBJECTS
 | |
| 
 | |
|         # check html is rendered:
 | |
|         assert "{{" not in html
 | |
|         assert "}}" not in html
 | |
| 
 | |
|         return True
 | |
| 
 | |
| 
 | |
| def patch_env(monkeypatch):
 | |
|     monkeypatch.setenv("SMTP_HOST", "email.mealie.io")
 | |
|     monkeypatch.setenv("SMTP_PORT", 587)
 | |
|     monkeypatch.setenv("SMTP_TLS", True)
 | |
|     monkeypatch.setenv("SMTP_FROM_NAME", "Mealie")
 | |
|     monkeypatch.setenv("SMTP_FROM_EMAIL", "mealie@mealie.io")
 | |
|     monkeypatch.setenv("SMTP_USER", "mealie@mealie.io")
 | |
|     monkeypatch.setenv("SMTP_PASSWORD", "mealie-password")
 | |
| 
 | |
| 
 | |
| @pytest.fixture()
 | |
| def email_service(monkeypatch) -> EmailService:
 | |
|     patch_env(monkeypatch)
 | |
|     email_service = EmailService(TestEmailSender())
 | |
|     email_service.settings = AppSettings()
 | |
|     return email_service
 | |
| 
 | |
| 
 | |
| def test_email_disabled():
 | |
|     email_service = EmailService(TestEmailSender())
 | |
|     email_service.settings = AppSettings()
 | |
|     success = email_service.send_test_email(FAKE_ADDRESS)
 | |
|     assert not success
 | |
| 
 | |
| 
 | |
| def test_test_email(email_service):
 | |
|     success = email_service.send_test_email(FAKE_ADDRESS)
 | |
|     assert success
 | |
| 
 | |
| 
 | |
| def test_forgot_password_email(email_service):
 | |
|     success = email_service.send_forgot_password(FAKE_ADDRESS, "https://password-url.com")
 | |
|     assert success
 | |
| 
 | |
| 
 | |
| def test_invitation_email(email_service):
 | |
|     success = email_service.send_invitation(FAKE_ADDRESS, "https://invitie-url.com")
 | |
|     assert success
 |