示例#1
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)
示例#2
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)
示例#3
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)
示例#4
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)
示例#5
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)
示例#6
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)
示例#7
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())
示例#8
0
    def test_precios_a_radio_dado(self):
        # cambiamos las ciudades de suc2 y suc3. quedan cerquita, pero
        # no son de la misma ciudad.
        self.suc2.ubicacion = punto_destino(self.suc.ubicacion, 90, 4.5)
        self.suc2.ciudad = CityFactory()
        self.suc2.save()
        self.suc3.ubicacion = punto_destino(self.suc.ubicacion, 180, 4.7)
        self.suc3.ciudad = CityFactory()
        self.suc3.save()

        p1 = self.add(10, sucursal=self.suc2)
        p2 = self.add(11, sucursal=self.suc3)
        # no hay sucursales dentro de este radio
        self.assertEqual(list(self.qs(radio=4.4)), [])
        # una sucursal dentro de este radio
        self.assertEqual(list(self.qs(radio=4.6)), [p1])
        # dos sucursales dentro de este radio
        self.assertEqual(list(self.qs(radio=4.8)), [p2, p1])
示例#9
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())
示例#10
0
    def test_precios_a_radio_dado(self):
        # cambiamos las ciudades de suc2 y suc3. quedan cerquita, pero
        # no son de la misma ciudad.
        self.suc2.ubicacion = punto_destino(self.suc.ubicacion, 90, 4.5)
        self.suc2.ciudad = CityFactory()
        self.suc2.save()
        self.suc3.ubicacion = punto_destino(self.suc.ubicacion, 180, 4.7)
        self.suc3.ciudad = CityFactory()
        self.suc3.save()

        p1 = self.add(10, sucursal=self.suc2)
        p2 = self.add(11, sucursal=self.suc3)
        # no hay sucursales dentro de este radio
        self.assertEqual(list(self.qs(radio=4.4)), [])
        # una sucursal dentro de este radio
        self.assertEqual(list(self.qs(radio=4.6)), [p1])
        # dos sucursales dentro de este radio
        self.assertEqual(list(self.qs(radio=4.8)), [p2, p1])
示例#11
0
 def test_parametros_lon_lat_radio_filtra_por_ubicacion(self):
     p = punto_destino(self.suc.ubicacion, 90, 1)
     lon, lat = p.x, p.y
     with patch('preciosa.precios.models.SucursalQuerySet.alrededor_de') as mock:
         self.client.get(self.url, data={'lon': lon, 'lat': lat, 'radio': 2})
     p2 = mock.call_args[0][0]
     radio = mock.call_args[0][1]
     self.assertAlmostEqual(p2.x, lon)
     self.assertAlmostEqual(p2.y, lat)
     self.assertEqual(radio, 2.0)
示例#12
0
    def test_por_radio(self):
        self.suc2.ubicacion = punto_destino(self.suc.ubicacion, 90, 4.5)
        self.suc2.save()
        self.suc3.ubicacion = punto_destino(self.suc.ubicacion, 180, 4.7)
        self.suc3.save()
        p1 = self.add(precio=10, sucursal=self.suc)
        p2 = self.add(precio=8.4, sucursal=self.suc2)
        p3 = self.add(precio=11, sucursal=self.suc3)

        # por punto o ubicacion
        for p in (self.suc, self.suc.ubicacion):
            self.assertEqual(list(self.qs(radio=4.4, punto_o_sucursal=p)),
                             [p1])
            # una sucursal dentro de este radio
            self.assertEqual(list(self.qs(radio=4.6, punto_o_sucursal=p)),
                             [p2, p1])

            # dos sucursales dentro de este radio
            self.assertEqual(list(self.qs(radio=4.8, punto_o_sucursal=p)),
                             [p2, p1, p3])
示例#13
0
    def test_por_radio(self):
        self.suc2.ubicacion = punto_destino(self.suc.ubicacion, 90, 4.5)
        self.suc2.save()
        self.suc3.ubicacion = punto_destino(self.suc.ubicacion, 180, 4.7)
        self.suc3.save()
        p1 = self.add(precio=10, sucursal=self.suc)
        p2 = self.add(precio=8.4, sucursal=self.suc2)
        p3 = self.add(precio=11, sucursal=self.suc3)

        # por punto o ubicacion
        for p in (self.suc, self.suc.ubicacion):
            self.assertEqual(list(self.qs(radio=4.4, punto_o_sucursal=p)),
                             [p1])
            # una sucursal dentro de este radio
            self.assertEqual(list(self.qs(radio=4.6, punto_o_sucursal=p)),
                             [p2, p1])

            # dos sucursales dentro de este radio
            self.assertEqual(list(self.qs(radio=4.8, punto_o_sucursal=p)),
                             [p2, p1, p3])
示例#14
0
 def test_parametros_lon_lat_radio_filtra_por_ubicacion(self):
     p = punto_destino(self.suc.ubicacion, 90, 1)
     lon, lat = p.x, p.y
     with patch('preciosa.precios.models.SucursalQuerySet.alrededor_de'
                ) as mock:
         self.client.get(self.url,
                         data={
                             'lon': lon,
                             'lat': lat,
                             'radio': 2
                         })
     p2 = mock.call_args[0][0]
     radio = mock.call_args[0][1]
     self.assertAlmostEqual(p2.x, lon)
     self.assertAlmostEqual(p2.y, lat)
     self.assertEqual(radio, 2.0)
示例#15
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)
示例#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 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)
示例#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_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())
示例#21
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()
示例#22
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()
示例#23
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())
示例#24
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())