word(); $validator = Validator::make( [$attribute => fake()->url()], [$attribute => new ArtistResourceLinkFormatRule(ResourceSite::DISNEY_PLUS)], ); $this->assertFalse($validator->passes()); }); test('passes for pattern', function (): void { /** @var ResourceSite $site */ $site = Arr::random(ResourceSite::getForModel(Artist::class)); $url = $site->formatResourceLink(Artist::class, fake()->randomDigitNotNull(), fake()->word(), 'null'); $attribute = fake()->word(); $validator = Validator::make( [$attribute => $url], [$attribute => new ArtistResourceLinkFormatRule($site)], ); $this->assertTrue($validator->passes()); }); test('fails for trailing slash', function (): void { /** @var ResourceSite $site */ $site = Arr::random(ResourceSite::getForModel(Artist::class)); $url = $site->formatResourceLink(Artist::class, fake()->randomDigitNotNull(), fake()->word()); $url = Str::of($url) ->append('/') ->__toString(); $attribute = fake()->word(); $validator = Validator::make( [$attribute => $url], [$attribute => new ArtistResourceLinkFormatRule($site)], ); $this->assertFalse($site->getPattern(Artist::class) && $validator->passes()); }); test('fails for trailing slug', function (): void { /** @var ResourceSite $site */ $site = Arr::random(ResourceSite::getForModel(Artist::class)); $url = $site->formatResourceLink(Artist::class, fake()->randomDigitNotNull(), fake()->word()); $url = Str::of($url) ->append('/') ->append(fake()->word()) ->__toString(); $attribute = fake()->word(); $validator = Validator::make( [$attribute => $url], [$attribute => new ArtistResourceLinkFormatRule($site)], ); $this->assertFalse($site->getPattern(Artist::class) && $validator->passes()); }); test('fails for other resources', function (): void { /** @var ResourceSite $site */ $site = Arr::random( array_filter( ResourceSite::cases(), fn (ResourceSite $value): bool => ! in_array($value, ResourceSite::getForModel(Artist::class)) ) ); $url = $site->formatResourceLink(Artist::class, fake()->randomDigitNotNull(), fake()->word()); $attribute = fake()->word(); $validator = Validator::make( [$attribute => $url], [$attribute => new ArtistResourceLinkFormatRule($site)], ); $this->assertFalse($validator->passes()); });