diff --git a/src/Generators/FactoryGenerator.php b/src/Generators/FactoryGenerator.php index 43a75bf0..834c14e2 100644 --- a/src/Generators/FactoryGenerator.php +++ b/src/Generators/FactoryGenerator.php @@ -126,7 +126,7 @@ protected function buildDefinition(Model $model) json_encode($column->attributes()), $definition ); - } elseif (in_array($column->dataType(), ['decimal', 'float'])) { + } elseif (in_array($column->dataType(), ['decimal', 'double', 'float'])) { $definition .= self::INDENT . "'{$column->name()}' => "; $faker = $this->fakerData($column->name()) ?? $this->fakerDataType($column->dataType()); $definition .= '$faker->' . $faker; @@ -235,28 +235,29 @@ public static function fakerData(string $name) public static function fakerDataType(string $type) { $fakeableTypes = [ - 'id' => 'randomDigitNotNull', - 'string' => 'word', - 'text' => 'text', + 'biginteger' => 'randomNumber()', + 'boolean' => 'boolean', 'date' => 'date()', - 'time' => 'time()', - 'guid' => 'uuid', - 'uuid' => 'uuid', - 'datetimetz' => 'dateTime()', 'datetime' => 'dateTime()', - 'timestamp' => 'dateTime()', - 'integer' => 'randomNumber()', - 'unsignedsmallinteger' => 'randomDigitNotNull', - 'biginteger' => 'randomNumber()', - 'smallint' => 'randomNumber()', - 'tinyinteger' => 'randomNumber()', - 'smallinteger' => 'randomNumber()', + 'datetimetz' => 'dateTime()', 'decimal' => 'randomFloat(/** decimal_attributes **/)', + 'double' => 'randomFloat(/** double_attributes **/)', + 'enum' => 'randomElement(/** enum_attributes **/)', 'float' => 'randomFloat(/** float_attributes **/)', + 'guid' => 'uuid', + 'id' => 'randomDigitNotNull', + 'integer' => 'randomNumber()', 'longtext' => 'text', - 'boolean' => 'boolean', 'set' => 'randomElement(/** set_attributes **/)', - 'enum' => 'randomElement(/** enum_attributes **/)', + 'smallint' => 'randomNumber()', + 'smallinteger' => 'randomNumber()', + 'string' => 'word', + 'text' => 'text', + 'time' => 'time()', + 'timestamp' => 'dateTime()', + 'tinyinteger' => 'randomNumber()', + 'unsignedsmallinteger' => 'randomDigitNotNull', + 'uuid' => 'uuid', ]; return $fakeableTypes[strtolower($type)] ?? null; diff --git a/tests/Unit/Generators/FactoryGeneratorTest.php b/tests/Unit/Generators/FactoryGeneratorTest.php new file mode 100644 index 00000000..6425993e --- /dev/null +++ b/tests/Unit/Generators/FactoryGeneratorTest.php @@ -0,0 +1,98 @@ +assertEquals(FactoryGenerator::fakerData($name), $faker); + } + + /** + * @test + * @dataProvider dataTypeDataProvider + */ + public function it_translates_a_data_type_to_fake_data($type, $faker) + { + $this->assertEquals(FactoryGenerator::fakerDataType($type), $faker); + } + + public function commonNameDataProvider() + { + return [ + ['address1', 'streetAddress'], + ['address2', 'secondaryAddress'], + ['city', 'city'], + ['company', 'company'], + ['content', 'paragraphs(3, true)'], + ['country', 'country'], + ['description', 'text'], + ['email', 'safeEmail'], + ['first_name', 'firstName'], + ['firstname', 'firstName'], + ['guid', 'uuid'], + ['last_name', 'lastName'], + ['lastname', 'lastName'], + ['lat', 'latitude'], + ['latitude', 'latitude'], + ['lng', 'longitude'], + ['longitude', 'longitude'], + ['name', 'name'], + ['password', 'password'], + ['phone', 'phoneNumber'], + ['phone_number', 'phoneNumber'], + ['postal_code', 'postcode'], + ['postcode', 'postcode'], + ['slug', 'slug'], + ['ssn', 'ssn'], + ['street', 'streetName'], + ['summary', 'text'], + ['title', 'sentence(4)'], + ['url', 'url'], + ['user_name', 'userName'], + ['username', 'userName'], + ['uuid', 'uuid'], + ['zip', 'postcode'], + ]; + } + + public function dataTypeDataProvider() + { + return [ + ['biginteger', 'randomNumber()'], + ['boolean', 'boolean'], + ['date', 'date()'], + ['datetime', 'dateTime()'], + ['datetimetz', 'dateTime()'], + ['double', 'randomFloat(/** double_attributes **/)'], + ['decimal', 'randomFloat(/** decimal_attributes **/)'], + ['enum', 'randomElement(/** enum_attributes **/)'], + ['float', 'randomFloat(/** float_attributes **/)'], + ['guid', 'uuid'], + ['id', 'randomDigitNotNull'], + ['integer', 'randomNumber()'], + ['longtext', 'text'], + ['set', 'randomElement(/** set_attributes **/)'], + ['smallint', 'randomNumber()'], + ['smallinteger', 'randomNumber()'], + ['string', 'word'], + ['text', 'text'], + ['time', 'time()'], + ['timestamp', 'dateTime()'], + ['tinyinteger', 'randomNumber()'], + ['unsignedsmallinteger', 'randomDigitNotNull'], + ['uuid', 'uuid'], + ]; + } +} diff --git a/tests/fixtures/drafts/model-modifiers.yaml b/tests/fixtures/drafts/model-modifiers.yaml index 6194ec47..2959e4dc 100644 --- a/tests/fixtures/drafts/model-modifiers.yaml +++ b/tests/fixtures/drafts/model-modifiers.yaml @@ -5,7 +5,7 @@ models: name: string:1000 unique charset:'utf8' content: string default:'' amount: float:9,3 - total: decimal:10,2 + total: double:10,2 overflow: decimal:99,99 ssn: char:11 role: enum:user,admin,owner diff --git a/tests/fixtures/migrations/model-modifiers.php b/tests/fixtures/migrations/model-modifiers.php index 4fa37aec..0336f7f5 100644 --- a/tests/fixtures/migrations/model-modifiers.php +++ b/tests/fixtures/migrations/model-modifiers.php @@ -19,7 +19,7 @@ public function up() $table->string('name', 1000)->unique()->charset('utf8'); $table->string('content')->default(''); $table->float('amount', 9, 3); - $table->decimal('total', 10, 2); + $table->double('total', 10, 2); $table->decimal('overflow', 99, 99); $table->char('ssn', 11); $table->enum('role', ["user","admin","owner"]);