Viewing file: NotSoftDeletedInDatabase.php (2.67 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Illuminate\Testing\Constraints;
use Illuminate\Database\Connection; use PHPUnit\Framework\Constraint\Constraint;
class NotSoftDeletedInDatabase extends Constraint { /** * Number of records that will be shown in the console in case of failure. * * @var int */ protected $show = 3;
/** * The database connection. * * @var \Illuminate\Database\Connection */ protected $database;
/** * The data that will be used to narrow the search in the database table. * * @var array */ protected $data;
/** * The name of the column that indicates soft deletion has occurred. * * @var string */ protected $deletedAtColumn;
/** * Create a new constraint instance. * * @param \Illuminate\Database\Connection $database * @param array $data * @param string $deletedAtColumn * @return void */ public function __construct(Connection $database, array $data, string $deletedAtColumn) { $this->database = $database; $this->data = $data; $this->deletedAtColumn = $deletedAtColumn; }
/** * Check if the data is found in the given table. * * @param string $table * @return bool */ public function matches($table): bool { return $this->database->table($table) ->where($this->data) ->whereNull($this->deletedAtColumn) ->count() > 0; }
/** * Get the description of the failure. * * @param string $table * @return string */ public function failureDescription($table): string { return sprintf( "any existing row in the table [%s] matches the attributes %s.\n\n%s", $table, $this->toString(), $this->getAdditionalInfo($table) ); }
/** * Get additional info about the records found in the database table. * * @param string $table * @return string */ protected function getAdditionalInfo($table) { $query = $this->database->table($table);
$results = $query->limit($this->show)->get();
if ($results->isEmpty()) { return 'The table is empty'; }
$description = 'Found: '.json_encode($results, JSON_PRETTY_PRINT);
if ($query->count() > $this->show) { $description .= sprintf(' and %s others', $query->count() - $this->show); }
return $description; }
/** * Get a string representation of the object. * * @return string */ public function toString(): string { return json_encode($this->data); } }
|