jikan-rest/app/Testing/SyntheticMongoDbTransaction.php
2024-06-20 18:03:58 +01:00

87 lines
2.2 KiB
PHP

<?php
namespace App\Testing;
use App\JikanApiModel;
use HaydenPierce\ClassFinder\ClassFinder;
use Illuminate\Support\Facades\DB;
/**
* A trait for test cases which want to clear the database after each test
* @codeCoverageIgnore
*/
trait SyntheticMongoDbTransaction
{
private static array $jikanModels = [];
private static function getJikanModels(): array
{
if (count(self::$jikanModels) === 0)
{
self::$jikanModels = json_decode(
file_get_contents(base_path("storage/app") . "/jikan_model_classes.json")
);
}
return self::$jikanModels;
}
public function beginDatabaseTransaction(): void
{
$jikanModels = self::getJikanModels();
$tablesWithoutModels = [
"anime_characters_staff",
"anime_episodes",
"anime_episode",
"anime_forum",
"anime_moreinfo",
"anime_news",
"anime_pictures",
"anime_recommendations",
"anime_reviews",
"anime_stats",
"anime_userupdates",
"anime_videos",
"character_pictures",
"characters_pictures",
"clubs_members",
"demographics_manga",
"demographics_anime",
"manga_characters",
"manga_moreinfo",
"manga_news",
"manga_pictures",
"manga_recommendations",
"manga_reviews",
"manga_stats",
"manga_userupdates",
"people_pictures",
"reviews",
"recommendations",
"themes_anime",
"themes_manga",
"users_history",
"users_friends",
"users_recommendations",
"users_reviews",
"users_clubs"
];
foreach ($jikanModels as $jikanModel)
{
if ($jikanModel === "App\\JikanApiSearchableModel") {
continue;
}
if ($jikanModel::count() > 0)
{
$jikanModel::truncate();
}
}
foreach ($tablesWithoutModels as $tableName)
{
DB::table($tableName)->truncate();
}
}
}