Skip to content
This repository
tree: 3ec0d1ab3e
Fetching contributors…

Cannot retrieve contributors at this time

file 35 lines (28 sloc) 1.013 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
"""
mock_django.signals
~~~~~~~~~~~~~~~~

:copyright: (c) 2012 DISQUS.
:license: Apache License 2.0, see LICENSE for more details.
"""
import contextlib
import mock


@contextlib.contextmanager
def mock_signal_receiver(signal, wraps=None, **kwargs):
    """
Temporarily attaches a receiver to the provided ``signal`` within the scope
of the context manager.

The mocked receiver is returned as the ``as`` target of the ``with``
statement.

To have the mocked receiver wrap a callable, pass the callable as the
``wraps`` keyword argument. All other keyword arguments provided are passed
through to the signal's ``connect`` method.

>>> with mock_signal_receiver(post_save, sender=Model) as receiver:
>>> Model.objects.create()
>>> assert receiver.call_count = 1
"""
    if wraps is None:
        wraps = lambda *args, **kwargs: None

    receiver = mock.Mock(wraps=wraps)
    signal.connect(receiver, **kwargs)
    yield receiver
    signal.disconnect(receiver)
Something went wrong with that request. Please try again.