Format with black
This commit is contained in:
parent
8800c29526
commit
cfe889f7b9
|
@ -58,7 +58,9 @@ def export_aliases():
|
|||
# Always put the main mailbox first
|
||||
# It is seen a primary while importing
|
||||
alias_mailboxes = alias.mailboxes
|
||||
alias_mailboxes.insert(0, alias_mailboxes.pop(alias_mailboxes.index(alias.mailbox)))
|
||||
alias_mailboxes.insert(
|
||||
0, alias_mailboxes.pop(alias_mailboxes.index(alias.mailbox))
|
||||
)
|
||||
|
||||
mailboxes = " ".join([mailbox.email for mailbox in alias_mailboxes])
|
||||
data.append([alias.email, alias.note, alias.enabled, mailboxes])
|
||||
|
|
|
@ -6,9 +6,19 @@ import requests
|
|||
from app import s3
|
||||
from app.email_utils import get_email_domain_part
|
||||
from app.extensions import db
|
||||
from app.models import Alias, AliasMailbox, BatchImport, CustomDomain, DeletedAlias, DomainDeletedAlias, Mailbox, User
|
||||
from app.models import (
|
||||
Alias,
|
||||
AliasMailbox,
|
||||
BatchImport,
|
||||
CustomDomain,
|
||||
DeletedAlias,
|
||||
DomainDeletedAlias,
|
||||
Mailbox,
|
||||
User,
|
||||
)
|
||||
from app.utils import sanitize_email
|
||||
|
||||
|
||||
def handle_batch_import(batch_import: BatchImport):
|
||||
user = batch_import.user
|
||||
|
||||
|
@ -24,6 +34,7 @@ def handle_batch_import(batch_import: BatchImport):
|
|||
|
||||
import_from_csv(user, lines)
|
||||
|
||||
|
||||
def import_from_csv(batch_import: BatchImport, user: User, lines):
|
||||
reader = csv.DictReader(lines)
|
||||
|
||||
|
@ -88,4 +99,4 @@ def import_from_csv(batch_import: BatchImport, user: User, lines):
|
|||
mailbox_id=mailboxes[i],
|
||||
)
|
||||
db.session.commit()
|
||||
LOG.d("Create %s", alias_mailbox)
|
||||
LOG.d("Create %s", alias_mailbox)
|
||||
|
|
|
@ -64,4 +64,4 @@ def encode_url(url):
|
|||
def sanitize_email(email_address: str) -> str:
|
||||
if email_address:
|
||||
return email_address.lower().strip().replace(" ", "")
|
||||
return email_address
|
||||
return email_address
|
||||
|
|
|
@ -2,19 +2,26 @@ from flask import url_for
|
|||
|
||||
from app import alias_utils
|
||||
from app.extensions import db
|
||||
from app.models import User, CustomDomain, Mailbox, Alias, AliasMailbox, ApiKey, File, BatchImport
|
||||
from app.models import (
|
||||
User,
|
||||
CustomDomain,
|
||||
Mailbox,
|
||||
Alias,
|
||||
AliasMailbox,
|
||||
ApiKey,
|
||||
File,
|
||||
BatchImport,
|
||||
)
|
||||
from app.import_utils import import_from_csv
|
||||
from app.utils import random_string
|
||||
from tests.utils import login
|
||||
|
||||
|
||||
def test_export(flask_client):
|
||||
# Create users
|
||||
user1 = login(flask_client)
|
||||
user2 = User.create(
|
||||
email="x@y.z",
|
||||
password="password",
|
||||
name="Wrong user",
|
||||
activated=True
|
||||
email="x@y.z", password="password", name="Wrong user", activated=True
|
||||
)
|
||||
db.session.commit()
|
||||
|
||||
|
@ -27,32 +34,24 @@ def test_export(flask_client):
|
|||
|
||||
# Create domains
|
||||
CustomDomain.create(
|
||||
user_id=user1.id,
|
||||
domain="my-destination-domain.com",
|
||||
verified=True
|
||||
user_id=user1.id, domain="my-destination-domain.com", verified=True
|
||||
)
|
||||
CustomDomain.create(
|
||||
user_id=user2.id,
|
||||
domain="bad-destionation-domain.com",
|
||||
verified=True
|
||||
user_id=user2.id, domain="bad-destionation-domain.com", verified=True
|
||||
)
|
||||
db.session.commit()
|
||||
|
||||
# Create mailboxes
|
||||
mailbox1 = Mailbox.create(
|
||||
user_id=user1.id,
|
||||
email="destination@my-destination-domain.com",
|
||||
verified=True
|
||||
user_id=user1.id, email="destination@my-destination-domain.com", verified=True
|
||||
)
|
||||
mailbox2 = Mailbox.create(
|
||||
user_id=user1.id,
|
||||
email="destination2@my-destination-domain.com",
|
||||
verified=True
|
||||
user_id=user1.id, email="destination2@my-destination-domain.com", verified=True
|
||||
)
|
||||
badmailbox1 = Mailbox.create(
|
||||
user_id=user2.id,
|
||||
email="baddestination@bad-destination-domain.com",
|
||||
verified=True
|
||||
verified=True,
|
||||
)
|
||||
db.session.commit()
|
||||
|
||||
|
@ -61,19 +60,19 @@ def test_export(flask_client):
|
|||
user_id=user1.id,
|
||||
email="ebay@my-domain.com",
|
||||
note="Used on eBay",
|
||||
mailbox_id=mailbox1.id
|
||||
mailbox_id=mailbox1.id,
|
||||
)
|
||||
alias2 = Alias.create(
|
||||
user_id=user1.id,
|
||||
email="facebook@my-domain.com",
|
||||
note="Used on Facebook, Instagram.",
|
||||
mailbox_id=mailbox1.id
|
||||
mailbox_id=mailbox1.id,
|
||||
)
|
||||
alias3 = Alias.create(
|
||||
user_id=user2.id,
|
||||
email="notmine@my-domain.com",
|
||||
note="Should not appear",
|
||||
mailbox_id=badmailbox1.id
|
||||
mailbox_id=badmailbox1.id,
|
||||
)
|
||||
db.session.commit()
|
||||
|
||||
|
@ -85,156 +84,139 @@ def test_export(flask_client):
|
|||
db.session.commit()
|
||||
|
||||
# Export
|
||||
r = flask_client.get(
|
||||
url_for("api.export_aliases")
|
||||
)
|
||||
r = flask_client.get(url_for("api.export_aliases"))
|
||||
assert r.status_code == 200
|
||||
assert r.mimetype == "text/csv"
|
||||
assert r.data == """alias,note,enabled,mailboxes
|
||||
assert (
|
||||
r.data
|
||||
== """alias,note,enabled,mailboxes
|
||||
ebay@my-domain.com,Used on eBay,True,destination@my-destination-domain.com
|
||||
facebook@my-domain.com,"Used on Facebook, Instagram.",True,destination@my-destination-domain.com destination2@my-destination-domain.com
|
||||
""".replace("\n", "\r\n").encode()
|
||||
""".replace(
|
||||
"\n", "\r\n"
|
||||
).encode()
|
||||
)
|
||||
|
||||
|
||||
def test_import_no_mailboxes_no_domains(flask_client):
|
||||
# Create user
|
||||
user = login(flask_client)
|
||||
|
||||
# Check start state
|
||||
assert(len(Alias.filter_by(user_id=user.id).all()) == 1) # Onboarding alias
|
||||
assert len(Alias.filter_by(user_id=user.id).all()) == 1 # Onboarding alias
|
||||
|
||||
alias_data = [
|
||||
'alias,note',
|
||||
'ebay@my-domain.com,Used on eBay',
|
||||
'facebook@my-domain.com,"Used on Facebook, Instagram."'
|
||||
"alias,note",
|
||||
"ebay@my-domain.com,Used on eBay",
|
||||
'facebook@my-domain.com,"Used on Facebook, Instagram."',
|
||||
]
|
||||
|
||||
batch_import = BatchImport.create(
|
||||
user_id=user.id,
|
||||
file_id=0
|
||||
)
|
||||
batch_import = BatchImport.create(user_id=user.id, file_id=0)
|
||||
|
||||
import_from_csv(batch_import, user, alias_data)
|
||||
|
||||
# Should have failed to import anything new because my-domain.com isn't registered
|
||||
assert(len(Alias.filter_by(user_id=user.id).all()) == 1) # +0
|
||||
assert len(Alias.filter_by(user_id=user.id).all()) == 1 # +0
|
||||
|
||||
|
||||
def test_import_no_mailboxes(flask_client):
|
||||
# Create user
|
||||
user = login(flask_client)
|
||||
|
||||
# Check start state
|
||||
assert(len(Alias.filter_by(user_id=user.id).all()) == 1) # Onboarding alias
|
||||
assert len(Alias.filter_by(user_id=user.id).all()) == 1 # Onboarding alias
|
||||
|
||||
# Create domain
|
||||
CustomDomain.create(
|
||||
user_id=user.id,
|
||||
domain="my-domain.com",
|
||||
verified=True
|
||||
)
|
||||
CustomDomain.create(user_id=user.id, domain="my-domain.com", verified=True)
|
||||
db.session.commit()
|
||||
|
||||
alias_data = [
|
||||
'alias,note',
|
||||
'ebay@my-domain.com,Used on eBay',
|
||||
'facebook@my-domain.com,"Used on Facebook, Instagram."'
|
||||
"alias,note",
|
||||
"ebay@my-domain.com,Used on eBay",
|
||||
'facebook@my-domain.com,"Used on Facebook, Instagram."',
|
||||
]
|
||||
|
||||
batch_import = BatchImport.create(
|
||||
user_id=user.id,
|
||||
file_id=0
|
||||
)
|
||||
batch_import = BatchImport.create(user_id=user.id, file_id=0)
|
||||
|
||||
import_from_csv(batch_import, user, alias_data)
|
||||
|
||||
assert(len(Alias.filter_by(user_id=user.id).all()) == 3) # +2
|
||||
assert len(Alias.filter_by(user_id=user.id).all()) == 3 # +2
|
||||
|
||||
|
||||
def test_import_no_domains(flask_client):
|
||||
# Create user
|
||||
user = login(flask_client)
|
||||
|
||||
# Check start state
|
||||
assert(len(Alias.filter_by(user_id=user.id).all()) == 1) # Onboarding alias
|
||||
assert len(Alias.filter_by(user_id=user.id).all()) == 1 # Onboarding alias
|
||||
|
||||
alias_data = [
|
||||
'alias,note,mailboxes',
|
||||
'ebay@my-domain.com,Used on eBay,destination@my-destination-domain.com',
|
||||
'facebook@my-domain.com,"Used on Facebook, Instagram.",destination1@my-destination-domain.com destination2@my-destination-domain.com'
|
||||
"alias,note,mailboxes",
|
||||
"ebay@my-domain.com,Used on eBay,destination@my-destination-domain.com",
|
||||
'facebook@my-domain.com,"Used on Facebook, Instagram.",destination1@my-destination-domain.com destination2@my-destination-domain.com',
|
||||
]
|
||||
|
||||
batch_import = BatchImport.create(
|
||||
user_id=user.id,
|
||||
file_id=0
|
||||
)
|
||||
batch_import = BatchImport.create(user_id=user.id, file_id=0)
|
||||
|
||||
import_from_csv(batch_import, user, alias_data)
|
||||
|
||||
# Should have failed to import anything new because my-domain.com isn't registered
|
||||
assert(len(Alias.filter_by(user_id=user.id).all()) == 1) # +0
|
||||
assert len(Alias.filter_by(user_id=user.id).all()) == 1 # +0
|
||||
|
||||
|
||||
def test_import(flask_client):
|
||||
# Create user
|
||||
user = login(flask_client)
|
||||
|
||||
# Check start state
|
||||
assert(len(Alias.filter_by(user_id=user.id).all()) == 1) # Onboarding alias
|
||||
assert len(Alias.filter_by(user_id=user.id).all()) == 1 # Onboarding alias
|
||||
|
||||
# Create domains
|
||||
domain1 = CustomDomain.create(
|
||||
user_id=user.id,
|
||||
domain="my-domain.com",
|
||||
verified=True
|
||||
user_id=user.id, domain="my-domain.com", verified=True
|
||||
)
|
||||
domain2 = CustomDomain.create(
|
||||
user_id=user.id,
|
||||
domain="my-destination-domain.com",
|
||||
verified=True
|
||||
user_id=user.id, domain="my-destination-domain.com", verified=True
|
||||
)
|
||||
db.session.commit()
|
||||
|
||||
# Create mailboxes
|
||||
mailbox1 = Mailbox.create(
|
||||
user_id=user.id,
|
||||
email="destination@my-destination-domain.com",
|
||||
verified=True
|
||||
user_id=user.id, email="destination@my-destination-domain.com", verified=True
|
||||
)
|
||||
mailbox2 = Mailbox.create(
|
||||
user_id=user.id,
|
||||
email="destination2@my-destination-domain.com",
|
||||
verified=True
|
||||
user_id=user.id, email="destination2@my-destination-domain.com", verified=True
|
||||
)
|
||||
db.session.commit()
|
||||
|
||||
alias_data = [
|
||||
'alias,note,mailboxes',
|
||||
'ebay@my-domain.com,Used on eBay,destination@my-destination-domain.com',
|
||||
'facebook@my-domain.com,"Used on Facebook, Instagram.",destination@my-destination-domain.com destination2@my-destination-domain.com'
|
||||
"alias,note,mailboxes",
|
||||
"ebay@my-domain.com,Used on eBay,destination@my-destination-domain.com",
|
||||
'facebook@my-domain.com,"Used on Facebook, Instagram.",destination@my-destination-domain.com destination2@my-destination-domain.com',
|
||||
]
|
||||
|
||||
batch_import = BatchImport.create(
|
||||
user_id=user.id,
|
||||
file_id=0
|
||||
)
|
||||
batch_import = BatchImport.create(user_id=user.id, file_id=0)
|
||||
|
||||
import_from_csv(batch_import, user, alias_data)
|
||||
|
||||
aliases = Alias.filter_by(user_id=user.id).all()
|
||||
assert(len(aliases) == 3) # +2
|
||||
assert len(aliases) == 3 # +2
|
||||
|
||||
# aliases[0] is the onboarding alias, skip it
|
||||
|
||||
# eBay alias
|
||||
assert(aliases[1].email == "ebay@my-domain.com")
|
||||
assert(len(aliases[1].mailboxes) == 1)
|
||||
assert aliases[1].email == "ebay@my-domain.com"
|
||||
assert len(aliases[1].mailboxes) == 1
|
||||
# First one should be primary
|
||||
assert(aliases[1].mailbox_id == mailbox1.id)
|
||||
assert aliases[1].mailbox_id == mailbox1.id
|
||||
# Others are sorted
|
||||
assert(aliases[1].mailboxes[0] == mailbox1)
|
||||
assert aliases[1].mailboxes[0] == mailbox1
|
||||
|
||||
# Facebook alias
|
||||
assert(aliases[2].email == "facebook@my-domain.com")
|
||||
assert(len(aliases[2].mailboxes) == 2)
|
||||
assert aliases[2].email == "facebook@my-domain.com"
|
||||
assert len(aliases[2].mailboxes) == 2
|
||||
# First one should be primary
|
||||
assert(aliases[2].mailbox_id == mailbox1.id)
|
||||
assert aliases[2].mailbox_id == mailbox1.id
|
||||
# Others are sorted
|
||||
assert(aliases[2].mailboxes[0] == mailbox2)
|
||||
assert(aliases[2].mailboxes[1] == mailbox1)
|
||||
assert aliases[2].mailboxes[0] == mailbox2
|
||||
assert aliases[2].mailboxes[1] == mailbox1
|
||||
|
|
|
@ -40,4 +40,4 @@ def create_user(flask_client) -> User:
|
|||
|
||||
def pretty(d):
|
||||
"""pretty print as json"""
|
||||
print(json.dumps(d, indent=2))
|
||||
print(json.dumps(d, indent=2))
|
||||
|
|
Loading…
Reference in New Issue