data = $data; $this->database = $database; } /** * Check if the data is found in the given table. * * @param string $table * @return bool */ public function matches($table) { return $this->database->table($table)->where($this->data)->count() > 0; } /** * Get the description of the failure. * * @param string $table * @return string */ public function failureDescription($table) { return sprintf( "a row in the table [%s] matches the attributes %s.\n\n%s", $table, $this->toString(JSON_PRETTY_PRINT), $this->getAdditionalInfo($table) ); } /** * Get additional info about the records found in the database table. * * @param string $table * @return string */ protected function getAdditionalInfo($table) { $results = $this->database->table($table)->get(); if ($results->isEmpty()) { return 'The table is empty'; } $description = 'Found: '.json_encode($results->take($this->show), JSON_PRETTY_PRINT); if ($results->count() > $this->show) { $description .= sprintf(' and %s others', $results->count() - $this->show); } return $description; } /** * Get a string representation of the object. * * @param int $options * @return string */ public function toString($options = 0) { return json_encode($this->data, $options); } }