def test_merge(self): manufacturer = ManufacturerFactory() new_time = UTC.localize(datetime.datetime(2018, 4, 3, 6, 2)) other_time = new_time + datetime.timedelta(days=30) beer1 = BeerFactory( manufacturer=manufacturer, untappd_url='http://localhost/123456', color_srm=None, time_first_seen=other_time, ) beer2 = BeerFactory( manufacturer=manufacturer, color_srm=55, stem_and_stein_pk=551, time_first_seen=new_time, ) tap = TapFactory(beer=beer2) beer1.merge_from(beer2) self.assertEqual(beer1.color_srm, beer2.color_srm) tap.refresh_from_db() self.assertEqual(tap.beer, beer1) self.assertFalse(Beer.objects.filter(id=beer2.id).exists()) self.assertTrue( BeerAlternateName.objects.filter( name=beer2.name, beer=beer1, ).exists()) self.assertEqual(tap.beer.time_first_seen, new_time) self.assertEqual(tap.beer.stem_and_stein_pk, 551)
def test_merge(self): manufacturer = ManufacturerFactory() beer1 = BeerFactory( manufacturer=manufacturer, untappd_url='http://localhost/123456', color_srm=None, ) beer2 = BeerFactory( manufacturer=manufacturer, color_srm=55, ) tap = TapFactory(beer=beer2) beer1.merge_from(beer2) self.assertEqual(beer1.color_srm, beer2.color_srm) tap.refresh_from_db() self.assertEqual(tap.beer, beer1) self.assertFalse(Beer.objects.filter(id=beer2.id).exists()) self.assertTrue( BeerAlternateName.objects.filter( name=beer2.name, beer=beer1, ).exists())
class BeerTestCase(TestCase): def setUp(self): self.manufacturer = ManufacturerFactory() self.new_time = UTC.localize(datetime.datetime(2018, 4, 3, 6, 2)) self.other_time = self.new_time + datetime.timedelta(days=30) self.beer1 = BeerFactory( manufacturer=self.manufacturer, untappd_url="http://localhost/123456", color_srm=None, time_first_seen=self.other_time, ) self.beer2 = BeerFactory( manufacturer=self.manufacturer, color_srm=55, stem_and_stein_pk=551, time_first_seen=self.new_time, ) self.tap = TapFactory(beer=self.beer2) self.venue2 = self.tap.venue self.venue1 = VenueFactory() self.serving_size = ServingSize.objects.create(name="foo", volume_oz=12) def test_merge(self): self.beer1.merge_from(self.beer2) self.assertEqual(self.beer1.color_srm, self.beer2.color_srm) self.tap.refresh_from_db() self.assertEqual(self.tap.beer, self.beer1) self.assertFalse(Beer.objects.filter(id=self.beer2.id).exists()) self.assertTrue( BeerAlternateName.objects.filter( name=self.beer2.name, beer=self.beer1, ).exists()) self.assertEqual(self.tap.beer.time_first_seen, self.new_time) self.assertEqual(self.tap.beer.stem_and_stein_pk, 551) def test_preserve_prices_no_overlap(self): BeerPrice.objects.create( beer=self.beer1, venue=self.venue1, price=15, serving_size=self.serving_size, ) BeerPrice.objects.create( beer=self.beer2, venue=self.venue2, price=10, serving_size=self.serving_size, ) self.beer1.merge_from(self.beer2) self.assertEqual(BeerPrice.objects.filter(beer=self.beer1).count(), 2) def test_preserve_prices_overlap(self): BeerPrice.objects.create( beer=self.beer1, venue=self.venue2, price=15, serving_size=self.serving_size, ) BeerPrice.objects.create( beer=self.beer2, venue=self.venue2, price=10, serving_size=self.serving_size, ) other_size = ServingSize.objects.create(name="bar", volume_oz=16) BeerPrice.objects.create( beer=self.beer2, venue=self.venue2, price=20, serving_size=other_size, ) self.beer1.merge_from(self.beer2) # Because we have an overlap in one unique condition (beer + venue + size), # we are going to take the safest route possible and ignore both of the # prices from beer2 for venue2. self.assertEqual(BeerPrice.objects.filter(beer=self.beer1).count(), 1)