pdoObject = new PDO('pgsql:host=psql.torsten-hettstedt.net;port=5432;dbname=testdb;user=bruce;password=mypass'); parent::_before(); } public function testFindAll(): void { $repository = new WorkingHoursRepository($this->pdoObject); $models = $repository->findAll(); $this->assertIsArray($models); $this->assertContainsOnly(WorkingHours::class, $models); $this->assertCount(self::RECORDS_COUNT, $models); } /** * @throws RepositoryRecordNotFoundException */ public function testExistingFindByKey(): void { $repository = new WorkingHoursRepository($this->pdoObject); $model = $repository->findByKey(self::EXISTING_DATE); $this->assertInstanceOf(WorkingHours::class, $model); $this->assertEquals(new DateTime(self::EXISTING_DATE), $model->getWorkingDay()); $this->assertEquals(new DateInterval(self::EXISTING_INTERVAL), $model->getWorkingTime()); } public function testNotExistingFindByKey(): void { $repository = new WorkingHoursRepository($this->pdoObject); $this->expectException(RepositoryRecordNotFoundException::class); $repository->findByKey(self::NEW_DATE); } /** * @throws RepositoryRecordNotFoundException * @throws Exception */ public function testNewInsert(): void { $repository = new WorkingHoursRepository($this->pdoObject); $model = $this->make(WorkingHours::class, [ 'workingDay' => new DateTime(self::NEW_DATE), 'workingTime' => new DateInterval(self::NEW_INTERVAL), ]); $repository->insert($model); $model = $repository->findByKey(self::NEW_DATE); $this->assertInstanceOf(WorkingHours::class, $model); $this->assertEquals(new DateTime(self::NEW_DATE), $model->getWorkingDay()); $this->assertEquals(new DateInterval(self::NEW_INTERVAL), $model->getWorkingTime()); $this->assertCount(self::RECORDS_COUNT + 1, $repository->findAll()); } /** * @throws Exception */ public function testExistingInsert(): void { $repository = new WorkingHoursRepository($this->pdoObject); $model = $this->make(WorkingHours::class, [ 'workingDay' => new DateTime(self::EXISTING_DATE), 'workingTime' => new DateInterval(self::NEW_INTERVAL), ]); $this->expectException(RepositoryModelAlreadyExists::class); $repository->insert($model); } /** * @throws RepositoryRecordNotFoundException * @throws Exception */ public function testExistsDelete(): void { $repository = new WorkingHoursRepository($this->pdoObject); $model = $this->make(WorkingHours::class, [ 'workingDay' => new DateTime(self::EXISTING_DATE), 'workingTime' => new DateInterval(self::EXISTING_INTERVAL), ]); $repository->delete($model); $this->expectException(RepositoryRecordNotFoundException::class); $repository->findByKey(self::EXISTING_DATE); } public function testNotExistsDelete(): void { $repository = new WorkingHoursRepository($this->pdoObject); $model = $this->make(WorkingHours::class, [ 'workingDay' => new DateTime(self::NEW_DATE), 'workingTime' => new DateInterval(self::NEW_INTERVAL), ]); $this->expectException(RepositoryRecordNotFoundException::class); $repository->delete($model); } /** * @throws RepositoryRecordNotFoundException * @throws Exception */ public function testExistsUpdate(): void { $repository = new WorkingHoursRepository($this->pdoObject); $model = $this->make(WorkingHours::class, [ 'workingDay' => new DateTime(self::EXISTING_DATE), 'workingTime' => new DateInterval(self::NEW_INTERVAL), ]); $repository->update($model); $model_db = $repository->findByKey(self::EXISTING_DATE); $this->assertEquals(new DateInterval(self::NEW_INTERVAL), $model_db->getWorkingTime()); } /** * @throws Exception */ public function testNotExistsUpdate(): void { $repository = new WorkingHoursRepository($this->pdoObject); $model = $this->make(WorkingHours::class, [ 'workingDay' => new DateTime(self::NEW_DATE), 'workingTime' => new DateInterval(self::NEW_INTERVAL), ]); $this->expectException(RepositoryRecordNotFoundException::class); $repository->update($model); } }