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_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_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 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_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])
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)
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])
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)
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(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 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 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_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()