NotSoftDeletedInDatabase.php
TLDR
This file contains a class called NotSoftDeletedInDatabase
that extends the Constraint
class from the PHPUnit framework. The class is used to check if a given set of data exists in a database table and is not marked as soft deleted.
Classes
NotSoftDeletedInDatabase
This class represents a constraint for checking if a set of data exists in a database table and is not marked as soft deleted. It has the following properties:
-
show
(int): Number of records that will be shown in the console in case of failure. -
database
(Connection): The database connection. -
data
(array): The data that will be used to narrow the search in the database table. -
deletedAtColumn
(string): The name of the column that indicates soft deletion has occurred.
The class has the following methods:
-
__construct(Connection $database, array $data, string $deletedAtColumn)
: Initializes the constraint with the given database connection, data, and deletedAtColumn. -
matches(string $table): bool
: Checks if the data is found in the given table and is not soft deleted. -
failureDescription(string $table): string
: Gets the description of the failure when the constraint does not match. -
getAdditionalInfo(string $table): string
: Gets additional information about the records found in the database table. -
toString(): string
: Gets a string representation of the data used in the constraint.
<?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);
}
}