/
githubmirror
/
framework
Обзор
Документация
Войти
/
githubmirror
/
framework
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
13.x
tests/Integration/Database/EloquentModelTest.php
153 строки
5 KB
Mior Muhammad Zaki
[12.x] Preserve "previous" model state (#55729)
16 май 2025, 01:16
Не верифицирован
16 май 2025, 01:16
a039725
Код
Авторство
О чём код?
<?php namespace Illuminate\Tests\Integration\Database; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Str; class EloquentModelTest extends DatabaseTestCase { protected function afterRefreshingDatabase() { Schema::create('test_model1', function (Blueprint $table) { $table->increments('id'); $table->timestamp('nullable_date')->nullable(); }); Schema::create('test_model2', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('title'); }); } public function testUserCanUpdateNullableDate() { $user = TestModel1::create([ 'nullable_date' => null, ]); $user->fill([ 'nullable_date' => $now = Carbon::now(), ]); $this->assertTrue($user->isDirty('nullable_date')); $user->save(); $this->assertEquals($now->toDateString(), $user->nullable_date->toDateString()); } public function testAttributeChanges() { $user = TestModel2::create([ 'name' => $originalName = Str::random(), 'title' => Str::random(), ]); $this->assertEmpty($user->getDirty()); $this->assertEmpty($user->getChanges()); $this->assertEmpty($user->getPrevious()); $this->assertFalse($user->isDirty()); $this->assertFalse($user->wasChanged()); $user->name = $overrideName = Str::random(); $this->assertEquals(['name' => $overrideName], $user->getDirty()); $this->assertEmpty($user->getChanges()); $this->assertEmpty($user->getPrevious()); $this->assertTrue($user->isDirty()); $this->assertFalse($user->wasChanged()); $user->save(); $this->assertEmpty($user->getDirty()); $this->assertEquals(['name' => $overrideName], $user->getChanges()); $this->assertEquals(['name' => $originalName], $user->getPrevious()); $this->assertTrue($user->wasChanged()); $this->assertTrue($user->wasChanged('name')); } public function testDiscardChanges() { $user = TestModel2::create([ 'name' => $originalName = Str::random(), 'title' => Str::random(), ]); $this->assertEmpty($user->getDirty()); $this->assertEmpty($user->getChanges()); $this->assertEmpty($user->getPrevious()); $this->assertFalse($user->isDirty()); $this->assertFalse($user->wasChanged()); $user->name = $overrideName = Str::random(); $this->assertEquals(['name' => $overrideName], $user->getDirty()); $this->assertEmpty($user->getChanges()); $this->assertEmpty($user->getPrevious()); $this->assertTrue($user->isDirty()); $this->assertFalse($user->wasChanged()); $this->assertSame($originalName, $user->getOriginal('name')); $this->assertSame($overrideName, $user->getAttribute('name')); $user->discardChanges(); $this->assertEmpty($user->getDirty()); $this->assertEmpty($user->getChanges()); $this->assertEmpty($user->getPrevious()); $this->assertSame($originalName, $user->getOriginal('name')); $this->assertSame($originalName, $user->getAttribute('name')); $user->save(); $this->assertFalse($user->wasChanged()); $this->assertEmpty($user->getChanges()); $this->assertEmpty($user->getPrevious()); } public function testInsertRecordWithReservedWordFieldName() { Schema::create('actions', function (Blueprint $table) { $table->id(); $table->string('label'); $table->timestamp('start'); $table->timestamp('end')->nullable(); $table->boolean('analyze'); }); $model = new class extends Model { protected $table = 'actions'; protected $guarded = ['id']; public $timestamps = false; }; $model->newInstance()->create([ 'label' => 'test', 'start' => '2023-01-01 00:00:00', 'end' => '2024-01-01 00:00:00', 'analyze' => true, ]); $this->assertDatabaseHas('actions', [ 'label' => 'test', 'start' => '2023-01-01 00:00:00', 'end' => '2024-01-01 00:00:00', 'analyze' => true, ]); } } class TestModel1 extends Model { public $table = 'test_model1'; public $timestamps = false; protected $guarded = []; protected $casts = ['nullable_date' => 'datetime']; } class TestModel2 extends Model { public $table = 'test_model2'; public $timestamps = false; protected $guarded = []; }