mirror of
https://github.com/Bubka/2FAuth.git
synced 2024-12-26 00:50:12 +01:00
137 lines
4.9 KiB
PHP
137 lines
4.9 KiB
PHP
<?php
|
|
|
|
namespace Tests;
|
|
|
|
use Illuminate\Database\Eloquent\Collection;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
|
|
|
// https://github.com/framgia/laravel-test-examples/blob/master/tests/ModelTestCase.php
|
|
abstract class ModelTestCase extends TestCase
|
|
{
|
|
/**
|
|
* @param Model $model
|
|
* @param array $fillable
|
|
* @param array $guarded
|
|
* @param array $hidden
|
|
* @param array $visible
|
|
* @param array $casts
|
|
* @param array $dates
|
|
* @param string $collectionClass
|
|
* @param null $table
|
|
* @param string $primaryKey
|
|
* @param bool $incrementing
|
|
*
|
|
* - `$fillable` -> `getFillable()`
|
|
* - `$guarded` -> `getGuarded()`
|
|
* - `$table` -> `getTable()`
|
|
* - `$primaryKey` -> `getKeyName()`
|
|
* - `$hidden` -> `getHidden()`
|
|
* - `$visible` -> `getVisible()`
|
|
* - `$casts` -> `getCasts()`: note that method appends incrementing key.
|
|
* - `$dates` -> `getDates()`: note that method appends `[static::CREATED_AT, static::UPDATED_AT]`.
|
|
* - `newCollection()`: assert collection is exact type. Use `assertEquals` on `get_class()` result, but not `assertInstanceOf`.
|
|
*/
|
|
protected function runConfigurationAssertions(
|
|
Model $model,
|
|
$fillable = [],
|
|
$hidden = [],
|
|
$guarded = ['*'],
|
|
$visible = [],
|
|
$casts = ['id' => 'int'],
|
|
$dispatchesEvents = [],
|
|
$dates = ['created_at', 'updated_at'],
|
|
$collectionClass = Collection::class,
|
|
$table = null,
|
|
$primaryKey = 'id',
|
|
$incrementing = true)
|
|
{
|
|
$this->assertEquals($fillable, $model->getFillable());
|
|
$this->assertEquals($guarded, $model->getGuarded());
|
|
$this->assertEquals($hidden, $model->getHidden());
|
|
$this->assertEquals($visible, $model->getVisible());
|
|
$this->assertEquals($casts, $model->getCasts());
|
|
$this->assertEquals($dates, $model->getDates());
|
|
$this->assertEquals($primaryKey, $model->getKeyName());
|
|
$this->assertEquals($incrementing, $model->getIncrementing());
|
|
|
|
$eventDispatcher = $model->getEventDispatcher();
|
|
foreach ($dispatchesEvents as $eventName => $eventclass) {
|
|
$this->assertTrue($eventDispatcher->hasListeners($eventclass));
|
|
}
|
|
|
|
$c = $model->newCollection();
|
|
$this->assertEquals($collectionClass, get_class($c));
|
|
$this->assertInstanceOf(Collection::class, $c);
|
|
|
|
if ($table !== null) {
|
|
$this->assertEquals($table, $model->getTable());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param HasMany $relation
|
|
* @param Model $model
|
|
* @param Model $related
|
|
* @param string $key
|
|
* @param string $parent
|
|
* @param \Closure $queryCheck
|
|
*
|
|
* - `getQuery()`: assert query has not been modified or modified properly.
|
|
* - `getForeignKey()`: any `HasOneOrMany` or `BelongsTo` relation, but key type differs (see documentaiton).
|
|
* - `getQualifiedParentKeyName()`: in case of `HasOneOrMany` relation, there is no `getLocalKey()` method, so this one should be asserted.
|
|
*/
|
|
protected function assertHasManyRelation($relation, Model $model, Model $related, $key = null, $parent = null, \Closure $queryCheck = null)
|
|
{
|
|
$this->assertInstanceOf(HasMany::class, $relation);
|
|
|
|
if (! is_null($queryCheck)) {
|
|
$queryCheck->bindTo($this);
|
|
$queryCheck($relation->getQuery(), $model, $relation);
|
|
}
|
|
|
|
if (is_null($key)) {
|
|
$key = $model->getForeignKey();
|
|
}
|
|
|
|
$this->assertEquals($key, $relation->getForeignKeyName());
|
|
|
|
if (is_null($parent)) {
|
|
$parent = $model->getKeyName();
|
|
}
|
|
|
|
$this->assertEquals($model->getTable() . '.' . $parent, $relation->getQualifiedParentKeyName());
|
|
}
|
|
|
|
/**
|
|
* @param BelongsTo $relation
|
|
* @param Model $model
|
|
* @param Model $related
|
|
* @param string $key
|
|
* @param string $owner
|
|
* @param \Closure $queryCheck
|
|
*
|
|
* - `getQuery()`: assert query has not been modified or modified properly.
|
|
* - `getForeignKey()`: any `HasOneOrMany` or `BelongsTo` relation, but key type differs (see documentaiton).
|
|
* - `getOwnerKey()`: `BelongsTo` relation and its extendings.
|
|
*/
|
|
protected function assertBelongsToRelation($relation, Model $model, Model $related, $key, $owner = null, \Closure $queryCheck = null)
|
|
{
|
|
$this->assertInstanceOf(BelongsTo::class, $relation);
|
|
|
|
if (! is_null($queryCheck)) {
|
|
$queryCheck->bindTo($this);
|
|
$queryCheck($relation->getQuery(), $model, $relation);
|
|
}
|
|
|
|
$this->assertEquals($key, $relation->getForeignKey());
|
|
|
|
if (is_null($owner)) {
|
|
$owner = $related->getKeyName();
|
|
}
|
|
|
|
$this->assertEquals($owner, $relation->getOwnerKey());
|
|
}
|
|
}
|