Die Unterschiede zwischen den einzelnen Perioden-Repository ist größer als gedacht. Deshalb hat jede Periode seine eigene Klasse bekommen.

This commit is contained in:
2021-04-02 21:16:57 +02:00
parent c8219d9c88
commit 675c5cb9ae
@@ -4,10 +4,11 @@ namespace TorstenHettstedt\TimekeepingApi\Tests\Unit\Repositories;
use Codeception\Test\Unit; use Codeception\Test\Unit;
use PDO; use PDO;
use TorstenHettstedt\TimekeepingApi\Models\PeriodDesignationEnum;
use TorstenHettstedt\TimekeepingApi\Models\WorkingHoursView; use TorstenHettstedt\TimekeepingApi\Models\WorkingHoursView;
use TorstenHettstedt\TimekeepingApi\Repositories\RepositoryRecordNotFoundException; use TorstenHettstedt\TimekeepingApi\Repositories\RepositoryRecordNotFoundException;
use TorstenHettstedt\TimekeepingApi\Repositories\WorkingHoursViewRepository; use TorstenHettstedt\TimekeepingApi\Repositories\WorkingHoursWeeklyViewRepository;
use TorstenHettstedt\TimekeepingApi\Repositories\WorkingHoursMonthlyViewRepository;
use TorstenHettstedt\TimekeepingApi\Repositories\WorkingHoursYearlyViewRepository;
class WorkingHoursViewRepositoryTest extends Unit class WorkingHoursViewRepositoryTest extends Unit
{ {
@@ -31,9 +32,9 @@ class WorkingHoursViewRepositoryTest extends Unit
public function listObjectProvider(): array public function listObjectProvider(): array
{ {
return [ return [
[PeriodDesignationEnum::YEARLY(), 1], [WorkingHoursYearlyViewRepository::class, 1],
[PeriodDesignationEnum::MONTHLY(), 3], [WorkingHoursMonthlyViewRepository::class, 3],
[PeriodDesignationEnum::WEEKLY(), 13], [WorkingHoursWeeklyViewRepository::class, 13],
]; ];
} }
@@ -43,9 +44,9 @@ class WorkingHoursViewRepositoryTest extends Unit
public function existingObjectProvider(): array public function existingObjectProvider(): array
{ {
return [ return [
[PeriodDesignationEnum::YEARLY(), '2020', 61], [WorkingHoursYearlyViewRepository::class, '2020', 61],
[PeriodDesignationEnum::MONTHLY(), '2020-02', 20], [WorkingHoursMonthlyViewRepository::class, '2020 February', 20],
[PeriodDesignationEnum::WEEKLY(), '2020#3', 5], [WorkingHoursWeeklyViewRepository::class, '2020#03', 5],
]; ];
} }
@@ -55,54 +56,54 @@ class WorkingHoursViewRepositoryTest extends Unit
public function notExistingObjectProvider(): array public function notExistingObjectProvider(): array
{ {
return [ return [
[PeriodDesignationEnum::YEARLY(), '2022',], [WorkingHoursYearlyViewRepository::class, '2022',],
[PeriodDesignationEnum::MONTHLY(), '2020-05',], [WorkingHoursMonthlyViewRepository::class, '2020 May',],
[PeriodDesignationEnum::WEEKLY(), '2020#30',], [WorkingHoursWeeklyViewRepository::class, '2020#30',],
]; ];
} }
/** /**
* @param PeriodDesignationEnum $period * @param string $period_class
* @param int $count_records * @param int $count_records
* *
* @dataProvider listObjectProvider * @dataProvider listObjectProvider
*/ */
public function testFindAll(PeriodDesignationEnum $period, int $count_records): void public function testFindAll(string $period_class, int $count_records): void
{ {
$repository = new WorkingHoursViewRepository($this->pdoObject, $period); $repository = new $period_class($this->pdoObject);
$models = $repository->findAll(); $models = $repository->findAll();
$this->assertIsArray($models); $this->assertIsArray($models);
$this->assertContainsOnly(WorkingHoursView::class, $models); $this->assertContainsOnly(WorkingHoursView::class, $models);
$this->assertCount(self::RECORDS_COUNT, $models); $this->assertCount($count_records, $models);
} }
/** /**
* *
* @dataProvider existingObjectProvider * @dataProvider existingObjectProvider
* *
* @param PeriodDesignationEnum $period * @param string $period_class
* @param string $search * @param string $search
* @param int $workingDays
*/ */
public function testExistingFindByKey(PeriodDesignationEnum $period, string $search, int $workingDays): void public function testExistingFindByKey(string $period_class, string $search, int $workingDays): void
{ {
$repository = new WorkingHoursViewRepository($this->pdoObject, $period); $repository = new $period_class($this->pdoObject);
$model = $repository->findByKey(self::EXISTING_DATE); $model = $repository->findByKey($search);
$this->assertInstanceOf(WorkingHoursView::class, $model); $this->assertInstanceOf(WorkingHoursView::class, $model);
$this->assertEquals($workingDays, $model->getWorkingDays()); $this->assertEquals($workingDays, $model->getWorkingDays());
} }
/** /**
* @param PeriodDesignationEnum $period * @param string $period_class
* @param string $search * @param string $search
* *
* @dataProvider notExistingObjectProvider * @dataProvider notExistingObjectProvider
* *
* @throws RepositoryRecordNotFoundException
*/ */
public function testNotExistingFindByKey(PeriodDesignationEnum $period, string $search): void public function testNotExistingFindByKey(string $period_class, string $search): void
{ {
$repository = new WorkingHoursViewRepository($this->pdoObject, $period); $repository = new $period_class($this->pdoObject);
$this->expectException(RepositoryRecordNotFoundException::class); $this->expectException(RepositoryRecordNotFoundException::class);
$repository->findByKey(self::NEW_DATE); $repository->findByKey($search);
} }
} }