Skip to content

Commit 71dd091

Browse files
authored
Merge pull request #19 from iMattPro/updates
2 parents 80369c6 + a243b4c commit 71dd091

8 files changed

Lines changed: 236 additions & 363 deletions

File tree

tests/controller/log_controller_test.php

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,30 @@
1212

1313
class log_controller_test extends \phpbb_test_case
1414
{
15-
public function test_log_rejects_invalid_json_payload()
15+
/** @var \phpbb\consentmanager\service\log_manager|\PHPUnit\Framework\MockObject\MockObject */
16+
protected $log_manager;
17+
18+
/** @var \phpbb\consentmanager\service\consent_manager_interface|\PHPUnit\Framework\MockObject\MockObject */
19+
protected $consent_manager;
20+
21+
/** @var \phpbb\consentmanager\controller\log_controller */
22+
protected $controller;
23+
24+
protected function setUp(): void
1625
{
17-
$controller = new \phpbb\consentmanager\controller\log_controller(
18-
$this->createMock('\phpbb\consentmanager\service\log_manager'),
19-
$this->createMock('\phpbb\consentmanager\service\consent_manager_interface')
26+
parent::setUp();
27+
28+
$this->log_manager = $this->createMock('\phpbb\consentmanager\service\log_manager');
29+
$this->consent_manager = $this->createMock('\phpbb\consentmanager\service\consent_manager_interface');
30+
$this->controller = new \phpbb\consentmanager\controller\log_controller(
31+
$this->log_manager,
32+
$this->consent_manager
2033
);
34+
}
2135

22-
$response = $controller->log(\Symfony\Component\HttpFoundation\Request::create(
36+
public function test_log_rejects_invalid_json_payload()
37+
{
38+
$response = $this->controller->log(\Symfony\Component\HttpFoundation\Request::create(
2339
'/consent/log',
2440
'POST',
2541
array(),
@@ -41,21 +57,18 @@ public function test_log_rejects_invalid_json_payload()
4157
*/
4258
public function test_log_returns_service_validation_failure($submission_error, $expected_status)
4359
{
44-
$log_manager = $this->createMock('\phpbb\consentmanager\service\log_manager');
45-
$log_manager->expects(self::never())
60+
$this->log_manager->expects(self::never())
4661
->method('log_consent');
4762

48-
$consent_manager = $this->createMock('\phpbb\consentmanager\service\consent_manager_interface');
49-
$consent_manager->expects(self::once())
63+
$this->consent_manager->expects(self::once())
5064
->method('validate_log_payload')
5165
->with(array('hash' => 'bad'))
5266
->willReturn(array(
5367
'success' => false,
5468
'error' => $submission_error,
5569
));
5670

57-
$controller = new \phpbb\consentmanager\controller\log_controller($log_manager, $consent_manager);
58-
$response = $controller->log(new \Symfony\Component\HttpFoundation\Request(array(), array(), array(), array(), array(), array(), json_encode(array(
71+
$response = $this->controller->log(new \Symfony\Component\HttpFoundation\Request(array(), array(), array(), array(), array(), array(), json_encode(array(
5972
'hash' => 'bad',
6073
))));
6174

@@ -65,23 +78,19 @@ public function test_log_returns_service_validation_failure($submission_error, $
6578

6679
public function test_log_persists_valid_submission()
6780
{
68-
$arguments = [['necessary', 'analytics'], 5];
69-
$log_manager = $this->createMock('\phpbb\consentmanager\service\log_manager');
70-
$log_manager->expects(self::once())
81+
$this->log_manager->expects(self::once())
7182
->method('log_consent')
72-
->with(...$arguments);
83+
->with(['necessary', 'analytics'], 5);
7384

74-
$consent_manager = $this->createMock('\phpbb\consentmanager\service\consent_manager_interface');
75-
$consent_manager->expects(self::once())
85+
$this->consent_manager->expects(self::once())
7686
->method('validate_log_payload')
7787
->willReturn(array(
7888
'success' => true,
7989
'categories' => array('necessary', 'analytics'),
8090
'version' => 5,
8191
));
8292

83-
$controller = new \phpbb\consentmanager\controller\log_controller($log_manager, $consent_manager);
84-
$response = $controller->log(new \Symfony\Component\HttpFoundation\Request(array(), array(), array(), array(), array(), array(), json_encode(array(
93+
$response = $this->controller->log(new \Symfony\Component\HttpFoundation\Request(array(), array(), array(), array(), array(), array(), json_encode(array(
8594
'hash' => 'good',
8695
'version' => 5,
8796
'categories' => array('analytics'),

tests/event/listener_test.php

Lines changed: 24 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,20 @@
1212

1313
class listener_test extends \phpbb_test_case
1414
{
15-
/** @var \phpbb\language\language */
15+
/** @var \phpbb\language\language|\PHPUnit\Framework\MockObject\MockObject */
1616
protected $language;
1717

18+
/** @var \phpbb\consentmanager\service\media_manager|\PHPUnit\Framework\MockObject\MockObject */
19+
protected $media_manager;
20+
1821
protected function setUp(): void
1922
{
2023
parent::setUp();
2124

2225
global $user;
2326

2427
$this->language = $this->createMock('\phpbb\language\language');
28+
$this->media_manager = $this->createMock('\phpbb\consentmanager\service\media_manager');
2529

2630
$user = new \phpbb\user($this->language, '\phpbb\datetime');
2731
$user->data = [
@@ -30,6 +34,17 @@ protected function setUp(): void
3034
];
3135
}
3236

37+
protected function create_listener($helper = null, $consent_manager = null, $template = null, $media_manager = null)
38+
{
39+
return new \phpbb\consentmanager\event\listener(
40+
$helper ?? $this->createMock('\phpbb\controller\helper'),
41+
$this->language,
42+
$consent_manager ?? $this->createMock('\phpbb\consentmanager\service\consent_manager_interface'),
43+
$template ?? $this->createMock('\phpbb\template\template'),
44+
$media_manager ?? $this->media_manager
45+
);
46+
}
47+
3348
public function test_get_subscribed_events()
3449
{
3550
self::assertSame([
@@ -43,22 +58,11 @@ public function test_configure_iframe_embeds_delegates_to_media_manager()
4358
{
4459
$configurator = new \s9e\TextFormatter\Configurator();
4560

46-
$args = [$configurator];
47-
48-
$media_manager = $this->createMock('\phpbb\consentmanager\service\media_manager');
49-
$media_manager->expects(self::once())
61+
$this->media_manager->expects(self::once())
5062
->method('configure_iframe_embeds')
51-
->with(...$args);
52-
53-
$listener = new \phpbb\consentmanager\event\listener(
54-
$this->createMock('\phpbb\controller\helper'),
55-
$this->language,
56-
$this->createMock('\phpbb\consentmanager\service\consent_manager_interface'),
57-
$this->createMock('\phpbb\template\template'),
58-
$media_manager
59-
);
63+
->with($configurator);
6064

61-
$listener->configure_iframe_embeds(new \phpbb\event\data([
65+
$this->create_listener()->configure_iframe_embeds(new \phpbb\event\data([
6266
'configurator' => $configurator,
6367
]));
6468
}
@@ -69,22 +73,11 @@ public function test_configure_iframe_renderer_delegates_to_media_manager()
6973
->disableOriginalConstructor()
7074
->getMock();
7175

72-
$args = [$renderer];
73-
74-
$media_manager = $this->createMock('\phpbb\consentmanager\service\media_manager');
75-
$media_manager->expects(self::once())
76+
$this->media_manager->expects(self::once())
7677
->method('configure_iframe_renderer')
77-
->with(...$args);
78-
79-
$listener = new \phpbb\consentmanager\event\listener(
80-
$this->createMock('\phpbb\controller\helper'),
81-
$this->language,
82-
$this->createMock('\phpbb\consentmanager\service\consent_manager_interface'),
83-
$this->createMock('\phpbb\template\template'),
84-
$media_manager
85-
);
78+
->with($renderer);
8679

87-
$listener->configure_iframe_renderer(new \phpbb\event\data([
80+
$this->create_listener()->configure_iframe_renderer(new \phpbb\event\data([
8881
'renderer' => $renderer,
8982
]));
9083
}
@@ -171,7 +164,7 @@ public function test_inject_frontend_assigns_template_payload($invoke)
171164
]]
172165
);
173166

174-
$listener = new class($helper, $this->language, $consent_manager, $template, $this->createMock('\phpbb\consentmanager\service\media_manager'), $invoke) extends \phpbb\consentmanager\event\listener {
167+
$listener = new class($helper, $this->language, $consent_manager, $template, $this->media_manager, $invoke) extends \phpbb\consentmanager\event\listener {
175168
/** @var bool */
176169
protected $is_frontend_context;
177170

@@ -214,14 +207,6 @@ public function test_inject_frontend_skips_category_blocks_when_frontend_disable
214207
$template->expects(self::never())
215208
->method('assign_block_vars');
216209

217-
$listener = new \phpbb\consentmanager\event\listener(
218-
$helper,
219-
$this->language,
220-
$consent_manager,
221-
$template,
222-
$this->createMock('\phpbb\consentmanager\service\media_manager')
223-
);
224-
225-
$listener->inject_frontend();
210+
$this->create_listener($helper, $consent_manager, $template)->inject_frontend();
226211
}
227212
}

tests/functional/frontend_test.php

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public function test_frontend_markup_is_injected_on_board_pages()
4343

4444
public function test_log_endpoint_rejects_invalid_json_payload()
4545
{
46-
$payload = $this->extract_payload(self::request('GET', 'index.php') ? self::get_content() : '');
46+
$payload = $this->fetch_frontend_payload();
4747

4848
self::$client->request(
4949
'POST',
@@ -63,22 +63,9 @@ public function test_log_endpoint_rejects_invalid_json_payload()
6363

6464
public function test_log_endpoint_accepts_valid_anonymous_submission_without_persisting_it()
6565
{
66-
$payload = $this->extract_payload(self::request('GET', 'index.php') ? self::get_content() : '');
66+
$payload = $this->fetch_frontend_payload();
67+
$response = $this->post_log_request($payload, array('analytics', 'analytics', 'unknown'));
6768

68-
self::$client->request(
69-
'POST',
70-
$payload['logEndpoint'],
71-
array(),
72-
array(),
73-
array('CONTENT_TYPE' => 'application/json'),
74-
json_encode(array(
75-
'hash' => $payload['logHash'],
76-
'version' => $payload['version'],
77-
'categories' => array('analytics', 'analytics', 'unknown'),
78-
))
79-
);
80-
81-
$response = json_decode(self::$client->getResponse()->getContent(), true);
8269
$this->assertSame(200, self::$client->getResponse()->getStatus());
8370
$this->assertSame(array('necessary', 'analytics'), $response['categories']);
8471
$this->assertSame($payload['version'], $response['version']);
@@ -97,22 +84,9 @@ public function test_log_endpoint_persists_valid_authenticated_submission()
9784
$this->create_user('consentuser');
9885
$this->login('consentuser');
9986

100-
$payload = $this->extract_payload(self::request('GET', 'index.php') ? self::get_content() : '');
101-
102-
self::$client->request(
103-
'POST',
104-
$payload['logEndpoint'],
105-
array(),
106-
array(),
107-
array('CONTENT_TYPE' => 'application/json'),
108-
json_encode(array(
109-
'hash' => $payload['logHash'],
110-
'version' => $payload['version'],
111-
'categories' => array('analytics', 'analytics', 'unknown'),
112-
))
113-
);
87+
$payload = $this->fetch_frontend_payload();
88+
$response = $this->post_log_request($payload, array('analytics', 'analytics', 'unknown'));
11489

115-
$response = json_decode(self::$client->getResponse()->getContent(), true);
11690
$this->assertSame(200, self::$client->getResponse()->getStatus());
11791
$this->assertSame(array('necessary', 'analytics'), $response['categories']);
11892
$this->assertSame($payload['version'], $response['version']);
@@ -130,8 +104,20 @@ public function test_log_endpoint_persists_valid_authenticated_submission()
130104

131105
public function test_log_endpoint_rejects_stale_version()
132106
{
133-
$payload = $this->extract_payload(self::request('GET', 'index.php') ? self::get_content() : '');
107+
$payload = $this->fetch_frontend_payload();
108+
$response = $this->post_log_request($payload, array('analytics'), $payload['version'] + 1);
109+
110+
$this->assertSame(409, self::$client->getResponse()->getStatus());
111+
$this->assertSame('version_mismatch', $response['error']);
112+
}
113+
114+
protected function fetch_frontend_payload()
115+
{
116+
return $this->extract_payload(self::request('GET', 'index.php') ? self::get_content() : '');
117+
}
134118

119+
protected function post_log_request(array $payload, array $categories, $version = null)
120+
{
135121
self::$client->request(
136122
'POST',
137123
$payload['logEndpoint'],
@@ -140,14 +126,12 @@ public function test_log_endpoint_rejects_stale_version()
140126
array('CONTENT_TYPE' => 'application/json'),
141127
json_encode(array(
142128
'hash' => $payload['logHash'],
143-
'version' => $payload['version'] + 1,
144-
'categories' => array('analytics'),
129+
'version' => $version ?? $payload['version'],
130+
'categories' => $categories,
145131
))
146132
);
147133

148-
$response = json_decode(self::$client->getResponse()->getContent(), true);
149-
$this->assertSame(409, self::$client->getResponse()->getStatus());
150-
$this->assertSame('version_mismatch', $response['error']);
134+
return json_decode(self::$client->getResponse()->getContent(), true);
151135
}
152136

153137
protected function extract_payload($content)

0 commit comments

Comments
 (0)