__DIR__]); $app->useDatabasePath(__DIR__); $command->setLaravel($app); $migrator->shouldReceive('paths')->once()->andReturn([]); $migrator->shouldReceive('usingConnection')->once()->andReturnUsing(function ($name, $callback) { return $callback(); }); $migrator->shouldReceive('setOutput')->once()->andReturn($migrator); $migrator->shouldReceive('rollback')->once()->with([__DIR__.DIRECTORY_SEPARATOR.'migrations'], ['pretend' => false, 'step' => 0]); $this->runCommand($command); } public function testRollbackCommandCallsMigratorWithStepOption() { $command = new RollbackCommand($migrator = m::mock(Migrator::class)); $app = new ApplicationDatabaseRollbackStub(['path.database' => __DIR__]); $app->useDatabasePath(__DIR__); $command->setLaravel($app); $migrator->shouldReceive('paths')->once()->andReturn([]); $migrator->shouldReceive('usingConnection')->once()->andReturnUsing(function ($name, $callback) { return $callback(); }); $migrator->shouldReceive('setOutput')->once()->andReturn($migrator); $migrator->shouldReceive('rollback')->once()->with([__DIR__.DIRECTORY_SEPARATOR.'migrations'], ['pretend' => false, 'step' => 2]); $this->runCommand($command, ['--step' => 2]); } public function testRollbackCommandCanBePretended() { $command = new RollbackCommand($migrator = m::mock(Migrator::class)); $app = new ApplicationDatabaseRollbackStub(['path.database' => __DIR__]); $app->useDatabasePath(__DIR__); $command->setLaravel($app); $migrator->shouldReceive('paths')->once()->andReturn([]); $migrator->shouldReceive('usingConnection')->once()->andReturnUsing(function ($name, $callback) { return $callback(); }); $migrator->shouldReceive('setOutput')->once()->andReturn($migrator); $migrator->shouldReceive('rollback')->once()->with([__DIR__.DIRECTORY_SEPARATOR.'migrations'], true); $this->runCommand($command, ['--pretend' => true, '--database' => 'foo']); } public function testRollbackCommandCanBePretendedWithStepOption() { $command = new RollbackCommand($migrator = m::mock(Migrator::class)); $app = new ApplicationDatabaseRollbackStub(['path.database' => __DIR__]); $app->useDatabasePath(__DIR__); $command->setLaravel($app); $migrator->shouldReceive('paths')->once()->andReturn([]); $migrator->shouldReceive('usingConnection')->once()->andReturnUsing(function ($name, $callback) { return $callback(); }); $migrator->shouldReceive('setOutput')->once()->andReturn($migrator); $migrator->shouldReceive('rollback')->once()->with([__DIR__.DIRECTORY_SEPARATOR.'migrations'], ['pretend' => true, 'step' => 2]); $this->runCommand($command, ['--pretend' => true, '--database' => 'foo', '--step' => 2]); } protected function runCommand($command, $input = []) { return $command->run(new ArrayInput($input), new NullOutput); } } class ApplicationDatabaseRollbackStub extends Application { public function __construct(array $data = []) { foreach ($data as $abstract => $instance) { $this->instance($abstract, $instance); } } public function environment(...$environments) { return 'development'; } }