mirror of
https://github.com/AnimeThemes/animethemes-server.git
synced 2026-10-22 10:39:19 +02:00
fix: removed null values from backfill anime responses (#729)
This commit is contained in:
1 parent
cab98d822c
commit
d8a673bb74
14 files changed
+256
-80
No files matched your search
@@ -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.
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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'),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user