keep is_free up to date

pull/1/head
eric 2014-12-13 12:37:35 -05:00
parent c9270b154a
commit b54b21fdfe
3 changed files with 32 additions and 2 deletions

View File

@ -474,6 +474,8 @@ def merge_works(w1, w2, user=None):
w1.description = w2.description
if w2.featured and not w1.featured:
w1.featured = w2.featured
if w2.is_free and not w1.is_free:
w1.is_free = True
w1.save()
for wishlist in models.Wishlist.objects.filter(works__in=[w2]):
w2source = wishlist.work_source(w2)

View File

@ -26,7 +26,7 @@ from django.core.urlresolvers import reverse
from django.core.files.base import ContentFile
from django.db import models
from django.db.models import F, Q, get_model
from django.db.models.signals import post_save
from django.db.models.signals import post_save, pre_delete
from django.utils.translation import ugettext_lazy as _
'''
@ -1862,6 +1862,21 @@ class Ebook(models.Model):
self.active=True
self.save()
def set_free_flag(sender, instance, created, **kwargs):
if created:
if not instance.edition.work.is_free:
instance.edition.work.is_free = True
instance.edition.work.save()
post_save.connect(set_free_flag,sender=Ebook)
def reset_free_flag(sender, instance, **kwargs):
if instance.edition.work.ebooks().count()==1:
instance.edition.work.is_free = False
instance.edition.work.save()
pre_delete.connect(reset_free_flag,sender=Ebook)
class Wishlist(models.Model):
created = models.DateTimeField(auto_now_add=True)
user = models.OneToOneField(User, related_name='wishlist')

View File

@ -183,6 +183,9 @@ class BookLoaderTests(TestCase):
e2 = Edition(work=w2)
e2.save()
eb1 = Ebook(edition = e2)
eb1.save()
e2a = Edition(work=w2)
e2a.save()
@ -192,7 +195,10 @@ class BookLoaderTests(TestCase):
self.assertTrue(e1.work)
self.assertTrue(e2.work)
self.assertEqual(models.Work.objects.count(), 2)
self.assertTrue(w2.is_free)
self.assertFalse(w1.is_free)
w1_id = w1.id
w2_id = w2.id
@ -206,6 +212,8 @@ class BookLoaderTests(TestCase):
self.assertEqual(models.WasWork.objects.count(),1)
self.assertEqual(w1.subjects.count(),2)
self.assertTrue(w1.is_free)
# getting proper view?
anon_client = Client()
r = anon_client.get("/work/%s/" % w1_id)
@ -788,6 +796,11 @@ class DownloadPageTest(TestCase):
response = anon_client.get("/work/%s/download/" % w.id, follow=True)
self.assertContains(response, "/download_ebook/%s/"% eb1.id, count=10)
self.assertContains(response, "/download_ebook/%s/"% eb2.id, count=5)
self.assertTrue(eb1.edition.work.is_free)
eb1.delete()
self.assertTrue(eb2.edition.work.is_free)
eb2.delete()
self.assertFalse(eb2.edition.work.is_free)
class LocaldatetimeTest(TestCase):