mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-12 20:43:25 +00:00
Add FtpExport repositories
This commit is contained in:
15
lib/Doctrine/Repositories/FtpExportElementRepository.php
Normal file
15
lib/Doctrine/Repositories/FtpExportElementRepository.php
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Repositories;
|
||||||
|
|
||||||
|
use Doctrine\ORM\EntityRepository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FtpExportElementRepository
|
||||||
|
*
|
||||||
|
* This class was generated by the Doctrine ORM. Add your own custom
|
||||||
|
* repository methods below.
|
||||||
|
*/
|
||||||
|
class FtpExportElementRepository extends EntityRepository
|
||||||
|
{
|
||||||
|
}
|
64
lib/Doctrine/Repositories/FtpExportRepository.php
Normal file
64
lib/Doctrine/Repositories/FtpExportRepository.php
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Repositories;
|
||||||
|
|
||||||
|
use Doctrine\ORM\EntityRepository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FtpExportRepository
|
||||||
|
*
|
||||||
|
* This class was generated by the Doctrine ORM. Add your own custom
|
||||||
|
* repository methods below.
|
||||||
|
*/
|
||||||
|
class FtpExportRepository extends EntityRepository
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Returns exports that crashed. If a date is provided, only exports created
|
||||||
|
* before this date are returned.
|
||||||
|
*
|
||||||
|
* @param \DateTime $before An optional date to search
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function findCrashedExports(\DateTime $before = null)
|
||||||
|
{
|
||||||
|
$qb = $this->createQueryBuilder('e');
|
||||||
|
$qb->where($qb->expr()->gte('e.crash', 'e.nbretry'));
|
||||||
|
|
||||||
|
if (null !== $before) {
|
||||||
|
$qb->where($qb->expr()->lte('e.created', ':created'));
|
||||||
|
$qb->setParameter(':created', $before);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $qb->getQuery()->getResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a list of exports that can be achieved.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function findDoableExports()
|
||||||
|
{
|
||||||
|
$dql = 'SELECT f
|
||||||
|
FROM Entities\FtpExport f
|
||||||
|
INNER JOIN f.elements e
|
||||||
|
WHERE e.done = false';
|
||||||
|
|
||||||
|
$query = $this->_em->createQuery($dql);
|
||||||
|
|
||||||
|
return $query->getResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the exports initiated by a given user.
|
||||||
|
*
|
||||||
|
* @param \User_Adapter $user
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function findByUser(\User_Adapter $user)
|
||||||
|
{
|
||||||
|
return $this->findBy(array('usrId' => $user->get_id()));
|
||||||
|
}
|
||||||
|
}
|
231
tests/Doctrine/Tests/Repositories/FtpExportRepositoryTest.php
Normal file
231
tests/Doctrine/Tests/Repositories/FtpExportRepositoryTest.php
Normal file
@@ -0,0 +1,231 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Tests\Repositories;
|
||||||
|
|
||||||
|
use Entities\FtpExport;
|
||||||
|
use Entities\FtpExportElement;
|
||||||
|
use Gedmo\Timestampable\TimestampableListener;
|
||||||
|
|
||||||
|
class FtpExportRepositoryTest extends \PhraseanetPHPUnitAbstract
|
||||||
|
{
|
||||||
|
public function testFindCrashedExportsWithoutDate()
|
||||||
|
{
|
||||||
|
$failure1 = new FtpExport();
|
||||||
|
$failure1
|
||||||
|
->setAddr('')
|
||||||
|
->setUser(self::$DI['user'])
|
||||||
|
->setCrash(2)
|
||||||
|
->setNbretry(2);
|
||||||
|
|
||||||
|
$failure2 = new FtpExport();
|
||||||
|
$failure2
|
||||||
|
->setAddr('')
|
||||||
|
->setUser(self::$DI['user'])
|
||||||
|
->setCrash(7)
|
||||||
|
->setNbretry(5);
|
||||||
|
|
||||||
|
$good1 = new FtpExport();
|
||||||
|
$good1
|
||||||
|
->setAddr('')
|
||||||
|
->setUser(self::$DI['user'])
|
||||||
|
->setCrash(2)
|
||||||
|
->setNbretry(3);
|
||||||
|
|
||||||
|
$good2 = new FtpExport();
|
||||||
|
$good2
|
||||||
|
->setAddr('')
|
||||||
|
->setUser(self::$DI['user'])
|
||||||
|
->setCrash(12)
|
||||||
|
->setNbretry(23);
|
||||||
|
|
||||||
|
self::$DI['app']['EM']->persist($failure1);
|
||||||
|
self::$DI['app']['EM']->persist($failure2);
|
||||||
|
self::$DI['app']['EM']->persist($good1);
|
||||||
|
self::$DI['app']['EM']->persist($good2);
|
||||||
|
self::$DI['app']['EM']->flush();
|
||||||
|
|
||||||
|
$crashed = self::$DI['app']['EM']
|
||||||
|
->getRepository('Entities\FtpExport')
|
||||||
|
->findCrashedExports();
|
||||||
|
|
||||||
|
$this->assertCount(2, $crashed);
|
||||||
|
$this->assertContains($failure1, $crashed);
|
||||||
|
$this->assertContains($failure2, $crashed);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFindCrashedExportsWithDate()
|
||||||
|
{
|
||||||
|
self::$DI['app']['EM']->getEventManager()->removeEventSubscriber(new TimestampableListener());
|
||||||
|
|
||||||
|
$failure1 = new FtpExport();
|
||||||
|
$failure1
|
||||||
|
->setAddr('Failure 1')
|
||||||
|
->setUser(self::$DI['user'])
|
||||||
|
->setCrash(2)
|
||||||
|
->setNbretry(2)
|
||||||
|
->setCreated(new \DateTime('-6 days'));
|
||||||
|
|
||||||
|
$failure2 = new FtpExport();
|
||||||
|
$failure2
|
||||||
|
->setAddr('Failure 2')
|
||||||
|
->setUser(self::$DI['user'])
|
||||||
|
->setCrash(2)
|
||||||
|
->setNbretry(2)
|
||||||
|
->setCreated(new \DateTime('-7 days'));
|
||||||
|
|
||||||
|
$good1 = new FtpExport();
|
||||||
|
$good1
|
||||||
|
->setAddr('Good 1')
|
||||||
|
->setUser(self::$DI['user'])
|
||||||
|
->setCrash(7)
|
||||||
|
->setNbretry(5)
|
||||||
|
->setCreated(new \DateTime('-5 days'));
|
||||||
|
|
||||||
|
$good2 = new FtpExport();
|
||||||
|
$good2
|
||||||
|
->setAddr('Good 2')
|
||||||
|
->setUser(self::$DI['user'])
|
||||||
|
->setCrash(2)
|
||||||
|
->setNbretry(3);
|
||||||
|
|
||||||
|
$good3 = new FtpExport();
|
||||||
|
$good3
|
||||||
|
->setAddr('Good 3')
|
||||||
|
->setUser(self::$DI['user'])
|
||||||
|
->setCrash(12)
|
||||||
|
->setNbretry(23);
|
||||||
|
|
||||||
|
self::$DI['app']['EM']->persist($failure1);
|
||||||
|
self::$DI['app']['EM']->persist($failure2);
|
||||||
|
self::$DI['app']['EM']->persist($good1);
|
||||||
|
self::$DI['app']['EM']->persist($good2);
|
||||||
|
self::$DI['app']['EM']->persist($good3);
|
||||||
|
self::$DI['app']['EM']->flush();
|
||||||
|
|
||||||
|
$crashed = self::$DI['app']['EM']
|
||||||
|
->getRepository('Entities\FtpExport')
|
||||||
|
->findCrashedExports(new \DateTime('-6 days'));
|
||||||
|
|
||||||
|
$this->assertCount(2, $crashed);
|
||||||
|
$this->assertContains($failure1, $crashed);
|
||||||
|
$this->assertContains($failure2, $crashed);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFindDoableExports()
|
||||||
|
{
|
||||||
|
$notDoable1 = new FtpExport();
|
||||||
|
$notDoable1
|
||||||
|
->setAddr('Not Doable 1')
|
||||||
|
->setUser(self::$DI['user']);
|
||||||
|
|
||||||
|
$elem1 = new FtpExportElement();
|
||||||
|
$elem1
|
||||||
|
->setSubdef('subdef')
|
||||||
|
->setFilename('name')
|
||||||
|
->setBaseId(self::$DI['record_1']->get_base_id())
|
||||||
|
->setRecordId(self::$DI['record_1']->get_record_id())
|
||||||
|
->setDone(true);
|
||||||
|
|
||||||
|
$elem1->setExport($notDoable1);
|
||||||
|
$notDoable1->addElement($elem1);
|
||||||
|
|
||||||
|
$notDoable2 = new FtpExport();
|
||||||
|
$notDoable2
|
||||||
|
->setAddr('Not Doable 2')
|
||||||
|
->setUser(self::$DI['user']);
|
||||||
|
|
||||||
|
$doable1 = new FtpExport();
|
||||||
|
$doable1
|
||||||
|
->setAddr('Doable 1')
|
||||||
|
->setUser(self::$DI['user']);
|
||||||
|
|
||||||
|
$elem2 = new FtpExportElement();
|
||||||
|
$elem2
|
||||||
|
->setSubdef('subdef')
|
||||||
|
->setFilename('name')
|
||||||
|
->setBaseId(self::$DI['record_1']->get_base_id())
|
||||||
|
->setRecordId(self::$DI['record_1']->get_record_id())
|
||||||
|
->setDone(true);
|
||||||
|
|
||||||
|
$elem2->setExport($doable1);
|
||||||
|
$doable1->addElement($elem2);
|
||||||
|
|
||||||
|
$elem3 = new FtpExportElement();
|
||||||
|
$elem3
|
||||||
|
->setSubdef('subdef')
|
||||||
|
->setFilename('name')
|
||||||
|
->setBaseId(self::$DI['record_2']->get_base_id())
|
||||||
|
->setRecordId(self::$DI['record_2']->get_record_id())
|
||||||
|
->setDone(false);
|
||||||
|
|
||||||
|
$elem3->setExport($doable1);
|
||||||
|
$doable1->addElement($elem3);
|
||||||
|
|
||||||
|
$doable2 = new FtpExport();
|
||||||
|
$doable2
|
||||||
|
->setAddr('Doable 2')
|
||||||
|
->setUser(self::$DI['user']);
|
||||||
|
|
||||||
|
$elem4 = new FtpExportElement();
|
||||||
|
$elem4
|
||||||
|
->setSubdef('subdef')
|
||||||
|
->setFilename('name')
|
||||||
|
->setBaseId(self::$DI['record_1']->get_base_id())
|
||||||
|
->setRecordId(self::$DI['record_1']->get_record_id())
|
||||||
|
->setDone(false);
|
||||||
|
|
||||||
|
$elem4->setExport($doable2);
|
||||||
|
$doable2->addElement($elem4);
|
||||||
|
|
||||||
|
self::$DI['app']['EM']->persist($notDoable1);
|
||||||
|
self::$DI['app']['EM']->persist($notDoable2);
|
||||||
|
self::$DI['app']['EM']->persist($doable1);
|
||||||
|
self::$DI['app']['EM']->persist($doable2);
|
||||||
|
self::$DI['app']['EM']->persist($elem1);
|
||||||
|
self::$DI['app']['EM']->persist($elem2);
|
||||||
|
self::$DI['app']['EM']->persist($elem3);
|
||||||
|
self::$DI['app']['EM']->persist($elem4);
|
||||||
|
|
||||||
|
self::$DI['app']['EM']->flush();
|
||||||
|
|
||||||
|
$doables = self::$DI['app']['EM']
|
||||||
|
->getRepository('Entities\FtpExport')
|
||||||
|
->findDoableExports();
|
||||||
|
|
||||||
|
$this->assertCount(2, $doables);
|
||||||
|
$this->assertContains($doable1, $doables);
|
||||||
|
$this->assertContains($doable2, $doables);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFindByUser()
|
||||||
|
{
|
||||||
|
$match1 = new FtpExport();
|
||||||
|
$match1
|
||||||
|
->setAddr('Match 1')
|
||||||
|
->setUser(self::$DI['user']);
|
||||||
|
|
||||||
|
$match2 = new FtpExport();
|
||||||
|
$match2
|
||||||
|
->setAddr('Match 2')
|
||||||
|
->setUser(self::$DI['user']);
|
||||||
|
|
||||||
|
$noMatch1 = new FtpExport();
|
||||||
|
$noMatch1
|
||||||
|
->setAddr('No match 1')
|
||||||
|
->setUser(self::$DI['user_alt1']);
|
||||||
|
|
||||||
|
self::$DI['app']['EM']->persist($match1);
|
||||||
|
self::$DI['app']['EM']->persist($match2);
|
||||||
|
self::$DI['app']['EM']->persist($noMatch1);
|
||||||
|
|
||||||
|
self::$DI['app']['EM']->flush();
|
||||||
|
|
||||||
|
$exports = self::$DI['app']['EM']
|
||||||
|
->getRepository('Entities\FtpExport')
|
||||||
|
->findByUser(self::$DI['user']);
|
||||||
|
|
||||||
|
$this->assertCount(2, $exports);
|
||||||
|
$this->assertContains($match1, $exports);
|
||||||
|
$this->assertContains($match2, $exports);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user