public execute ( Symfony\Component\Console\Input\InputInterface $input, Symfony\Component\Console\Output\OutputInterface $output ) | ||
$input | Symfony\Component\Console\Input\InputInterface | |
$output | Symfony\Component\Console\Output\OutputInterface |
public function execute(InputInterface $input, OutputInterface $output)
{
$options = [];
if ($input->hasOption('config-file')) {
$configFile = $input->getOption('config-file');
if (!file_exists($configFile)) {
throw new \RuntimeException(sprintf('Config file %s does not exist', $configFile));
}
$options = (require $configFile);
if (!is_array($options)) {
throw new \RuntimeException(sprintf('Invalid config file specified or invalid return type in file %s', $configFile));
}
} else {
if ($input->hasArgument('openapi-file') && null !== $input->getArgument('openapi-file')) {
$options['openapi-file'] = $input->getArgument('openapi-file');
}
if ($input->hasArgument('namespace') && null !== $input->getArgument('namespace')) {
$options['namespace'] = $input->getArgument('namespace');
}
if ($input->hasArgument('directory') && null !== $input->getArgument('directory')) {
$options['directory'] = $input->getArgument('directory');
}
if ($input->hasOption('date-format') && null !== $input->getOption('date-format')) {
$options['date-format'] = $input->getOption('date-format');
}
if ($input->hasOption('no-reference') && null !== $input->getOption('no-reference')) {
$options['reference'] = $input->getOption('reference');
}
}
$options = $this->resolveConfiguration($options);
$janeOpenApi = JaneOpenApi::build($options);
$files = $janeOpenApi->generate($options['openapi-file'], $options['namespace'], $options['directory']);
$janeOpenApi->printFiles($files, $options['directory']);
foreach ($files as $file) {
$output->writeln(sprintf("Generate %s", $file->getFilename()));
}
}
/** * @dataProvider resourceProvider */ public function testRessources(SplFileInfo $testDirectory) { // 1. Cleanup generated $filesystem = new Filesystem(); if ($filesystem->exists($testDirectory->getRealPath() . DIRECTORY_SEPARATOR . 'generated')) { $filesystem->remove($testDirectory->getRealPath() . DIRECTORY_SEPARATOR . 'generated'); } $filesystem->mkdir($testDirectory->getRealPath() . DIRECTORY_SEPARATOR . 'generated'); // 2. Generate $command = new GenerateCommand(); $input = new ArrayInput(['--config-file' => $testDirectory->getRealPath() . DIRECTORY_SEPARATOR . '.jane-openapi'], $command->getDefinition()); $command->execute($input, new NullOutput()); // 3. Compare $expectedFinder = new Finder(); $expectedFinder->in($testDirectory->getRealPath() . DIRECTORY_SEPARATOR . 'expected'); $generatedFinder = new Finder(); $generatedFinder->in($testDirectory->getRealPath() . DIRECTORY_SEPARATOR . 'generated'); $generatedData = []; $this->assertEquals(count($expectedFinder), count($generatedFinder)); foreach ($generatedFinder as $generatedFile) { $generatedData[$generatedFile->getRelativePathname()] = $generatedFile->getRealPath(); } foreach ($expectedFinder as $expectedFile) { $this->assertArrayHasKey($expectedFile->getRelativePathname(), $generatedData); if ($expectedFile->isFile()) { $expectedPath = $expectedFile->getRealPath(); $actualPath = $generatedData[$expectedFile->getRelativePathname()]; $this->assertEquals(file_get_contents($expectedPath), file_get_contents($actualPath), "Expected " . $expectedPath . " got " . $actualPath); } } }