def test_sort_abv_descending(self): venue = VenueFactory() mfg = ManufacturerFactory() style = StyleFactory() beers = Beer.objects.bulk_create([ BeerFactory.build(manufacturer=mfg, abv=None, style=style), BeerFactory.build(manufacturer=mfg, abv=Decimal("3.2"), style=style), ]) Tap.objects.bulk_create( TapFactory.build(beer=beer, venue=venue) for beer in beers) url = f"{self.url}?o=-abv&on_tap=True" with self.assertNumQueries(5): # 1. count # 2. beer + style # 3. style alt names # 4. prices # 5. taps response = self.client.get(url) self.assertEqual(response.status_code, 200, response.data) self.assertEqual(len(response.data["results"]), 2, json.dumps(response.data, indent=2)) self.assertEqual( list(i["id"] for i in response.data["results"]), [i.id for i in reversed(beers)], )
def test_filter_by_venue_slug(self): wanted_venue = VenueFactory(slug="slug-1") other_venue = VenueFactory(slug="not-this") mfg = ManufacturerFactory() style = StyleFactory() beers = Beer.objects.bulk_create( BeerFactory.build(style=style, manufacturer=mfg) for _ in range(3)) # set up 3 beers on tap, two at the one we want to look for, one at # the other Tap.objects.bulk_create( TapFactory.build(beer=beer, venue=venue) for beer, venue in zip( beers, [wanted_venue, wanted_venue, other_venue], )) url = f"{self.url}?taps__venue__slug__icontains=SLUG&on_tap=True" with self.assertNumQueries(5): # 1. count # 2. beer + style # 3. style alt names # 4. prices # 5. taps response = self.client.get(url) self.assertEqual(response.status_code, 200, response.data) self.assertEqual(len(response.data["results"]), 2, json.dumps(response.data, indent=2)) self.assertEqual( set(i["id"] for i in response.data["results"]), set(i.id for i in beers[:-1]), )
def test_sort_abv_descending(self): venue = VenueFactory() mfg = ManufacturerFactory() beers = Beer.objects.bulk_create([ BeerFactory.build(manufacturer=mfg, abv=None), BeerFactory.build(manufacturer=mfg, abv=Decimal('3.2')) ]) Tap.objects.bulk_create( TapFactory.build(beer=beer, venue=venue) for beer in beers) url = f'{self.url}?o=-abv&on_tap=True' with self.assertNumQueries(4): response = self.client.get(url) eq_(response.status_code, 200, response.data) eq_(len(response.data['results']), 2, json.dumps(response.data, indent=2)) eq_(list(i['id'] for i in response.data['results']), [i.id for i in reversed(beers)])
def setUpTestData(cls): super().setUpTestData() cls.venue = VenueFactory() cls.normal_user = UserFactory() cls.styles = Style.objects.bulk_create(StyleFactory.build_batch(50)) cls.manufacturer = ManufacturerFactory() cls.beers = Beer.objects.bulk_create( BeerFactory.build(style=style, manufacturer=cls.manufacturer) for style in cls.styles) cls.taps = Tap.objects.bulk_create( TapFactory.build( beer=beer, venue=cls.venue, tap_number=index, ) for index, beer in enumerate(cls.beers)) VenueTapManager.objects.create( user=cls.normal_user, venue=cls.venue, )
def test_filter_by_venue_slug(self): wanted_venue = VenueFactory(slug='slug-1') other_venue = VenueFactory(slug='not-this') mfg = ManufacturerFactory() beers = Beer.objects.bulk_create( BeerFactory.build(manufacturer=mfg) for dummy in range(3)) # set up 3 beers on tap, two at the one we want to look for, one at # the other Tap.objects.bulk_create( TapFactory.build(beer=beer, venue=venue) for beer, venue in zip( beers, [wanted_venue, wanted_venue, other_venue], )) url = f'{self.url}?taps__venue__slug__icontains=SLUG&on_tap=True' with self.assertNumQueries(4): response = self.client.get(url) eq_(response.status_code, 200, response.data) eq_(len(response.data['results']), 2, json.dumps(response.data, indent=2)) eq_(set(i['id'] for i in response.data['results']), set(i.id for i in beers[:-1]))
def setUp(self): manufacturer = ManufacturerFactory() venue = VenueFactory() style = StyleFactory() self.beers = Beer.objects.bulk_create( BeerFactory.build( manufacturer=manufacturer, style=style, ) for _ in range(20)) self.prices = BeerPrice.objects.bulk_create( BeerPrice( # pint serving_size_id=1, price=index * 2.1, beer=beer, venue=venue, ) for index, beer in enumerate(self.beers)) self.taps = Tap.objects.bulk_create( # only for half of them TapFactory.build(beer=beer, venue=venue) for beer in self.beers[:10])
def test_multi_beer_more_to_come(self, mock_retry, mock_api): mfg = ManufacturerFactory() beers = Beer.objects.bulk_create( BeerFactory.build(manufacturer=mfg, style=None) for dummy in range(20)) Tap.objects.bulk_create( TapFactory.build(venue=self.venue, beer=beer) for beer in beers) with self.settings_context_manager(): tweet_about_beers([i.id for i in beers]) # pylint: disable=no-value-for-parameter beers = beers[:10] mock_retry.assert_not_called() mock_api.assert_called_once_with( consumer_key=self.consumer_key, consumer_secret=self.consumer_secret, access_token_key=self.api_key, access_token_secret=self.api_secret, ) mock_api.return_value.PostUpdates.assert_called_once() mock_api.return_value.PostUpdate.assert_not_called() call_args = mock_api.return_value.PostUpdates.call_args self.assertEqual(call_args[1], {"continuation": "…", "threaded": True}) self.assertEqual(len(call_args[0]), 1) tweet = call_args[0][0] self.assertIn( MULTI_BEER_OUTER.format(len(beers), "(10 still to come!)").strip(), tweet, ) lines = tweet.splitlines() self.assertEqual(len(lines), 1 + len(beers)) for beer, line in zip(beers, lines[1:]): self.assertIn( MULTI_BEER_INNER.format( beer.name, "@" + beer.manufacturer.twitter_handle, "unknown", self.venue.name, ), line, )
def test_multi_beer(self, mock_retry, mock_api): mfg = ManufacturerFactory() beers = Beer.objects.bulk_create( BeerFactory.build(manufacturer=mfg, style=None) for dummy in range(10) ) Tap.objects.bulk_create( TapFactory.build(venue=self.venue, beer=beer) for beer in beers ) with self.settings_context_manager(): tweet_about_beers([i.id for i in beers]) mock_retry.assert_not_called() mock_api.assert_called_once_with( consumer_key=self.consumer_key, consumer_secret=self.consumer_secret, access_token_key=self.api_key, access_token_secret=self.api_secret, ) mock_api.return_value.PostUpdates.assert_called_once() mock_api.return_value.PostUpdate.assert_not_called() call_args = mock_api.return_value.PostUpdates.call_args self.assertEqual(call_args[1], {'continuation': '…', 'threaded': True}) self.assertEqual(len(call_args[0]), 1) tweet = call_args[0][0] self.assertIn( MULTI_BEER_OUTER.format(len(beers), '').strip(), tweet, ) lines = tweet.splitlines() self.assertEqual(len(lines), 1 + len(beers)) for beer, line in zip(beers, lines[1:]): self.assertIn(MULTI_BEER_INNER.format( beer.name, '@' + beer.manufacturer.twitter_handle, 'unknown', self.venue.name, ), line)