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 [ [WorkingHoursYearlyViewRepository::class, 1], [WorkingHoursMonthlyViewRepository::class, 3], [WorkingHoursWeeklyViewRepository::class, 13], ]; } /** * @return array */ public function existingObjectProvider(): array { return [ [WorkingHoursYearlyViewRepository::class, '2020', 61, date_create('2020-01-01', new DateTimeZone('UCT'))], [WorkingHoursMonthlyViewRepository::class, '2020 February', 20, date_create('2020-02-01', new DateTimeZone('UCT'))], [WorkingHoursWeeklyViewRepository::class, '2020#03', 5, date_create('2020-01-13', new DateTimeZone('UCT'))], ]; } /** * @return array */ public function notExistingObjectProvider(): array { return [ [WorkingHoursYearlyViewRepository::class, '2022',], [WorkingHoursMonthlyViewRepository::class, '2020 May',], [WorkingHoursWeeklyViewRepository::class, '2020#30',], ]; } #[DataProvider(('listObjectProvider'))] public function testFindAll(string $periodClass, int $countRecords): void { $repository = new $periodClass($this->pdoObject); $models = $repository->findAll(); $this->assertIsArray($models); $this->assertContainsOnlyInstancesOf(WorkingHoursView::class, $models); $this->assertCount($countRecords, $models); } #[DataProvider(('existingObjectProvider'))] public function testExistingFindByKey(string $periodClass, string $search, int $workingDays, DateTime $period): void { $repository = new $periodClass($this->pdoObject); $model = $repository->findByKey($search); $this->assertInstanceOf(WorkingHoursView::class, $model); $this->assertEquals($workingDays, $model->getWorkingDays()); $this->assertEquals($period->format('Ymd'), $model->getPeriod()->format('Ymd')); } #[DataProvider(('notExistingObjectProvider'))] public function testNotExistingFindByKey(string $periodClass, string $search): void { $repository = new $periodClass($this->pdoObject); $this->expectException(RepositoryRecordNotFoundException::class); $repository->findByKey($search); } }