diff --git a/tests/fixtures/plugins/database/tester/models/Post.php b/tests/fixtures/plugins/database/tester/models/Post.php index 73c08f5b7..cc54d9b01 100644 --- a/tests/fixtures/plugins/database/tester/models/Post.php +++ b/tests/fixtures/plugins/database/tester/models/Post.php @@ -33,6 +33,23 @@ class Post extends Model } +class NullablePost extends Post +{ + use \October\Rain\Database\Traits\Nullable; + + /** + * @var array Guarded fields + */ + protected $guarded = []; + + /** + * @var array List of attributes to nullify + */ + protected $nullable = [ + 'author_nickname', + ]; +} + class SluggablePost extends Post { diff --git a/tests/fixtures/plugins/database/tester/updates/create_posts_table.php b/tests/fixtures/plugins/database/tester/updates/create_posts_table.php index 38bc65a73..694ef36ca 100644 --- a/tests/fixtures/plugins/database/tester/updates/create_posts_table.php +++ b/tests/fixtures/plugins/database/tester/updates/create_posts_table.php @@ -18,6 +18,7 @@ class CreatePostsTable extends Migration $table->boolean('is_published')->default(false); $table->timestamp('published_at')->nullable(); $table->integer('author_id')->unsigned()->index()->nullable(); + $table->string('author_nickname')->default('October')->nullable(); $table->softDeletes(); $table->timestamps(); }); diff --git a/tests/unit/plugins/database/NullableModelTest.php b/tests/unit/plugins/database/NullableModelTest.php new file mode 100644 index 000000000..b5597f079 --- /dev/null +++ b/tests/unit/plugins/database/NullableModelTest.php @@ -0,0 +1,33 @@ +runPluginRefreshCommand('Database.Tester'); + } + + public function testNullifyingFields() + { + // The nullable field should be unset and use sql default + $post = NullablePost::create(['author_nickname' => '']); + $this->assertEquals('October', NullablePost::find($post->id)->author_nickname); + + // Once saved, fields will be set to null + $post->author_nickname = ''; + $post->save(); + $this->assertNull($post->author_nickname); + } + + public function testNonEmptyValuesAreIgnored() + { + $post = NullablePost::create(['author_nickname' => 'Joe']); + $this->assertEquals('Joe', $post->author_nickname); + } +}