diff --git a/tests/functional/browse_disabled_test.php b/tests/functional/browse_disabled_test.php new file mode 100644 index 0000000000..528f95fc25 --- /dev/null +++ b/tests/functional/browse_disabled_test.php @@ -0,0 +1,164 @@ + +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +/** +* @group functional +*/ +class phpbb_functional_browse_disabled_test extends phpbb_functional_test_case +{ + public function setUp(): void + { + parent::setUp(); + + $this->login(); + $this->admin_login(); + + // Disable board + $crawler = self::request('GET', 'adm/index.php?i=acp_board&mode=settings&sid=' . $this->sid); + $form = $crawler->selectButton('Submit')->form(); + $form->setValues(['config[board_disable]' => 1]); + + $crawler = self::submit($form); + $this->assertContainsLang('CONFIG_UPDATED', $crawler->filter('div[class="successbox"] > p')->text()); + + $this->logout(); + } + + public function tearDown(): void + { + $this->login(); + $this->admin_login(); + + // Disable board + $crawler = self::request('GET', 'adm/index.php?i=acp_board&mode=settings&sid=' . $this->sid); + $form = $crawler->selectButton('Submit')->form(); + $form->setValues(['config[board_disable]' => 0]); + + $crawler = self::submit($form); + $this->assertContainsLang('CONFIG_UPDATED', $crawler->filter('div[class="successbox"] > p')->text()); + + $this->logout(); + + parent::tearDown(); + } + + public function test_disabled_index_admin() + { + $this->login(); + $this->admin_login(); + + // Board should be fully visible for all variations for admins + for ($i = 0; $i <= 2; $i++) + { + $crawler = self::request('GET', 'adm/index.php?i=acp_board&mode=settings&sid=' . $this->sid); + $form = $crawler->selectButton('Submit')->form(); + $form->setValues(['config[board_disable_access]' => $i]); + + $crawler = self::submit($form); + $this->assertContainsLang('CONFIG_UPDATED', $crawler->filter('div[class="successbox"] > p')->text()); + + $crawler = self::request('GET', 'index.php'); + $this->assertGreaterThan(0, $crawler->filter('.topiclist')->count()); + $this->assertContainsLang('BOARD_DISABLED', $crawler->filter('div[class="rules"]')->text()); + } + + $this->logout(); + } + + public function test_disabled_index_global_moderator() + { + $this->create_user('moderator-disabled-index'); + $this->add_user_group('GLOBAL_MODERATORS', ['moderator-disabled-index']); + + // Board should be fully visible for options 1 & 2 + for ($i = 0; $i <= 2; $i++) + { + $this->login(); + $this->admin_login(); + + $crawler = self::request('GET', 'adm/index.php?i=acp_board&mode=settings&sid=' . $this->sid); + $form = $crawler->selectButton('Submit')->form(); + $form->setValues(['config[board_disable_access]' => $i]); + + $crawler = self::submit($form); + $this->assertContainsLang('CONFIG_UPDATED', $crawler->filter('div[class="successbox"] > p')->text()); + + $this->logout(); + + $this->login('moderator-disabled-index'); + + $crawler = self::request('GET', 'index.php'); + + if ($i == 0) + { + $this->assertEquals(0, $crawler->filter('.topiclist')->count(), 'Board should not be visible for option ' . $i); + $this->assertContainsLang('BOARD_DISABLE', $crawler->filter('div#message')->text()); + } + else + { + $this->assertGreaterThan(0, $crawler->filter('.topiclist')->count(), 'Board should be visible for option ' . $i); + $this->assertContainsLang('BOARD_DISABLED', $crawler->filter('div[class="rules"]')->text()); + } + $this->logout(); + } + } + + public function test_disabled_index_local_moderator() + { + $user_id = $this->create_user('moduser-disabled-index'); + + // Set m_delete to yes for user --> user has moderator permission + $this->add_lang('acp/permissions'); + $this->login(); + $this->admin_login(); + $crawler = self::request('GET', "adm/index.php?i=acp_permissions&icat=16&mode=setting_user_local&user_id[0]=$user_id&forum_id[0]=2&type=m_&sid={$this->sid}"); + var_export($crawler->text()); + $form = $crawler->selectButton($this->lang('APPLY_PERMISSIONS'))->form(); + $data = array("setting[$user_id][2][m_edit]" => ACL_YES); + $form->setValues($data); + self::submit($form); + $this->logout(); + + // Board should be fully visible for option 2 only + for ($i = 0; $i <= 2; $i++) + { + $this->login(); + $this->admin_login(); + + $crawler = self::request('GET', 'adm/index.php?i=acp_board&mode=settings&sid=' . $this->sid); + $form = $crawler->selectButton('Submit')->form(); + $form->setValues(['config[board_disable_access]' => $i]); + + $crawler = self::submit($form); + $this->assertContainsLang('CONFIG_UPDATED', $crawler->filter('div[class="successbox"] > p')->text()); + + $this->logout(); + + $this->login('moduser-disabled-index'); + + $crawler = self::request('GET', 'index.php'); + + if ($i < 2) + { + $this->assertEquals(0, $crawler->filter('.topiclist')->count(), 'Board should not be visible for option ' . $i); + $this->assertContainsLang('BOARD_DISABLE', $crawler->filter('div#message')->text()); + } + else + { + $this->assertGreaterThan(0, $crawler->filter('.topiclist')->count(), 'Board should be visible for option ' . $i); + $this->assertContainsLang('BOARD_DISABLED', $crawler->filter('div[class="rules"]')->text()); + } + $this->logout(); + } + } +}