2021-03-10 22:35:04 +01:00
|
|
|
from flask import url_for
|
|
|
|
|
2021-03-13 00:13:33 +01:00
|
|
|
from app import alias_utils
|
2021-03-10 22:35:04 +01:00
|
|
|
from app.extensions import db
|
2021-03-13 15:37:28 +01:00
|
|
|
from app.models import (
|
|
|
|
User,
|
|
|
|
CustomDomain,
|
|
|
|
Mailbox,
|
|
|
|
Alias,
|
|
|
|
AliasMailbox,
|
|
|
|
BatchImport,
|
|
|
|
)
|
2021-03-13 00:13:33 +01:00
|
|
|
from app.import_utils import import_from_csv
|
|
|
|
from tests.utils import login
|
2021-03-10 22:35:04 +01:00
|
|
|
|
2021-03-13 15:37:28 +01:00
|
|
|
|
2021-03-10 22:35:04 +01:00
|
|
|
def test_export(flask_client):
|
|
|
|
# Create users
|
2021-03-13 00:13:33 +01:00
|
|
|
user1 = login(flask_client)
|
2021-03-10 22:35:04 +01:00
|
|
|
user2 = User.create(
|
2021-03-13 15:37:28 +01:00
|
|
|
email="x@y.z", password="password", name="Wrong user", activated=True
|
2021-03-10 22:35:04 +01:00
|
|
|
)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
# Remove onboarding aliases
|
|
|
|
for alias in Alias.filter_by(user_id=user1.id).all():
|
|
|
|
alias_utils.delete_alias(alias, user1)
|
|
|
|
for alias in Alias.filter_by(user_id=user2.id).all():
|
|
|
|
alias_utils.delete_alias(alias, user2)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
# Create domains
|
|
|
|
CustomDomain.create(
|
2021-03-13 15:37:28 +01:00
|
|
|
user_id=user1.id, domain="my-destination-domain.com", verified=True
|
2021-03-10 22:35:04 +01:00
|
|
|
)
|
|
|
|
CustomDomain.create(
|
2021-03-13 15:37:28 +01:00
|
|
|
user_id=user2.id, domain="bad-destionation-domain.com", verified=True
|
2021-03-10 22:35:04 +01:00
|
|
|
)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
# Create mailboxes
|
|
|
|
mailbox1 = Mailbox.create(
|
2021-03-13 15:37:28 +01:00
|
|
|
user_id=user1.id, email="destination@my-destination-domain.com", verified=True
|
2021-03-10 22:35:04 +01:00
|
|
|
)
|
|
|
|
mailbox2 = Mailbox.create(
|
2021-03-13 15:37:28 +01:00
|
|
|
user_id=user1.id, email="destination2@my-destination-domain.com", verified=True
|
2021-03-10 22:35:04 +01:00
|
|
|
)
|
|
|
|
badmailbox1 = Mailbox.create(
|
|
|
|
user_id=user2.id,
|
|
|
|
email="baddestination@bad-destination-domain.com",
|
2021-03-13 15:37:28 +01:00
|
|
|
verified=True,
|
2021-03-10 22:35:04 +01:00
|
|
|
)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
# Create aliases
|
2021-03-13 15:46:12 +01:00
|
|
|
Alias.create(
|
2021-03-10 22:35:04 +01:00
|
|
|
user_id=user1.id,
|
|
|
|
email="ebay@my-domain.com",
|
|
|
|
note="Used on eBay",
|
2021-03-13 15:37:28 +01:00
|
|
|
mailbox_id=mailbox1.id,
|
2021-03-10 22:35:04 +01:00
|
|
|
)
|
|
|
|
alias2 = Alias.create(
|
|
|
|
user_id=user1.id,
|
|
|
|
email="facebook@my-domain.com",
|
|
|
|
note="Used on Facebook, Instagram.",
|
2021-03-13 15:37:28 +01:00
|
|
|
mailbox_id=mailbox1.id,
|
2021-03-10 22:35:04 +01:00
|
|
|
)
|
2021-03-13 15:46:12 +01:00
|
|
|
Alias.create(
|
2021-03-10 22:35:04 +01:00
|
|
|
user_id=user2.id,
|
|
|
|
email="notmine@my-domain.com",
|
|
|
|
note="Should not appear",
|
2021-03-13 15:37:28 +01:00
|
|
|
mailbox_id=badmailbox1.id,
|
2021-03-10 22:35:04 +01:00
|
|
|
)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
# Add second mailbox to an alias
|
2021-03-13 15:46:12 +01:00
|
|
|
AliasMailbox.create(
|
2021-03-10 22:35:04 +01:00
|
|
|
alias_id=alias2.id,
|
|
|
|
mailbox_id=mailbox2.id,
|
|
|
|
)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
# Export
|
2021-03-13 15:37:28 +01:00
|
|
|
r = flask_client.get(url_for("api.export_aliases"))
|
2021-03-10 22:35:04 +01:00
|
|
|
assert r.status_code == 200
|
|
|
|
assert r.mimetype == "text/csv"
|
2021-03-13 15:37:28 +01:00
|
|
|
assert (
|
|
|
|
r.data
|
|
|
|
== """alias,note,enabled,mailboxes
|
2021-03-10 22:35:04 +01:00
|
|
|
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
|
2021-03-13 15:37:28 +01:00
|
|
|
""".replace(
|
|
|
|
"\n", "\r\n"
|
|
|
|
).encode()
|
|
|
|
)
|
|
|
|
|
2021-03-10 23:08:33 +01:00
|
|
|
|
2021-03-13 00:13:33 +01:00
|
|
|
def test_import_no_mailboxes_no_domains(flask_client):
|
|
|
|
# Create user
|
|
|
|
user = login(flask_client)
|
|
|
|
|
|
|
|
# Check start state
|
2021-03-13 15:37:28 +01:00
|
|
|
assert len(Alias.filter_by(user_id=user.id).all()) == 1 # Onboarding alias
|
2021-03-13 00:13:33 +01:00
|
|
|
|
|
|
|
alias_data = [
|
2021-03-13 15:37:28 +01:00
|
|
|
"alias,note",
|
|
|
|
"ebay@my-domain.com,Used on eBay",
|
|
|
|
'facebook@my-domain.com,"Used on Facebook, Instagram."',
|
2021-03-13 00:13:33 +01:00
|
|
|
]
|
|
|
|
|
2021-03-13 15:37:28 +01:00
|
|
|
batch_import = BatchImport.create(user_id=user.id, file_id=0)
|
2021-03-13 00:13:33 +01:00
|
|
|
|
|
|
|
import_from_csv(batch_import, user, alias_data)
|
|
|
|
|
|
|
|
# Should have failed to import anything new because my-domain.com isn't registered
|
2021-03-13 15:37:28 +01:00
|
|
|
assert len(Alias.filter_by(user_id=user.id).all()) == 1 # +0
|
|
|
|
|
2021-03-13 00:13:33 +01:00
|
|
|
|
2021-03-10 23:08:33 +01:00
|
|
|
def test_import_no_mailboxes(flask_client):
|
|
|
|
# Create user
|
2021-03-13 00:13:33 +01:00
|
|
|
user = login(flask_client)
|
|
|
|
|
|
|
|
# Check start state
|
2021-03-13 15:37:28 +01:00
|
|
|
assert len(Alias.filter_by(user_id=user.id).all()) == 1 # Onboarding alias
|
2021-03-13 00:13:33 +01:00
|
|
|
|
|
|
|
# Create domain
|
2021-03-13 15:37:28 +01:00
|
|
|
CustomDomain.create(user_id=user.id, domain="my-domain.com", verified=True)
|
2021-03-10 23:08:33 +01:00
|
|
|
db.session.commit()
|
|
|
|
|
2021-03-13 00:13:33 +01:00
|
|
|
alias_data = [
|
2021-03-13 15:37:28 +01:00
|
|
|
"alias,note",
|
|
|
|
"ebay@my-domain.com,Used on eBay",
|
|
|
|
'facebook@my-domain.com,"Used on Facebook, Instagram."',
|
2021-03-13 00:13:33 +01:00
|
|
|
]
|
2021-03-10 23:08:33 +01:00
|
|
|
|
2021-03-13 15:37:28 +01:00
|
|
|
batch_import = BatchImport.create(user_id=user.id, file_id=0)
|
2021-03-10 23:08:33 +01:00
|
|
|
|
2021-03-13 00:13:33 +01:00
|
|
|
import_from_csv(batch_import, user, alias_data)
|
|
|
|
|
2021-03-13 15:37:28 +01:00
|
|
|
assert len(Alias.filter_by(user_id=user.id).all()) == 3 # +2
|
|
|
|
|
2021-03-13 15:36:25 +01:00
|
|
|
|
|
|
|
def test_import_no_domains(flask_client):
|
|
|
|
# Create user
|
|
|
|
user = login(flask_client)
|
|
|
|
|
|
|
|
# Check start state
|
2021-03-13 15:37:28 +01:00
|
|
|
assert len(Alias.filter_by(user_id=user.id).all()) == 1 # Onboarding alias
|
2021-03-13 15:36:25 +01:00
|
|
|
|
|
|
|
alias_data = [
|
2021-03-13 15:37:28 +01:00
|
|
|
"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',
|
2021-03-13 15:36:25 +01:00
|
|
|
]
|
|
|
|
|
2021-03-13 15:37:28 +01:00
|
|
|
batch_import = BatchImport.create(user_id=user.id, file_id=0)
|
2021-03-13 15:36:25 +01:00
|
|
|
|
|
|
|
import_from_csv(batch_import, user, alias_data)
|
|
|
|
|
|
|
|
# Should have failed to import anything new because my-domain.com isn't registered
|
2021-03-13 15:37:28 +01:00
|
|
|
assert len(Alias.filter_by(user_id=user.id).all()) == 1 # +0
|
|
|
|
|
2021-03-13 15:36:25 +01:00
|
|
|
|
|
|
|
def test_import(flask_client):
|
|
|
|
# Create user
|
|
|
|
user = login(flask_client)
|
|
|
|
|
|
|
|
# Check start state
|
2021-03-13 15:37:28 +01:00
|
|
|
assert len(Alias.filter_by(user_id=user.id).all()) == 1 # Onboarding alias
|
2021-03-13 15:36:25 +01:00
|
|
|
|
|
|
|
# Create domains
|
2021-03-13 15:46:12 +01:00
|
|
|
CustomDomain.create(user_id=user.id, domain="my-domain.com", verified=True)
|
|
|
|
CustomDomain.create(
|
2021-03-13 15:37:28 +01:00
|
|
|
user_id=user.id, domain="my-destination-domain.com", verified=True
|
2021-03-13 15:36:25 +01:00
|
|
|
)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
# Create mailboxes
|
|
|
|
mailbox1 = Mailbox.create(
|
2021-03-13 15:37:28 +01:00
|
|
|
user_id=user.id, email="destination@my-destination-domain.com", verified=True
|
2021-03-13 15:36:25 +01:00
|
|
|
)
|
|
|
|
mailbox2 = Mailbox.create(
|
2021-03-13 15:37:28 +01:00
|
|
|
user_id=user.id, email="destination2@my-destination-domain.com", verified=True
|
2021-03-13 15:36:25 +01:00
|
|
|
)
|
|
|
|
db.session.commit()
|
|
|
|
|
|
|
|
alias_data = [
|
2021-03-13 15:37:28 +01:00
|
|
|
"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',
|
2021-03-13 15:36:25 +01:00
|
|
|
]
|
|
|
|
|
2021-03-13 15:37:28 +01:00
|
|
|
batch_import = BatchImport.create(user_id=user.id, file_id=0)
|
2021-03-13 15:36:25 +01:00
|
|
|
|
|
|
|
import_from_csv(batch_import, user, alias_data)
|
|
|
|
|
|
|
|
aliases = Alias.filter_by(user_id=user.id).all()
|
2021-03-13 15:37:28 +01:00
|
|
|
assert len(aliases) == 3 # +2
|
2021-03-13 15:36:25 +01:00
|
|
|
|
|
|
|
# aliases[0] is the onboarding alias, skip it
|
|
|
|
|
|
|
|
# eBay alias
|
2021-03-13 15:37:28 +01:00
|
|
|
assert aliases[1].email == "ebay@my-domain.com"
|
|
|
|
assert len(aliases[1].mailboxes) == 1
|
2021-03-13 15:36:25 +01:00
|
|
|
# First one should be primary
|
2021-03-13 15:37:28 +01:00
|
|
|
assert aliases[1].mailbox_id == mailbox1.id
|
2021-03-13 15:36:25 +01:00
|
|
|
# Others are sorted
|
2021-03-13 15:37:28 +01:00
|
|
|
assert aliases[1].mailboxes[0] == mailbox1
|
2021-03-13 15:36:25 +01:00
|
|
|
|
|
|
|
# Facebook alias
|
2021-03-13 15:37:28 +01:00
|
|
|
assert aliases[2].email == "facebook@my-domain.com"
|
|
|
|
assert len(aliases[2].mailboxes) == 2
|
2021-03-13 15:36:25 +01:00
|
|
|
# First one should be primary
|
2021-03-13 15:37:28 +01:00
|
|
|
assert aliases[2].mailbox_id == mailbox1.id
|
2021-03-13 15:36:25 +01:00
|
|
|
# Others are sorted
|
2021-03-13 15:37:28 +01:00
|
|
|
assert aliases[2].mailboxes[0] == mailbox2
|
|
|
|
assert aliases[2].mailboxes[1] == mailbox1
|