From 40c0526f7465ba567ac984fe710d39c32803df46 Mon Sep 17 00:00:00 2001 From: nashe Date: Sun, 16 Jul 2017 17:18:50 +0200 Subject: Add tests for the installer --- .travis.yml | 3 ++ tests/InstallTest.php | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 tests/InstallTest.php diff --git a/.travis.yml b/.travis.yml index d89ed6f..70415d7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,6 +20,9 @@ install: before_deploy: - tar czvf moonmoon-$TRAVIS_TAG.tgz --exclude ".git" * +before_script: +- php -S 127.0.0.1:8081 >& /dev/null & + # deploy: # provider: releases # skip_cleanup: true diff --git a/tests/InstallTest.php b/tests/InstallTest.php new file mode 100644 index 0000000..f37f28c --- /dev/null +++ b/tests/InstallTest.php @@ -0,0 +1,84 @@ +client = new Client([ + 'base_uri' => 'http://127.0.0.1:8081', + 'timeout' => 1, + ]); + + $this->removeCustomFiles(); + } + + public function tearDown() + { + $this->removeCustomFiles(); + } + + protected function removeCustomFiles() + { + $toRemove = [ + custom_path('config.yml'), + custom_path('people.opml'), + custom_path('people.opml.bak'), + custom_path('cache') + ]; + + foreach ($toRemove as $path) { + if (file_exists($path)) { + unlink($path); + } + } + } + + public function test_index_page_tells_moonmoon_is_not_installed() + { + $res = $this->client->get('/index.php'); + $this->assertEquals(200, $res->getStatusCode()); + $this->assertContains('install moonmoon', (string) $res->getBody()); + } + + public function test_install_page_loads_without_error() + { + $res = $this->client->get('/install.php'); + $this->assertEquals(200, $res->getStatusCode()); + $this->assertContains('Administrator password', (string) $res->getBody()); + } + + /** + * Regression test, `people.opml` was created by requesting `/install.php` + * even if the site was not installed: `touch()` was called to see if + * the path was writable but the file was not removed. + */ + public function test_get_install_page_should_not_create_custom_files() + { + $this->client->get('/install.php'); + $this->assertFalse(file_exists(custom_path('people.opml'))); + $this->assertFalse(file_exists(custom_path('config.yml'))); + $this->assertFalse(file_exists(custom_path('inc/pwc.inc.php'))); + } + + public function test_install_button() + { + $data = [ + 'url' => 'http://127.0.0.1:8081/', + 'title' => 'My website', + 'password' => 'admin', + 'locale' => 'en', + ]; + + $res = $this->client->request('POST', '/install.php', [ + 'form_params' => $data + ]); + $this->assertEquals(200, $res->getStatusCode()); + $this->assertContains('Your moonmoon is ready.', (string) $res->getBody()); + } +} \ No newline at end of file -- cgit v1.2.1