class TestSucursalCercanas(TestCase): def setUp(self): self.suc = SucursalFactory() def test_radio(self): suc2 = SucursalFactory( ubicacion=punto_destino(self.suc.ubicacion, 90, 0.1)) suc3 = SucursalFactory( ubicacion=punto_destino(self.suc.ubicacion, 90, 1)) suc4 = SucursalFactory( ubicacion=punto_destino(self.suc.ubicacion, 180, 1.2)) cercanas = self.suc.cercanas(radio=1.1) self.assertIn(suc2, cercanas) self.assertIn(suc3, cercanas) self.assertNotIn(self.suc, cercanas) self.assertNotIn(suc4, cercanas) def test_misma_cadena(self): suc2 = SucursalFactory(ubicacion=punto_destino(self.suc.ubicacion, 90, 0.1), cadena=self.suc.cadena) suc3 = SucursalFactory( ubicacion=punto_destino(self.suc.ubicacion, 90, 1)) cercanas = self.suc.cercanas(radio=2, misma_cadena=True) self.assertIn(suc2, cercanas) self.assertNotIn(suc3, cercanas) self.assertNotIn(self.suc, cercanas)
def setUp(self): self.producto = ProductoFactory() self.suc = SucursalFactory() self.suc2 = SucursalFactory(ciudad=self.suc.ciudad, cadena=self.suc.cadena) self.suc3 = SucursalFactory(ciudad=self.suc.ciudad, cadena=self.suc.cadena)
def test_sucursales_sin_cadena_no_controlan_por_radio(self): # las dos cadenas quedan a menos de 50, pero no son de una cadena # conocida suc = SucursalFactory(cadena=None, nombre="Chino 1") otra_ubicacion = punto_destino(suc.ubicacion, 90, 0.03) suc2 = SucursalFactory(cadena=None, nombre="Chino 2", ubicacion=otra_ubicacion) self.assertIsNone(suc2.clean())
def test_misma_cadena(self): suc2 = SucursalFactory(ubicacion=punto_destino(self.suc.ubicacion, 90, 0.1), cadena=self.suc.cadena) suc3 = SucursalFactory( ubicacion=punto_destino(self.suc.ubicacion, 90, 1)) cercanas = self.suc.cercanas(radio=2, misma_cadena=True) self.assertIn(suc2, cercanas) self.assertNotIn(suc3, cercanas) self.assertNotIn(self.suc, cercanas)
def test_radio(self): suc2 = SucursalFactory( ubicacion=punto_destino(self.suc.ubicacion, 90, 0.1)) suc3 = SucursalFactory( ubicacion=punto_destino(self.suc.ubicacion, 90, 1)) suc4 = SucursalFactory( ubicacion=punto_destino(self.suc.ubicacion, 180, 1.2)) cercanas = self.suc.cercanas(radio=1.1) self.assertIn(suc2, cercanas) self.assertIn(suc3, cercanas) self.assertNotIn(self.suc, cercanas) self.assertNotIn(suc4, cercanas)
def test_tienen_que_estar_todas_las_claves(self): dir1 = u'Av San Martín 243' dir2 = u'Plaza Shopping' cadena = CadenaFactory(nombre='Jumbo') ciudad = CityFactory(name=u'Mendoza') self.suc = SucursalFactory(ciudad=ciudad, cadena=cadena, direccion=dir1) self.suc2 = SucursalFactory(ciudad=ciudad, cadena=cadena, direccion=dir2) self.assertIn(self.suc2, Sucursal.objects.buscar('shopping mendoza')) self.assertNotIn(self.suc, Sucursal.objects.buscar('shopping mendoza'))
def test_detecta_ciudad_por_sucursal_cercana(self): suc = SucursalFactory() self.config() # está a 1 km punto = punto_destino(suc.ubicacion, 90, 1) r = donde_queda(punto.y, punto.x) self.assertEqual(r['ciudad'], suc.ciudad)
def setUp(self): self.producto = ProductoFactory() self.carrefour = CadenaFactory(nombre='Carrefour') self.sucursales_carrefour = suc1, suc2 = [ SucursalFactory(cadena=self.carrefour), SucursalFactory(cadena=self.carrefour) ] self.super_regional = SucursalFactory(nombre='Lo de Cacho') # lo de cacho queda en y una de carrefour queda en NOA self.noa = RegionFactory( nombre="NOA", ciudades_incluidas=[suc2.ciudad, self.super_regional.ciudad]) # una de carrefour en Caba self.caba = RegionFactory(nombre="CABA", ciudades_incluidas=[suc1.ciudad])
def test_fallback_online(self): sucursal_online = SucursalFactory(cadena=self.suc.cadena, online=True, url='http://cadena.com') p1 = self.add(10, sucursal=sucursal_online) self.assertEqual(list(self.qs()), [p1]) self.assertEqual(list(self.qs(radio=5)), [p1])
def setUp(self): self.suc = SucursalFactory() self.prod = ProductoFactory(upc='779595') self.url = reverse('producto_detalle', args=(self.suc.id, self.prod.id)) self.user = UserFactory() self.token = self.user.auth_token.key self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token)
def test_precios_de_otra_ciudad_no_afectan(self): otra = SucursalFactory() assert self.suc.ciudad != otra.ciudad self.add(precio=10, sucursal=self.suc) self.add(precio=1, sucursal=otra) # barato! r = self.qs(ciudad=self.suc.ciudad) self.assertEqual(len(r), 1) self.assertEqual(r[0].precio, Decimal('10'))
def test_muestra_lista(self): suc2 = SucursalFactory() response = self.client.get(self.url) for suc, js in zip((self.suc, suc2), response.data['results']): self.assertEqual(js['id'], suc.id) self.assertEqual(js['cadena'], suc.cadena.id) self.assertEqual(js['cadena_completa']['id'], suc.cadena.id) self.assertEqual(js['ubicacion'], str(suc.ubicacion)) self.assertEqual(js['direccion'], suc.direccion)
class TestSucursalCercanas(TestCase): def setUp(self): self.suc = SucursalFactory() def test_radio(self): suc2 = SucursalFactory(ubicacion=punto_destino(self.suc.ubicacion, 90, 0.1)) suc3 = SucursalFactory(ubicacion=punto_destino(self.suc.ubicacion, 90, 1)) suc4 = SucursalFactory(ubicacion=punto_destino(self.suc.ubicacion, 180, 1.2)) cercanas = self.suc.cercanas(radio=1.1) self.assertIn(suc2, cercanas) self.assertIn(suc3, cercanas) self.assertNotIn(self.suc, cercanas) self.assertNotIn(suc4, cercanas) def test_misma_cadena(self): suc2 = SucursalFactory(ubicacion=punto_destino(self.suc.ubicacion, 90, 0.1), cadena=self.suc.cadena) suc3 = SucursalFactory(ubicacion=punto_destino(self.suc.ubicacion, 90, 1)) cercanas = self.suc.cercanas(radio=2, misma_cadena=True) self.assertIn(suc2, cercanas) self.assertNotIn(suc3, cercanas) self.assertNotIn(self.suc, cercanas)
def setUp(self): self.producto = ProductoFactory() self.carrefour = CadenaFactory(nombre='Carrefour') self.sucursales_carrefour = suc1, suc2 = [SucursalFactory(cadena=self.carrefour), SucursalFactory(cadena=self.carrefour)] self.super_regional = SucursalFactory(nombre='Lo de Cacho') # lo de cacho queda en y una de carrefour queda en NOA self.noa = RegionFactory(nombre="NOA", ciudades_incluidas=[suc2.ciudad, self.super_regional.ciudad]) # una de carrefour en Caba self.caba = RegionFactory(nombre="CABA", ciudades_incluidas=[suc1.ciudad])
def test_integracion(self): """1. se pide precio para un producto que aun no tiene precios 2. se envia un precio para la sucursal A 3. En otra sucursal B (cercana a A) y de la misma cadena, el precio enviado aparece como mas probable. 4. En B se envia un precio mejor 5. en la sucursal original A, el precio sigue siendo el enviado, pero aparece un mejor precio (el de B) """ r = self.client.get(self.url) assert len(r.data['mas_probables']) == 0 assert len(r.data['mejores']) == 0 # se envia un precio original en A self.client.post(self.url, {'precio': 10}) # ahora el mas probable y el mejor es 10 r = self.client.get(self.url) self.assertEqual(r.data['mas_probables'][0]['precio'], 10.) self.assertEqual(r.data['mejores'][0]['precio'], 10.) # Se envia un mejor precio en la sucursal B suc_b = SucursalFactory(cadena=self.suc.cadena, ciudad=self.suc.ciudad, ubicacion=punto_destino( self.suc.ubicacion, 90, 1)) url_b = reverse('producto_detalle', args=(suc_b.id, self.prod.id)) rb = self.client.get(url_b) # no hay precios en esta suc assert Precio.objects.filter(sucursal=suc_b).count() == 0 # pero el mas probable es el enviado en A self.assertEqual(rb.data['mas_probables'][0]['precio'], 10) # se envia un precio nuevo, mejor self.client.post(url_b, {'precio': 8}) # de nuevo en la sucursal A, el precio se mantiene, pero hay mejor r = self.client.get(self.url) self.assertEqual(r.data['mas_probables'][0]['precio'], 10.) self.assertEqual(r.data['mejores'][0]['precio'], 8)
def test_integracion_2(self): """igual, pero la sucursal b es de otra ciudad. """ r = self.client.get(self.url) assert len(r.data['mas_probables']) == 0 assert len(r.data['mejores']) == 0 # se envia un precio original en A self.client.post(self.url, {'precio': 10}) # ahora el mas probable y el mejor es 10 r = self.client.get(self.url) self.assertEqual(r.data['mas_probables'][0]['precio'], 10.) self.assertEqual(r.data['mejores'][0]['precio'], 10.) # Se envia un mejor precio en la sucursal B suc_b = SucursalFactory(cadena=self.suc.cadena, ubicacion=punto_destino( self.suc.ubicacion, 90, 1)) assert suc_b.ciudad != self.suc.ciudad url_b = reverse('producto_detalle', args=(suc_b.id, self.prod.id)) rb = self.client.get(url_b) # no hay precios en esta suc assert Precio.objects.filter(sucursal=suc_b).count() == 0 # pero el mas probable es el enviado en A self.assertEqual(rb.data['mas_probables'][0]['precio'], 10) # se envia un precio nuevo, mejor self.client.post(url_b, {'precio': 8}) # de nuevo en la sucursal A, el precio se mantiene, pero hay mejor r = self.client.get(self.url) self.assertEqual(r.data['mas_probables'][0]['precio'], 10.) self.assertEqual(r.data['mejores'][0]['precio'], 8)
def setUp(self): self.suc = SucursalFactory()
def test_sucursales_mas_de_50_no_afectan(self): suc = SucursalFactory() otra_ubicacion = punto_destino(suc.ubicacion, 90, 0.06) suc2 = SucursalFactory(ubicacion=otra_ubicacion, cadena=suc.cadena) self.assertIsNone(suc2.clean())
def test_si_no_tiene_ubicacion_no_se_verifica_el_radio(self): suc = SucursalFactory(ubicacion=None) suc2 = SucursalFactory(cadena=suc.cadena) self.assertIsNone(suc2.clean())
def test_sucursales_otra_cadena_no_afectan_en_radio(self): suc = SucursalFactory() otra_ubicacion = punto_destino(suc.ubicacion, 90, 0.03) suc2 = SucursalFactory(ubicacion=otra_ubicacion) assert suc2.cadena != suc.cadena self.assertIsNone(suc2.clean())
def test_ya_existe_en_radio_de_la_misma_cadena(self): suc = SucursalFactory() otra_ubicacion = punto_destino(suc.ubicacion, 90, 0.03) with self.assertRaisesRegexp(ValidationError, 'sucursal(.*)metros'): suc2 = SucursalFactory(ubicacion=otra_ubicacion, cadena=suc.cadena) suc2.clean()
class TestPrecioEnAcuerdo(TestCase): def setUp(self): self.producto = ProductoFactory() self.carrefour = CadenaFactory(nombre='Carrefour') self.sucursales_carrefour = suc1, suc2 = [SucursalFactory(cadena=self.carrefour), SucursalFactory(cadena=self.carrefour)] self.super_regional = SucursalFactory(nombre='Lo de Cacho') # lo de cacho queda en y una de carrefour queda en NOA self.noa = RegionFactory(nombre="NOA", ciudades_incluidas=[suc2.ciudad, self.super_regional.ciudad]) # una de carrefour en Caba self.caba = RegionFactory(nombre="CABA", ciudades_incluidas=[suc1.ciudad]) def acuerdo(self, sucursal): return list(PrecioEnAcuerdo.objects.en_acuerdo(self.producto, sucursal)) def test_hay_acuerdo_para_cadena_nacional(self): acuerdo = AcuerdoFactory(nombre='Precio en Acuerdo', cadenas=[self.carrefour], region=self.caba) PrecioEnAcuerdoFactory(acuerdo=acuerdo, producto=self.producto, precio="18.9") suc1 = self.sucursales_carrefour[0] suc2 = self.sucursales_carrefour[1] suc3 = self.super_regional self.assertEqual(self.acuerdo(suc1), [{'acuerdo__nombre': u'Precio en Acuerdo', 'precio': Decimal('18.90')}]) self.assertEqual(self.acuerdo(suc2), []) self.assertEqual(self.acuerdo(suc3), []) def test_acuerdo_para_regional_de_cadena_chica(self): assert self.super_regional.cadena acuerdo = AcuerdoFactory(nombre='Precio en Acuerdo', sucursales=[self.super_regional], region=self.noa) PrecioEnAcuerdoFactory(acuerdo=acuerdo, producto=self.producto, precio="32.9") suc1 = self.sucursales_carrefour[0] suc2 = self.sucursales_carrefour[1] self.assertEqual(self.acuerdo(self.super_regional), [{'acuerdo__nombre': u'Precio en Acuerdo', 'precio': Decimal('32.9')}]) self.assertEqual(self.acuerdo(suc1), []) self.assertEqual(self.acuerdo(suc2), []) def test_acuerdo_para_super_regional_individual__sin_cadena(self): self.super_regional.cadena = None self.super_regional.save() acuerdo = AcuerdoFactory(nombre='Precio en Acuerdo', sucursales=[self.super_regional], region=self.noa) PrecioEnAcuerdoFactory(acuerdo=acuerdo, producto=self.producto, precio="32.9") suc1 = self.sucursales_carrefour[0] suc2 = self.sucursales_carrefour[1] self.assertEqual(self.acuerdo(self.super_regional), [{'acuerdo__nombre': 'Precio en Acuerdo', 'precio': Decimal('32.9')}]) self.assertEqual(self.acuerdo(suc1), []) self.assertEqual(self.acuerdo(suc2), [])
def setUp(self): self.suc = SucursalFactory() self.url = reverse('sucursales') self.token = UserFactory().auth_token.key self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token)
def test_incluye_direccion(self): calle = u'Av San Martín' self.suc = SucursalFactory(direccion=calle) self.assertIn(texto.normalizar(calle), self.suc.busqueda) self.assertIn(self.suc, Sucursal.objects.buscar('san martin'))
def test_online_o_fisica(self): with self.assertRaisesRegexp(ValidationError, 'online'): suc = SucursalFactory(online=True, direccion=u'Durazno y Convención') suc.clean()
def test_incluye_provincia_nombre(self): ciudad = CityFactory(name=u'Malargüe', region__name=u'Mendoza') self.suc = SucursalFactory(ciudad=ciudad) self.assertIn('malargue', self.suc.busqueda) self.assertIn('mendoza', self.suc.busqueda) self.assertIn(self.suc, Sucursal.objects.buscar('mendoza'))
def test_incluye_ciudad(self): ciudad = CityFactory(name='La Cumbre') self.suc = SucursalFactory(ciudad=ciudad) self.assertIn('la cumbre', self.suc.busqueda) self.assertIn(self.suc, Sucursal.objects.buscar('la cumbre'))
def test_incluye_nombre_cadena(self): cadena = CadenaFactory(nombre='Jumbo') self.suc = SucursalFactory(cadena=cadena) self.assertIn('jumbo', self.suc.busqueda) self.assertIn(self.suc, Sucursal.objects.buscar('jumbo'))
def test_incluye_nombre(self): self.suc = SucursalFactory(nombre=u'Sucursal Plaza Once') self.assertIn('plaza once', self.suc.busqueda) # no incluye palabras demasiado comunes self.assertNotIn('sucursal', self.suc.busqueda) self.assertIn(self.suc, Sucursal.objects.buscar('once'))
def test_fisica_necesita_direccion(self): with self.assertRaisesRegexp(ValidationError, u'sica(.*)dire'): suc = SucursalFactory(online=False, direccion=None) suc.clean()
def test_al_menos_cadena_o_nombre_sucursal(self): with self.assertRaisesRegexp(ValidationError, 'cadena o el nombre'): suc = SucursalFactory(cadena=None, nombre='') suc.clean()
def test_online_necesita_url(self): with self.assertRaisesRegexp(ValidationError, 'url es obligatoria'): suc = SucursalFactory(online=True, url=None) suc.clean()
def setUp(self): self.sucursal = SucursalFactory() self.producto = ProductoFactory()