2013-03-04 12:03:58 -08:00
|
|
|
from django.conf import settings
|
|
|
|
|
from django.contrib.auth.models import Permission
|
2013-04-05 19:10:17 +02:00
|
|
|
from django.core.files.images import ImageFile
|
2013-03-04 14:39:26 -08:00
|
|
|
from django.db.models.query import QuerySet
|
|
|
|
|
from django.test import TestCase
|
2013-04-16 00:30:43 +02:00
|
|
|
from django_images.models import Thumbnail
|
2013-03-04 12:03:58 -08:00
|
|
|
|
|
|
|
|
import factory
|
|
|
|
|
from taggit.models import Tag
|
|
|
|
|
|
2013-03-05 01:28:39 -08:00
|
|
|
from ..models import Pin, Image
|
|
|
|
|
from ...users.models import User
|
|
|
|
|
|
2013-03-04 12:03:58 -08:00
|
|
|
|
2013-03-27 21:07:22 +01:00
|
|
|
TEST_IMAGE_PATH = 'logo.png'
|
2013-03-04 12:03:58 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class UserFactory(factory.Factory):
|
2013-09-22 03:33:50 +00:00
|
|
|
FACTORY_FOR = User
|
|
|
|
|
|
2013-03-04 12:03:58 -08:00
|
|
|
username = factory.Sequence(lambda n: 'user_{}'.format(n))
|
|
|
|
|
email = factory.Sequence(lambda n: 'user_{}@example.com'.format(n))
|
|
|
|
|
|
2013-03-04 14:39:26 -08:00
|
|
|
@factory.post_generation(extract_prefix='password')
|
|
|
|
|
def set_password(self, create, extracted, **kwargs):
|
|
|
|
|
self.set_password(extracted)
|
|
|
|
|
self.save()
|
2013-03-04 12:03:58 -08:00
|
|
|
|
2013-03-04 14:39:26 -08:00
|
|
|
@factory.post_generation(extract_prefix='user_permissions')
|
|
|
|
|
def set_user_permissions(self, create, extracted, **kwargs):
|
|
|
|
|
self.user_permissions = Permission.objects.filter(codename__in=['add_pin', 'add_image'])
|
2013-03-04 12:03:58 -08:00
|
|
|
|
|
|
|
|
|
2013-03-04 15:31:22 -08:00
|
|
|
class TagFactory(factory.Factory):
|
2013-09-22 03:33:50 +00:00
|
|
|
FACTORY_FOR = Tag
|
|
|
|
|
|
2013-03-04 12:03:58 -08:00
|
|
|
name = factory.Sequence(lambda n: 'tag_{}'.format(n))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ImageFactory(factory.Factory):
|
2013-04-16 00:30:43 +02:00
|
|
|
FACTORY_FOR = Image
|
|
|
|
|
|
2013-04-05 19:10:17 +02:00
|
|
|
image = factory.LazyAttribute(lambda a: ImageFile(open(TEST_IMAGE_PATH, 'rb')))
|
2013-03-04 12:03:58 -08:00
|
|
|
|
2013-04-16 00:30:43 +02:00
|
|
|
@factory.post_generation()
|
|
|
|
|
def create_thumbnails(self, create, extracted, **kwargs):
|
|
|
|
|
for size in settings.IMAGE_SIZES.keys():
|
|
|
|
|
Thumbnail.objects.get_or_create_at_size(self.pk, size)
|
|
|
|
|
|
2013-03-04 12:03:58 -08:00
|
|
|
|
|
|
|
|
class PinFactory(factory.Factory):
|
2013-09-22 03:33:50 +00:00
|
|
|
FACTORY_FOR = Pin
|
|
|
|
|
|
2013-03-04 12:03:58 -08:00
|
|
|
submitter = factory.SubFactory(UserFactory)
|
|
|
|
|
image = factory.SubFactory(ImageFactory)
|
|
|
|
|
|
2013-03-04 14:39:26 -08:00
|
|
|
@factory.post_generation(extract_prefix='tags')
|
|
|
|
|
def add_tags(self, create, extracted, **kwargs):
|
|
|
|
|
if isinstance(extracted, Tag):
|
|
|
|
|
self.tags.add(extracted)
|
|
|
|
|
elif isinstance(extracted, list):
|
|
|
|
|
self.tags.add(*extracted)
|
|
|
|
|
elif isinstance(extracted, QuerySet):
|
|
|
|
|
self.tags = extracted
|
|
|
|
|
else:
|
|
|
|
|
self.tags.add(TagFactory())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PinFactoryTest(TestCase):
|
|
|
|
|
def test_default_tags(self):
|
|
|
|
|
self.assertTrue(PinFactory().tags.get(pk=1).name.startswith('tag_'))
|
|
|
|
|
|
|
|
|
|
def test_custom_tag(self):
|
|
|
|
|
custom = 'custom_tag'
|
|
|
|
|
self.assertEqual(PinFactory(tags=Tag.objects.create(name=custom)).tags.get(pk=1).name, custom)
|
|
|
|
|
|
|
|
|
|
def test_custom_tags_list(self):
|
|
|
|
|
tags = TagFactory.create_batch(2)
|
|
|
|
|
PinFactory(tags=tags)
|
|
|
|
|
self.assertEqual(Tag.objects.count(), 2)
|
|
|
|
|
|
|
|
|
|
def test_custom_tags_queryset(self):
|
|
|
|
|
TagFactory.create_batch(2)
|
|
|
|
|
tags = Tag.objects.all()
|
|
|
|
|
PinFactory(tags=tags)
|
|
|
|
|
self.assertEqual(Tag.objects.count(), 2)
|
|
|
|
|
|
|
|
|
|
def test_empty_tags(self):
|
|
|
|
|
PinFactory(tags=[])
|
2013-03-05 01:28:39 -08:00
|
|
|
self.assertEqual(Tag.objects.count(), 0)
|