test_mailbox.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. import json
  2. from flask import url_for
  3. from flask import url_for
  4. from app.extensions import db
  5. from app.models import User, ApiKey, Mailbox
  6. def test_create_mailbox(flask_client):
  7. user = User.create(
  8. email="a@b.c", password="password", name="Test User", activated=True
  9. )
  10. db.session.commit()
  11. # create api_key
  12. api_key = ApiKey.create(user.id, "for test")
  13. db.session.commit()
  14. r = flask_client.post(
  15. url_for("api.create_mailbox"),
  16. headers={"Authentication": api_key.code},
  17. json={"email": "mailbox@gmail.com"},
  18. )
  19. assert r.status_code == 201
  20. assert r.json["email"] == "mailbox@gmail.com"
  21. assert r.json["verified"] is False
  22. assert r.json["id"] > 0
  23. assert r.json["default"] is False
  24. def test_delete_mailbox(flask_client):
  25. user = User.create(
  26. email="a@b.c", password="password", name="Test User", activated=True
  27. )
  28. db.session.commit()
  29. # create api_key
  30. api_key = ApiKey.create(user.id, "for test")
  31. db.session.commit()
  32. # create a mailbox
  33. mb = Mailbox.create(user_id=user.id, email="mb@gmail.com")
  34. db.session.commit()
  35. r = flask_client.delete(
  36. url_for("api.delete_mailbox", mailbox_id=mb.id),
  37. headers={"Authentication": api_key.code},
  38. )
  39. assert r.status_code == 200
  40. def test_delete_default_mailbox(flask_client):
  41. user = User.create(
  42. email="a@b.c", password="password", name="Test User", activated=True
  43. )
  44. db.session.commit()
  45. # create api_key
  46. api_key = ApiKey.create(user.id, "for test")
  47. db.session.commit()
  48. # assert user cannot delete the default mailbox
  49. r = flask_client.delete(
  50. url_for("api.delete_mailbox", mailbox_id=user.default_mailbox_id),
  51. headers={"Authentication": api_key.code},
  52. )
  53. assert r.status_code == 400
  54. def test_set_mailbox_as_default(flask_client):
  55. user = User.create(
  56. email="a@b.c", password="password", name="Test User", activated=True
  57. )
  58. db.session.commit()
  59. # create api_key
  60. api_key = ApiKey.create(user.id, "for test")
  61. db.session.commit()
  62. # create a mailbox
  63. mb = Mailbox.create(user_id=user.id, email="mb@gmail.com")
  64. db.session.commit()
  65. assert user.default_mailbox_id != mb.id
  66. r = flask_client.put(
  67. url_for("api.delete_mailbox", mailbox_id=mb.id),
  68. headers={"Authentication": api_key.code},
  69. json={"default": True},
  70. )
  71. assert r.status_code == 200
  72. mb = Mailbox.get(mb.id)
  73. assert user.default_mailbox_id == mb.id
  74. def test_update_mailbox_email(flask_client):
  75. user = User.create(
  76. email="a@b.c", password="password", name="Test User", activated=True
  77. )
  78. db.session.commit()
  79. # create api_key
  80. api_key = ApiKey.create(user.id, "for test")
  81. db.session.commit()
  82. # create a mailbox
  83. mb = Mailbox.create(user_id=user.id, email="mb@gmail.com")
  84. db.session.commit()
  85. r = flask_client.put(
  86. url_for("api.delete_mailbox", mailbox_id=mb.id),
  87. headers={"Authentication": api_key.code},
  88. json={"email": "new-email@gmail.com"},
  89. )
  90. assert r.status_code == 200
  91. mb = Mailbox.get(mb.id)
  92. assert mb.new_email == "new-email@gmail.com"
  93. def test_cancel_mailbox_email_change(flask_client):
  94. user = User.create(
  95. email="a@b.c", password="password", name="Test User", activated=True
  96. )
  97. db.session.commit()
  98. # create api_key
  99. api_key = ApiKey.create(user.id, "for test")
  100. db.session.commit()
  101. # create a mailbox
  102. mb = Mailbox.create(user_id=user.id, email="mb@gmail.com")
  103. db.session.commit()
  104. # update mailbox email
  105. r = flask_client.put(
  106. url_for("api.delete_mailbox", mailbox_id=mb.id),
  107. headers={"Authentication": api_key.code},
  108. json={"email": "new-email@gmail.com"},
  109. )
  110. assert r.status_code == 200
  111. mb = Mailbox.get(mb.id)
  112. assert mb.new_email == "new-email@gmail.com"
  113. # cancel mailbox email change
  114. r = flask_client.put(
  115. url_for("api.delete_mailbox", mailbox_id=mb.id),
  116. headers={"Authentication": api_key.code},
  117. json={"cancel_email_change": True},
  118. )
  119. assert r.status_code == 200
  120. mb = Mailbox.get(mb.id)
  121. assert mb.new_email is None
  122. def test_get_mailboxes(flask_client):
  123. user = User.create(
  124. email="a@b.c", password="password", name="Test User", activated=True
  125. )
  126. db.session.commit()
  127. # create api_key
  128. api_key = ApiKey.create(user.id, "for test")
  129. db.session.commit()
  130. Mailbox.create(user_id=user.id, email="m1@example.com", verified=True)
  131. Mailbox.create(user_id=user.id, email="m2@example.com", verified=False)
  132. db.session.commit()
  133. r = flask_client.get(
  134. url_for("api.get_mailboxes"), headers={"Authentication": api_key.code},
  135. )
  136. assert r.status_code == 200
  137. # m2@example.com is not returned as it's not verified
  138. assert len(r.json["mailboxes"]) == 2
  139. for mb in r.json["mailboxes"]:
  140. assert "email" in mb
  141. assert "id" in mb
  142. assert "default" in mb
  143. assert "creation_timestamp" in mb
  144. print(r.json)