Skip to content

Commit e565958

Browse files
authored
Merge pull request #365 from iMattPro/updates
Add more tests
2 parents 352829d + eda7400 commit e565958

File tree

4 files changed

+378
-3
lines changed

4 files changed

+378
-3
lines changed

tests/acp/boardrules_info_test.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
namespace phpbb\boardrules\tests\acp;
4+
5+
class boardrules_info_test extends \phpbb_test_case
6+
{
7+
/** @var \phpbb\boardrules\acp\boardrules_info */
8+
protected $boardrules_info;
9+
10+
public function setUp(): void
11+
{
12+
parent::setUp();
13+
$this->boardrules_info = new \phpbb\boardrules\acp\boardrules_info();
14+
}
15+
16+
public function test_module()
17+
{
18+
$module_data = $this->boardrules_info->module();
19+
20+
// Test the basic structure
21+
$this->assertIsArray($module_data);
22+
$this->assertArrayHasKey('filename', $module_data);
23+
$this->assertArrayHasKey('title', $module_data);
24+
$this->assertArrayHasKey('modes', $module_data);
25+
26+
// Test specific values
27+
$this->assertEquals('\phpbb\boardrules\acp\boardrules_module', $module_data['filename']);
28+
$this->assertEquals('ACP_BOARDRULES', $module_data['title']);
29+
30+
// Test modes array
31+
$this->assertArrayHasKey('settings', $module_data['modes']);
32+
$this->assertArrayHasKey('manage', $module_data['modes']);
33+
34+
// Test settings mode
35+
$settings = $module_data['modes']['settings'];
36+
$this->assertEquals('ACP_BOARDRULES_SETTINGS', $settings['title']);
37+
$this->assertEquals('ext_phpbb/boardrules && acl_a_boardrules', $settings['auth']);
38+
$this->assertEquals(['ACP_BOARDRULES'], $settings['cat']);
39+
40+
// Test manage mode
41+
$manage = $module_data['modes']['manage'];
42+
$this->assertEquals('ACP_BOARDRULES_MANAGE', $manage['title']);
43+
$this->assertEquals('ext_phpbb/boardrules && acl_a_boardrules', $manage['auth']);
44+
$this->assertEquals(['ACP_BOARDRULES'], $manage['cat']);
45+
}
46+
}
Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
<?php
2+
3+
namespace phpbb\boardrules\tests\acp;
4+
5+
class boardrules_module_test extends \phpbb_test_case
6+
{
7+
private const BOARDRULES_ACP = 'boardrules_acp';
8+
private const PHPBB_BOARDRULES = 'phpbb/boardrules';
9+
private const TEMPLATE_MANAGE = 'boardrules_manage';
10+
private const TEMPLATE_SETTINGS = 'boardrules_settings';
11+
private const DEFAULT_LANGUAGE = 'en';
12+
13+
/** @var \PHPUnit\Framework\MockObject\MockObject */
14+
protected $language;
15+
16+
/** @var \PHPUnit\Framework\MockObject\MockObject */
17+
protected $admin_controller;
18+
19+
/** @var \PHPUnit\Framework\MockObject\MockObject */
20+
protected $request;
21+
22+
/** @var \phpbb\boardrules\acp\boardrules_module */
23+
protected $boardrules_module;
24+
25+
/** @var \phpbb_mock_container_builder */
26+
protected $container;
27+
28+
protected function setUp(): void
29+
{
30+
parent::setUp();
31+
$this->initializeMocks();
32+
$this->setupContainer();
33+
$this->createBoardrulesModule();
34+
}
35+
36+
private function initializeMocks(): void
37+
{
38+
$this->language = $this->getMockBuilder('\phpbb\language\language')
39+
->disableOriginalConstructor()
40+
->getMock();
41+
42+
$this->admin_controller = $this->getMockBuilder('\phpbb\boardrules\controller\admin_controller')
43+
->disableOriginalConstructor()
44+
->getMock();
45+
46+
$this->request = $this->getMockBuilder('\phpbb\request\request')
47+
->disableOriginalConstructor()
48+
->getMock();
49+
}
50+
51+
private function setupContainer(): void
52+
{
53+
$this->container = new \phpbb_mock_container_builder();
54+
$this->container->set('language', $this->language);
55+
$this->container->set('request', $this->request);
56+
$this->container->set('phpbb.boardrules.admin.controller', $this->admin_controller);
57+
58+
global $phpbb_container;
59+
$phpbb_container = $this->container;
60+
}
61+
62+
private function createBoardrulesModule(): void
63+
{
64+
$this->boardrules_module = new \phpbb\boardrules\acp\boardrules_module();
65+
}
66+
67+
private function setupLanguageExpectation(): void
68+
{
69+
$this->language->expects($this->once())
70+
->method('add_lang')
71+
->with(self::BOARDRULES_ACP, self::PHPBB_BOARDRULES);
72+
}
73+
74+
public function test_settings_mode(): void
75+
{
76+
$this->setupLanguageExpectation();
77+
$this->setupNotificationRequest(false);
78+
79+
$this->admin_controller->expects($this->once())
80+
->method('display_options');
81+
82+
$this->executeModeAndAssert('settings', self::TEMPLATE_SETTINGS, 'ACP_BOARDRULES_SETTINGS');
83+
}
84+
85+
public function test_manage_mode_with_empty_language(): void
86+
{
87+
$this->setupLanguageExpectation();
88+
$this->setupEmptyRequestVariables();
89+
90+
$this->admin_controller->expects($this->once())
91+
->method('display_language_selection');
92+
93+
$this->executeModeAndAssert('manage', self::TEMPLATE_MANAGE, 'ACP_BOARDRULES_MANAGE');
94+
}
95+
96+
public function test_manage_mode_add_action(): void
97+
{
98+
$this->setupLanguageExpectation();
99+
$this->setupManageRequestVariables('add', self::DEFAULT_LANGUAGE, 1, 0);
100+
101+
$this->admin_controller->expects($this->once())
102+
->method('add_rule')
103+
->with(self::DEFAULT_LANGUAGE, 1);
104+
105+
$this->executeModeAndAssert('manage', self::TEMPLATE_MANAGE, 'ACP_BOARDRULES_CREATE_RULE');
106+
}
107+
108+
public function test_manage_mode_delete_action(): void
109+
{
110+
$this->setupLanguageExpectation();
111+
$this->setupManageRequestVariables('delete', self::DEFAULT_LANGUAGE, 0, 1);
112+
113+
$this->admin_controller->expects($this->once())
114+
->method('delete_rule')
115+
->with(1);
116+
117+
$this->executeModeAndAssert('manage', self::TEMPLATE_MANAGE, 'ACP_BOARDRULES_MANAGE');
118+
}
119+
120+
public function test_manage_mode_edit_action(): void
121+
{
122+
$this->setupLanguageExpectation();
123+
$this->setupManageRequestVariables('edit', self::DEFAULT_LANGUAGE, 0, 1);
124+
125+
$this->admin_controller->expects($this->once())
126+
->method('edit_rule')
127+
->with(1);
128+
129+
$this->executeModeAndAssert('manage', self::TEMPLATE_MANAGE, 'ACP_BOARDRULES_EDIT_RULE');
130+
}
131+
132+
public function test_manage_mode_move_down_action(): void
133+
{
134+
$this->setupLanguageExpectation();
135+
$this->setupManageRequestVariables('move_down', self::DEFAULT_LANGUAGE, 0, 1);
136+
137+
$this->admin_controller->expects($this->once())
138+
->method('move_rule')
139+
->with(1);
140+
141+
$this->executeModeAndAssert('manage', self::TEMPLATE_MANAGE, 'ACP_BOARDRULES_MANAGE');
142+
}
143+
144+
public function test_manage_mode_move_up_action(): void
145+
{
146+
$this->setupLanguageExpectation();
147+
$this->setupManageRequestVariables('move_up', self::DEFAULT_LANGUAGE, 0, 1);
148+
149+
$this->admin_controller->expects($this->once())
150+
->method('move_rule')
151+
->with(1);
152+
153+
$this->executeModeAndAssert('manage', self::TEMPLATE_MANAGE, 'ACP_BOARDRULES_MANAGE');
154+
}
155+
156+
private function setupNotificationRequest(bool $value): void
157+
{
158+
$this->request->expects($this->once())
159+
->method('is_set_post')
160+
->with('action_send_notification')
161+
->willReturn($value);
162+
}
163+
164+
private function setupEmptyRequestVariables(): void
165+
{
166+
$this->request->method('variable')
167+
->willReturnMap([
168+
['action', '', ''],
169+
['language', '', ''],
170+
['parent_id', 0, 0],
171+
['rule_id', 0, 0]
172+
]);
173+
}
174+
175+
private function setupManageRequestVariables(string $action, string $language, int $parentId, int $ruleId): void
176+
{
177+
$this->request->method('variable')
178+
->willReturnMap([
179+
['action', '', false, \phpbb\request\request_interface::REQUEST, $action],
180+
['language', '', false, \phpbb\request\request_interface::REQUEST, $language],
181+
['parent_id', 0, false, \phpbb\request\request_interface::REQUEST, $parentId],
182+
['rule_id', 0, false, \phpbb\request\request_interface::REQUEST, $ruleId]
183+
]);
184+
}
185+
186+
private function executeModeAndAssert(string $mode, string $expectedTemplate, string $expectedTitle): void
187+
{
188+
$this->boardrules_module->main(0, $mode);
189+
$this->assertModuleProperties($expectedTemplate, $expectedTitle);
190+
}
191+
192+
private function assertModuleProperties(string $expectedTemplate, string $expectedTitle): void
193+
{
194+
$this->assertEquals($expectedTemplate, $this->boardrules_module->tpl_name);
195+
$this->assertEquals($expectedTitle, $this->boardrules_module->page_title);
196+
}
197+
}

tests/controller/main_controller_test.php

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,28 @@ class main_controller_test extends \phpbb_test_case
2020
public function display_data()
2121
{
2222
return array(
23-
array(200, '@phpbb_boardrules/boardrules_controller.html'),
23+
'A rule' => array(
24+
200,
25+
'@phpbb_boardrules/boardrules_controller.html',
26+
[
27+
'get_left_id' => 1,
28+
'get_right_id' => 2,
29+
'get_anchor' => '',
30+
'get_title' => 'title',
31+
'get_message_for_display' => 'content',
32+
]
33+
),
34+
'A category' => array(
35+
200,
36+
'@phpbb_boardrules/boardrules_controller.html',
37+
[
38+
'get_left_id' => 1,
39+
'get_right_id' => 6,
40+
'get_anchor' => '',
41+
'get_title' => 'title',
42+
'get_message_for_display' => 'content',
43+
],
44+
),
2445
);
2546
}
2647

@@ -29,7 +50,7 @@ public function display_data()
2950
*
3051
* @dataProvider display_data
3152
*/
32-
public function test_display($status_code, $page_content)
53+
public function test_display($status_code, $page_content, $rule_data)
3354
{
3455
global $config, $user, $phpbb_root_path, $phpEx;
3556

@@ -39,13 +60,25 @@ public function test_display($status_code, $page_content)
3960
$lang = new \phpbb\language\language($lang_loader);
4061
$user = new \phpbb\user($lang, '\phpbb\datetime');
4162

63+
$entity = $this->getMockBuilder('\phpbb\boardrules\entity\rule')
64+
->disableOriginalConstructor()
65+
->getMock();
66+
67+
foreach ($rule_data as $method => $return_value)
68+
{
69+
$entity->method($method)->willReturn($return_value);
70+
}
71+
4272
// Mock the rule operator and return an empty array for get_rules method
4373
$rule_operator = $this->getMockBuilder('\phpbb\boardrules\operators\rule')
4474
->disableOriginalConstructor()
4575
->getMock();
46-
$rule_operator->expects(self::exactly(2))
76+
$rule_operator->expects(self::at(0))
4777
->method('get_rules')
4878
->willReturn(array());
79+
$rule_operator->expects(self::at(1))
80+
->method('get_rules')
81+
->willReturn([$entity]);
4982

5083
// Mock the controller helper and return render response object
5184
$controller_helper = $this->getMockBuilder('\phpbb\controller\helper')

0 commit comments

Comments
 (0)