[#5123] Attraper les time-out lors de l'envoi de courriels
[auf_django_mailing.git] / tests / tests.py
CommitLineData
dfc0f84e 1# -*- encoding: utf-8 -*-
2from django.contrib.sites.models import Site
3from django.core import mail
4from django.db import models
5from django.db.models.fields import CharField
6from django.db.models.fields.related import ForeignKey
7
8from django.test import TestCase
9
10from auf.django.mailing.models import EntreeLog, Enveloppe, envoyer,\
4f195036 11 ModeleCourriel, generer_jeton, TAILLE_JETON
dfc0f84e 12
13class TestDestinataire(models.Model):
14 adresse_courriel = CharField(max_length=128)
15 nom = CharField(max_length=64)
16
17
18class TestEnveloppeParams(models.Model):
dfc0f84e 19 destinataire = ForeignKey(TestDestinataire)
20 enveloppe = ForeignKey(Enveloppe, unique=True)
4f195036 21 jeton = CharField(max_length=TAILLE_JETON)
22
23 def save(self, *args, **kwargs):
24 if not self.jeton:
25 self.jeton = generer_jeton(TAILLE_JETON)
26 super(TestEnveloppeParams, self).save(*args, **kwargs)
dfc0f84e 27
28 def get_adresse(self):
29 return self.destinataire.adresse_courriel
30
31 def get_corps_context(self):
32 context = {
4f195036 33 'nom_destinataire' : self.destinataire.nom,
34 'jeton': self.jeton,
dfc0f84e 35 }
36 return context
37
38
39class MailTest(TestCase):
40
41 def setUp(self):
42 self.dest1 = TestDestinataire(adresse_courriel='dest1@test.org',
43 nom='nom dest1')
44 self.dest1.save()
45 self.dest2 = TestDestinataire(adresse_courriel='dest2@test.org',
46 nom='nom dest2')
47 self.dest2.save()
48 self.modele_courriel = ModeleCourriel(code='mod_test',
49 sujet='sujet_modele', corps='{{ nom_destinataire }}{{ url }}',
50 html=False)
51 self.modele_courriel.save()
8a14c16f 52 mail.outbox = []
dfc0f84e 53
54 def get_site(self):
55 return Site.objects.all()[0]
56
8a14c16f 57 def create_enveloppe_params(self, dest):
dfc0f84e 58 enveloppe = Enveloppe(modele=self.modele_courriel)
59 enveloppe.save()
8a14c16f 60 enveloppe_params = TestEnveloppeParams(enveloppe=enveloppe, destinataire=dest)
dfc0f84e 61 enveloppe_params.save()
62 return enveloppe, enveloppe_params
63
64
65 def test_envoi_simple(self):
8a14c16f 66 enveloppe, enveloppe_params = self.create_enveloppe_params(self.dest1)
dfc0f84e 67
68 envoyer(self.modele_courriel.code, 'expediteur@test.org', self.get_site(), 'dummy')
69
70 self.assertEqual(len(mail.outbox), 1)
71 self.assertEqual(mail.outbox[0].body, self.dest1.nom +
4f195036 72 'http://example.com/acces/' + enveloppe_params.jeton)
dfc0f84e 73 self.assertEqual(mail.outbox[0].to, [self.dest1.adresse_courriel])
74
75 entrees_log = EntreeLog.objects.all()
76 self.assertEqual(len(entrees_log), 1)
77 self.assertEqual(entrees_log[0].enveloppe, enveloppe)
78 self.assertEqual(entrees_log[0].adresse, self.dest1.adresse_courriel)
79
80 # normalement un deuxième envoi ne devrait rien envoyer de ce qui a
81 # déjà été logué
82 envoyer(self.modele_courriel.code, 'expediteur@test.org', self.get_site(), 'dummy')
83 self.assertEqual(len(mail.outbox), 1)
84 entrees_log = EntreeLog.objects.all()
85 self.assertEqual(len(entrees_log), 1)
86
87 # par contre si une erreur s'est produite l'envoi devrait être retenté
88 entrees_log[0].erreur = u'libellé erreur'
89 entrees_log[0].save()
90 envoyer(self.modele_courriel.code, 'expediteur@test.org', self.get_site(), 'dummy')
91 self.assertEqual(len(mail.outbox), 2)
92 entrees_log = EntreeLog.objects.all()
93 self.assertEqual(len(entrees_log), 2)
94
8a14c16f
E
95 # mais pas si on demande que les erreurs ne soient pas retentées
96 EntreeLog.objects.all()[1].delete()
97 envoyer(self.modele_courriel.code, 'expediteur@test.org', self.get_site(), 'dummy', retry_errors=False)
98 self.assertEqual(len(mail.outbox), 2)
99 entrees_log = EntreeLog.objects.all()
100 self.assertEqual(len(entrees_log), 1)
101
dfc0f84e 102 entrees_log[0].delete()
103
104 # le courriel devrait également être renvoyé si l'adresse du destinataire
105 # a changé
8a14c16f 106 envoyer(self.modele_courriel.code, 'expediteur@test.org', self.get_site(), 'dummy', retry_errors=False)
dfc0f84e 107 self.dest1.adresse_courriel = 'autre_adresse@test.org'
108 self.dest1.save()
109 envoyer(self.modele_courriel.code, 'expediteur@test.org', self.get_site(), 'dummy')
8a14c16f 110 self.assertEqual(len(mail.outbox), 4)
dfc0f84e 111 entrees_log = EntreeLog.objects.all()
112 self.assertEqual(len(entrees_log), 2)
113
8a14c16f
E
114 def test_limit(self):
115 self.create_enveloppe_params(self.dest1)
116 self.create_enveloppe_params(self.dest2)
117 envoyer(self.modele_courriel.code, 'expediteur@test.org', self.get_site(), 'dummy', limit=1, retry_errors=False)
118 self.assertEqual(len(mail.outbox), 1)
119 envoyer(self.modele_courriel.code, 'expediteur@test.org', self.get_site(), 'dummy', limit=1, retry_errors=False)
120 self.assertEqual(len(mail.outbox), 2)
121
122
dfc0f84e 123
124
125
126
127
128
129