diff --git a/src/Generator.php b/src/Generator.php index 168dbfe3..ecfa747f 100644 --- a/src/Generator.php +++ b/src/Generator.php @@ -24,6 +24,10 @@ class Generator */ private $steps; + /** + * @param Filesystem $filesystem + * @param StepInterface[] $steps + */ public function __construct(Filesystem $filesystem, array $steps) { $this->filesystem = $filesystem; diff --git a/tests/UnitTest/GeneratorTest.php b/tests/UnitTest/GeneratorTest.php new file mode 100644 index 00000000..b51d96d4 --- /dev/null +++ b/tests/UnitTest/GeneratorTest.php @@ -0,0 +1,55 @@ +createFileSystem(); + $repository = new MockRepository(); + $output = new NullOutput(); + + $steps = [ + $this->createStep($repository, $output), + $this->createStep($repository, $output), + $this->createStep($repository, $output), + ]; + + $generator = new Generator($filesystem, $steps); + + $generator->generate($repository, $output); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject|Filesystem + */ + private function createFilesystem() + { + return $this->getMock('Symfony\Component\Filesystem\Filesystem'); + } + + private function createStep(Repository $repository, OutputInterface $output) + { + $step = $this->getMockForAbstractClass('Couscous\Step\StepInterface'); + + $step->expects($this->once()) + ->method('__invoke') + ->with($repository, $output); + + return $step; + } +} diff --git a/tests/UnitTest/Model/RepositoryTest.php b/tests/UnitTest/Model/RepositoryTest.php new file mode 100644 index 00000000..c2d3b799 --- /dev/null +++ b/tests/UnitTest/Model/RepositoryTest.php @@ -0,0 +1,84 @@ +createFile('file1'); + $file2 = $this->createFile('file2'); + + $repository->addFile($file1); + $repository->addFile($file2); + $expected = [ + 'file1' => $file1, + 'file2' => $file2, + ]; + $this->assertSame($expected, $repository->getFiles()); + + $repository->removeFile($file1); + $this->assertSame(['file2' => $file2], $repository->getFiles()); + + $repository->removeFile($file2); + $this->assertSame([], $repository->getFiles()); + } + + /** + * @test + */ + public function replace_should_replace_files() + { + $repository = new Repository('source', 'target'); + + $file1 = $this->createFile('file1'); + $file2 = $this->createFile('file2'); + + $repository->addFile($file1); + $this->assertSame(['file1' => $file1], $repository->getFiles()); + + $repository->replaceFile($file1, $file2);; + $this->assertSame(['file2' => $file2], $repository->getFiles()); + } + + /** + * @test + */ + public function it_should_return_files_by_type() + { + $repository = new Repository('source', 'target'); + + $file1 = new MarkdownFile('file1', 'Hello'); + $file2 = new HtmlFile('file2', 'Hello'); + + $repository->addFile($file1); + $repository->addFile($file2); + + $markdownFiles = $repository->findFilesByType('Couscous\Model\File\MarkdownFile'); + $this->assertSame(['file1' => $file1], $markdownFiles); + + $htmlFiles = $repository->findFilesByType('Couscous\Model\File\HtmlFile'); + $this->assertSame(['file2' => $file2], $htmlFiles); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject|File + */ + private function createFile($name) + { + return $this->getMockForAbstractClass('Couscous\Model\File', [$name]); + } +}