1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
<?php
namespace Illuminate\Tests\Integration\Database;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Tests\Integration\Database\Fixtures\Post;
use Orchestra\Testbench\TestCase;
/**
* @group integration
*/
class EloquentDeleteTest extends TestCase
{
protected function getEnvironmentSetUp($app)
{
$app['config']->set('app.debug', 'true');
$app['config']->set('database.default', 'testbench');
$app['config']->set('database.connections.testbench', [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
]);
}
protected function setUp(): void
{
parent::setUp();
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title')->nullable();
$table->timestamps();
});
Schema::create('comments', function (Blueprint $table) {
$table->increments('id');
$table->string('body')->nullable();
$table->integer('post_id');
$table->timestamps();
});
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->softDeletes();
});
}
public function testOnlyDeleteWhatGiven()
{
for ($i = 1; $i <= 10; $i++) {
Comment::create([
'post_id' => Post::create()->id,
]);
}
Post::latest('id')->limit(1)->delete();
$this->assertCount(9, Post::all());
Post::join('comments', 'comments.post_id', '=', 'posts.id')->where('posts.id', '>', 1)->orderBy('posts.id')->limit(1)->delete();
$this->assertCount(8, Post::all());
}
public function testForceDeletedEventIsFired()
{
$role = Role::create([]);
$this->assertInstanceOf(Role::class, $role);
Role::observe(new RoleObserver);
$role->delete();
$this->assertNull(RoleObserver::$model);
$role->forceDelete();
$this->assertEquals($role->id, RoleObserver::$model->id);
}
}
class Comment extends Model
{
public $table = 'comments';
protected $fillable = ['post_id'];
}
class Role extends Model
{
use SoftDeletes;
public $table = 'roles';
protected $guarded = [];
}
class RoleObserver
{
public static $model;
public function forceDeleted($model)
{
static::$model = $model;
}
}
|