# Copyright (c) 2011, 2012 Free Software Foundation
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
# This project incorporates work covered by the following copyright and permission notice:
# Copyright (c) 2009, Julien Fache
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# * Neither the name of the author nor the names of other
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
# OF THE POSSIBILITY OF SUCH DAMAGE.
# Copyright (c) 2011, 2012 Free Software Foundation
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
"""Test cases for Objectapp's signals"""
from django.test import TestCase
from objectapp.models import Gbobject
from objectapp.managers import DRAFT
from objectapp.managers import PUBLISHED
from objectapp.signals import disable_for_loaddata
from objectapp.signals import ping_directories_handler
from objectapp.signals import ping_external_urls_handler
class SignalsTestCase(TestCase):
"""Test cases for signals"""
def test_disable_for_loaddata(self):
self.top = 0
@disable_for_loaddata
def make_top():
self.top += 1
def call():
return make_top()
call()
self.assertEquals(self.top, 1)
# Okay the command is executed
def test_ping_directories_handler(self):
# Set up a stub around DirectoryPinger
self.top = 0
def fake_pinger(*ka, **kw):
self.top += 1
import objectapp.ping
from objectapp import settings
self.original_pinger = objectapp.ping.DirectoryPinger
objectapp.ping.DirectoryPinger = fake_pinger
params = {'title': 'My gbobject',
'content': 'My content',
'status': PUBLISHED,
'slug': 'my-gbobject'}
gbobject = Gbobject.objects.create(**params)
self.assertEquals(gbobject.is_visible, True)
settings.PING_DIRECTORIES = ()
ping_directories_handler('sender', **{'instance': gbobject})
self.assertEquals(self.top, 0)
settings.PING_DIRECTORIES = ('toto',)
settings.SAVE_PING_DIRECTORIES = True
ping_directories_handler('sender', **{'instance': gbobject})
self.assertEquals(self.top, 1)
gbobject.status = DRAFT
ping_directories_handler('sender', **{'instance': gbobject})
self.assertEquals(self.top, 1)
# Remove stub
objectapp.ping.DirectoryPinger = self.original_pinger
def test_ping_external_urls_handler(self):
# Set up a stub around ExternalUrlsPinger
self.top = 0
def fake_pinger(*ka, **kw):
self.top += 1
import objectapp.ping
from objectapp import settings
self.original_pinger = objectapp.ping.ExternalUrlsPinger
objectapp.ping.ExternalUrlsPinger = fake_pinger
params = {'title': 'My gbobject',
'content': 'My content',
'status': PUBLISHED,
'slug': 'my-gbobject'}
gbobject = Gbobject.objects.create(**params)
self.assertEquals(gbobject.is_visible, True)
settings.SAVE_PING_EXTERNAL_URLS = False
ping_external_urls_handler('sender', **{'instance': gbobject})
self.assertEquals(self.top, 0)
settings.SAVE_PING_EXTERNAL_URLS = True
ping_external_urls_handler('sender', **{'instance': gbobject})
self.assertEquals(self.top, 1)
gbobject.status = 0
ping_external_urls_handler('sender', **{'instance': gbobject})
self.assertEquals(self.top, 1)
# Remove stub
objectapp.ping.ExternalUrlsPinger = self.original_pinger