add new sender formats: NAME_ONLY, AT_ONLY, NO_NAME
This commit is contained in:
parent
922fa4925e
commit
fc42db43ca
|
@ -189,6 +189,9 @@ class PlanEnum(EnumE):
|
|||
class SenderFormatEnum(EnumE):
|
||||
AT = 0 # John Wick - john at wick.com
|
||||
A = 2 # John Wick - john(a)wick.com
|
||||
NAME_ONLY = 5 # John Wick
|
||||
AT_ONLY = 6 # john at wick.com
|
||||
NO_NAME = 7
|
||||
|
||||
|
||||
class AliasGeneratorEnum(EnumE):
|
||||
|
@ -1555,28 +1558,37 @@ class Contact(Base, ModelMixin):
|
|||
def new_addr(self):
|
||||
"""
|
||||
Replace original email by reply_email. Possible formats:
|
||||
- first@example.com via SimpleLogin <reply_email> OR
|
||||
- First Last - first at example.com <reply_email> OR
|
||||
- First Last - first(a)example.com <reply_email> OR
|
||||
- First Last - first@example.com <reply_email> OR
|
||||
- First Last <reply_email>
|
||||
- first at example.com <reply_email>
|
||||
- reply_email
|
||||
And return new address with RFC 2047 format
|
||||
|
||||
`new_email` is a special reply address
|
||||
"""
|
||||
user = self.user
|
||||
sender_format = user.sender_format if user else SenderFormatEnum.AT.value
|
||||
|
||||
if sender_format == SenderFormatEnum.AT.value:
|
||||
formatted_email = self.website_email.replace("@", " at ").strip()
|
||||
else:
|
||||
formatted_email = self.website_email.replace("@", "(a)").strip()
|
||||
if sender_format == SenderFormatEnum.NO_NAME.value:
|
||||
return self.reply_email
|
||||
|
||||
# Prefix name to formatted email if available
|
||||
new_name = (
|
||||
(self.name + " - " + formatted_email)
|
||||
if self.name and self.name != self.website_email.strip()
|
||||
else formatted_email
|
||||
)
|
||||
if sender_format == SenderFormatEnum.NAME_ONLY.value:
|
||||
new_name = self.name
|
||||
elif sender_format == SenderFormatEnum.AT_ONLY.value:
|
||||
new_name = self.website_email.replace("@", " at ").strip()
|
||||
elif sender_format == SenderFormatEnum.AT.value:
|
||||
formatted_email = self.website_email.replace("@", " at ").strip()
|
||||
new_name = (
|
||||
(self.name + " - " + formatted_email)
|
||||
if self.name and self.name != self.website_email.strip()
|
||||
else formatted_email
|
||||
)
|
||||
else: # SenderFormatEnum.A.value
|
||||
formatted_email = self.website_email.replace("@", "(a)").strip()
|
||||
new_name = (
|
||||
(self.name + " - " + formatted_email)
|
||||
if self.name and self.name != self.website_email.strip()
|
||||
else formatted_email
|
||||
)
|
||||
|
||||
new_addr = formataddr((new_name, self.reply_email)).strip()
|
||||
return new_addr.strip()
|
||||
|
|
|
@ -303,6 +303,21 @@
|
|||
John Wick - john(a)wick.com
|
||||
</option>
|
||||
|
||||
<option value="{{ SenderFormatEnum.NAME_ONLY.value }}"
|
||||
{% if current_user.sender_format == SenderFormatEnum.NAME_ONLY.value %} selected {% endif %}>
|
||||
John Wick
|
||||
</option>
|
||||
|
||||
<option value="{{ SenderFormatEnum.AT_ONLY.value }}"
|
||||
{% if current_user.sender_format == SenderFormatEnum.AT_ONLY.value %} selected {% endif %}>
|
||||
john at wick.com
|
||||
</option>
|
||||
|
||||
<option value="{{ SenderFormatEnum.NO_NAME.value }}"
|
||||
{% if current_user.sender_format == SenderFormatEnum.NO_NAME.value %} selected {% endif %}>
|
||||
No Name (i.e. only reverse-alias)
|
||||
</option>
|
||||
|
||||
</select>
|
||||
|
||||
<button class="btn btn-outline-primary mt-3">Update</button>
|
||||
|
|
|
@ -14,6 +14,7 @@ from app.models import (
|
|||
SenderFormatEnum,
|
||||
EnumE,
|
||||
)
|
||||
from tests.utils import login
|
||||
|
||||
|
||||
def test_generate_email(flask_client):
|
||||
|
@ -111,21 +112,11 @@ def test_website_send_to(flask_client):
|
|||
assert c1.website_send_to() == '"Nhơn Nguyễn | abcd at example.com" <rep@SL>'
|
||||
|
||||
|
||||
def test_new_addr(flask_client):
|
||||
user = User.create(
|
||||
email="a@b.c",
|
||||
password="password",
|
||||
name="Test User",
|
||||
activated=True,
|
||||
commit=True,
|
||||
sender_format=1,
|
||||
)
|
||||
def test_new_addr_default_sender_format(flask_client):
|
||||
user = login(flask_client)
|
||||
alias = Alias.first()
|
||||
|
||||
alias = Alias.create_new_random(user)
|
||||
Session.commit()
|
||||
|
||||
# default sender_format is 'via'
|
||||
c1 = Contact.create(
|
||||
contact = Contact.create(
|
||||
user_id=user.id,
|
||||
alias_id=alias.id,
|
||||
website_email="abcd@example.com",
|
||||
|
@ -133,29 +124,106 @@ def test_new_addr(flask_client):
|
|||
name="First Last",
|
||||
commit=True,
|
||||
)
|
||||
assert c1.new_addr() == '"First Last - abcd(a)example.com" <rep@SL>'
|
||||
|
||||
assert contact.new_addr() == '"First Last - abcd at example.com" <rep@SL>'
|
||||
|
||||
# Make sure email isn't duplicated if sender name equals email
|
||||
c1.name = "abcd@example.com"
|
||||
Session.commit()
|
||||
assert c1.new_addr() == '"abcd(a)example.com" <rep@SL>'
|
||||
contact.name = "abcd@example.com"
|
||||
assert contact.new_addr() == '"abcd at example.com" <rep@SL>'
|
||||
|
||||
# set sender_format = AT
|
||||
user.sender_format = SenderFormatEnum.AT.value
|
||||
c1.name = "First Last"
|
||||
Session.commit()
|
||||
assert c1.new_addr() == '"First Last - abcd at example.com" <rep@SL>'
|
||||
|
||||
# unicode name
|
||||
c1.name = "Nhơn Nguyễn"
|
||||
def test_new_addr_a_sender_format(flask_client):
|
||||
user = login(flask_client)
|
||||
user.sender_format = SenderFormatEnum.A.value
|
||||
Session.commit()
|
||||
alias = Alias.first()
|
||||
|
||||
contact = Contact.create(
|
||||
user_id=user.id,
|
||||
alias_id=alias.id,
|
||||
website_email="abcd@example.com",
|
||||
reply_email="rep@SL",
|
||||
name="First Last",
|
||||
commit=True,
|
||||
)
|
||||
|
||||
assert contact.new_addr() == '"First Last - abcd(a)example.com" <rep@SL>'
|
||||
|
||||
|
||||
def test_new_addr_no_name_sender_format(flask_client):
|
||||
user = login(flask_client)
|
||||
user.sender_format = SenderFormatEnum.NO_NAME.value
|
||||
Session.commit()
|
||||
alias = Alias.first()
|
||||
|
||||
contact = Contact.create(
|
||||
user_id=user.id,
|
||||
alias_id=alias.id,
|
||||
website_email="abcd@example.com",
|
||||
reply_email="rep@SL",
|
||||
name="First Last",
|
||||
commit=True,
|
||||
)
|
||||
|
||||
assert contact.new_addr() == "rep@SL"
|
||||
|
||||
|
||||
def test_new_addr_name_only_sender_format(flask_client):
|
||||
user = login(flask_client)
|
||||
user.sender_format = SenderFormatEnum.NAME_ONLY.value
|
||||
Session.commit()
|
||||
alias = Alias.first()
|
||||
|
||||
contact = Contact.create(
|
||||
user_id=user.id,
|
||||
alias_id=alias.id,
|
||||
website_email="abcd@example.com",
|
||||
reply_email="rep@SL",
|
||||
name="First Last",
|
||||
commit=True,
|
||||
)
|
||||
|
||||
assert contact.new_addr() == "First Last <rep@SL>"
|
||||
|
||||
|
||||
def test_new_addr_at_only_sender_format(flask_client):
|
||||
user = login(flask_client)
|
||||
user.sender_format = SenderFormatEnum.AT_ONLY.value
|
||||
Session.commit()
|
||||
alias = Alias.first()
|
||||
|
||||
contact = Contact.create(
|
||||
user_id=user.id,
|
||||
alias_id=alias.id,
|
||||
website_email="abcd@example.com",
|
||||
reply_email="rep@SL",
|
||||
name="First Last",
|
||||
commit=True,
|
||||
)
|
||||
|
||||
assert contact.new_addr() == '"abcd at example.com" <rep@SL>'
|
||||
|
||||
|
||||
def test_new_addr_unicode(flask_client):
|
||||
user = login(flask_client)
|
||||
alias = Alias.first()
|
||||
|
||||
contact = Contact.create(
|
||||
user_id=user.id,
|
||||
alias_id=alias.id,
|
||||
website_email="abcd@example.com",
|
||||
reply_email="rep@SL",
|
||||
name="Nhơn Nguyễn",
|
||||
commit=True,
|
||||
)
|
||||
|
||||
assert (
|
||||
c1.new_addr()
|
||||
contact.new_addr()
|
||||
== "=?utf-8?q?Nh=C6=A1n_Nguy=E1=BB=85n_-_abcd_at_example=2Ecom?= <rep@SL>"
|
||||
)
|
||||
|
||||
# sanity check
|
||||
assert parse_full_address(c1.new_addr()) == (
|
||||
assert parse_full_address(contact.new_addr()) == (
|
||||
"Nhơn Nguyễn - abcd at example.com",
|
||||
"rep@sl",
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue