diff --git a/src/Core/Console/BlockedServers.php b/src/Core/Console/BlockedServers.php index 07c4ee62d..cd9d21298 100644 --- a/src/Core/Console/BlockedServers.php +++ b/src/Core/Console/BlockedServers.php @@ -90,24 +90,37 @@ HELP; } $domain = $this->getArgument(1); + $reason = (count($this->args) === 3) ? $this->getArgument(2) : self::DEFAULT_REASON; - $blocklist = $config->get('system', 'blocklist'); - foreach ($blocklist as $blocked) { + $update = false; + + $currBlocklist = $config->get('system', 'blocklist'); + $newBlockList = []; + foreach ($currBlocklist as $blocked) { if ($blocked['domain'] === $domain) { - $this->out(sprintf("The domain '%s' is already blocked. (Reason: '%s')", $domain, $blocked['reason'])); - return 1; + $update = true; + $newBlockList[] = [ + 'domain' => $domain, + 'reason' => $reason, + ]; + } else { + $newBlockList[] = $blocked; } } - $reason = (count($this->args) === 3) ? $this->getArgument(2) : self::DEFAULT_REASON; + if (!$update) { + $newBlockList[] = [ + 'domain' => $domain, + 'reason' => $reason, + ]; + } - $blocklist[] = [ - 'domain' => $domain, - 'reason' => $reason, - ]; - - if ($config->set('system', 'blocklist', $blocklist)) { - $this->out(sprintf("The domain '%s' is now blocked. (Reason: '%s')", $domain, $reason)); + if ($config->set('system', 'blocklist', $newBlockList)) { + if ($update) { + $this->out(sprintf("The domain '%s' is now updated. (Reason: '%s')", $domain, $reason)); + } else { + $this->out(sprintf("The domain '%s' is now blocked. (Reason: '%s')", $domain, $reason)); + } return 0; } else { $this->out(sprintf("Couldn't save '%s' as blocked server", $domain)); @@ -143,7 +156,7 @@ HELP; } if (!$found) { - $this->out(sprintf("Domain '%s' is not blocked.", $domain)); + $this->out(sprintf("The domain '%s' is not blocked.", $domain)); return 1; } diff --git a/tests/src/Core/Console/BlockedServersConsoleTest.php b/tests/src/Core/Console/BlockedServersConsoleTest.php index c454a14b9..f33a8de31 100644 --- a/tests/src/Core/Console/BlockedServersConsoleTest.php +++ b/tests/src/Core/Console/BlockedServersConsoleTest.php @@ -116,7 +116,44 @@ CONS; $console->setArgument(1, 'testme.now'); $txt = $this->dumpExecute($console); - $this->assertEquals('The domain \'testme.now\' is now blocked. (Reason: \'' . BlockedServers::DEFAULT_REASON .'\')' . PHP_EOL, $txt); + $this->assertEquals('The domain \'testme.now\' is now blocked. (Reason: \'' . BlockedServers::DEFAULT_REASON . '\')' . PHP_EOL, $txt); + } + + /** + * Test blockedservers add command on existed domain + */ + public function testUpdateBlockedServer() + { + $this->configMock + ->shouldReceive('get') + ->with('system', 'blocklist') + ->andReturn($this->defaultBlockList) + ->once(); + + $newBlockList = [ + [ + 'domain' => 'social.nobodyhasthe.biz', + 'reason' => 'Illegal content', + ], + [ + 'domain' => 'pod.ordoevangelistarum.com', + 'reason' => 'Other reason', + ] + ]; + + $this->configMock + ->shouldReceive('set') + ->with('system', 'blocklist', $newBlockList) + ->andReturn(true) + ->once(); + + $console = new BlockedServers($this->consoleArgv); + $console->setArgument(0, 'add'); + $console->setArgument(1, 'pod.ordoevangelistarum.com'); + $console->setArgument(2, 'Other reason'); + $txt = $this->dumpExecute($console); + + $this->assertEquals('The domain \'pod.ordoevangelistarum.com\' is now updated. (Reason: \'Other reason\')' . PHP_EOL, $txt); } /** @@ -163,6 +200,25 @@ CONS; $this->assertStringStartsWith('[Warning] Unknown command', $txt); } + /** + * Test blockedservers remove with not existing domain + */ + public function testRemoveBlockedServerNotExist() + { + $this->configMock + ->shouldReceive('get') + ->with('system', 'blocklist') + ->andReturn($this->defaultBlockList) + ->once(); + + $console = new BlockedServers($this->consoleArgv); + $console->setArgument(0, 'remove'); + $console->setArgument(1, 'not.exiting'); + $txt = $this->dumpExecute($console); + + $this->assertEquals('The domain \'not.exiting\' is not blocked.' . PHP_EOL, $txt); + } + /** * Test blockedservers add command without argument */