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
,\
13 class TestDestinataire(models
.Model
):
14 adresse_courriel
= CharField(max_length
=128)
15 nom
= CharField(max_length
=64)
18 class TestEnveloppeParams(models
.Model
):
20 destinataire
= ForeignKey(TestDestinataire
)
21 enveloppe
= ForeignKey(Enveloppe
, unique
=True)
23 def get_adresse(self
):
24 return self
.destinataire
.adresse_courriel
26 def get_corps_context(self
):
28 'nom_destinataire' : self
.destinataire
.nom
33 class MailTest(TestCase
):
36 self
.dest1
= TestDestinataire(adresse_courriel
='dest1@test.org',
39 self
.dest2
= TestDestinataire(adresse_courriel
='dest2@test.org',
42 self
.modele_courriel
= ModeleCourriel(code
='mod_test',
43 sujet
='sujet_modele', corps
='{{ nom_destinataire }}{{ url }}',
45 self
.modele_courriel
.save()
48 return Site
.objects
.all()[0]
50 def create_enveloppe_params(self
):
51 enveloppe
= Enveloppe(modele
=self
.modele_courriel
)
53 enveloppe_params
= TestEnveloppeParams(enveloppe
=enveloppe
, destinataire
=self
.dest1
)
54 enveloppe_params
.save()
55 return enveloppe
, enveloppe_params
58 def test_envoi_simple(self
):
59 enveloppe
, enveloppe_params
= self
.create_enveloppe_params()
61 envoyer(self
.modele_courriel
.code
, 'expediteur@test.org', self
.get_site(), 'dummy')
63 self
.assertEqual(len(mail
.outbox
), 1)
64 self
.assertEqual(mail
.outbox
[0].body
, self
.dest1
.nom
+
65 'http://example.com/acces/' + enveloppe
.jeton
)
66 self
.assertEqual(mail
.outbox
[0].to
, [self
.dest1
.adresse_courriel
])
68 entrees_log
= EntreeLog
.objects
.all()
69 self
.assertEqual(len(entrees_log
), 1)
70 self
.assertEqual(entrees_log
[0].enveloppe
, enveloppe
)
71 self
.assertEqual(entrees_log
[0].adresse
, self
.dest1
.adresse_courriel
)
73 # normalement un deuxième envoi ne devrait rien envoyer de ce qui a
75 envoyer(self
.modele_courriel
.code
, 'expediteur@test.org', self
.get_site(), 'dummy')
76 self
.assertEqual(len(mail
.outbox
), 1)
77 entrees_log
= EntreeLog
.objects
.all()
78 self
.assertEqual(len(entrees_log
), 1)
80 # par contre si une erreur s'est produite l'envoi devrait être retenté
81 entrees_log
[0].erreur
= u
'libellé erreur'
83 envoyer(self
.modele_courriel
.code
, 'expediteur@test.org', self
.get_site(), 'dummy')
84 self
.assertEqual(len(mail
.outbox
), 2)
85 entrees_log
= EntreeLog
.objects
.all()
86 self
.assertEqual(len(entrees_log
), 2)
88 entrees_log
[0].delete()
90 # le courriel devrait également être renvoyé si l'adresse du destinataire
92 self
.dest1
.adresse_courriel
= 'autre_adresse@test.org'
94 envoyer(self
.modele_courriel
.code
, 'expediteur@test.org', self
.get_site(), 'dummy')
95 self
.assertEqual(len(mail
.outbox
), 3)
96 entrees_log
= EntreeLog
.objects
.all()
97 self
.assertEqual(len(entrees_log
), 2)