gitignore
[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()
52
53 def get_site(self):
54 return Site.objects.all()[0]
55
56 def create_enveloppe_params(self):
57 enveloppe = Enveloppe(modele=self.modele_courriel)
58 enveloppe.save()
59 enveloppe_params = TestEnveloppeParams(enveloppe=enveloppe, destinataire=self.dest1)
60 enveloppe_params.save()
61 return enveloppe, enveloppe_params
62
63
64 def test_envoi_simple(self):
65 enveloppe, enveloppe_params = self.create_enveloppe_params()
66
67 envoyer(self.modele_courriel.code, 'expediteur@test.org', self.get_site(), 'dummy')
68
69 self.assertEqual(len(mail.outbox), 1)
70 self.assertEqual(mail.outbox[0].body, self.dest1.nom +
4f195036 71 'http://example.com/acces/' + enveloppe_params.jeton)
dfc0f84e 72 self.assertEqual(mail.outbox[0].to, [self.dest1.adresse_courriel])
73
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)
78
79 # normalement un deuxième envoi ne devrait rien envoyer de ce qui a
80 # déjà été logué
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)
85
86 # par contre si une erreur s'est produite l'envoi devrait être retenté
87 entrees_log[0].erreur = u'libellé erreur'
88 entrees_log[0].save()
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)
93
94 entrees_log[0].delete()
95
96 # le courriel devrait également être renvoyé si l'adresse du destinataire
97 # a changé
98 self.dest1.adresse_courriel = 'autre_adresse@test.org'
99 self.dest1.save()
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)
104
105
106
107
108
109
110
111