示例#1
0
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)
示例#2
0
 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)
示例#3
0
 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())
示例#4
0
 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())
示例#5
0
 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)
示例#6
0
 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)
示例#7
0
 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'))
示例#8
0
 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)
示例#9
0
    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])
示例#10
0
 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])
示例#11
0
 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)
示例#12
0
 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'))
示例#13
0
 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)
示例#14
0
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)
示例#15
0
    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])
示例#16
0
    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)
示例#17
0
    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)
示例#18
0
 def setUp(self):
     self.suc = SucursalFactory()
示例#19
0
 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())
示例#20
0
 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())
示例#21
0
 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())
示例#22
0
 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())
示例#23
0
 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()
示例#24
0
 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())
示例#25
0
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), [])
示例#26
0
 def setUp(self):
     self.suc = SucursalFactory()
     self.url = reverse('sucursales')
     self.token = UserFactory().auth_token.key
     self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token)
示例#27
0
 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()
示例#28
0
    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'))
示例#29
0
 def test_online_o_fisica(self):
     with self.assertRaisesRegexp(ValidationError, 'online'):
         suc = SucursalFactory(online=True, direccion=u'Durazno y Convención')
         suc.clean()
示例#30
0
 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'))
示例#31
0
 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'))
示例#32
0
 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'))
示例#33
0
 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'))
示例#34
0
 def test_fisica_necesita_direccion(self):
     with self.assertRaisesRegexp(ValidationError, u'sica(.*)dire'):
         suc = SucursalFactory(online=False, direccion=None)
         suc.clean()
示例#35
0
 def setUp(self):
     self.suc = SucursalFactory()
示例#36
0
 def test_al_menos_cadena_o_nombre_sucursal(self):
     with self.assertRaisesRegexp(ValidationError, 'cadena o el nombre'):
         suc = SucursalFactory(cadena=None, nombre='')
         suc.clean()
示例#37
0
 def test_online_necesita_url(self):
     with self.assertRaisesRegexp(ValidationError, 'url es obligatoria'):
         suc = SucursalFactory(online=True, url=None)
         suc.clean()
示例#38
0
 def setUp(self):
     self.sucursal = SucursalFactory()
     self.producto = ProductoFactory()
示例#39
0
 def test_online_o_fisica(self):
     with self.assertRaisesRegexp(ValidationError, 'online'):
         suc = SucursalFactory(online=True,
                               direccion=u'Durazno y Convención')
         suc.clean()
示例#40
0
 def test_online_necesita_url(self):
     with self.assertRaisesRegexp(ValidationError, 'url es obligatoria'):
         suc = SucursalFactory(online=True, url=None)
         suc.clean()
示例#41
0
 def test_fisica_necesita_direccion(self):
     with self.assertRaisesRegexp(ValidationError, u'sica(.*)dire'):
         suc = SucursalFactory(online=False, direccion=None)
         suc.clean()
示例#42
0
 def test_al_menos_cadena_o_nombre_sucursal(self):
     with self.assertRaisesRegexp(ValidationError, 'cadena o el nombre'):
         suc = SucursalFactory(cadena=None, nombre='')
         suc.clean()
示例#43
0
 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())