def test_mock_is_removed(self):
        m = Manufacturer()

        with patch.object(Manufacturer, 'car_set', MockOneToManyMap(Manufacturer.car_set)):
            m.car_set = MockSet(Car(speed=95))
            self.assertEqual(1, m.car_set.count())

        with self.assertRaisesRegexp(
                NotSupportedError,
                'Mock database tried to execute SQL for Car model'):
            m.car_set.count()
class MockOneToManyTests(TestCase):
    def test_not_mocked(self):
        m = Manufacturer()

        with self.assertRaisesRegexp(
                NotSupportedError,
                'Mock database tried to execute SQL for Car model'):
            m.car_set.count()

    def test_mock_is_removed(self):
        m = Manufacturer()

        with patch.object(Manufacturer, 'car_set',
                          MockOneToManyMap(Manufacturer.car_set)):
            m.car_set = MockSet(Car(speed=95))
            self.assertEqual(1, m.car_set.count())

        with self.assertRaisesRegexp(
                NotSupportedError,
                'Mock database tried to execute SQL for Car model'):
            m.car_set.count()

    @patch.object(Manufacturer, 'car_set',
                  MockOneToManyMap(Manufacturer.car_set))
    def test_not_set(self):
        m = Manufacturer()

        self.assertEqual(0, m.car_set.count())

    @patch.object(Manufacturer, 'car_set',
                  MockOneToManyMap(Manufacturer.car_set))
    def test_set(self):
        m = Manufacturer()
        car = Car(speed=95)
        m.car_set.add(car)

        self.assertIs(m.car_set.first(), car)

    @patch.object(Manufacturer, 'car_set',
                  MockOneToManyMap(Manufacturer.car_set))
    def test_set_on_individual_object(self):
        m = Manufacturer()
        m.car_set.add(Car(speed=95))
        m2 = Manufacturer()

        self.assertEqual(0, m2.car_set.count())

    @patch.object(Manufacturer, 'car_set',
                  MockOneToManyMap(Manufacturer.car_set))
    def test_set_explicit_collection(self):
        m = Manufacturer()
        m.car_set.add(Car(speed=95))

        car = Car(speed=100)
        m.car_set = MockSet(car)

        self.assertIs(m.car_set.first(), car)

    @patch.object(Manufacturer, 'car_set',
                  MockOneToManyMap(Manufacturer.car_set))
    @patch.object(Car, 'save', MagicMock)
    def test_create(self):
        m = Manufacturer()
        car = m.car_set.create(speed=95)

        self.assertIsInstance(car, Car)
        self.assertEqual(95, car.speed)

    @patch.object(Manufacturer, 'car_set',
                  MockOneToManyMap(Manufacturer.car_set))
    def test_delegation(self):
        """ We can still access fields from the original relation manager. """
        self.assertTrue(
            Manufacturer.car_set.related_manager_cls.do_not_call_in_templates)

    @patch.object(Manufacturer, 'car_set',
                  MockOneToManyMap(Manufacturer.car_set))
    def test_raises(self):
        """ Raises an error specific to the child class. """
        m = Manufacturer()

        with self.assertRaises(Car.DoesNotExist):
            m.car_set.get(speed=0)