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()
54 return Site
.objects
.all()[0]
56 def create_enveloppe_params(self
):
57 enveloppe
= Enveloppe(modele
=self
.modele_courriel
)
59 enveloppe_params
= TestEnveloppeParams(enveloppe
=enveloppe
, destinataire
=self
.dest1
)
60 enveloppe_params
.save()
61 return enveloppe
, enveloppe_params
64 def test_envoi_simple(self
):
65 enveloppe
, enveloppe_params
= self
.create_enveloppe_params()
67 envoyer(self
.modele_courriel
.code
, 'expediteur@test.org', self
.get_site(), 'dummy')
69 self
.assertEqual(len(mail
.outbox
), 1)
70 self
.assertEqual(mail
.outbox
[0].body
, self
.dest1
.nom
+
71 'http://example.com/acces/' + enveloppe_params
.jeton
)
72 self
.assertEqual(mail
.outbox
[0].to
, [self
.dest1
.adresse_courriel
])
74 entrees_log
= EntreeLog
.objects
.all()
75 self
.assertEqual(len(entrees_log
), 1)
76 self
.assertEqual(entrees_log
[0].enveloppe
, enveloppe
)
77 self
.assertEqual(entrees_log
[0].adresse
, self
.dest1
.adresse_courriel
)
79 # normalement un deuxième envoi ne devrait rien envoyer de ce qui a
81 envoyer(self
.modele_courriel
.code
, 'expediteur@test.org', self
.get_site(), 'dummy')
82 self
.assertEqual(len(mail
.outbox
), 1)
83 entrees_log
= EntreeLog
.objects
.all()
84 self
.assertEqual(len(entrees_log
), 1)
86 # par contre si une erreur s'est produite l'envoi devrait être retenté
87 entrees_log
[0].erreur
= u
'libellé erreur'
89 envoyer(self
.modele_courriel
.code
, 'expediteur@test.org', self
.get_site(), 'dummy')
90 self
.assertEqual(len(mail
.outbox
), 2)
91 entrees_log
= EntreeLog
.objects
.all()
92 self
.assertEqual(len(entrees_log
), 2)
94 entrees_log
[0].delete()
96 # le courriel devrait également être renvoyé si l'adresse du destinataire
98 self
.dest1
.adresse_courriel
= 'autre_adresse@test.org'
100 envoyer(self
.modele_courriel
.code
, 'expediteur@test.org', self
.get_site(), 'dummy')
101 self
.assertEqual(len(mail
.outbox
), 3)
102 entrees_log
= EntreeLog
.objects
.all()
103 self
.assertEqual(len(entrees_log
), 2)