Пример #1
0
 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)],
     )
Пример #2
0
 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]),
     )
Пример #3
0
 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)])
Пример #4
0
 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,
     )
Пример #5
0
 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]))
Пример #6
0
 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])
Пример #7
0
 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,
         )
Пример #8
0
 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)