Skip to content

Instantly share code, notes, and snippets.

@jakzal
Created January 16, 2014 14:19
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jakzal/8455718 to your computer and use it in GitHub Desktop.
Save jakzal/8455718 to your computer and use it in GitHub Desktop.
How to spec a Symfony2 console command?
<?php
namespace Zalas\Bundle\PackagistBundle\Command;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class FindPackageListsCommand extends ContainerAwareCommand
{
protected function configure()
{
$this->setName('packagist:crawl:package-lists');
$this->addOption('batch-size', 'bs', InputOption::VALUE_REQUIRED, 'The batch size', 100);
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$finder = $this->getContainer()->get('zalas_packagist.package_list_page_finder');
$finder->setBatchSize($input->getOption('batch-size'));
$finder->run('https://packagist.org');
}
}
<?php
namespace spec\Zalas\Bundle\PackagistBundle\Command;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Zalas\Packagist\Worker\PackageListFinder;
class FindPackageListsCommandSpec extends ObjectBehavior
{
function let(InputInterface $input, PackageListFinder $packageListPageFinder)
{
$input->bind(Argument::cetera())->willReturn();
$input->isInteractive()->willReturn(false);
$input->validate()->willReturn();
$input->getOption('batch-size')->willReturn(1);
$packageListPageFinder->setBatchSize(Argument::cetera())->willReturn();
}
function it_is_a_container_aware_command()
{
$this->shouldHaveType('Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand');
}
function it_has_a_name()
{
$this->getName()->shouldReturn('packagist:crawl:package-lists');
}
function it_runs_the_package_list_page_finder(ContainerInterface $container, InputInterface $input, OutputInterface $output, PackageListFinder $packageListPageFinder)
{
$container->get('zalas_packagist.package_list_page_finder')->willReturn($packageListPageFinder);
$packageListPageFinder->run('https://packagist.org')->shouldBeCalled();
$this->setContainer($container);
$this->run($input, $output);
}
function it_sets_the_batch_size_if_given(ContainerInterface $container, InputInterface $input, OutputInterface $output, PackageListFinder $packageListPageFinder)
{
$batchSize = 100;
$container->get('zalas_packagist.package_list_page_finder')->willReturn($packageListPageFinder);
$input->getOption('batch-size')->willReturn($batchSize);
$packageListPageFinder->setBatchSize($batchSize)->shouldBeCalled();
$packageListPageFinder->run('https://packagist.org')->willReturn();
$this->setContainer($container);
$this->run($input, $output);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment