diff --git a/api/tests/unit/Repositories/WorkingHoursViewRepositoryTest.php b/api/tests/unit/Repositories/WorkingHoursViewRepositoryTest.php new file mode 100644 index 0000000..7ccbc67 --- /dev/null +++ b/api/tests/unit/Repositories/WorkingHoursViewRepositoryTest.php @@ -0,0 +1,108 @@ +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); + } +}