<?php declare(strict_types=1);
class WikiTest extends ShimmiePHPUnitTestCase
{
    public function testIndex()
    {
        $this->get_page("wiki");
        $this->assert_title("Index");
        $this->assert_text("This is a default page");
    }

    public function testAccess()
    {
        $this->markTestIncomplete();

        global $config;
        foreach (["anon", "user", "admin"] as $user) {
            foreach ([false, true] as $allowed) {
                // admin has no settings to set
                if ($user != "admin") {
                    $config->set_bool("wiki_edit_$user", $allowed);
                }

                if ($user == "user") {
                    $this->log_in_as_user();
                }
                if ($user == "admin") {
                    $this->log_in_as_admin();
                }

                $this->get_page("wiki/test");
                $this->assert_title("test");
                $this->assert_text("This is a default page");

                if ($allowed || $user == "admin") {
                    $this->get_page("wiki/test", ['edit'=>'on']);
                    $this->assert_text("Editor");
                } else {
                    $this->get_page("wiki/test", ['edit'=>'on']);
                    $this->assert_no_text("Editor");
                }

                if ($user == "user" || $user == "admin") {
                    $this->log_out();
                }
            }
        }
    }

    public function testLock()
    {
        $this->markTestIncomplete();

        global $config;
        $config->set_bool("wiki_edit_anon", true);
        $config->set_bool("wiki_edit_user", false);

        $this->log_in_as_admin();

        $this->get_page("wiki/test_locked");
        $this->assert_title("test_locked");
        $this->assert_text("This is a default page");
        $this->click("Edit");
        $this->set_field("body", "test_locked content");
        $this->set_field("lock", true);
        $this->click("Save");
        $this->log_out();

        $this->log_in_as_user();
        $this->get_page("wiki/test_locked");
        $this->assert_title("test_locked");
        $this->assert_text("test_locked content");
        $this->assert_no_text("Edit");
        $this->log_out();

        $this->get_page("wiki/test_locked");
        $this->assert_title("test_locked");
        $this->assert_text("test_locked content");
        $this->assert_no_text("Edit");

        $this->log_in_as_admin();
        $this->get_page("wiki/test_locked");
        $this->click("Delete All");
        $this->log_out();
    }

    public function testDefault()
    {
        $this->markTestIncomplete();

        $this->log_in_as_admin();
        $this->get_page("wiki/wiki:default");
        $this->assert_title("wiki:default");
        $this->assert_text("This is a default page");
        $this->click("Edit");
        $this->set_field("body", "Empty page! Fill it!");
        $this->click("Save");

        $this->get_page("wiki/something");
        $this->assert_text("Empty page! Fill it!");

        $this->get_page("wiki/wiki:default");
        $this->click("Delete All");
        $this->log_out();
    }

    public function testRevisions()
    {
        $this->markTestIncomplete();

        $this->log_in_as_admin();
        $this->get_page("wiki/test");
        $this->assert_title("test");
        $this->assert_text("This is a default page");
        $this->click("Edit");
        $this->set_field("body", "Mooooo 1");
        $this->click("Save");
        $this->assert_text("Mooooo 1");
        $this->assert_text("Revision 1");
        $this->click("Edit");
        $this->set_field("body", "Mooooo 2");
        $this->click("Save");
        $this->assert_text("Mooooo 2");
        $this->assert_text("Revision 2");
        $this->click("Delete This Version");
        $this->assert_text("Mooooo 1");
        $this->assert_text("Revision 1");
        $this->click("Delete All");
        $this->log_out();
    }
}