Пример #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())