File diff 843dbaebdae4 → dadf26dab8ba
conntrackt/tests/test_managers.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 
#
 
# Copyright (C) 2013 Branko Majic
 
#
 
# This file is part of Django Conntrackt.
 
#
 
# Django Conntrackt is free software: you can redistribute it and/or modify it
 
# under the terms of the GNU General Public License as published by the Free
 
# Software Foundation, either version 3 of the License, or (at your option) any
 
# later version.
 
#
 
# Django Conntrackt 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 General Public License for more
 
# details.
 
#
 
# You should have received a copy of the GNU General Public License along with
 
# Django Conntrackt.  If not, see <http://www.gnu.org/licenses/>.
 
#
 

	
 

	
 
# Python third-party library imports.
 
import mock
 

	
 
# Django imports.
 
from django.test import TestCase
 
from django.db import models
 

	
 
# Application imports.
 
from conntrackt.models import SearchManager, Project
 

	
 

	
 
class SearchManagerTest(TestCase):
 

	
 
    @mock.patch("conntrackt.models.Q")
 
    def test_search(self, q_object):
 
        """
 
        Test the search method of custom manager.
 
        """
 

	
 
        # Create a dummy model that uses the custom manager.
 
        class TestModel(models.Model):
 
            objects = SearchManager()
 

	
 
        # Mock the filter call so we can check what it got called with.
 
        TestModel.objects.filter = mock.MagicMock()
 

	
 
        # Set-up an instance of mocked Q object that we'll use for validating
 
        # the call.
 
        q_instance = mock.Mock()
 

	
 
        # Mock the __or__ call.
 
        q_or_method = mock.Mock()
 
        q_or_method.return_value = q_instance
 
        q_instance.__or__ = q_or_method
 

	
 
        # Finaly, when the constructor is called, we should return our own
 
        # instance.
 
        q_object.return_value = q_instance
 

	
 
        # Call the search.
 
        results = TestModel.objects.search("test")
 

	
 
        # Check if we had bee called with our mocked Q instance.
 
        TestModel.objects.filter.assert_has_calls([mock.call(q_instance)])
 
        TestModel.objects.filter.assert_called_with(q_instance)
 
        q_instance.__or__.assert_called_with(q_instance)