This commit is contained in:
Renan Bernordi 2026-07-27 15:50:32 -03:00
parent daf17f4064
commit c25af9208d
18 changed files with 120 additions and 109 deletions

View file

@ -99,7 +99,7 @@ class GlobalRules extends Page
{
$state = $this->form->getState();
$ruleSet = GlobalRuleSet::current() ?? new GlobalRuleSet();
$ruleSet = GlobalRuleSet::current() ?? new GlobalRuleSet;
$ruleSet->config = $state['config'];
$ruleSet->save();

View file

@ -9,8 +9,8 @@ use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;

View file

@ -13,7 +13,7 @@ final class BlockedDomain extends Model
protected static function booted(): void
{
static::saved(fn () => Cache::forget('marreta.blocked_domains'));
static::deleted(fn () => Cache::forget('marreta.blocked_domains'));
self::saved(fn () => Cache::forget('marreta.blocked_domains'));
self::deleted(fn () => Cache::forget('marreta.blocked_domains'));
}
}

View file

@ -13,7 +13,7 @@ final class DmcaDomain extends Model
protected static function booted(): void
{
static::saved(fn () => Cache::forget('marreta.dmca_domains'));
static::deleted(fn () => Cache::forget('marreta.dmca_domains'));
self::saved(fn () => Cache::forget('marreta.dmca_domains'));
self::deleted(fn () => Cache::forget('marreta.dmca_domains'));
}
}

View file

@ -21,7 +21,7 @@ final class DomainRule extends Model
protected static function booted(): void
{
static::saved(fn () => Cache::forget('marreta.domain_rules'));
static::deleted(fn () => Cache::forget('marreta.domain_rules'));
self::saved(fn () => Cache::forget('marreta.domain_rules'));
self::deleted(fn () => Cache::forget('marreta.domain_rules'));
}
}

View file

@ -25,7 +25,7 @@ final class GlobalRuleSet extends Model
protected static function booted(): void
{
static::saved(fn () => Cache::forget('marreta.global_rules'));
static::deleted(fn () => Cache::forget('marreta.global_rules'));
self::saved(fn () => Cache::forget('marreta.global_rules'));
self::deleted(fn () => Cache::forget('marreta.global_rules'));
}
}

View file

@ -16,7 +16,7 @@ final class Stat extends Model
public static function incrementCounter(string $key, int $by = 1): int
{
$stat = static::firstOrCreate(['key' => $key], ['value' => 0]);
$stat = self::firstOrCreate(['key' => $key], ['value' => 0]);
$stat->increment('value', $by);
return $stat->value;
@ -24,6 +24,6 @@ final class Stat extends Model
public static function getCounter(string $key, int $default = 0): int
{
return (int) (static::where('key', $key)->value('value') ?? $default);
return (int) (self::where('key', $key)->value('value') ?? $default);
}
}

View file

@ -4,9 +4,11 @@ declare(strict_types=1);
namespace App\Services;
use App\Enums\MarretaError;
use App\Exceptions\MarretaException;
use Dom\Element;
use Dom\HTMLDocument;
use Dom\XPath;
use Illuminate\Support\Facades\Log;
final class ContentProcessor
{
@ -20,7 +22,7 @@ final class ContentProcessor
public function processContent(string $content, string $host, string $url): string
{
if (strlen($content) < 5120) {
throw new \App\Exceptions\MarretaException(\App\Enums\MarretaError::ContentError);
throw new MarretaException(MarretaError::ContentError);
}
$this->activatedRules = [];
@ -286,7 +288,7 @@ final class ContentProcessor
}
/** @param list<string> $classesToRemove */
private function removeClassNames(\Dom\Element $element, array $classesToRemove): void
private function removeClassNames(Element $element, array $classesToRemove): void
{
if (! $element->hasAttribute('class')) {
return;

View file

@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Services\Fetch;
use App\Exceptions\MarretaException;
interface FetchStrategy
{
/**
@ -11,7 +13,7 @@ interface FetchStrategy
*
* @param array<string, mixed> $rules Merged domain rules.
*
* @throws \App\Exceptions\MarretaException
* @throws MarretaException
*/
public function fetch(string $url, array $rules): string;
}

View file

@ -56,6 +56,7 @@ final class FetchManager
}
} catch (MarretaException $e) {
$lastError = $e;
continue;
}
}

View file

@ -128,6 +128,7 @@ final class RuleEngine
if (! isset($merged[$ruleType])) {
$merged[$ruleType] = $domainTypeRules;
continue;
}

View file

@ -2,6 +2,8 @@
declare(strict_types=1);
use App\Http\Middleware\BlockAiBots;
use App\Http\Middleware\SecurityHeaders;
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
@ -16,8 +18,8 @@ return Application::configure(basePath: dirname(__DIR__))
$middleware->trustProxies(at: (string) env('TRUSTED_PROXIES', '172.16.0.0/12,10.0.0.0/8,192.168.0.0/16,127.0.0.1'));
$middleware->web(append: [
\App\Http\Middleware\SecurityHeaders::class,
\App\Http\Middleware\BlockAiBots::class,
SecurityHeaders::class,
BlockAiBots::class,
]);
})
->withExceptions(function (Exceptions $exceptions): void {

View file

@ -1,6 +1,9 @@
<?php
use App\Providers\AppServiceProvider;
use App\Providers\Filament\AdminPanelProvider;
return [
App\Providers\AppServiceProvider::class,
App\Providers\Filament\AdminPanelProvider::class,
AppServiceProvider::class,
AdminPanelProvider::class,
];

View file

@ -2,18 +2,18 @@
/**
* List of blocked domains
*
*
* Defines domains that cannot be accessed by the system
* due to usage policies or technical restrictions
*/
$host = parse_url(defined('SITE_URL') ? SITE_URL : '', PHP_URL_HOST);
return [
$host,
'localhost',
'127.0.0.1',
// News sites
//-- Content behind login access/hard paywall
// -- Content behind login access/hard paywall
'wsj.com',
'piaui.folha.uol.com.br',
'economist.com',
@ -32,16 +32,16 @@ return [
'mittelbayerische.de',
'josimarfootball.com',
'nordsee-zeitung.de',
'zorgvisie.nl',
'zorgvisie.nl',
// List of common blocked sites to avoid unnecessary requests
//-- Technical access blocking
// -- Technical access blocking
'bloomberg.com',
'sportskeeda.com',
'kansascity.com',
'fastcompany.com',
'expressnews.com',
'nydailynews.com',
//-- Tracking services
// -- Tracking services
'metaffiliation.com',
'google-analytics.com',
'googletagmanager.com',
@ -62,7 +62,7 @@ return [
'fullstory.com',
'heap.io',
'clearbrain.com',
//-- Social networks
// -- Social networks
'facebook.com',
'instagram.com',
'twitter.com',
@ -76,7 +76,7 @@ return [
'redd.it',
'bsky.app',
'threads.net',
//-- Streaming services
// -- Streaming services
'netflix.com',
'hulu.com',
'disneyplus.com',
@ -84,32 +84,32 @@ return [
'spotify.com',
'youtube.com',
'twitch.tv',
//-- E-commerce sites
// -- E-commerce sites
'amazon.com',
'ebay.com',
'aliexpress.com',
'mercadolivre.com.br',
'shopify.com',
//-- File sharing
// -- File sharing
'mega.nz',
'mediafire.com',
'wetransfer.com',
'dropbox.com',
'torrent9.pe',
'thepiratebay.org',
//-- Adult sites
// -- Adult sites
'pornhub.com',
'xvideos.com',
'xnxx.com',
'onlyfans.com',
'privacy.com.br',
'fatalmodel.com',
//-- Betting and gaming
// -- Betting and gaming
'bet365.com',
'betfair.com',
'pokerstars.com',
'casino.com',
//-- Other popular sites
// -- Other popular sites
'github.com',
'stackoverflow.com',
'wikipedia.org',
@ -141,5 +141,5 @@ return [
'baidu.com',
'gofile.io',
'timestore.vip',
'hidewall.io'
'hidewall.io',
];

View file

@ -2,7 +2,7 @@
/**
* Specific rule configurations for individual domains
*
*
* Domain rule structure / Estrutura das regras por domínio:
* - userAgent: Define custom User-Agent for the domain
* - headers: Custom HTTP headers for requests
@ -40,14 +40,14 @@
*/
return [
'nsctotal.com.br' => [
'userAgent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
'userAgent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
],
'elcorreo.com' => [
'idElementRemove' => ['didomi-popup', 'engagement-top'],
'classElementRemove' => ['content-exclusive-bg'],
'classAttrRemove' => ['didomi-popup-open', 'paywall'],
'removeElementsByTag' => ['style'],
'removeCustomAttr' => ['hidden', 'data-*']
'removeCustomAttr' => ['hidden', 'data-*'],
],
'wired.com' => [
'scriptTagRemove' => ['.js'],
@ -62,16 +62,16 @@ return [
'cookies' => [
'piano_d' => null,
'piano_if' => null,
'piano_user_id' => null
'piano_user_id' => null,
],
'classAttrRemove' => ['wall', 'protected-content', 'cropped-block']
'classAttrRemove' => ['wall', 'protected-content', 'cropped-block'],
],
'gauchazh.clicrbs.com.br' => [
'idElementRemove' => ['paywallTemplate'],
'classAttrRemove' => ['m-paid-content', 'paid-content-apply'],
'scriptTagRemove' => ['vendors-9','vendors-10','vendors-11'],
'scriptTagRemove' => ['vendors-9', 'vendors-10', 'vendors-11'],
'excludeGlobalRules' => [
'classElementRemove' => ['paid-content']
'classElementRemove' => ['paid-content'],
],
'proxy' => true,
],
@ -88,11 +88,11 @@ return [
'gamestar.de' => [
'classElementRemove' => ['plus-teaser'],
'classAttrRemove' => ['plus-'],
'idElementRemove' => ['commentReload']
'idElementRemove' => ['commentReload'],
],
'heise.de' => [
'classAttrRemove' => ['curtain__purchase-container'],
'removeElementsByTag' => ['a-gift']
'removeElementsByTag' => ['a-gift'],
],
'fortune.com' => [
'classElementRemove' => ['latest-popular-module', 'own', 'drawer-menu'],
@ -131,7 +131,7 @@ return [
if (dropcapDiv) {
dropcapDiv.style.height = \'auto\';
}
});'
});',
],
'latercera.com' => [
'classElementRemove' => ['pw-frontier'],
@ -144,7 +144,7 @@ return [
}
.main-header .top-menu, .main-header .alert-news, .main-header .alert-news.sticky {
position:inherit !important;
}'
}',
],
'folha.uol.com.br' => [
'idElementRemove' => ['paywall-flutuante', 'paywall', 'paywall-signup'],
@ -153,23 +153,23 @@ return [
'cookies' => [
'paywall_visit' => null,
'folha_id' => null,
'paywall_access' => 'true'
]
'paywall_access' => 'true',
],
],
'ftm.nl' => [
'fetchStrategies' => 'fetchFromSelenium',
'removeCustomAttr' => ['dialog', 'iframe'],
'classElementRemove' => ['modal'],
'scriptTagRemove' => ['footer.min', 'diffuser.js', 'insight.ftm.nl'],
'classAttrRemove' => ['hasBlockingOverlay', 'localstorage']
'classAttrRemove' => ['hasBlockingOverlay', 'localstorage'],
],
'denikn.cz' => [
'idElementRemove' => ['e_lock__hard']
'idElementRemove' => ['e_lock__hard'],
],
'dtest.cz' => [
'fetchStrategies' => 'fetchFromSelenium',
'classAttrRemove' => ['is-hidden-compare'],
'classElementRemove' => ['cc-window']
'classElementRemove' => ['cc-window'],
],
'uol.com.br' => [
'scriptTagRemove' => ['me.jsuol.com.br', 'c.jsuol.com.br'],
@ -186,21 +186,21 @@ return [
],
'onetz.de' => [
'idElementRemove' => ['checkout-container'],
'classElementRemove' => ['tp-backdrop','dm-nobg'],
'classElementRemove' => ['tp-backdrop', 'dm-nobg'],
'classAttrRemove' => ['field-dnt-body-pp'],
'scriptTagRemove' => ['.js'],
],
'opovo.com.br' => [
'classElementRemove' => ['screen-loading', 'overlay-advise']
'classElementRemove' => ['screen-loading', 'overlay-advise'],
],
'crusoe.com.br' => [
'cookies' => [
'crs_subscriber' => '1'
]
'crs_subscriber' => '1',
],
],
'theverge.com' => [
'scriptTagRemove' => 'zephr',
'classElementRemove' => 'zephr'
'classElementRemove' => 'zephr',
],
'nytimes.com' => [
'idElementRemove' => ['gateway-content', 'site-index', 'complianceOverlay'],
@ -291,29 +291,29 @@ return [
'navdmp.com',
'getblue.io',
'smartocto.com',
'cdn.pn.vg'
]
]
'cdn.pn.vg',
],
],
],
'correio24horas.com.br' => [
'idElementRemove' => ['paywall'],
'classElementRemove' => ['paywall'],
'classAttrRemove' => ['hide', 'is-active'],
'cookies' => [
'premium_access' => '1'
]
'premium_access' => '1',
],
],
'abril.com.br' => [
'cookies' => [
'paywall_access' => 'true'
'paywall_access' => 'true',
],
'classElementRemove' => ['piano-offer-overlay'],
'classAttrRemove' => ['disabledByPaywall'],
'idElementRemove' => ['piano_offer']
'idElementRemove' => ['piano_offer'],
],
'foreignpolicy.com' => [
'idElementRemove' => ['paywall_bg'],
'classAttrRemove' => ['overlay-no-scroll', 'overlay-no-scroll']
'classAttrRemove' => ['overlay-no-scroll', 'overlay-no-scroll'],
],
'dgabc.com.br' => [
'customCode' => '
@ -323,7 +323,7 @@ return [
$(".linhaSuperBanner").show();
$(".footer").show();
$(".NoticiaExclusivaLogado").show();
'
',
],
'forbes.com' => [
'classElementRemove' => ['zephr-backdrop', 'zephr-generic-modal'],
@ -341,7 +341,7 @@ return [
'fetchStrategies' => 'fetchFromSelenium',
],
'seudinheiro.com' => [
'idElementRemove' => ['premium-paywall']
'idElementRemove' => ['premium-paywall'],
],
'technologyreview.com' => [
'cookies' => [
@ -350,8 +350,8 @@ return [
'_pcus' => null,
'__tbc' => null,
'__pvi' => null,
'_pctx' => null
]
'_pctx' => null,
],
],
'thestar.com' => [
'classElementRemove' => ['subscriber-offers', 'subscriber-only', 'subscription-required', 'redacted-overlay', 'subscriber-hide', 'tnt-ads-container'],
@ -378,7 +378,7 @@ return [
const recommendations = document.querySelectorAll(\'div[id^="tncms-region-article"]\');
recommendations.forEach(el => { el.remove(); });
});
'
',
],
'niagarafallsreview.ca' => [
'classElementRemove' => ['subscriber-offers', 'subscriber-only', 'subscription-required', 'redacted-overlay', 'subscriber-hide', 'tnt-ads-container'],
@ -405,7 +405,7 @@ return [
const recommendations = document.querySelectorAll(\'div[id^="tncms-region-article"]\');
recommendations.forEach(el => { el.remove(); });
});
'
',
],
'thepeterboroughexaminer.com' => [
'classElementRemove' => ['subscriber-offers', 'subscriber-only', 'subscription-required', 'redacted-overlay', 'subscriber-hide', 'tnt-ads-container'],
@ -432,7 +432,7 @@ return [
const recommendations = document.querySelectorAll(\'div[id^="tncms-region-article"]\');
recommendations.forEach(el => { el.remove(); });
});
'
',
],
'therecord.com' => [
'classElementRemove' => ['subscriber-offers', 'subscriber-only', 'subscription-required', 'redacted-overlay', 'subscriber-hide', 'tnt-ads-container'],
@ -459,7 +459,7 @@ return [
const recommendations = document.querySelectorAll(\'div[id^="tncms-region-article"]\');
recommendations.forEach(el => { el.remove(); });
});
'
',
],
'thespec.com' => [
'classElementRemove' => ['subscriber-offers', 'subscriber-only', 'subscription-required', 'redacted-overlay', 'subscriber-hide', 'tnt-ads-container'],
@ -486,7 +486,7 @@ return [
const recommendations = document.querySelectorAll(\'div[id^="tncms-region-article"]\');
recommendations.forEach(el => { el.remove(); });
});
'
',
],
'wellandtribune.ca' => [
'classElementRemove' => ['subscriber-offers', 'subscriber-only', 'subscription-required', 'redacted-overlay', 'subscriber-hide', 'tnt-ads-container'],
@ -513,13 +513,13 @@ return [
const recommendations = document.querySelectorAll(\'div[id^="tncms-region-article"]\');
recommendations.forEach(el => { el.remove(); });
});
'
',
],
'time.com' => [
'headers' => [
'User-Agent' => 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
'Cookie' => 'nyt-a=; nyt-gdpr=0; nyt-geo=DE; nyt-privacy=1',
'Referer' => 'https://www.google.com/'
'Referer' => 'https://www.google.com/',
],
'customCode' => '
window.localStorage.clear();
@ -527,7 +527,7 @@ return [
const banners = document.querySelectorAll(\'div[data-testid="inline-message"], div[id^="ad-"], div[id^="leaderboard-"], div.expanded-dock, div.pz-ad-box, div[id="top-wrapper"], div[id="bottom-wrapper"]\');
banners.forEach(el => { el.remove(); });
});
'
',
],
'architecturaldigest.com' => [
'customCode' => '
@ -535,7 +535,7 @@ return [
const banners = document.querySelectorAll(\'.paywall-bar, div[class^="MessageBannerWrapper-"\');
banners.forEach(el => { el.remove(); });
});
'
',
],
'bonappetit.com' => [
'customCode' => '
@ -543,7 +543,7 @@ return [
const banners = document.querySelectorAll(\'.paywall-bar, div[class^="MessageBannerWrapper-"\');
banners.forEach(el => { el.remove(); });
});
'
',
],
'cntraveler.com' => [
'customCode' => '
@ -551,7 +551,7 @@ return [
const banners = document.querySelectorAll(\'.paywall-bar, div[class^="MessageBannerWrapper-"\');
banners.forEach(el => { el.remove(); });
});
'
',
],
'epicurious.com' => [
'customCode' => '
@ -559,7 +559,7 @@ return [
const banners = document.querySelectorAll(\'.paywall-bar, div[class^="MessageBannerWrapper-"\');
banners.forEach(el => { el.remove(); });
});
'
',
],
'gq.com' => [
'customCode' => '
@ -567,7 +567,7 @@ return [
const banners = document.querySelectorAll(\'.paywall-bar, div[class^="MessageBannerWrapper-"\');
banners.forEach(el => { el.remove(); });
});
'
',
],
'vanityfair.com' => [
'customCode' => '
@ -575,7 +575,7 @@ return [
const banners = document.querySelectorAll(\'.paywall-bar, div[class^="MessageBannerWrapper-"\');
banners.forEach(el => { el.remove(); });
});
'
',
],
'vogue.com' => [
'customCode' => '
@ -583,7 +583,7 @@ return [
const banners = document.querySelectorAll(\'.paywall-bar, div[class^="MessageBannerWrapper-"\');
banners.forEach(el => { el.remove(); });
});
'
',
],
'americanbanker.com' => [
'customCode' => '
@ -595,7 +595,7 @@ return [
for (const elem of inlineGated) { elem.classList.remove(\'inline-gated\'); }
}
});
'
',
],
'washingtonpost.com' => [
'classElementRemove' => ['paywall-overlay'],
@ -610,7 +610,7 @@ return [
headimage.forEach(image => { image.style.filter = \'\'; });
});
',
'idElementRemove' => ['wall-bottom-drawer-container']
'idElementRemove' => ['wall-bottom-drawer-container'],
],
'usatoday.com' => [
'customCode' => '
@ -618,35 +618,35 @@ return [
const banners = document.querySelectorAll(\'div.roadblock-container, .gnt_nb, [aria-label="advertisement"], div[id="main-frame-error"]\');
banners.forEach(el => { el.remove(); });
});
'
',
],
'stcatharinesstandard.ca' => [
'proxy' => true,
'idElementRemove' => 'access-offers-modal',
'classElementRemove' => 'modal-backdrop',
'classAttrRemove' => ' modal-open'
'classAttrRemove' => ' modal-open',
],
'medium.com' => [
'headers' => [
'Referer' => 'https://t.co/x?amp=1',
'X-Forwarded-For' => 'none',
'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
'Content-Security-Policy' => 'script-src \'self\';'
]
'Content-Security-Policy' => 'script-src \'self\';',
],
],
'tagesspiegel.de' => [
'headers' => [
'Content-Security-Policy' => 'script-src \'self\';',
'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
],
'urlMods' => [
'query' => [
[
'key' => 'amp',
'value' => '1'
]
]
]
'value' => '1',
],
],
],
],
'nzz.ch' => [
'customCode' => '
@ -656,14 +656,14 @@ return [
paywall.remove();
}
});
'
',
],
'demorgen.be' => [
'headers' => [
'Cookie' => 'isBot=true; authId=1',
'User-Agent' => 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; Googlebot-News; +http://www.google.com/bot.html) Chrome/121.0.6140.0 Safari/537.36',
'X-Forwarded-For' => 'none',
'Referer' => 'https://news.google.com'
'Referer' => 'https://news.google.com',
],
'customCode' => '
document.addEventListener("DOMContentLoaded", () => {
@ -676,15 +676,15 @@ return [
advert.remove();
}
});
'
',
],
'ft.com' => [
'cookies' => [
'next-flags' => null,
'next:ads' => null
'next:ads' => null,
],
'headers' => [
'Referer' => 'https://t.co/x?amp=1'
'Referer' => 'https://t.co/x?amp=1',
],
'customCode' => '
document.addEventListener("DOMContentLoaded", () => {
@ -701,6 +701,6 @@ return [
cookie.forEach(el => { el.remove(); });
}, 1000);
})
'
]
',
],
];

View file

@ -2,12 +2,12 @@
/**
* Global rule configurations applied to all domains
*
*
* Note: These rules can be overridden or disabled for specific domains
* using the 'excludeGlobalRules' configuration in domain_rules.php
*/
return [
'proxy' => false,
'proxy' => false,
// Classes to be removed from all pages:
'classElementRemove' => [
'subscription',
@ -28,7 +28,7 @@ return [
'leaky_paywall_message_wrap',
'subscribe-form',
'signup-overlay',
'onesignal-slidedown-container'
'onesignal-slidedown-container',
],
// Scripts to be removed from all pages:
'scriptTagRemove' => [
@ -71,6 +71,6 @@ return [
'cdn.pn.vg',
'static.vocstatic.com',
'recaptcha',
'intercom'
]
'intercom',
],
];

View file

@ -107,7 +107,7 @@ final class MarretaDataSeeder extends Seeder
$unique[$domain] = true;
BlockedDomain::create([
'domain' => (string) $domain
'domain' => (string) $domain,
]);
}
}

View file

@ -76,9 +76,9 @@ final class AdminResourcesTest extends TestCase
$this->assertSame([['rule_type' => 'scriptTagRemove', 'values' => ['ga.js', 'gtm.js']]], $hydratedExcludeRows);
$component->fillForm([
'config.idElementRemove' => ['paywall', 'subscribe-wall'],
'config.customStyle' => 'body { display: none; }',
])
'config.idElementRemove' => ['paywall', 'subscribe-wall'],
'config.customStyle' => 'body { display: none; }',
])
->call('save')
->assertHasNoFormErrors();