diff --git a/app/api/views/export.py b/app/api/views/export.py index 3557a116..82954e47 100644 --- a/app/api/views/export.py +++ b/app/api/views/export.py @@ -55,7 +55,12 @@ def export_aliases(): data = [["alias", "note", "enabled", "mailboxes"]] for alias in Alias.filter_by(user_id=user.id).all(): # type: Alias - mailboxes = " ".join([mailbox.email for mailbox in alias.mailboxes]) + # 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))) + + mailboxes = " ".join([mailbox.email for mailbox in alias_mailboxes]) data.append([alias.email, alias.note, alias.enabled, mailboxes]) si = StringIO() diff --git a/static/batch_import_template.csv b/static/batch_import_template.csv index a06b6439..ab107f49 100644 --- a/static/batch_import_template.csv +++ b/static/batch_import_template.csv @@ -1,3 +1,3 @@ "alias","note","mailboxes" -"ebay@my-domain.com","Used on eBay","destination@my-destionation-domain.com" -"facebook@my-domain.com","Used on Facebook, Instagram.","destination1@my-destionation-domain.com destination2@my-destination-domain.com" \ No newline at end of file +"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" \ No newline at end of file diff --git a/tests/api/test_import_export.py b/tests/api/test_import_export.py new file mode 100644 index 00000000..28878609 --- /dev/null +++ b/tests/api/test_import_export.py @@ -0,0 +1,103 @@ +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 + +def test_export(flask_client): + # Create users + user1 = User.create( + email="a@b.c", + password="password", + name="Test User", + activated=True + ) + 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 + # Create api_key + api_key = ApiKey.create(user1.id, "for test") + db.session.commit() + + # <<< without hostname >>> + r = flask_client.get( + url_for("api.export_aliases"), headers={"Authentication": api_key.code} + ) + 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 +""".replace("\n", "\r\n").encode() \ No newline at end of file