1
0
Fork 0
mirror of https://github.com/archtechx/virtualcolumn.git synced 2025-12-12 06:44:05 +00:00

Merge pull request #24 from archtechx/fix-tests

Include timestamps in `getCustomColumns()` by default, fix tests (use new #[Test] attribute)
This commit is contained in:
Samuel Štancl 2025-12-06 16:41:58 +01:00 committed by GitHub
commit 4664d00099
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 61 additions and 5 deletions

View file

@ -182,6 +182,8 @@ trait VirtualColumn
{ {
return [ return [
'id', 'id',
static::CREATED_AT,
static::UPDATED_AT,
]; ];
} }

View file

@ -8,6 +8,7 @@ use Illuminate\Support\Facades\Crypt;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Stancl\VirtualColumn\VirtualColumn; use Stancl\VirtualColumn\VirtualColumn;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes; use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use PHPUnit\Framework\Attributes\Test;
class VirtualColumnTest extends TestCase class VirtualColumnTest extends TestCase
{ {
@ -18,7 +19,7 @@ class VirtualColumnTest extends TestCase
$this->loadMigrationsFrom(__DIR__ . '/etc/migrations'); $this->loadMigrationsFrom(__DIR__ . '/etc/migrations');
} }
/** @test */ #[Test]
public function keys_which_dont_have_their_own_column_go_into_data_json_column() public function keys_which_dont_have_their_own_column_go_into_data_json_column()
{ {
$model = MyModel::create([ $model = MyModel::create([
@ -59,7 +60,7 @@ class VirtualColumnTest extends TestCase
$this->assertSame(null, $model->data); $this->assertSame(null, $model->data);
} }
/** @test */ #[Test]
public function model_is_always_decoded_when_accessed_by_user_event() public function model_is_always_decoded_when_accessed_by_user_event()
{ {
MyModel::retrieved(function (MyModel $model) { MyModel::retrieved(function (MyModel $model) {
@ -90,7 +91,7 @@ class VirtualColumnTest extends TestCase
MyModel::first(); MyModel::first();
} }
/** @test */ #[Test]
public function column_names_are_generated_correctly() public function column_names_are_generated_correctly()
{ {
// FooModel's virtual data column name is 'virtual' // FooModel's virtual data column name is 'virtual'
@ -107,7 +108,7 @@ class VirtualColumnTest extends TestCase
$this->assertSame($virtualColumnName, $model->getColumnForQuery('foo')); $this->assertSame($virtualColumnName, $model->getColumnForQuery('foo'));
} }
/** @test */ #[Test]
public function models_extending_a_parent_model_using_virtualcolumn_get_encoded_correctly() public function models_extending_a_parent_model_using_virtualcolumn_get_encoded_correctly()
{ {
// Create a model that extends a parent model using VirtualColumn // Create a model that extends a parent model using VirtualColumn
@ -130,7 +131,7 @@ class VirtualColumnTest extends TestCase
// maybe add an explicit test that the saving() and updating() listeners don't run twice? // maybe add an explicit test that the saving() and updating() listeners don't run twice?
/** @test */ #[Test]
public function encrypted_casts_work_with_virtual_column() { public function encrypted_casts_work_with_virtual_column() {
// Custom encrypted castables have to be specified in the $customEncryptedCastables static property // Custom encrypted castables have to be specified in the $customEncryptedCastables static property
MyModel::$customEncryptedCastables = [EncryptedCast::class]; MyModel::$customEncryptedCastables = [EncryptedCast::class];
@ -165,6 +166,29 @@ class VirtualColumnTest extends TestCase
// Reset static property // Reset static property
MyModel::$customEncryptedCastables = []; MyModel::$customEncryptedCastables = [];
} }
#[Test]
public function updating_model_does_not_store_timestamps_in_the_virtual_column() {
/** @var TimestampModel $model */
$model = TimestampModel::create();
$dbRecordDataColumn = fn () => DB::selectOne('select * from timestamp_models where id = ?', [$model->id])->data;
$this->assertStringNotContainsString('created_at', $dbRecordDataColumn());
$this->assertStringNotContainsString('updated_at', $dbRecordDataColumn());
$model->update(['data' => ['virtual' => 'bar']]);
$this->assertStringNotContainsString('created_at', $dbRecordDataColumn());
$this->assertStringNotContainsString('updated_at', $dbRecordDataColumn());
}
}
class TimestampModel extends Model
{
use VirtualColumn;
public $timestamps = true;
protected $guarded = [];
} }
class ParentModel extends Model class ParentModel extends Model

View file

@ -0,0 +1,30 @@
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTimestampModelsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('timestamp_models', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->json('data');
});
}
public function down()
{
Schema::dropIfExists('timestamp_models');
}
}