fix: removed null values from backfill anime responses (#729)

This commit is contained in:
Kyrch authored and GitHub committed 2024-08-20 23:21:48 -03:00
1 parent cab98d822c
commit d8a673bb74
14 files changed
+256 -80

No files matched your search

+1 -1
View File
@@ -24,4 +24,4 @@ Please review the [**Contributing Guide**](https://github.com/AnimeThemes/animet
## Resources
Please make use of the #development channel in the [**Discord Server**](https://discordapp.com/invite/m9zbVyQ) for questions pertaining to the AnimeThemes database or API.
Please make use of the #api channel in the [**Discord Server**](https://discordapp.com/invite/m9zbVyQ) for questions pertaining to the AnimeThemes database or API.
+6 -2
View File
@@ -55,7 +55,9 @@ abstract class ApiAction
if ($this->response) {
foreach ($this->getResourcesMapping() as $site => $key) {
$resources[$site] = Arr::get($this->response, $key);
if (Arr::get($this->response, $key) !== null) {
$resources[$site] = Arr::get($this->response, $key);
}
}
}
@@ -73,7 +75,9 @@ abstract class ApiAction
if ($this->response) {
foreach ($this->getImagesMapping() as $facet => $key) {
$images[$facet] = Arr::get($this->response, $key);
if (Arr::get($this->response, $key) !== null) {
$images[$facet] = Arr::get($this->response, $key);
}
}
}
@@ -71,7 +71,6 @@ class BackfillAnimeAction extends BackfillWikiAction
$this->forStudios($response);
$this->forSynonyms($response);
Log::info("Commit try for api {$api->getSite()->localize()}");
DB::commit();
}
} catch (Exception $e) {
@@ -127,7 +126,9 @@ class BackfillAnimeAction extends BackfillWikiAction
$this->ensureStudioHasResource($studio, $response->getSite(), $id);
}
$this->toBackfill[self::STUDIOS] = false;
if ($this->getModel()->studios()->exists()) {
$this->toBackfill[self::STUDIOS] = false;
}
}
/**
@@ -141,10 +142,12 @@ class BackfillAnimeAction extends BackfillWikiAction
if (!$this->toBackfill[self::SYNONYMS]) return;
foreach ($api->getSynonyms() as $type => $text) {
$this->createAnimeSynonym($text, $type, $this->getModel());
$this->createAnimeSynonym($text, $type, $this->getModel());
}
$this->toBackfill[self::SYNONYMS] = false;
if ($this->getModel()->animesynonyms()->exists()) {
$this->toBackfill[self::SYNONYMS] = false;
}
}
/**
@@ -35,7 +35,7 @@ trait CanCreateExternalResource
if (preg_match($urlPattern, $url, $matches)) {
$url = $site->formatResourceLink($model::class, intval($matches[2]), $matches[2], $matches[1]);
}
if ($id !== null) {
$url = $site->formatResourceLink($model::class, intval($id), $id);
}
+5 -5
View File
@@ -68,7 +68,7 @@ enum ResourceSite: int
ResourceSite::ANILIST->value => 'anilist.co',
ResourceSite::ANIME_PLANET->value => 'www.anime-planet.com',
ResourceSite::ANN->value => 'www.animenewsnetwork.com',
ResourceSite::KITSU->value => 'kitsu.io',
ResourceSite::KITSU->value => 'kitsu.app',
ResourceSite::LIVECHART->value => 'www.livechart.me',
ResourceSite::MAL->value => 'myanimelist.net',
ResourceSite::WIKI->value => 'wikipedia.org',
@@ -166,7 +166,7 @@ enum ResourceSite: int
protected static function parseKitsuIdFromLink(string $link): ?string
{
try {
if ($id = Str::match('/^https?:\/\/kitsu\.io\/anime\/(\d+)/', $link)) {
if ($id = Str::match('/^https?:\/\/kitsu\.app\/anime\/(\d+)/', $link)) {
return $id;
}
@@ -280,7 +280,7 @@ enum ResourceSite: int
ResourceSite::ANILIST => "https://anilist.co/anime/$id",
ResourceSite::ANIME_PLANET => "https://www.anime-planet.com/anime/$slug",
ResourceSite::ANN => "https://www.animenewsnetwork.com/encyclopedia/anime.php?id=$id",
ResourceSite::KITSU => "https://kitsu.io/anime/$id",
ResourceSite::KITSU => "https://kitsu.app/anime/$id",
ResourceSite::LIVECHART => "https://www.livechart.me/anime/$id",
ResourceSite::MAL => "https://myanimelist.net/anime/$id",
ResourceSite::YOUTUBE => "https://www.youtube.com/@$slug",
@@ -351,7 +351,7 @@ enum ResourceSite: int
ResourceSite::ANILIST => '/^https:\/\/anilist\.co\/(anime)\/(\d+)$/',
ResourceSite::ANIME_PLANET => '/^https:\/\/www\.anime-planet\.com\/(anime)\/([a-zA-Z0-9-]+)$/',
ResourceSite::ANN => '/^https:\/\/www\.animenewsnetwork\.com\/encyclopedia\/(anime)\.php\?id=(\d+)$/',
ResourceSite::KITSU => '/^https:\/\/kitsu\.io\/(anime)\/([a-zA-Z0-9-]+)$/',
ResourceSite::KITSU => '/^https:\/\/kitsu\.app\/(anime)\/([a-zA-Z0-9-]+)$/',
ResourceSite::LIVECHART => '/^https:\/\/www\.livechart\.me\/(anime)\/(\d+)$/',
ResourceSite::MAL => '/^https:\/\/myanimelist\.net\/(anime)\/(\d+)$/',
ResourceSite::YOUTUBE => '/^https:\/\/www\.(youtube)\.com\/\@([\w-]+)$/',
@@ -423,7 +423,7 @@ enum ResourceSite: int
ResourceSite::ANILIST => '/^https:\/\/anilist\.co\/anime\/\d+$/',
ResourceSite::ANIME_PLANET => '/^https:\/\/www\.anime-planet\.com\/anime\/[a-zA-Z0-9-]+$/',
ResourceSite::ANN => '/^https:\/\/www\.animenewsnetwork\.com\/encyclopedia\/anime\.php\?id=\d+$/',
ResourceSite::KITSU => '/^https:\/\/kitsu\.io\/anime\/[a-zA-Z0-9-]+$/',
ResourceSite::KITSU => '/^https:\/\/kitsu\.app\/anime\/[a-zA-Z0-9-]+$/',
ResourceSite::LIVECHART => '/^https:\/\/www\.livechart\.me\/anime\/\d+$/',
ResourceSite::MAL => '/^https:\/\/myanimelist\.net\/anime\/\d+$/',
ResourceSite::YOUTUBE => '/^https:\/\/www\.youtube\.com\/\@[\w-]+$/',
@@ -27,6 +27,7 @@ class TextEntry extends ComponentsTextEntry
public function urlToRelated(string $resourceRelated, string $relation, ?bool $shouldUseName = false): static
{
return $this
->placeholder('-')
->weight(FontWeight::SemiBold)
->html()
->url(function (BaseModel|Model $record) use ($resourceRelated, $relation, $shouldUseName) {
+11 -8
View File
@@ -24,8 +24,10 @@ use App\Models\Wiki\Anime\Theme\AnimeThemeEntry as EntryModel;
use App\Models\Wiki\Video;
use App\Pivots\Wiki\AnimeThemeEntryVideo;
use App\Rules\Admin\StartDateBeforeEndDateRule;
use Filament\Forms\Components\Hidden;
use Filament\Forms\Form;
use Filament\Forms\Get;
use Filament\Forms\Set;
use Filament\Infolists\Components\Section;
use Filament\Infolists\Infolist;
use Filament\Resources\RelationManagers\RelationGroup;
@@ -132,14 +134,16 @@ class FeaturedTheme extends BaseResource
'regex:/^\d{2}\/\d{2}\/\d{4} - \d{2}\/\d{2}\/\d{4}$/',
new StartDateBeforeEndDateRule(),
])
->saveRelationshipsBeforeChildrenUsing(function (FeaturedThemeModel $record, string $state) {
->live(true)
->afterStateUpdated(function (string $state, Set $set) {
$dates = explode(' - ', $state);
$record->start_at = Carbon::createFromFormat('m/d/Y', $dates[0]);
$record->end_at = Carbon::createFromFormat('m/d/Y', $dates[1]);
$record->save();
$set(FeaturedThemeModel::ATTRIBUTE_START_AT, Carbon::createFromFormat('m/d/Y', $dates[0]));
$set(FeaturedThemeModel::ATTRIBUTE_END_AT, Carbon::createFromFormat('m/d/Y', $dates[1]));
}),
Hidden::make(FeaturedThemeModel::ATTRIBUTE_START_AT),
Hidden::make(FeaturedThemeModel::ATTRIBUTE_END_AT),
BelongsTo::make(FeaturedThemeModel::ATTRIBUTE_ENTRY)
->resource(EntryResource::class)
->live(true)
@@ -259,11 +263,10 @@ class FeaturedTheme extends BaseResource
->placeholder('-')
->urlToRelated(VideoResource::class, FeaturedThemeModel::RELATION_VIDEO),
TextEntry::make(FeaturedThemeModel::RELATION_ENTRY.'.'.EntryModel::ATTRIBUTE_ID)
TextEntry::make(FeaturedThemeModel::RELATION_ENTRY)
->label(__('filament.resources.singularLabel.anime_theme_entry'))
->placeholder('-')
->formatStateUsing(fn (string $state) => EntryModel::find(intval($state))->load(EntryModel::RELATION_ANIME)->getName())
->urlToRelated(EntryResource::class, FeaturedThemeModel::RELATION_ENTRY),
->urlToRelated(EntryResource::class, FeaturedThemeModel::RELATION_ENTRY, true),
TextEntry::make(FeaturedThemeModel::RELATION_USER.'.'.User::ATTRIBUTE_NAME)
->label(__('filament.resources.singularLabel.user'))
@@ -259,6 +259,10 @@ class Track extends BaseResource
TextEntry::make(TrackModel::ATTRIBUTE_ID)
->label(__('filament.fields.base.id')),
TextEntry::make(TrackModel::RELATION_ENTRY)
->label(__('filament.resources.singularLabel.anime_theme_entry'))
->urlToRelated(Entry::class, TrackModel::RELATION_ENTRY, true),
TextEntry::make(TrackModel::RELATION_VIDEO . '.' . VideoModel::ATTRIBUTE_FILENAME)
->label(__('filament.resources.singularLabel.video'))
->urlToRelated(VideoResource::class, TrackModel::RELATION_VIDEO),
@@ -58,6 +58,11 @@ class TrackSchema extends EloquentSchema
new AllowedInclude(new TrackSchema(), PlaylistTrack::RELATION_NEXT),
new AllowedInclude(new TrackSchema(), PlaylistTrack::RELATION_PREVIOUS),
new AllowedInclude(new VideoSchema(), PlaylistTrack::RELATION_VIDEO),
// TODO: These should be removed after client work
new AllowedInclude(new ArtistSchema(), 'video.animethemeentries.animetheme.song.artists'),
new AllowedInclude(new GroupSchema(), 'video.animethemeentries.animetheme.group'),
new AllowedInclude(new ImageSchema(), 'video.animethemeentries.animetheme.anime.images'),
];
}
@@ -67,6 +67,11 @@ class PlaylistSchema extends EloquentSchema implements SearchableSchema
new AllowedInclude(new GroupSchema(), 'tracks.animethemeentry.animetheme.group'),
new AllowedInclude(new TrackSchema(), 'tracks.previous'),
new AllowedInclude(new TrackSchema(), 'tracks.next'),
// TODO: These should be removed after client work
new AllowedInclude(new ArtistSchema(), 'tracks.video.animethemeentries.animetheme.song.artists'),
new AllowedInclude(new ImageSchema(), 'tracks.video.animethemeentries.animetheme.anime.images'),
new AllowedInclude(new GroupSchema(), 'tracks.video.animethemeentries.animetheme.group'),
];
}
+6 -12
View File
@@ -65,21 +65,15 @@ class PlaylistFactory extends Factory
/** @var PlaylistTrack|null $last */
$last = Arr::last($tracks);
$entry = AnimeThemeEntry::factory()
->for(AnimeTheme::factory()->for(Anime::factory()))
->create();
$video = Video::factory()->create();
AnimeThemeEntryVideo::query()->create([
AnimeThemeEntryVideo::ATTRIBUTE_ENTRY => $entry->getKey(),
AnimeThemeEntryVideo::ATTRIBUTE_VIDEO => $video->getKey(),
]);
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$track = PlaylistTrack::factory()
->for($playlist)
->for($video)
->for($entry)
->for($entryVideo->video)
->for($entryVideo->animethemeentry)
->createOne();
if ($index === 1) {
@@ -1,34 +0,0 @@
<?php
declare(strict_types=1);
namespace Database\Seeders;
use App\Actions\Models\List\ExternalProfile\StoreExternalProfileAction;
use App\Models\List\ExternalProfile;
use Illuminate\Database\Seeder;
/**
* Class SimulateExternalProfileSeeder.
*/
class SimulateExternalProfileSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run(): void
{
$action = new StoreExternalProfileAction();
$validated = [
'name' => 'MiltonXerox',
'site' => 'AniList',
'visibility' => 'Public',
'user_id' => 1,
];
$action->store(ExternalProfile::query(), $validated);
}
}
@@ -0,0 +1,29 @@
<?php
declare(strict_types=1);
namespace Database\Seeder\Wiki;
use App\Models\Wiki\ExternalResource;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
/**
* Class KitsuResourceSeeder.
*/
class KitsuResourceSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run(): void
{
ExternalResource::query()
->where(ExternalResource::ATTRIBUTE_LINK, 'like', 'https://kitsu.io/%')
->update([
ExternalResource::ATTRIBUTE_LINK => DB::raw("REPLACE(link, 'https://kitsu.io/', 'https://kitsu.app/')")
]);
}
}
@@ -13,7 +13,11 @@ use App\Features\AllowPlaylistManagement;
use App\Models\Auth\User;
use App\Models\List\Playlist;
use App\Models\List\Playlist\PlaylistTrack;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Video;
use App\Pivots\Wiki\AnimeThemeEntryVideo;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Event;
@@ -39,10 +43,17 @@ class TrackStoreTest extends TestCase
Feature::activate(AllowPlaylistManagement::class);
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$playlist = Playlist::factory()->createOne();
$track = PlaylistTrack::factory()
->for($playlist)
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne();
$response = $this->post(route('api.playlist.track.store', ['playlist' => $playlist] + $track->toArray()));
@@ -61,10 +72,17 @@ class TrackStoreTest extends TestCase
Feature::activate(AllowPlaylistManagement::class);
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$playlist = Playlist::factory()->createOne();
$track = PlaylistTrack::factory()
->for($playlist)
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne();
$user = User::factory()->createOne();
@@ -87,12 +105,19 @@ class TrackStoreTest extends TestCase
Feature::activate(AllowPlaylistManagement::class);
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$playlist = Playlist::factory()
->for(User::factory())
->createOne();
$track = PlaylistTrack::factory()
->for($playlist)
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne();
$user = User::factory()->withPermissions(CrudPermission::CREATE->format(PlaylistTrack::class))->createOne();
@@ -118,13 +143,19 @@ class TrackStoreTest extends TestCase
$user = User::factory()->withPermissions(CrudPermission::CREATE->format(PlaylistTrack::class))->createOne();
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$playlist = Playlist::factory()
->for($user)
->createOne();
$track = PlaylistTrack::factory()
->for($playlist)
->for(Video::factory())
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne();
Sanctum::actingAs($user);
@@ -135,7 +166,7 @@ class TrackStoreTest extends TestCase
}
/**
* The Track Store Endpoint shall require the video field.
* The Track Store Endpoint shall require the entry & video field.
*
* @return void
*/
@@ -156,6 +187,43 @@ class TrackStoreTest extends TestCase
$response = $this->post(route('api.playlist.track.store', ['playlist' => $playlist]));
$response->assertJsonValidationErrors([
PlaylistTrack::ATTRIBUTE_ENTRY,
PlaylistTrack::ATTRIBUTE_VIDEO,
]);
}
/**
* The Playlist Track Store Endpoint shall require the entry and video to have an association.
*
* @return void
*/
public function testAnimeThemeEntryVideoExists(): void
{
$entry = AnimeThemeEntry::factory()
->for(AnimeTheme::factory()->for(Anime::factory()))
->create();
$video = Video::factory()->create();
$user = User::factory()->withPermissions(CrudPermission::CREATE->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
->createOne();
$track = PlaylistTrack::factory()
->for($playlist)
->makeOne([
PlaylistTrack::ATTRIBUTE_ENTRY => $entry->getKey(),
PlaylistTrack::ATTRIBUTE_VIDEO => $video->getKey(),
]);
Sanctum::actingAs($user);
$response = $this->post(route('api.playlist.track.store', ['playlist' => $playlist] + $track->toArray()));
$response->assertJsonValidationErrors([
PlaylistTrack::ATTRIBUTE_ENTRY,
PlaylistTrack::ATTRIBUTE_VIDEO,
]);
}
@@ -173,21 +241,41 @@ class TrackStoreTest extends TestCase
$user = User::factory()->withPermissions(CrudPermission::CREATE->format(PlaylistTrack::class))->createOne();
$entryVideoPrevious = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$entryVideoNext = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$playlist = Playlist::factory()
->for($user)
->createOne();
$previous = PlaylistTrack::factory()
->for($playlist)
->for($entryVideoPrevious->animethemeentry)
->for($entryVideoPrevious->video)
->createOne();
$next = PlaylistTrack::factory()
->for($playlist)
->for($entryVideoNext->animethemeentry)
->for($entryVideoNext->video)
->createOne();
$track = PlaylistTrack::factory()
->for($playlist)
->for(Video::factory())
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne([
PlaylistTrack::RELATION_PREVIOUS => $previous->getRouteKey(),
PlaylistTrack::RELATION_NEXT => $next->getRouteKey(),
@@ -216,18 +304,31 @@ class TrackStoreTest extends TestCase
$user = User::factory()->withPermissions(CrudPermission::CREATE->format(PlaylistTrack::class))->createOne();
$entryVideoNext = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$playlist = Playlist::factory()
->for($user)
->createOne();
$next = PlaylistTrack::factory()
->for(Playlist::factory())
->for($entryVideoNext->animethemeentry)
->for($entryVideoNext->video)
->createOne();
$track = PlaylistTrack::factory()
->for($playlist)
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne([
PlaylistTrack::ATTRIBUTE_VIDEO => Video::factory()->createOne()->getKey(),
PlaylistTrack::RELATION_NEXT => $next->getRouteKey(),
]);
@@ -253,18 +354,31 @@ class TrackStoreTest extends TestCase
$user = User::factory()->withPermissions(CrudPermission::CREATE->format(PlaylistTrack::class))->createOne();
$entryVideoPrevious = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$playlist = Playlist::factory()
->for($user)
->createOne();
$previous = PlaylistTrack::factory()
->for(Playlist::factory())
->for($entryVideoPrevious->animethemeentry)
->for($entryVideoPrevious->video)
->createOne();
$track = PlaylistTrack::factory()
->for($playlist)
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne([
PlaylistTrack::ATTRIBUTE_VIDEO => Video::factory()->createOne()->getKey(),
PlaylistTrack::RELATION_PREVIOUS => $previous->getRouteKey(),
]);
@@ -290,13 +404,19 @@ class TrackStoreTest extends TestCase
$user = User::factory()->withPermissions(CrudPermission::CREATE->format(PlaylistTrack::class))->createOne();
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$playlist = Playlist::factory()
->for($user)
->createOne();
$track = PlaylistTrack::factory()
->for($playlist)
->for(Video::factory())
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne();
Sanctum::actingAs($user);
@@ -327,6 +447,11 @@ class TrackStoreTest extends TestCase
$user = User::factory()->withPermissions(CrudPermission::CREATE->format(PlaylistTrack::class))->createOne();
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$trackCount = $this->faker->numberBetween(2, 9);
$playlist = Playlist::factory()
@@ -338,7 +463,8 @@ class TrackStoreTest extends TestCase
$track = PlaylistTrack::factory()
->for($playlist)
->for(Video::factory())
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne([
PlaylistTrack::RELATION_PREVIOUS => $last->getRouteKey(),
]);
@@ -377,6 +503,11 @@ class TrackStoreTest extends TestCase
$user = User::factory()->withPermissions(CrudPermission::CREATE->format(PlaylistTrack::class))->createOne();
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$trackCount = $this->faker->numberBetween(2, 9);
$playlist = Playlist::factory()
@@ -389,7 +520,8 @@ class TrackStoreTest extends TestCase
$track = PlaylistTrack::factory()
->for($playlist)
->for(Video::factory())
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne([
PlaylistTrack::RELATION_PREVIOUS => $first->getRouteKey(),
]);
@@ -428,6 +560,11 @@ class TrackStoreTest extends TestCase
$user = User::factory()->withPermissions(CrudPermission::CREATE->format(PlaylistTrack::class))->createOne();
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$trackCount = $this->faker->numberBetween(2, 9);
$playlist = Playlist::factory()
@@ -440,7 +577,8 @@ class TrackStoreTest extends TestCase
$track = PlaylistTrack::factory()
->for($playlist)
->for(Video::factory())
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne([
PlaylistTrack::RELATION_NEXT => $last->getRouteKey(),
]);
@@ -479,6 +617,11 @@ class TrackStoreTest extends TestCase
$user = User::factory()->withPermissions(CrudPermission::CREATE->format(PlaylistTrack::class))->createOne();
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$trackCount = $this->faker->numberBetween(2, 9);
$playlist = Playlist::factory()
@@ -490,7 +633,8 @@ class TrackStoreTest extends TestCase
$track = PlaylistTrack::factory()
->for($playlist)
->for(Video::factory())
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne([
PlaylistTrack::RELATION_NEXT => $first->getRouteKey(),
]);
@@ -533,13 +677,19 @@ class TrackStoreTest extends TestCase
)
->createOne();
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$playlist = Playlist::factory()
->for($user)
->createOne();
$track = PlaylistTrack::factory()
->for($playlist)
->for(Video::factory())
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne();
Sanctum::actingAs($user);
@@ -565,6 +715,11 @@ class TrackStoreTest extends TestCase
$user = User::factory()->withPermissions(CrudPermission::CREATE->format(PlaylistTrack::class))->createOne();
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$playlist = Playlist::factory()
->tracks($trackLimit)
->for($user)
@@ -572,7 +727,8 @@ class TrackStoreTest extends TestCase
$track = PlaylistTrack::factory()
->for($playlist)
->for(Video::factory())
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne();
Sanctum::actingAs($user);
@@ -604,6 +760,11 @@ class TrackStoreTest extends TestCase
)
->createOne();
$entryVideo = AnimeThemeEntryVideo::factory()
->for(AnimeThemeEntry::factory()->for(AnimeTheme::factory()->for(Anime::factory())))
->for(Video::factory())
->createOne();
$playlist = Playlist::factory()
->tracks($trackLimit)
->for($user)
@@ -611,7 +772,8 @@ class TrackStoreTest extends TestCase
$track = PlaylistTrack::factory()
->for($playlist)
->for(Video::factory())
->for($entryVideo->animethemeentry)
->for($entryVideo->video)
->makeOne();
Sanctum::actingAs($user);