Skip to content

Commit 26e0cbc

Browse files
authored
feat: validation rules for tiktok, opensea and looksrare (#466)
1 parent ae92dd6 commit 26e0cbc

File tree

5 files changed

+92
-0
lines changed

5 files changed

+92
-0
lines changed

config/rules.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
'twitter' => '/(?:https?:)\/\/(?:www\.)?twitter\.com\/(#!\/)?(?<username>[a-zA-Z0-9-_@]+)+/m',
2323
'weibo' => '/(?:https?:)\/\/(?:[a-zA-Z0-9-_@]+\.)?weibo\.(com)\/[a-zA-Z0-9]+/m',
2424
'youtube' => '/(?:https?:)\/\/((?:www|m)\.)?((?:youtube\.(com?|[a-z]*)(?:\.[a-zA-z]{2})?|youtu.be))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\\\\-]+)(.*)?$/m',
25+
'tiktok' => '/(?:https?:)\/\/(?:www\.)?tiktok\.com\/(#!\/)?(?<username>@[a-zA-Z0-9_.]+)+/m',
26+
'opensea' => '/(?:https?:)\/\/(?:www\.)?opensea\.io\/(#!\/)?(?:collection\/)?(?<username>[a-zA-Z0-9-_]+)+/m',
27+
'looksrare' => '/(?:https?:)\/\/(?:www\.)?looksrare\.org\/(#!\/)?(?:(?:(?:collections)|(?:accounts))\/)(?<username>[a-zA-Z0-9]+)+/m',
2528
],
2629

2730
'social_media_name' => [

resources/lang/en/validation.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,5 +75,8 @@
7575
'website_url' => 'The given website URL is not properly formatted. A valid URL must start with http[s]://',
7676
'weibo_url' => 'The given URL is not a valid Weibo URL',
7777
'youtube_url' => 'The given URL is not a valid YouTube Channel URL',
78+
'looksrare_url' => 'The given URL is not a valid LooksRare URL',
79+
'opensea_url' => 'The given URL is not a valid OpenSea URL',
80+
'tiktok_url' => 'The given URL is not a valid TikTok URL',
7881
],
7982
];

tests/Rules/LooksrareUrlTest.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use ARKEcosystem\Foundation\Rules\ServiceLink;
6+
7+
beforeEach(function (): void {
8+
$this->subject = new ServiceLink('looksrare');
9+
});
10+
11+
it('validates a valid url', function ($url) {
12+
$this->assertTrue($this->subject->passes('looksrare_url', $url));
13+
})->with([
14+
'https://looksrare.org/collections/0x60E4d786628Fea6478F785A6d7e704777c86a7c6',
15+
'https://looksrare.org/accounts/0xEAc80aD5AA9d5e4316d90B7Fe78eD9EBdcDe0852',
16+
]);
17+
18+
it('invalidates an invalid url', function ($url) {
19+
expect($this->subject->passes('looksrare_url', $url))->toBeFalse();
20+
})->with([
21+
'https://looksrare.org/collections/@0x60E4d786628Fea6478F785A6d7e704777c86a7c6',
22+
'https://looksrare.org/0xEAc80aD5AA9d5e4316d90B7Fe78eD9EBdcDe0852',
23+
'0xEAc80aD5AA9d5e4316d90B7Fe78eD9EBdcDe0852',
24+
]);
25+
26+
it('has an error message', function () {
27+
expect($this->subject->message())->toBe(trans('ui::validation.social.looksrare_url'));
28+
});

tests/Rules/OpenseaUrlTest.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use ARKEcosystem\Foundation\Rules\ServiceLink;
6+
7+
beforeEach(function (): void {
8+
$this->subject = new ServiceLink('opensea');
9+
});
10+
11+
it('validates a valid url', function ($url) {
12+
$this->assertTrue($this->subject->passes('opensea_url', $url));
13+
})->with([
14+
'https://opensea.io/collection/boredapeyachtclub',
15+
'https://opensea.io/AVDR3W_OTC',
16+
'https://opensea.io/0xA8fd8582A93D9Dc547E3D48a0a4C2fDd938A2316',
17+
]);
18+
19+
it('invalidates an invalid url', function ($url) {
20+
expect($this->subject->passes('opensea_url', $url))->toBeFalse();
21+
})->with([
22+
'https://opensea.io/@boredapeyachtclub',
23+
'@boredapeyachtclub',
24+
'boredapeyachtclub',
25+
]);
26+
27+
it('has an error message', function () {
28+
expect($this->subject->message())->toBe(trans('ui::validation.social.opensea_url'));
29+
});

tests/Rules/TiktokUrlTest.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use ARKEcosystem\Foundation\Rules\ServiceLink;
6+
7+
beforeEach(function (): void {
8+
$this->subject = new ServiceLink('tiktok');
9+
});
10+
11+
it('validates a valid url', function ($url) {
12+
$this->assertTrue($this->subject->passes('tiktok_url', $url));
13+
})->with([
14+
'https://www.tiktok.com/@msq',
15+
'https://tiktok.com/@msq',
16+
'https://tiktok.com/@msq?lang=en',
17+
]);
18+
19+
it('invalidates an invalid url', function ($url) {
20+
expect($this->subject->passes('tiktok_url', $url))->toBeFalse();
21+
})->with([
22+
'https://tiktok.com/msq',
23+
'@msq',
24+
'msq',
25+
]);
26+
27+
it('has an error message', function () {
28+
expect($this->subject->message())->toBe(trans('ui::validation.social.tiktok_url'));
29+
});

0 commit comments

Comments
 (0)