Ejemplo n.º 1
0
class ModerationManagerTestCase(SettingsTestCase):
    fixtures = ['test_users.json', 'test_moderation.json']
    urls = 'django-moderation.test_urls'
    test_settings = 'moderation.tests.settings.generic'
    
    def setUp(self):
        import moderation
        self.moderation = ModerationManager()
        self.old_moderation = moderation
        setattr(moderation, 'moderation', self.moderation)
        from django.db.models import signals
        self.user = User.objects.get(username='******')
        
    def tearDown(self):
        import moderation
        setattr(moderation, 'moderation', self.old_moderation)
        del self.moderation

    def test_unregister(self):
        """Tests if model class is sucessfuly unregistered from moderation"""
        from django.db.models import signals
        
        old_pre_save_receivers = [r for r in signals.pre_save.receivers]
        old_post_save_receivers = [r for r in signals.post_save.receivers]
        
        signals.pre_save.receivers = []
        signals.post_save.receivers = []
        self.moderation.register(UserProfile)

        self.assertNotEqual(signals.pre_save.receivers, [])
        self.assertNotEqual(signals.post_save.receivers, [])
        
        UserProfile(description='Profile for new user',
                    url='http://www.yahoo.com',
                    user=User.objects.get(username='******')).save()

        self.moderation.unregister(UserProfile)

        self.assertEqual(signals.pre_save.receivers, [])
        self.assertEqual(signals.post_save.receivers, [])
        
        self.assertEqual(UserProfile.objects.__class__, Manager)
        self.assertEqual(hasattr(UserProfile, 'moderated_object'), False)
        
        signals.pre_save.receivers = old_pre_save_receivers
        signals.post_save.receivers = old_post_save_receivers

        UserProfile.objects.get(user__username='******')

        User.objects.get(username='******')
        management.call_command('loaddata', 'test_moderation.json',
                                verbosity=0)

    def test_moderation_manager(self):
        moderation = ModerationManager()

        self.assertEqual(moderation._registered_models, {})

    def test_save_new_instance_after_add_and_remove_fields_from_class(self):
        """Test if after removing moderation from model class new 
        instance of model can be created"""
        from django.db.models import signals

        class CustomManager(Manager):
            pass

        moderator = GenericModerator(UserProfile)
        self.moderation._and_fields_to_model_class(moderator)

        self.moderation._remove_fields(moderator)

        profile = UserProfile(description='Profile for new user', 
                              url='http://www.yahoo.com',
                              user=User.objects.get(username='******'))

        profile.save()

        up = UserProfile._default_manager.filter(url='http://www.yahoo.com')
        self.assertEqual(up.count(), 1)
        
    def test_and_fields_to_model_class(self):
        
        class CustomManager(Manager):
        
            pass
        moderator = GenericModerator(UserProfile)
        self.moderation._and_fields_to_model_class(moderator)

        manager = ModerationObjectsManager()(CustomManager)()

        self.assertEqual(repr(UserProfile.objects.__class__), 
                         repr(manager.__class__))
        self.assertEqual(hasattr(UserProfile, 'moderated_object'), True)

        #clean up
        self.moderation._remove_fields(moderator)

    def test_get_or_create_moderated_object_exist(self):
        profile = UserProfile.objects.get(user__username='******')
        
        ModeratedObject(content_object=profile).save()
        
        profile.description = "New description"
        
        unchanged_obj = self.moderation._get_unchanged_object(profile)
        object = self.moderation._get_or_create_moderated_object(profile,
                                                                unchanged_obj)
        
        self.assertNotEqual(object.pk, None)
        self.assertEqual(object.changed_object.description, 
                         u'Profile description')

    def test_get_or_create_moderated_object_does_not_exist(self):
        profile = UserProfile.objects.get(user__username='******')
        profile.description = "New description"
        
        unchanged_obj = self.moderation._get_unchanged_object(profile)

        object = self.moderation._get_or_create_moderated_object(profile,
                                                                unchanged_obj)

        self.assertEqual(object.pk, None)
        self.assertEqual(object.changed_object.description,
                         u'Profile description')

    def test_get_unchanged_object(self):
        profile = UserProfile.objects.get(user__username='******')
        profile.description = "New description"
        
        object = self.moderation._get_unchanged_object(profile)
        
        self.assertEqual(object.description,
                         u'Profile description')