# Coverage for api/tests/test_email.py : 100%

## 0 statements

Hot-keys on this page

r m x p toggle line displays

j k next/prev highlighted chunk

0 (zero) top of page

1 (one) first highlighted chunk

1# """

2# This file (test_email.py) contains the unit tests for

3# functions defined in email.py which is used for sending

4# user email confirmation

5# """

6# import pytest

7# from flask_mailman import EmailMessage

8# from modules.box__default.auth.email import _send_email_helper

9# from modules.box__default.auth.email import send_async_email

10# from flask_login import UserMixin

11# from init import db

12# from shopyo.api.models import PkModel

13# class ExampleUserModel(PkModel, UserMixin):

14# """Example user model for testing purposes"""

15# __tablename__ = "testusers_email"

16# password = db.Column(db.String(100), unique=True, nullable=False)

17# email = db.Column(db.String(120), unique=True, nullable=False)

18# @pytest.mark.parametrize(

19# "email_config",

20# [("MAIL_DEFAULT_SENDER", "remove"), ("MAIL_DEFAULT_SENDER", None)],

21# indirect=True,

22# )

23# def test_send_email_with_no_default_sender(capfd, email_config):

24# user = User.create(email="test@gmail.com", password="pass")

25# token = "sometoken"

26# template = "auth/emails/activate_user"

27# subject = "Please confirm your email"

28# context = {"token": token, "user": user}

29# send_async_email(user.email, subject, template, **context)

30# captured = capfd.readouterr()

31# assert "Shopyo Error: MAIL_DEFAULT_SENDER not configured" in captured.out

32# @pytest.mark.parametrize(

33# "email_config",

34# [

35# ("MAIL_USERNAME", "remove"),

36# ("MAIL_PASSWORD", "remove"),

37# ("MAIL_USERNAME", None),

38# ("MAIL_PASSWORD", None),

39# ],

40# indirect=True,

41# )

42# def test_send_email_with_no_username_or_password_set(capfd, email_config):

43# user = User.create(email="test@gmail.com", password="pass")

44# token = "sometoken"

45# template = "auth/emails/activate_user"

46# subject = "Please confirm your email"

47# context = {"token": token, "user": user}

48# thread = send_async_email(user.email, subject, template, **context)

49# thread.join()

50# captured = capfd.readouterr()

51# assert (

52# "Shopyo Error: MAIL_USERNAME, and/or MAIL_PASSWORD not configured"

53# in captured.out

54# )

55# def test_send_email_using_template_on_valid_credentials(capfd):

56# user = User.create(email="to@gmail.com", password="pass")

57# token = "sometoken"

58# template = "auth/emails/activate_user"

59# subject = "Please confirm your email"

60# from_email = "from@gmail.com"

61# context = {"token": token, "user": user}

62# thread = send_async_email(

63# user.email, subject, template, from_email=from_email, **context

64# )

65# thread.join()

66# captured = capfd.readouterr()

67# assert "Please confirm your email" in captured.out

68# assert "sometoken" in captured.out

69# assert "to@gmail.com" in captured.out

70# assert "from@gmail.com" in captured.out

71# assert "Welcome to Shopyo" in captured.out

72# assert "To confirm your account please click on" in captured.out

73# assert "The Shopyo Team" in captured.out

74# def test_send_using_helper_function(test_client, flask_app, capfd):

75# msg = EmailMessage(

76# subject="subject of email",

77# body="body of email",

78# to=["to@test.com"],

79# from_email="from@test.com",

80# )

81# _send_email_helper(flask_app, msg)

82# captured = capfd.readouterr()

83# assert "to@test.com" in captured.out

84# assert "from@test.com" in captured.out

85# assert "subject of email" in captured.out

86# assert "body of email" in captured.out