Exemple #1
0
 public function testValidarTienda()
 {
     $oferta = new Oferta();
     $oferta->setNombre('Oferta de prueba');
     $oferta->setDescripcion('Descripción de prueba - Descripción de prueba - Descripción de prueba');
     $oferta->setFechaPublicacion(new \DateTime('today'));
     $oferta->setFechaExpiracion(new \DateTime('tomorrow'));
     $oferta->setUmbral(3);
     $oferta->setPrecio(10.5);
     $ciudad = $this->getCiudad();
     $oferta->setCiudad($ciudad);
     $oferta->setTienda($this->getTienda($ciudad));
     $oferta_ciudad = $oferta->getCiudad()->getNombre();
     $oferta_tienda_ciudad = $oferta->getTienda()->getCiudad()->getNombre();
     $this->assertEquals($oferta_ciudad, $oferta_tienda_ciudad, 'La tienda asociada a la oferta es de la misma ciudad en la que se vende la oferta');
 }
Exemple #2
0
 public function load($manager)
 {
     // Obtener todas las tiendas y ciudades de la base de datos
     $ciudades = $manager->getRepository('CiudadBundle:Ciudad')->findAll();
     $tiendas = $manager->getRepository('TiendaBundle:Tienda')->findAll();
     // Ordenar las tiendas por ciudad, para generar ofertas coherentes
     $tiendasPorCiudad = array();
     foreach ($tiendas as $tienda) {
         $tiendasPorCiudad[$tienda->getCiudad()->getId()][] = $tienda;
     }
     for ($i = 0; $i < count($ciudades); $i++) {
         for ($j = 1; $j <= 20; $j++) {
             $oferta = new Oferta();
             $oferta->setNombre($this->getNombre());
             $oferta->setDescripcion($this->getDescripcion());
             $oferta->setCondiciones($this->getCondiciones());
             $oferta->setFoto('foto' . rand(1, 20) . '.jpg');
             $oferta->setPrecio(number_format(rand(100, 10000) / 100, 2));
             $oferta->setDescuento($oferta->getPrecio() * (rand(10, 70) / 100));
             // Una oferta se publica hoy, el resto se reparte entre el pasado y el futuro
             if ($j < 10) {
                 $fechaPublicacion = new \DateTime('now - ' . ($j - 1) . ' days');
             } else {
                 $fechaPublicacion = new \DateTime('now + ' . ($j - 9) . ' days');
             }
             $fechaPublicacion->setTime(23, 59, 59);
             // Se debe clonar el valor de la fechaPublicacion porque si se usa directamente
             // el método ->add(), se modificaría el valor original, que no se guarda en la BD
             // hasta que se hace el ->flush()
             $fechaExpiracion = clone $fechaPublicacion;
             $fechaExpiracion->add(\DateInterval::createFromDateString('24 hours'));
             $oferta->setFechaPublicacion($fechaPublicacion);
             $oferta->setFechaExpiracion($fechaExpiracion);
             $oferta->setCompras(0);
             $oferta->setUmbral(rand(25, 100));
             // Se marcan como revisadas aproximadamente el 80% de las ofertas
             $oferta->setRevisada(rand(1, 1000) % 10 < 8);
             $oferta->setCiudad($ciudades[$i]);
             // Seleccionar aleatoriamente una tienda que pertenezca a la ciudad anterior
             $tiendasDeLaCiudad = $tiendasPorCiudad[$oferta->getCiudad()->getId()];
             $tienda = $tiendasDeLaCiudad[rand(0, count($tiendasDeLaCiudad) - 1)];
             $oferta->setTienda($tienda);
             $manager->persist($oferta);
             $manager->flush();
             // Otorgar el permiso adecuado a cada oferta utilizando la ACL
             // Obtener la identidad del objeto oferta y del usuario
             $idObjeto = ObjectIdentity::fromDomainObject($oferta);
             $idUsuario = UserSecurityIdentity::fromAccount($tienda);
             // Buscar si la oferta ya dispone de una ACL previa
             $proveedor = $this->container->get('security.acl.provider');
             try {
                 $acl = $proveedor->findAcl($idObjeto, array($idUsuario));
             } catch (\Symfony\Component\Security\Acl\Exception\AclNotFoundException $e) {
                 // El objeto no disponía de ninguna ACL, crearla
                 $acl = $proveedor->createAcl($idObjeto);
             }
             // Borrar los ACEs previos que (a lo mejor) dispone este objeto
             $aces = $acl->getObjectAces();
             foreach ($aces as $index => $ace) {
                 $acl->deleteObjectAce($index);
             }
             $acl->insertObjectAce($idUsuario, MaskBuilder::MASK_OPERATOR);
             $proveedor->updateAcl($acl);
         }
     }
 }
Exemple #3
0
 public function load(ObjectManager $manager)
 {
     // Crear 10 ciudades de prueba
     for ($i = 1; $i <= 10; $i++) {
         $ciudad = new Ciudad();
         $ciudad->setNombre('Ciudad #' . $i);
         $manager->persist($ciudad);
     }
     $manager->flush();
     // Crear 10 tiendas en cada ciudad
     $ciudades = $manager->getRepository('CiudadBundle:Ciudad')->findAll();
     $numTienda = 0;
     foreach ($ciudades as $ciudad) {
         for ($i = 1; $i <= 10; $i++) {
             $numTienda++;
             $tienda = new Tienda();
             $tienda->setNombre('Tienda #' . $numTienda);
             $tienda->setLogin('tienda' . $numTienda);
             $tienda->setPassword('password' . $numTienda);
             $tienda->setSalt(md5(time()));
             $tienda->setDescripcion('Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat');
             $tienda->setDireccion("Calle Lorem Ipsum, 5\n" . $ciudad->getNombre());
             $tienda->setCiudad($ciudad);
             $manager->persist($tienda);
         }
     }
     $manager->flush();
     // Crear 50 ofertas en cada ciudad
     $ciudades = $manager->getRepository('CiudadBundle:Ciudad')->findAll();
     $tiendas = $manager->getRepository('TiendaBundle:Tienda')->findAll();
     $tiendasPorCiudad = array();
     foreach ($tiendas as $tienda) {
         $tiendasPorCiudad[$tienda->getCiudad()->getId()][] = $tienda;
     }
     $numOferta = 0;
     foreach ($ciudades as $ciudad) {
         for ($i = 1; $i <= 50; $i++) {
             $numOferta++;
             $oferta = new Oferta();
             $oferta->setNombre('Oferta #' . $numOferta . ' lorem ipsum dolor sit amet');
             $oferta->setDescripcion("Lorem ipsum dolor sit amet, consectetur adipisicing.\nElit, sed do eiusmod tempor incididunt.\nUt labore et dolore magna aliqua.\nNostrud exercitation ullamco laboris nisi ut");
             $oferta->setCondiciones("Labore et dolore magna aliqua. Ut enim ad minim veniam.");
             $oferta->setFoto('foto' . rand(1, 20) . '.jpg');
             $oferta->setPrecio(number_format(rand(100, 10000) / 100, 2));
             $oferta->setDescuento($oferta->getPrecio() * (rand(10, 70) / 100));
             // Se publican 9 ofertas en el pasado, 1 en el presente y 40 en el futuro
             if ($i < 11) {
                 $fechaPublicacion = new \DateTime('now - ' . ($i - 1) . ' days');
             } else {
                 $fechaPublicacion = new \DateTime('now + ' . ($i - 10) . ' days');
             }
             $fechaPublicacion->setTime(23, 59, 59);
             $fechaExpiracion = clone $fechaPublicacion;
             $fechaExpiracion->add(\DateInterval::createFromDateString('24 hours'));
             $oferta->setFechaPublicacion($fechaPublicacion);
             $oferta->setFechaExpiracion($fechaExpiracion);
             $oferta->setCompras(0);
             $oferta->setUmbral(rand(25, 100));
             // Se marcan como revisadas aproximadamente el 90% de las ofertas
             $oferta->setRevisada(rand(1, 1000) % 10 < 9);
             $oferta->setCiudad($ciudad);
             // Seleccionar aleatoriamente una tienda que pertenezca a la ciudad
             $tiendasDeLaCiudad = $tiendasPorCiudad[$oferta->getCiudad()->getId()];
             $tienda = $tiendasDeLaCiudad[rand(0, count($tiendasDeLaCiudad) - 1)];
             $oferta->setTienda($tienda);
             $manager->persist($oferta);
         }
     }
     $manager->flush();
     // Crear 100 usuarios en cada ciudad
     $numUsuario = 0;
     foreach ($ciudades as $ciudad) {
         for ($i = 1; $i <= 100; $i++) {
             $numUsuario++;
             $usuario = new Usuario();
             $usuario->setNombre('Usuario #' . $numUsuario);
             $usuario->setApellidos('Apellido1 Apellido2');
             $usuario->setEmail('usuario' . $numUsuario . '@localhost');
             $usuario->setSalt(md5(time()));
             $usuario->setPassword('password' . $numUsuario);
             $usuario->setDireccion("Calle Ipsum Lorem, 2\n" . $ciudad->getNombre());
             // El 60% de los usuarios permite email
             $usuario->setPermiteEmail(rand(1, 1000) % 10 < 6);
             $usuario->setFechaAlta(new \DateTime('now - ' . rand(1, 150) . ' days'));
             $usuario->setFechaNacimiento(new \DateTime('now - ' . rand(7000, 20000) . ' days'));
             $dni = substr(rand(), 0, 8);
             $usuario->setDni($dni . substr("TRWAGMYFPDXBNJZSQVHLCKE", strtr($dni, "XYZ", "012") % 23, 1));
             $usuario->setNumeroTarjeta('1234567890123456');
             $usuario->setCiudad($ciudad);
             $manager->persist($usuario);
         }
     }
     $manager->flush();
     // Crear 500 ventas aleatorias
     $ofertas = $manager->getRepository('OfertaBundle:Oferta')->findAll();
     $usuarios = $manager->getRepository('UsuarioBundle:Usuario')->findAll();
     foreach ($usuarios as $usuario) {
         $compras = rand(0, 10);
         $comprado = array();
         for ($i = 0; $i < $compras; $i++) {
             $venta = new Venta();
             // Sólo se añade una venta:
             //   - si este mismo usuario no ha comprado antes la misma oferta
             //   - si la oferta seleccionada ha sido revisada
             //   - si la fecha de publicación de la oferta es posterior a ahora mismo
             $oferta = $ofertas[rand(0, count($ofertas) - 1)];
             while (in_array($oferta->getId(), $comprado) || $oferta->getRevisada() == false || $oferta->getFechaPublicacion() > new \DateTime('now')) {
                 $oferta = $ofertas[rand(0, count($ofertas) - 1)];
             }
             $comprado[] = $oferta->getId();
             $venta->setOferta($oferta);
             $venta->setUsuario($usuario);
             $publicacion = clone $oferta->getFechaPublicacion();
             $venta->setFecha($publicacion->add(\DateInterval::createFromDateString(rand(10, 10000) . ' seconds')));
             $manager->persist($venta);
             $oferta->setCompras($oferta->getCompras() + 1);
             $manager->persist($oferta);
         }
         unset($comprado);
     }
     $manager->flush();
 }