createMock(\medoo::class); $mockDb->expects($this->once()) ->method('get') ->with('pp_articles', '*', ['id' => 7]) ->willReturn(['id' => 7, 'status' => 1]); $mockDb->expects($this->exactly(4)) ->method('select') ->willReturnOnConsecutiveCalls( [ ['lang_id' => 'pl', 'title' => 'Artykul'], ['lang_id' => 'en', 'title' => 'Article'], ], [ ['id' => 10, 'src' => '/img/a.jpg'] ], [ ['id' => 20, 'src' => '/files/a.pdf'] ], [1, 2] ); $repository = new ArticleRepository($mockDb); $article = $repository->find(7); $this->assertIsArray($article); $this->assertEquals(7, $article['id']); $this->assertArrayHasKey('languages', $article); $this->assertEquals('Artykul', $article['languages']['pl']['title']); $this->assertCount(1, $article['images']); $this->assertCount(1, $article['files']); $this->assertEquals([1, 2], $article['pages']); } public function testFindReturnsNullWhenArticleDoesNotExist(): void { $mockDb = $this->createMock(\medoo::class); $mockDb->expects($this->once()) ->method('get') ->with('pp_articles', '*', ['id' => 999]) ->willReturn(false); $mockDb->expects($this->never())->method('select'); $repository = new ArticleRepository($mockDb); $article = $repository->find(999); $this->assertNull($article); } public function testDeleteNonassignedFilesDeletesDbRows(): void { $mockDb = $this->createMock(\medoo::class); $mockDb->expects($this->once()) ->method('select') ->with('pp_articles_files', '*', ['article_id' => null]) ->willReturn([ ['id' => 1, 'src' => '/this/path/does/not/exist-file.tmp'] ]); $mockDb->expects($this->once()) ->method('delete') ->with('pp_articles_files', ['article_id' => null]); $repository = new ArticleRepository($mockDb); $repository->deleteNonassignedFiles(); $this->assertTrue(true); } public function testDeleteNonassignedImagesDeletesDbRows(): void { $mockDb = $this->createMock(\medoo::class); $mockDb->expects($this->once()) ->method('select') ->with('pp_articles_images', '*', ['article_id' => null]) ->willReturn([ ['id' => 1, 'src' => '/this/path/does/not/exist-image.tmp'] ]); $mockDb->expects($this->once()) ->method('delete') ->with('pp_articles_images', ['article_id' => null]); $repository = new ArticleRepository($mockDb); $repository->deleteNonassignedImages(); $this->assertTrue(true); } }