test unique index constraint for episode actions

This commit is contained in:
thrillfall 2021-08-24 22:48:46 +02:00
parent ba0d4f4357
commit ae27f7cf34
3 changed files with 90 additions and 1 deletions

View File

@ -0,0 +1,24 @@
<?php
namespace tests\Helper;
use OC;
use OCP\IDBConnection;
trait DatabaseTransaction {
public function startTransaction() {
/* @var $db IDBConnection */
$db = OC::$server->get(IDBConnection::class);
$db->beginTransaction();
}
public function rollbackTransation() {
/* @var $db IDBConnection */
$db = OC::$server->get(IDBConnection::class);
$db->rollBack();
}
}

View File

@ -0,0 +1,65 @@
<?php
declare(strict_types=1);
namespace tests\Integration;
use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
use OCA\GPodderSync\Db\EpisodeAction\EpisodeActionEntity;
use OCA\GPodderSync\Db\EpisodeAction\EpisodeActionWriter;
use OCP\AppFramework\App;
use Test\TestCase;
use tests\Helper\DatabaseTransaction;
/**
* @group DB
*/
class EpisodeActionGuidMigrationTest extends TestCase
{
use DatabaseTransaction;
private \OCP\AppFramework\IAppContainer $container;
public function setUp(): void {
parent::setUp();
$app = new App('gpoddersync');
$this->container = $app->getContainer();
}
/**
* @before
*/
public function before()
{
$this->startTransaction();
}
public function testCreateSameEpisodeActionTriggersUniqueConstraintViolationException()
{
self::expectException(UniqueConstraintViolationException::class);
/** @var EpisodeActionWriter $episodeActionWriter */
$episodeActionWriter = $this->container->get('OCA\GPodderSync\Db\EpisodeAction\EpisodeActionWriter');
$episodeActionEntity = new EpisodeActionEntity();
$episodeActionEntity->setPodcast("https://podcast_01.url");
$episodeActionEntity->setEpisode("https://episode_01.url");
$episodeActionEntity->setAction("PLAY");
$episodeActionEntity->setPosition(5);
$episodeActionEntity->setStarted(0);
$episodeActionEntity->setTotal(123);
$episodeActionEntity->setTimestamp("Mon Aug 23 01:58:56 GMT+02:00 2021");
$episodeActionEntity->setUserId("user0@127.0.0.1");
$episodeActionWriter->save($episodeActionEntity);
$episodeActionWriter->save($episodeActionEntity);
}
/**
* @after
*/
public function after()
{
$this->rollbackTransation();
}
}

View File

@ -5,7 +5,7 @@ if (!defined('PHPUNIT_RUN')) {
}
require_once __DIR__ . '/../../../lib/base.php';
require_once __DIR__ . '/Helper/DatabaseTransaction.php';
// Fix for "Autoload path not allowed: .../tests/lib/testcase.php"
OC::$loader->addValidRoot(OC::$SERVERROOT . '/tests');