test_alias.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import json
  2. from flask import url_for
  3. from app.config import EMAIL_DOMAIN, MAX_NB_EMAIL_FREE_PLAN, PAGE_LIMIT
  4. from app.extensions import db
  5. from app.models import User, ApiKey, GenEmail, ForwardEmail, ForwardEmailLog
  6. from app.utils import random_word
  7. def test_error_without_pagination(flask_client):
  8. user = User.create(
  9. email="a@b.c", password="password", name="Test User", activated=True
  10. )
  11. db.session.commit()
  12. # create api_key
  13. api_key = ApiKey.create(user.id, "for test")
  14. db.session.commit()
  15. r = flask_client.get(
  16. url_for("api.get_aliases"), headers={"Authentication": api_key.code}
  17. )
  18. assert r.status_code == 400
  19. assert r.json["error"]
  20. def test_success_with_pagination(flask_client):
  21. user = User.create(
  22. email="a@b.c", password="password", name="Test User", activated=True
  23. )
  24. db.session.commit()
  25. # create api_key
  26. api_key = ApiKey.create(user.id, "for test")
  27. db.session.commit()
  28. # create more aliases than PAGE_LIMIT
  29. for _ in range(PAGE_LIMIT + 1):
  30. GenEmail.create_new_random(user.id)
  31. db.session.commit()
  32. # get aliases on the 1st page, should return PAGE_LIMIT aliases
  33. r = flask_client.get(
  34. url_for("api.get_aliases", page_id=0), headers={"Authentication": api_key.code}
  35. )
  36. assert r.status_code == 200
  37. assert len(r.json["aliases"]) == PAGE_LIMIT
  38. # get aliases on the 2nd page, should return 2 aliases
  39. # as the total number of aliases is PAGE_LIMIT +2
  40. # 1 alias is created when user is created
  41. r = flask_client.get(
  42. url_for("api.get_aliases", page_id=1), headers={"Authentication": api_key.code}
  43. )
  44. assert r.status_code == 200
  45. assert len(r.json["aliases"]) == 2
  46. def test_delete_alias(flask_client):
  47. user = User.create(
  48. email="a@b.c", password="password", name="Test User", activated=True
  49. )
  50. db.session.commit()
  51. # create api_key
  52. api_key = ApiKey.create(user.id, "for test")
  53. db.session.commit()
  54. gen_email = GenEmail.create_new_random(user.id)
  55. db.session.commit()
  56. r = flask_client.delete(
  57. url_for("api.delete_alias", alias_id=gen_email.id),
  58. headers={"Authentication": api_key.code},
  59. )
  60. assert r.status_code == 200
  61. assert r.json == {"deleted": True}
  62. def test_toggle_alias(flask_client):
  63. user = User.create(
  64. email="a@b.c", password="password", name="Test User", activated=True
  65. )
  66. db.session.commit()
  67. # create api_key
  68. api_key = ApiKey.create(user.id, "for test")
  69. db.session.commit()
  70. gen_email = GenEmail.create_new_random(user.id)
  71. db.session.commit()
  72. r = flask_client.post(
  73. url_for("api.toggle_alias", alias_id=gen_email.id),
  74. headers={"Authentication": api_key.code},
  75. )
  76. assert r.status_code == 200
  77. assert r.json == {"enabled": False}
  78. def test_alias_activities(flask_client):
  79. user = User.create(
  80. email="a@b.c", password="password", name="Test User", activated=True
  81. )
  82. db.session.commit()
  83. # create api_key
  84. api_key = ApiKey.create(user.id, "for test")
  85. db.session.commit()
  86. gen_email = GenEmail.create_new_random(user.id)
  87. db.session.commit()
  88. # create some alias log
  89. forward_email = ForwardEmail.create(
  90. website_email="marketing@example.com",
  91. reply_email="reply@a.b",
  92. gen_email_id=gen_email.id,
  93. )
  94. db.session.commit()
  95. for _ in range(int(PAGE_LIMIT / 2)):
  96. ForwardEmailLog.create(forward_id=forward_email.id, is_reply=True)
  97. for _ in range(int(PAGE_LIMIT / 2) + 2):
  98. ForwardEmailLog.create(forward_id=forward_email.id, blocked=True)
  99. r = flask_client.get(
  100. url_for("api.get_alias_activities", alias_id=gen_email.id, page_id=0),
  101. headers={"Authentication": api_key.code},
  102. )
  103. assert r.status_code == 200
  104. assert len(r.json["activities"]) == PAGE_LIMIT
  105. for ac in r.json["activities"]:
  106. assert ac["action"]
  107. assert ac["from"]
  108. assert ac["action"]
  109. assert ac["action"]
  110. # second page, should return 1 or 2 results only
  111. r = flask_client.get(
  112. url_for("api.get_alias_activities", alias_id=gen_email.id, page_id=1),
  113. headers={"Authentication": api_key.code},
  114. )
  115. assert len(r.json["activities"]) < 3