1 # -*- encoding: utf-8 -*-
2 from django
.contrib
.sites
.models
import Site
3 from django
.core
import mail
4 from django
.db
import models
5 from django
.db
.models
.fields
import CharField
6 from django
.db
.models
.fields
.related
import ForeignKey
8 from django
.test
import TestCase
10 from auf
.django
.mailing
.models
import EntreeLog
, Enveloppe
, envoyer
,\
11 ModeleCourriel
, generer_jeton
, TAILLE_JETON
13 class TestDestinataire(models
.Model
):
14 adresse_courriel
= CharField(max_length
=128)
15 nom
= CharField(max_length
=64)
18 class TestEnveloppeParams(models
.Model
):
19 destinataire
= ForeignKey(TestDestinataire
)
20 enveloppe
= ForeignKey(Enveloppe
, unique
=True)
21 jeton
= CharField(max_length
=TAILLE_JETON
)
23 def save(self
, *args
, **kwargs
):
25 self
.jeton
= generer_jeton(TAILLE_JETON
)
26 super(TestEnveloppeParams
, self
).save(*args
, **kwargs
)
28 def get_adresse(self
):
29 return self
.destinataire
.adresse_courriel
31 def get_corps_context(self
):
33 'nom_destinataire' : self
.destinataire
.nom
,
39 class MailTest(TestCase
):
42 self
.dest1
= TestDestinataire(adresse_courriel
='dest1@test.org',
45 self
.dest2
= TestDestinataire(adresse_courriel
='dest2@test.org',
48 self
.modele_courriel
= ModeleCourriel(code
='mod_test',
49 sujet
='sujet_modele', corps
='{{ nom_destinataire }}{{ url }}',
51 self
.modele_courriel
.save()
55 return Site
.objects
.all()[0]
57 def create_enveloppe_params(self
, dest
):
58 enveloppe
= Enveloppe(modele
=self
.modele_courriel
)
60 enveloppe_params
= TestEnveloppeParams(enveloppe
=enveloppe
, destinataire
=dest
)
61 enveloppe_params
.save()
62 return enveloppe
, enveloppe_params
65 def test_envoi_simple(self
):
66 enveloppe
, enveloppe_params
= self
.create_enveloppe_params(self
.dest1
)
68 envoyer(self
.modele_courriel
.code
, 'expediteur@test.org', self
.get_site(), 'dummy')
70 self
.assertEqual(len(mail
.outbox
), 1)
71 self
.assertEqual(mail
.outbox
[0].body
, self
.dest1
.nom
+
72 'http://example.com/acces/' + enveloppe_params
.jeton
)
73 self
.assertEqual(mail
.outbox
[0].to
, [self
.dest1
.adresse_courriel
])
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
)
80 # normalement un deuxième envoi ne devrait rien envoyer de ce qui a
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)
87 # par contre si une erreur s'est produite l'envoi devrait être retenté
88 entrees_log
[0].erreur
= u
'libellé erreur'
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)
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)
102 entrees_log
[0].delete()
104 # le courriel devrait également être renvoyé si l'adresse du destinataire
106 envoyer(self
.modele_courriel
.code
, 'expediteur@test.org', self
.get_site(), 'dummy', retry_errors
=False)
107 self
.dest1
.adresse_courriel
= 'autre_adresse@test.org'
109 envoyer(self
.modele_courriel
.code
, 'expediteur@test.org', self
.get_site(), 'dummy')
110 self
.assertEqual(len(mail
.outbox
), 4)
111 entrees_log
= EntreeLog
.objects
.all()
112 self
.assertEqual(len(entrees_log
), 2)
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)