public function it_applies_rule(RuleInterface $rule, Article $subject, RouteProviderInterface $routeProvider, RouteInterface $route, LoggerInterface $logger, ArticleServiceInterface $articleService)
 {
     $rule->getConfiguration()->willReturn(['route' => 'some/route', 'templateName' => 'template.twig.html', 'published' => 'true']);
     $rule->getExpression()->willReturn('article.getSomething("something") matches /something/');
     $routeProvider->getOneById('some/route')->willReturn($route);
     $subject->setRoute($route)->shouldBeCalled();
     $subject->setTemplateName('template.twig.html')->shouldBeCalled();
     $articleService->publish($subject)->shouldBeCalled();
     $logger->info(Argument::any('string'))->shouldBeCalled();
     $this->apply($rule, $subject)->shouldReturn(null);
 }
 /**
  * {@inheritdoc}
  */
 public function apply(RuleInterface $rule, RuleSubjectInterface $subject)
 {
     $configuration = $this->validateRuleConfiguration($rule->getConfiguration());
     if (!$this->isAllowedType($subject) || empty($configuration)) {
         return;
     }
     /* @var ArticleInterface $subject */
     if (isset($configuration['route'])) {
         $route = $this->routeProvider->getOneById($configuration['route']);
         if (null === $route) {
             $this->logger->warning('Route not found! Make sure the rule defines an existing route!');
             return;
         }
         $subject->setRoute($route);
     }
     $subject->setTemplateName($configuration['templateName']);
     if ((bool) $configuration['published']) {
         $this->articleService->publish($subject);
     }
     $this->logger->info(sprintf('Configuration: "%s" for "%s" rule has been applied!', json_encode($configuration), $rule->getExpression()));
 }