def test_query_values_of_nested_field(self): with mocked_relations(Manufacturer, Car): make = Manufacturer(name='vw') self.mock_set.add(make) polo = Car(make=make, model='polo', speed=240) golf = Car(make=make, model='golf', speed=260) polo_white = CarVariation(car=polo, color='white') golf_white = CarVariation(car=golf, color='white') golf_black = CarVariation(car=golf, color='black') make.car_set = MockSet(polo, golf) polo.variations = MockSet(polo_white) golf.variations = MockSet(golf_white, golf_black) data = list( self.mock_set.values('car__model', 'car__variations__color', 'name')) assert { 'name': make.name, 'car__model': polo.model, 'car__variations__color': polo_white.color } in data assert { 'name': make.name, 'car__model': golf.model, 'car__variations__color': golf_white.color } in data assert { 'name': make.name, 'car__model': golf.model, 'car__variations__color': golf_black.color } in data
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)
def test_query_filters_related_model_objects(self): item_1 = Car(make=Manufacturer(name='apple')) item_2 = Car(make=Manufacturer(name='banana')) item_3 = Car(make=Manufacturer(name='cherry')) self.mock_set.add(item_1, item_2, item_3) results = list(self.mock_set.filter(make__name='cherry')) assert results == [item_3]
def test_query_aggregate_on_related_field(self): with mocked_relations(Manufacturer): cars = [Car(speed=1), Car(speed=2), Car(speed=3)] make = Manufacturer() make.car_set = MockSet(*cars) self.mock_set.add(make) result = self.mock_set.aggregate(Avg('car__speed')) assert result['car__speed__avg'] == sum([c.speed for c in cars]) / len(cars)
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()
def test_mocked_relations_reusing_patcher(self): patcher = mocked_relations(Manufacturer) with patcher: self.assertEqual(0, Manufacturer.objects.count()) Manufacturer.objects.add(Manufacturer()) self.assertEqual(1, Manufacturer.objects.count()) with patcher: self.assertEqual(0, Manufacturer.objects.count()) Manufacturer.objects.add(Manufacturer()) self.assertEqual(1, Manufacturer.objects.count())
def test_mocked_relations_context_manager(self): m = Manufacturer() with mocked_relations(Manufacturer): self.assertEqual(0, m.car_set.count()) m.car_set.add(Car()) self.assertEqual(1, m.car_set.count())
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_mocked_relations_is_match_in_children(self): car = Car() manufacturer = Manufacturer() manufacturer.car_set.add(car) Manufacturer.objects.add(manufacturer) car_manufacturers = Manufacturer.objects.filter(car=car) self.assertEqual([manufacturer], list(car_manufacturers))
def test_mocked_relations_with_garbage_collection(self): self.longMessage = True for group_index in range(10): m = Manufacturer() self.assertEqual(0, m.car_set.count(), 'group_index: {}'.format(group_index)) m.car_set.add(Car()) self.assertEqual(1, m.car_set.count()) del m
def test_query_values_of_nested_field(self): with mocked_relations(Manufacturer, Car): make = Manufacturer(name='vw') self.mock_set.add(make) polo = Car(make=make, model='polo', speed=240) golf = Car(make=make, model='golf', speed=260) polo_white = CarVariation(car=polo, color='white') golf_white = CarVariation(car=golf, color='white') golf_black = CarVariation(car=golf, color='black') make.car_set = MockSet(polo, golf) polo.variations = MockSet(polo_white) golf.variations = MockSet(golf_white, golf_black) data = list(self.mock_set.values('car__model', 'car__variations__color', 'name')) assert {'name': make.name, 'car__model': polo.model, 'car__variations__color': polo_white.color} in data assert {'name': make.name, 'car__model': golf.model, 'car__variations__color': golf_white.color} in data assert {'name': make.name, 'car__model': golf.model, 'car__variations__color': golf_black.color} in data
def test_create(self): m = Manufacturer() car = m.car_set.create(speed=95) self.assertIsInstance(car, Car) self.assertEqual(95, car.speed)
def test_mocked_relations_decorator(self): m = Manufacturer() self.assertEqual(0, m.car_set.count()) m.car_set.add(Car()) self.assertEqual(1, m.car_set.count())
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)
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())
def test_set(self): m = Manufacturer() car = Car(speed=95) m.car_set.add(car) self.assertIs(m.car_set.first(), car)
def test_not_set(self): m = Manufacturer() self.assertEqual(0, m.car_set.count())