* @license GNU General Public License, version 2 (GPL-2.0) * * For full copyright and license information, please see * the docs/CREDITS.txt file. * */ class phpbb_help_manager_test extends phpbb_test_case { /** @var \phpbb\help\manager */ protected $manager; /** @var \phpbb\template\template */ protected $template; /** @var \phpbb\language\language */ protected $language; protected function setUp(): void { $this->template = $this->getMockBuilder('\phpbb\template\template') ->disableOriginalConstructor() ->getMock(); $this->language = $this->getMockBuilder('\phpbb\language\language') ->disableOriginalConstructor() ->getMock(); $this->manager = new \phpbb\help\manager( new \phpbb_mock_event_dispatcher(), $this->language, $this->template ); } public function add_block_data() { return array( array('abc', false, array(), false), array('def', true, array(), true), array( 'abc', false, array( 'question1' => 'answer1', 'question2' => 'answer2', 'question3' => 'answer3', ), false ), ); } /** * @dataProvider add_block_data * * @param string $block_name * @param bool $switch * @param array $questions * @param bool $switch_expected */ public function test_add_block($block_name, $switch, $questions, $switch_expected) { $question_ary = $question_ary_upper = $template_call_args = []; foreach ($questions as $question => $answer) { $question_ary = array_merge($question_ary, [[$question], [$answer]]); $question_ary_upper = array_merge($question_ary_upper, [strtoupper($question), strtoupper($answer)]); $template_call_args = array_merge($template_call_args, [['faq_block.faq_row', [ 'FAQ_QUESTION' => strtoupper($question), 'FAQ_ANSWER' => strtoupper($answer), ] ]]); } $this->language->expects($this->exactly(count($questions)*2 + 1)) ->method('lang') ->withConsecutive([$block_name], ...$question_ary) ->will($this->onConsecutiveCalls(strtoupper($block_name), ...$question_ary_upper)); $this->template->expects($this->exactly(count($questions) + 1)) ->method('assign_block_vars') ->withConsecutive( ['faq_block', [ 'BLOCK_TITLE' => strtoupper($block_name), 'SWITCH_COLUMN' => $switch_expected, ]], ...$template_call_args ); $this->manager->add_block($block_name, $switch, $questions); $this->assertEquals($switch_expected, $this->manager->switched_column()); } public function add_question_data() { return array( array('question1', 'answer1'), array('question2', 'answer2'), ); } /** * @dataProvider add_question_data * * @param string $question * @param string $answer */ public function test_add_question($question, $answer) { $this->language->expects($this->exactly(2)) ->method('lang') ->withConsecutive( [$question], [$answer] ) ->will($this->onConsecutiveCalls(strtoupper($question), strtoupper($answer))); $this->template->expects($this->once()) ->method('assign_block_vars') ->with('faq_block.faq_row', array( 'FAQ_QUESTION' => strtoupper($question), 'FAQ_ANSWER' => strtoupper($answer), )); $this->manager->add_question($question, $answer); } public function test_add_block_double_switch() { $block_name = ['abc', 'def']; $switch_expected = [true, false]; $this->language->expects($this->exactly(2)) ->method('lang') ->withConsecutive([$block_name[0]], [$block_name[1]]) ->will($this->onConsecutiveCalls(strtoupper($block_name[0]), strtoupper($block_name[1]))); $this->template->expects($this->exactly(2)) ->method('assign_block_vars') ->withConsecutive( ['faq_block', [ 'BLOCK_TITLE' => strtoupper($block_name[0]), 'SWITCH_COLUMN' => $switch_expected[0], ]], ['faq_block', [ 'BLOCK_TITLE' => strtoupper($block_name[1]), 'SWITCH_COLUMN' => $switch_expected[1], ]] ); $this->manager->add_block($block_name[0], true); $this->assertTrue($this->manager->switched_column()); // Add a second block with switch $this->manager->add_block($block_name[1], true); $this->assertTrue($this->manager->switched_column()); } }