diff --git a/bda/models.py b/bda/models.py index 59827621..1c081a56 100644 --- a/bda/models.py +++ b/bda/models.py @@ -352,7 +352,7 @@ class SpectacleRevente(models.Model): self.shotgun = True self.save() - def tirage(self): + def tirage(self, send_mails=True): """ Lance le tirage au sort associé à la revente. Un gagnant est choisi parmis les personnes intéressées par le spectacle. Les personnes sont @@ -366,37 +366,38 @@ class SpectacleRevente(models.Model): # Envoie un mail au gagnant et au vendeur winner = random.choice(inscrits) self.soldTo = winner - datatuple = [] - context = { - 'acheteur': winner.user, - 'vendeur': seller.user, - 'show': spectacle, - } - datatuple.append(( - 'bda-revente-winner', - context, - settings.MAIL_DATA['revente']['FROM'], - [winner.user.email], - )) - datatuple.append(( - 'bda-revente-seller', - context, - settings.MAIL_DATA['revente']['FROM'], - [seller.user.email] - )) + if send_mails: + datatuple = [] + context = { + 'acheteur': winner.user, + 'vendeur': seller.user, + 'show': spectacle, + } + datatuple.append(( + 'bda-revente-winner', + context, + settings.MAIL_DATA['revente']['FROM'], + [winner.user.email], + )) + datatuple.append(( + 'bda-revente-seller', + context, + settings.MAIL_DATA['revente']['FROM'], + [seller.user.email] + )) - # Envoie un mail aux perdants - for inscrit in inscrits: - if inscrit != winner: - new_context = dict(context) - new_context['acheteur'] = inscrit.user - datatuple.append(( - 'bda-revente-loser', - new_context, - settings.MAIL_DATA['revente']['FROM'], - [inscrit.user.email] - )) - send_mass_custom_mail(datatuple) + # Envoie un mail aux perdants + for inscrit in inscrits: + if inscrit != winner: + new_context = dict(context) + new_context['acheteur'] = inscrit.user + datatuple.append(( + 'bda-revente-loser', + new_context, + settings.MAIL_DATA['revente']['FROM'], + [inscrit.user.email] + )) + send_mass_custom_mail(datatuple) # Si personne ne veut de la place, elle part au shotgun else: diff --git a/bda/tests/test_revente.py b/bda/tests/test_revente.py new file mode 100644 index 00000000..8ef7be19 --- /dev/null +++ b/bda/tests/test_revente.py @@ -0,0 +1,69 @@ +from django.contrib.auth.models import User +from django.test import TestCase, Client +from django.utils import timezone + +from datetime import timedelta + +from bda.models import (Tirage, Spectacle, Salle, CategorieSpectacle, + SpectacleRevente, Attribution, Participant) + + +class TestModels(TestCase): + def setUp(self): + self.tirage = Tirage.objects.create( + title="Tirage test", + appear_catalogue=True, + ouverture=timezone.now(), + fermeture=timezone.now() + ) + self.category = CategorieSpectacle.objects.create(name="Category") + self.location = Salle.objects.create(name="here") + self.spectacle_soon = Spectacle.objects.create( + title="foo", date=timezone.now()+timedelta(days=1), + location=self.location, price=0, slots=42, + tirage=self.tirage, listing=False, category=self.category + ) + self.spectacle_later = Spectacle.objects.create( + title="bar", date=timezone.now()+timedelta(days=30), + location=self.location, price=0, slots=42, + tirage=self.tirage, listing=False, category=self.category + ) + + user_buyer = User.objects.create_user( + username="bda_buyer", password="testbuyer" + ) + user_seller = User.objects.create_user( + username="bda_seller", password="testseller" + ) + self.buyer = Participant.objects.create( + user=user_buyer, tirage=self.tirage + ) + self.seller = Participant.objects.create( + user=user_seller, tirage=self.tirage + ) + + self.attr_soon = Attribution.objects.create( + participant=self.seller, spectacle=self.spectacle_soon + ) + self.attr_later = Attribution.objects.create( + participant=self.seller, spectacle=self.spectacle_later + ) + self.revente_soon = SpectacleRevente.objects.create( + seller=self.seller, + attribution=self.attr_soon + ) + self.revente_later = SpectacleRevente.objects.create( + seller=self.seller, + attribution=self.attr_later + ) + + def test_urgent(self): + self.assertTrue(self.revente_soon.is_urgent) + self.assertFalse(self.revente_later.is_urgent) + + def test_tirage(self): + self.revente_soon.confirmed_entry.add(self.buyer) + + self.assertEqual(self.revente_soon.tirage(send_mails=False), + self.buyer) + self.assertIsNone(self.revente_later.tirage(send_mails=False))