Files
PHP-App-Timekeeping/api/tests/unit/Repositories/WorkingHoursViewRepositoryTest.php
T

109 lines
3.4 KiB
PHP

<?php
namespace TorstenHettstedt\TimekeepingApi\Tests\Unit\Repositories;
use Codeception\Test\Unit;
use PDO;
use TorstenHettstedt\TimekeepingApi\Models\PeriodDesignationEnum;
use TorstenHettstedt\TimekeepingApi\Models\WorkingHoursView;
use TorstenHettstedt\TimekeepingApi\Repositories\RepositoryRecordNotFoundException;
use TorstenHettstedt\TimekeepingApi\Repositories\WorkingHoursViewRepository;
class WorkingHoursViewRepositoryTest extends Unit
{
const EXISTING_DATE = '2020-01-28';
const EXISTING_INTERVAL = 'PT7H20M';
const NEW_DATE = '2020-04-01';
const NEW_INTERVAL = 'PT7H59M';
const RECORDS_COUNT = 61;
protected PDO $pdoObject;
protected function _before(): void
{
$this->pdoObject = new PDO('pgsql:host=psql.torsten-hettstedt.net;port=5432;dbname=testdb;user=bruce;password=mypass');
parent::_before();
}
/**
* @return array[]
*/
public function listObjectProvider(): array
{
return [
[PeriodDesignationEnum::YEARLY(), 1],
[PeriodDesignationEnum::MONTHLY(), 3],
[PeriodDesignationEnum::WEEKLY(), 13],
];
}
/**
* @return array[]
*/
public function existingObjectProvider(): array
{
return [
[PeriodDesignationEnum::YEARLY(), '2020', 61],
[PeriodDesignationEnum::MONTHLY(), '2020-02', 20],
[PeriodDesignationEnum::WEEKLY(), '2020#3', 5],
];
}
/**
* @return array[]
*/
public function notExistingObjectProvider(): array
{
return [
[PeriodDesignationEnum::YEARLY(), '2022',],
[PeriodDesignationEnum::MONTHLY(), '2020-05',],
[PeriodDesignationEnum::WEEKLY(), '2020#30',],
];
}
/**
* @param PeriodDesignationEnum $period
* @param int $count_records
*
* @dataProvider listObjectProvider
*/
public function testFindAll(PeriodDesignationEnum $period, int $count_records): void
{
$repository = new WorkingHoursViewRepository($this->pdoObject, $period);
$models = $repository->findAll();
$this->assertIsArray($models);
$this->assertContainsOnly(WorkingHoursView::class, $models);
$this->assertCount(self::RECORDS_COUNT, $models);
}
/**
*
* @dataProvider existingObjectProvider
*
* @param PeriodDesignationEnum $period
* @param string $search
*/
public function testExistingFindByKey(PeriodDesignationEnum $period, string $search, int $workingDays): void
{
$repository = new WorkingHoursViewRepository($this->pdoObject, $period);
$model = $repository->findByKey(self::EXISTING_DATE);
$this->assertInstanceOf(WorkingHoursView::class, $model);
$this->assertEquals($workingDays, $model->getWorkingDays());
}
/**
* @param PeriodDesignationEnum $period
* @param string $search
*
* @dataProvider notExistingObjectProvider
*
* @throws RepositoryRecordNotFoundException
*/
public function testNotExistingFindByKey(PeriodDesignationEnum $period, string $search): void
{
$repository = new WorkingHoursViewRepository($this->pdoObject, $period);
$this->expectException(RepositoryRecordNotFoundException::class);
$repository->findByKey(self::NEW_DATE);
}
}