app-MAIL-temp/tests/api/test_import_export.py

240 lines
6.7 KiB
Python
Raw Normal View History

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-10 23:08:33 +01:00
from app.models import User, CustomDomain, Mailbox, Alias, AliasMailbox, ApiKey, File, BatchImport
2021-03-13 00:13:33 +01:00
from app.import_utils import import_from_csv
2021-03-10 23:08:33 +01:00
from app.utils import random_string
2021-03-13 00:13:33 +01:00
from tests.utils import login
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(
email="x@y.z",
password="password",
name="Wrong user",
activated=True
)
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(
user_id=user1.id,
domain="my-destination-domain.com",
verified=True
)
CustomDomain.create(
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
)
mailbox2 = Mailbox.create(
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
)
db.session.commit()
# Create aliases
alias1 = Alias.create(
user_id=user1.id,
email="ebay@my-domain.com",
note="Used on eBay",
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
)
alias3 = Alias.create(
user_id=user2.id,
email="notmine@my-domain.com",
note="Should not appear",
mailbox_id=badmailbox1.id
)
db.session.commit()
# Add second mailbox to an alias
alias_mailbox = AliasMailbox.create(
alias_id=alias2.id,
mailbox_id=mailbox2.id,
)
db.session.commit()
# Export
r = flask_client.get(
2021-03-13 00:13:33 +01:00
url_for("api.export_aliases")
2021-03-10 22:35:04 +01:00
)
assert r.status_code == 200
assert r.mimetype == "text/csv"
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
2021-03-10 23:08:33 +01:00
""".replace("\n", "\r\n").encode()
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
assert(len(Alias.filter_by(user_id=user.id).all()) == 1) # Onboarding alias
alias_data = [
2021-03-13 15:36:25 +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
]
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
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
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
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:36:25 +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
batch_import = BatchImport.create(
user_id=user.id,
2021-03-13 00:13:33 +01:00
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)
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
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'
]
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
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
# Create domains
domain1 = CustomDomain.create(
user_id=user.id,
domain="my-domain.com",
verified=True
)
domain2 = CustomDomain.create(
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
)
mailbox2 = Mailbox.create(
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'
]
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
# aliases[0] is the onboarding alias, skip it
# eBay alias
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)
# Others are sorted
assert(aliases[1].mailboxes[0] == mailbox1)
# Facebook alias
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)
# Others are sorted
assert(aliases[2].mailboxes[0] == mailbox2)
assert(aliases[2].mailboxes[1] == mailbox1)