exec('CREATE TABLE user_auth (id INTEGER, username TEXT)'); $db->exec('CREATE TABLE settings (name TEXT PRIMARY KEY, value TEXT)'); $db->exec('CREATE TABLE plugin_config (id INTEGER PRIMARY KEY, directory TEXT, name TEXT, author TEXT, webpage TEXT, version TEXT, last_updated TEXT, status INTEGER DEFAULT 0)'); $db->exec('CREATE TABLE plugin_hooks (name TEXT, status INTEGER)'); $db->exec('CREATE TABLE poller (id INTEGER, last_status TEXT, disabled TEXT)'); $db->prepare('INSERT INTO plugin_hooks VALUES (?, 0)')->execute([$name]); $GLOBALS['database_hostname'] = 'config-lifecycle-test'; $GLOBALS['database_port'] = 0; $GLOBALS['database_default'] = 'config-lifecycle-test'; $GLOBALS['database_sessions'] = ['config-lifecycle-test:0:config-lifecycle-test' => $db]; $GLOBALS['database_total_queries'] = 0; $_SESSION[SESS_MESSAGES] = []; file_put_contents($directory . '/INFO', "[info]\nname = $name\nversion = 1.0\n"); file_put_contents($directory . '/setup.php', ' "Configuration fixture", "author" => "Cacti tests", "version" => "1.0"]; } function plugin_' . $name . '_install() {} function plugin_' . $name . '_check_config() { return ' . $result . '; }'); if ($operation === 'install') { expect(api_plugin_install($name))->toBeTrue(); } else { $db->prepare('INSERT INTO plugin_config (directory, status) VALUES (?, 2)')->execute([$name]); api_plugin_enable($name); } expect((int) $db->query('SELECT status FROM plugin_config')->fetchColumn())->toBe(2); expect((int) $db->query('SELECT status FROM plugin_hooks')->fetchColumn())->toBe(0); expect($_SESSION[SESS_MESSAGES]['plugin_config']['message'])->toContain($name); expect($_SESSION[SESS_MESSAGES]['plugin_config']['level'])->toBe($result === 'null' ? MESSAGE_LEVEL_WARN : MESSAGE_LEVEL_ERROR); } finally { foreach ($saved as $key => [$exists, $value]) { if ($exists) { $GLOBALS[$key] = $value; } else { unset($GLOBALS[$key]); } } unlink($directory . '/setup.php'); unlink($directory . '/INFO'); rmdir($directory); } })->with([ ['install', 'false'], ['install', 'null'], ['enable', 'false'], ['enable', 'null'], ]);