Browse Source

Don't load actual configuration during CLI tests

rpm
J. King 4 years ago
parent
commit
fb2602fe04
  1. 8
      lib/CLI.php
  2. 31
      tests/cases/CLI/TestCLI.php

8
lib/CLI.php

@ -147,6 +147,7 @@ USAGE_TEXT;
return ""; return "";
} }
/** @codeCoverageIgnore */
protected function loadConf(): bool { protected function loadConf(): bool {
$conf = file_exists(BASE."config.php") ? new Conf(BASE."config.php") : new Conf; $conf = file_exists(BASE."config.php") ? new Conf(BASE."config.php") : new Conf;
Arsse::load($conf); Arsse::load($conf);
@ -219,7 +220,8 @@ USAGE_TEXT;
} }
protected function userManage($args): int { protected function userManage($args): int {
switch ($this->command(["add", "remove", "set-pass", "unset-pass", "list", "auth"], $args)) { $cmd = $this->command(["add", "remove", "set-pass", "unset-pass", "list", "auth"], $args);
switch ($cmd) {
case "add": case "add":
return $this->userAddOrSetPassword("add", $args["<username>"], $args["<password>"]); return $this->userAddOrSetPassword("add", $args["<username>"], $args["<password>"]);
case "set-pass": case "set-pass":
@ -247,8 +249,10 @@ USAGE_TEXT;
case "list": case "list":
case "": case "":
return $this->userList(); return $this->userList();
default:
throw new Exception("constantUnknown", $cmd); // @codeCoverageIgnore
} }
} // @codeCoverageIgnore }
protected function userAddOrSetPassword(string $method, string $user, string $password = null, string $oldpass = null): int { protected function userAddOrSetPassword(string $method, string $user, string $password = null, string $oldpass = null): int {
$passwd = Arsse::$user->$method(...array_slice(func_get_args(), 1)); $passwd = Arsse::$user->$method(...array_slice(func_get_args(), 1));

31
tests/cases/CLI/TestCLI.php

@ -18,9 +18,10 @@ use JKingWeb\Arsse\ImportExport\OPML;
/** @covers \JKingWeb\Arsse\CLI */ /** @covers \JKingWeb\Arsse\CLI */
class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest { class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
public function setUp(): void { public function setUp(): void {
self::clearData(false); self::clearData();
$this->cli = \Phake::partialMock(CLI::class); $this->cli = \Phake::partialMock(CLI::class);
\Phake::when($this->cli)->logError->thenReturn(null); \Phake::when($this->cli)->logError->thenReturn(null);
\Phake::when($this->cli)->loadConf->thenReturn(true);
} }
public function assertConsole(CLI $cli, string $command, int $exitStatus, string $output = "", bool $pattern = false) { public function assertConsole(CLI $cli, string $command, int $exitStatus, string $output = "", bool $pattern = false) {
@ -34,27 +35,15 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertSame($exitStatus, $cli->dispatch($argv)); $this->assertSame($exitStatus, $cli->dispatch($argv));
} }
public function assertLoaded(bool $loaded) {
$r = new \ReflectionClass(Arsse::class);
$props = array_keys($r->getStaticProperties());
foreach ($props as $prop) {
if ($loaded) {
$this->assertNotNull(Arsse::$$prop, "Global $prop object should be loaded");
} else {
$this->assertNull(Arsse::$$prop, "Global $prop object should not be loaded");
}
}
}
public function testPrintVersion() { public function testPrintVersion() {
$this->assertConsole($this->cli, "arsse.php --version", 0, Arsse::VERSION); $this->assertConsole($this->cli, "arsse.php --version", 0, Arsse::VERSION);
$this->assertLoaded(false); \Phake::verify($this->cli, \Phake::times(0))->loadConf;
} }
/** @dataProvider provideHelpText */ /** @dataProvider provideHelpText */
public function testPrintHelp(string $cmd, string $name) { public function testPrintHelp(string $cmd, string $name) {
$this->assertConsole($this->cli, $cmd, 0, str_replace("arsse.php", $name, CLI::USAGE)); $this->assertConsole($this->cli, $cmd, 0, str_replace("arsse.php", $name, CLI::USAGE));
$this->assertLoaded(false); \Phake::verify($this->cli, \Phake::times(0))->loadConf;
} }
public function provideHelpText(): iterable { public function provideHelpText(): iterable {
@ -73,7 +62,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::when($srv)->watch->thenReturn(new \DateTimeImmutable); \Phake::when($srv)->watch->thenReturn(new \DateTimeImmutable);
\Phake::when($this->cli)->getInstance(Service::class)->thenReturn($srv); \Phake::when($this->cli)->getInstance(Service::class)->thenReturn($srv);
$this->assertConsole($this->cli, "arsse.php daemon", 0); $this->assertConsole($this->cli, "arsse.php daemon", 0);
$this->assertLoaded(true); \Phake::verify($this->cli)->loadConf;
\Phake::verify($srv)->watch(true); \Phake::verify($srv)->watch(true);
\Phake::verify($this->cli)->getInstance(Service::class); \Phake::verify($this->cli)->getInstance(Service::class);
} }
@ -83,7 +72,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::when($srv)->watch->thenReturn(new \DateTimeImmutable); \Phake::when($srv)->watch->thenReturn(new \DateTimeImmutable);
\Phake::when($this->cli)->getInstance(Service::class)->thenReturn($srv); \Phake::when($this->cli)->getInstance(Service::class)->thenReturn($srv);
$this->assertConsole($this->cli, "arsse.php feed refresh-all", 0); $this->assertConsole($this->cli, "arsse.php feed refresh-all", 0);
$this->assertLoaded(true); \Phake::verify($this->cli)->loadConf;
\Phake::verify($srv)->watch(false); \Phake::verify($srv)->watch(false);
\Phake::verify($this->cli)->getInstance(Service::class); \Phake::verify($this->cli)->getInstance(Service::class);
} }
@ -94,7 +83,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::when(Arsse::$db)->feedUpdate(1, true)->thenReturn(true); \Phake::when(Arsse::$db)->feedUpdate(1, true)->thenReturn(true);
\Phake::when(Arsse::$db)->feedUpdate(2, true)->thenThrow(new \JKingWeb\Arsse\Feed\Exception("http://example.com/", new \PicoFeed\Client\InvalidUrlException)); \Phake::when(Arsse::$db)->feedUpdate(2, true)->thenThrow(new \JKingWeb\Arsse\Feed\Exception("http://example.com/", new \PicoFeed\Client\InvalidUrlException));
$this->assertConsole($this->cli, $cmd, $exitStatus, $output); $this->assertConsole($this->cli, $cmd, $exitStatus, $output);
$this->assertLoaded(true); \Phake::verify($this->cli)->loadConf;
\Phake::verify(Arsse::$db)->feedUpdate; \Phake::verify(Arsse::$db)->feedUpdate;
} }
@ -113,7 +102,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::when($conf)->exportFile("bad.conf", true)->thenThrow(new \JKingWeb\Arsse\Conf\Exception("fileUnwritable")); \Phake::when($conf)->exportFile("bad.conf", true)->thenThrow(new \JKingWeb\Arsse\Conf\Exception("fileUnwritable"));
\Phake::when($this->cli)->getInstance(Conf::class)->thenReturn($conf); \Phake::when($this->cli)->getInstance(Conf::class)->thenReturn($conf);
$this->assertConsole($this->cli, $cmd, $exitStatus); $this->assertConsole($this->cli, $cmd, $exitStatus);
$this->assertLoaded(false); \Phake::verify($this->cli, \Phake::times(0))->loadConf;
\Phake::verify($conf)->exportFile($file, true); \Phake::verify($conf)->exportFile($file, true);
} }
@ -288,7 +277,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::when($opml)->exportFile("bad.opml", $user, $flat)->thenThrow(new \JKingWeb\Arsse\ImportExport\Exception("fileUnwritable")); \Phake::when($opml)->exportFile("bad.opml", $user, $flat)->thenThrow(new \JKingWeb\Arsse\ImportExport\Exception("fileUnwritable"));
\Phake::when($this->cli)->getInstance(OPML::class)->thenReturn($opml); \Phake::when($this->cli)->getInstance(OPML::class)->thenReturn($opml);
$this->assertConsole($this->cli, $cmd, $exitStatus); $this->assertConsole($this->cli, $cmd, $exitStatus);
$this->assertLoaded(true); \Phake::verify($this->cli)->loadConf;
\Phake::verify($opml)->exportFile($file, $user, $flat); \Phake::verify($opml)->exportFile($file, $user, $flat);
} }
@ -329,7 +318,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::when($opml)->importFile("bad.opml", $user, $flat, $replace)->thenThrow(new \JKingWeb\Arsse\ImportExport\Exception("fileUnreadable")); \Phake::when($opml)->importFile("bad.opml", $user, $flat, $replace)->thenThrow(new \JKingWeb\Arsse\ImportExport\Exception("fileUnreadable"));
\Phake::when($this->cli)->getInstance(OPML::class)->thenReturn($opml); \Phake::when($this->cli)->getInstance(OPML::class)->thenReturn($opml);
$this->assertConsole($this->cli, $cmd, $exitStatus); $this->assertConsole($this->cli, $cmd, $exitStatus);
$this->assertLoaded(true); \Phake::verify($this->cli)->loadConf;
\Phake::verify($opml)->importFile($file, $user, $flat, $replace); \Phake::verify($opml)->importFile($file, $user, $flat, $replace);
} }

Loading…
Cancel
Save