diff --git a/src/Generators/MigrationGenerator.php b/src/Generators/MigrationGenerator.php index bce28294..ba8b49b8 100644 --- a/src/Generators/MigrationGenerator.php +++ b/src/Generators/MigrationGenerator.php @@ -55,7 +55,7 @@ protected function buildDefinition(Model $model) /** @var \Blueprint\Models\Column $column */ foreach ($model->columns() as $column) { $dataType = $column->dataType(); - if ($column->name() === 'id' && $dataType !== 'uuid') { + if ($column->name() === 'id' && $dataType !== 'uuid' && $dataType !== 'increments') { $dataType = 'bigIncrements'; } elseif ($column->dataType() === 'id') { $dataType = 'unsignedBigInteger'; diff --git a/tests/Feature/Generator/MigrationGeneratorTest.php b/tests/Feature/Generator/MigrationGeneratorTest.php index a7506769..abc52a78 100644 --- a/tests/Feature/Generator/MigrationGeneratorTest.php +++ b/tests/Feature/Generator/MigrationGeneratorTest.php @@ -125,6 +125,35 @@ public function output_uses_big_increments_for_id_column() $this->assertEquals(['created' => [$timestamp_path]], $this->subject->output($tree)); } + /** + * @test + */ + public function output_uses_increments_for_id_column() + { + $app = \Mockery::mock(); + $app->expects('version') + ->withNoArgs() + ->andReturn('6.0.0'); + App::swap($app); + + $this->files->expects('stub') + ->with('migration.stub') + ->andReturn(file_get_contents('stubs/migration.stub')); + + $now = Carbon::now(); + Carbon::setTestNow($now); + + $timestamp_path = str_replace('timestamp', $now->format('Y_m_d_His'), 'database/migrations/timestamp_create_roles_table.php'); + + $this->files->expects('put') + ->with($timestamp_path, $this->fixture('migrations/model-increments-only.php')); + + $tokens = $this->blueprint->parse($this->fixture('definitions/model-increments-only.bp')); + $tree = $this->blueprint->analyze($tokens); + + $this->assertEquals(['created' => [$timestamp_path]], $this->subject->output($tree)); + } + public function modelTreeDataProvider() { return [ @@ -136,6 +165,7 @@ public function modelTreeDataProvider() ['definitions/relationships.bp', 'database/migrations/timestamp_create_comments_table.php', 'migrations/relationships.php'], ['definitions/unconventional.bp', 'database/migrations/timestamp_create_teams_table.php', 'migrations/unconventional.php'], ['definitions/model-key-constraints.bp', 'database/migrations/timestamp_create_orders_table.php', 'migrations/model-key-constraints.php'], + ['definitions/model-increments-only.bp', 'database/migrations/timestamp_create_roles_table.php', 'migrations/model-increments-only.php'], ]; } } diff --git a/tests/fixtures/definitions/model-increments-only.bp b/tests/fixtures/definitions/model-increments-only.bp new file mode 100644 index 00000000..32832d36 --- /dev/null +++ b/tests/fixtures/definitions/model-increments-only.bp @@ -0,0 +1,5 @@ +models: + Role: + id: increments + some_id: unsignedInteger + timestamps: false diff --git a/tests/fixtures/migrations/model-increments-only.php b/tests/fixtures/migrations/model-increments-only.php new file mode 100644 index 00000000..7b35eb0a --- /dev/null +++ b/tests/fixtures/migrations/model-increments-only.php @@ -0,0 +1,31 @@ +increments('id'); + $table->unsignedInteger('some_id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('roles'); + } +}