Add tests for ShortUrlRedirectionRuleService::setRulesForShortUrl

This commit is contained in:
Alejandro Celaya
2024-02-29 19:55:34 +01:00
parent f9e4d6d617
commit f700abd65d
5 changed files with 86 additions and 14 deletions

View File

@@ -8,6 +8,8 @@ use Laminas\InputFilter\Exception\InvalidArgumentException;
use Shlinkio\Shlink\Core\Exception\ValidationException;
use Shlinkio\Shlink\Core\RedirectRule\Model\Validation\RedirectRulesInputFilter;
use function array_values;
readonly class RedirectRulesData
{
private function __construct(public array $rules)
@@ -22,7 +24,7 @@ readonly class RedirectRulesData
throw ValidationException::fromInputFilter($inputFilter);
}
return new self($inputFilter->getValue(RedirectRulesInputFilter::REDIRECT_RULES));
return new self(array_values($inputFilter->getValue(RedirectRulesInputFilter::REDIRECT_RULES)));
} catch (InvalidArgumentException) {
throw ValidationException::fromArray(
[RedirectRulesInputFilter::REDIRECT_RULES => RedirectRulesInputFilter::REDIRECT_RULES],

View File

@@ -20,7 +20,6 @@ class RedirectRulesInputFilter extends InputFilter
{
public const REDIRECT_RULES = 'redirectRules';
public const RULE_PRIORITY = 'priority';
public const RULE_LONG_URL = 'longUrl';
public const RULE_CONDITIONS = 'conditions';
@@ -48,8 +47,6 @@ class RedirectRulesInputFilter extends InputFilter
{
$redirectRuleInputFilter = new InputFilter();
$redirectRuleInputFilter->add(InputFactory::numeric(self::RULE_PRIORITY, required: true));
$longUrl = InputFactory::basic(self::RULE_LONG_URL, required: true);
$longUrl->setValidatorChain(ShortUrlInputFilter::longUrlValidators());
$redirectRuleInputFilter->add($longUrl);

View File

@@ -52,10 +52,10 @@ readonly class ShortUrlRedirectRuleService implements ShortUrlRedirectRuleServic
// Then insert new rules
$rules = [];
foreach ($data->rules as $rule) {
foreach ($data->rules as $index => $rule) {
$rule = new ShortUrlRedirectRule(
shortUrl: $shortUrl,
priority: $rule[RedirectRulesInputFilter::RULE_PRIORITY],
priority: $index + 1,
longUrl: $rule[RedirectRulesInputFilter::RULE_LONG_URL],
conditions: new ArrayCollection(array_map(
RedirectCondition::fromRawData(...),