From f39c5a2a702036750b4d7c32d02e7f92955a4eed Mon Sep 17 00:00:00 2001 From: Kevin Decherf Date: Sun, 11 Aug 2019 23:51:55 +0200 Subject: Add new Helper to process Ignore Origin rules and RulerZ operator This commits adds a new helper like RuleBasedTagger for processing ignore origin rules. It also adds a new custom RulerZ operator for the '~' pattern matching rule. Renames 'pattern' with '_all' in IgnoreOriginRule entity. Signed-off-by: Kevin Decherf --- .../Helper/RuleBasedIgnoreOriginProcessorTest.php | 212 +++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 tests/Wallabag/CoreBundle/Helper/RuleBasedIgnoreOriginProcessorTest.php (limited to 'tests') diff --git a/tests/Wallabag/CoreBundle/Helper/RuleBasedIgnoreOriginProcessorTest.php b/tests/Wallabag/CoreBundle/Helper/RuleBasedIgnoreOriginProcessorTest.php new file mode 100644 index 00000000..9e39bc81 --- /dev/null +++ b/tests/Wallabag/CoreBundle/Helper/RuleBasedIgnoreOriginProcessorTest.php @@ -0,0 +1,212 @@ +rulerz = $this->getRulerZMock(); + $this->logger = $this->getLogger(); + $this->ignoreOriginInstanceRuleRepository = $this->getIgnoreOriginInstanceRuleRepositoryMock(); + $this->handler = new TestHandler(); + $this->logger->pushHandler($this->handler); + + $this->processor = new RuleBasedIgnoreOriginProcessor($this->rulerz, $this->logger, $this->ignoreOriginInstanceRuleRepository); + } + + public function testProcessWithNoRule() + { + $user = $this->getUser(); + $entry = new Entry($user); + $entry->setUrl('http://example.com/hello-world'); + + $this->ignoreOriginInstanceRuleRepository + ->expects($this->once()) + ->method('findAll') + ->willReturn([]); + + $this->rulerz + ->expects($this->never()) + ->method('satisfies'); + + $result = $this->processor->process($entry); + + $this->assertFalse($result); + } + + public function testProcessWithNoMatchingRule() + { + $userRule = $this->getIgnoreOriginUserRule('rule as string'); + $user = $this->getUser([$userRule]); + $entry = new Entry($user); + $entry->setUrl('http://example.com/hello-world'); + + $this->ignoreOriginInstanceRuleRepository + ->expects($this->once()) + ->method('findAll') + ->willReturn([]); + + $this->rulerz + ->expects($this->once()) + ->method('satisfies') + ->willReturn(false); + + $result = $this->processor->process($entry); + + $this->assertFalse($result); + } + + public function testProcessWithAMatchingRule() + { + $userRule = $this->getIgnoreOriginUserRule('rule as string'); + $user = $this->getUser([$userRule]); + $entry = new Entry($user); + $entry->setUrl('http://example.com/hello-world'); + + $this->ignoreOriginInstanceRuleRepository + ->expects($this->once()) + ->method('findAll') + ->willReturn([]); + + $this->rulerz + ->expects($this->once()) + ->method('satisfies') + ->willReturn(true); + + $result = $this->processor->process($entry); + + $this->assertTrue($result); + } + + public function testProcessWithAMixOfMatchingRules() + { + $userRule = $this->getIgnoreOriginUserRule('rule as string'); + $anotherUserRule = $this->getIgnoreOriginUserRule('another rule as string'); + $user = $this->getUser([$userRule, $anotherUserRule]); + $entry = new Entry($user); + $entry->setUrl('http://example.com/hello-world'); + + $this->ignoreOriginInstanceRuleRepository + ->expects($this->once()) + ->method('findAll') + ->willReturn([]); + + $this->rulerz + ->method('satisfies') + ->will($this->onConsecutiveCalls(false, true)); + + $result = $this->processor->process($entry); + + $this->assertTrue($result); + } + + public function testProcessWithInstanceRules() + { + $user = $this->getUser(); + $entry = new Entry($user); + $entry->setUrl('http://example.com/hello-world'); + + $instanceRule = $this->getIgnoreOriginInstanceRule('rule as string'); + $this->ignoreOriginInstanceRuleRepository + ->expects($this->once()) + ->method('findAll') + ->willReturn([$instanceRule]); + + $this->rulerz + ->expects($this->once()) + ->method('satisfies') + ->willReturn(true); + + $result = $this->processor->process($entry); + + $this->assertTrue($result); + } + + public function testProcessWithMixedRules() + { + $userRule = $this->getIgnoreOriginUserRule('rule as string'); + $user = $this->getUser([$userRule]); + $entry = new Entry($user); + $entry->setUrl('http://example.com/hello-world'); + + $instanceRule = $this->getIgnoreOriginInstanceRule('rule as string'); + $this->ignoreOriginInstanceRuleRepository + ->expects($this->once()) + ->method('findAll') + ->willReturn([$instanceRule]); + + $this->rulerz + ->method('satisfies') + ->will($this->onConsecutiveCalls(false, true)); + + $result = $this->processor->process($entry); + + $this->assertTrue($result); + } + + private function getUser(array $ignoreOriginRules = []) + { + $user = new User(); + $config = new Config($user); + + $user->setConfig($config); + + foreach ($ignoreOriginRules as $rule) { + $config->addIgnoreOriginRule($rule); + } + + return $user; + } + + private function getIgnoreOriginUserRule($rule) + { + $ignoreOriginUserRule = new IgnoreOriginUserRule(); + $ignoreOriginUserRule->setRule($rule); + + return $ignoreOriginUserRule; + } + + private function getIgnoreOriginInstanceRule($rule) + { + $ignoreOriginInstanceRule = new IgnoreOriginInstanceRule(); + $ignoreOriginInstanceRule->setRule($rule); + + return $ignoreOriginInstanceRule; + } + + private function getRulerZMock() + { + return $this->getMockBuilder('RulerZ\RulerZ') + ->disableOriginalConstructor() + ->getMock(); + } + + private function getIgnoreOriginInstanceRuleRepositoryMock() + { + return $this->getMockBuilder('Wallabag\CoreBundle\Repository\IgnoreOriginInstanceRuleRepository') + ->disableOriginalConstructor() + ->getMock(); + } + + private function getLogger() + { + return new Logger('foo'); + } +} -- cgit v1.2.3