Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 28 additions & 19 deletions tests/controller/log_controller_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,30 @@

class log_controller_test extends \phpbb_test_case
{
public function test_log_rejects_invalid_json_payload()
/** @var \phpbb\consentmanager\service\log_manager|\PHPUnit\Framework\MockObject\MockObject */
protected $log_manager;

/** @var \phpbb\consentmanager\service\consent_manager_interface|\PHPUnit\Framework\MockObject\MockObject */
protected $consent_manager;

/** @var \phpbb\consentmanager\controller\log_controller */
protected $controller;

protected function setUp(): void
{
$controller = new \phpbb\consentmanager\controller\log_controller(
$this->createMock('\phpbb\consentmanager\service\log_manager'),
$this->createMock('\phpbb\consentmanager\service\consent_manager_interface')
parent::setUp();

$this->log_manager = $this->createMock('\phpbb\consentmanager\service\log_manager');
$this->consent_manager = $this->createMock('\phpbb\consentmanager\service\consent_manager_interface');
$this->controller = new \phpbb\consentmanager\controller\log_controller(
$this->log_manager,
$this->consent_manager
);
}

$response = $controller->log(\Symfony\Component\HttpFoundation\Request::create(
public function test_log_rejects_invalid_json_payload()
{
$response = $this->controller->log(\Symfony\Component\HttpFoundation\Request::create(
'/consent/log',
'POST',
array(),
Expand All @@ -41,21 +57,18 @@ public function test_log_rejects_invalid_json_payload()
*/
public function test_log_returns_service_validation_failure($submission_error, $expected_status)
{
$log_manager = $this->createMock('\phpbb\consentmanager\service\log_manager');
$log_manager->expects(self::never())
$this->log_manager->expects(self::never())
->method('log_consent');

$consent_manager = $this->createMock('\phpbb\consentmanager\service\consent_manager_interface');
$consent_manager->expects(self::once())
$this->consent_manager->expects(self::once())
->method('validate_log_payload')
->with(array('hash' => 'bad'))
->willReturn(array(
'success' => false,
'error' => $submission_error,
));

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

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

public function test_log_persists_valid_submission()
{
$arguments = [['necessary', 'analytics'], 5];
$log_manager = $this->createMock('\phpbb\consentmanager\service\log_manager');
$log_manager->expects(self::once())
$this->log_manager->expects(self::once())
->method('log_consent')
->with(...$arguments);
->with(['necessary', 'analytics'], 5);

$consent_manager = $this->createMock('\phpbb\consentmanager\service\consent_manager_interface');
$consent_manager->expects(self::once())
$this->consent_manager->expects(self::once())
->method('validate_log_payload')
->willReturn(array(
'success' => true,
'categories' => array('necessary', 'analytics'),
'version' => 5,
));

$controller = new \phpbb\consentmanager\controller\log_controller($log_manager, $consent_manager);
$response = $controller->log(new \Symfony\Component\HttpFoundation\Request(array(), array(), array(), array(), array(), array(), json_encode(array(
$response = $this->controller->log(new \Symfony\Component\HttpFoundation\Request(array(), array(), array(), array(), array(), array(), json_encode(array(
'hash' => 'good',
'version' => 5,
'categories' => array('analytics'),
Expand Down
63 changes: 24 additions & 39 deletions tests/event/listener_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,20 @@

class listener_test extends \phpbb_test_case
{
/** @var \phpbb\language\language */
/** @var \phpbb\language\language|\PHPUnit\Framework\MockObject\MockObject */
protected $language;

/** @var \phpbb\consentmanager\service\media_manager|\PHPUnit\Framework\MockObject\MockObject */
protected $media_manager;

protected function setUp(): void
{
parent::setUp();

global $user;

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

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

protected function create_listener($helper = null, $consent_manager = null, $template = null, $media_manager = null)
{
return new \phpbb\consentmanager\event\listener(
$helper ?? $this->createMock('\phpbb\controller\helper'),
$this->language,
$consent_manager ?? $this->createMock('\phpbb\consentmanager\service\consent_manager_interface'),
$template ?? $this->createMock('\phpbb\template\template'),
$media_manager ?? $this->media_manager
);
}

public function test_get_subscribed_events()
{
self::assertSame([
Expand All @@ -43,22 +58,11 @@ public function test_configure_iframe_embeds_delegates_to_media_manager()
{
$configurator = new \s9e\TextFormatter\Configurator();

$args = [$configurator];

$media_manager = $this->createMock('\phpbb\consentmanager\service\media_manager');
$media_manager->expects(self::once())
$this->media_manager->expects(self::once())
->method('configure_iframe_embeds')
->with(...$args);

$listener = new \phpbb\consentmanager\event\listener(
$this->createMock('\phpbb\controller\helper'),
$this->language,
$this->createMock('\phpbb\consentmanager\service\consent_manager_interface'),
$this->createMock('\phpbb\template\template'),
$media_manager
);
->with($configurator);

$listener->configure_iframe_embeds(new \phpbb\event\data([
$this->create_listener()->configure_iframe_embeds(new \phpbb\event\data([
'configurator' => $configurator,
]));
}
Expand All @@ -69,22 +73,11 @@ public function test_configure_iframe_renderer_delegates_to_media_manager()
->disableOriginalConstructor()
->getMock();

$args = [$renderer];

$media_manager = $this->createMock('\phpbb\consentmanager\service\media_manager');
$media_manager->expects(self::once())
$this->media_manager->expects(self::once())
->method('configure_iframe_renderer')
->with(...$args);

$listener = new \phpbb\consentmanager\event\listener(
$this->createMock('\phpbb\controller\helper'),
$this->language,
$this->createMock('\phpbb\consentmanager\service\consent_manager_interface'),
$this->createMock('\phpbb\template\template'),
$media_manager
);
->with($renderer);

$listener->configure_iframe_renderer(new \phpbb\event\data([
$this->create_listener()->configure_iframe_renderer(new \phpbb\event\data([
'renderer' => $renderer,
]));
}
Expand Down Expand Up @@ -171,7 +164,7 @@ public function test_inject_frontend_assigns_template_payload($invoke)
]]
);

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

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

$listener = new \phpbb\consentmanager\event\listener(
$helper,
$this->language,
$consent_manager,
$template,
$this->createMock('\phpbb\consentmanager\service\media_manager')
);

$listener->inject_frontend();
$this->create_listener($helper, $consent_manager, $template)->inject_frontend();
}
}
58 changes: 21 additions & 37 deletions tests/functional/frontend_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public function test_frontend_markup_is_injected_on_board_pages()

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

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

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

self::$client->request(
'POST',
$payload['logEndpoint'],
array(),
array(),
array('CONTENT_TYPE' => 'application/json'),
json_encode(array(
'hash' => $payload['logHash'],
'version' => $payload['version'],
'categories' => array('analytics', 'analytics', 'unknown'),
))
);

$response = json_decode(self::$client->getResponse()->getContent(), true);
$this->assertSame(200, self::$client->getResponse()->getStatus());
$this->assertSame(array('necessary', 'analytics'), $response['categories']);
$this->assertSame($payload['version'], $response['version']);
Expand All @@ -97,22 +84,9 @@ public function test_log_endpoint_persists_valid_authenticated_submission()
$this->create_user('consentuser');
$this->login('consentuser');

$payload = $this->extract_payload(self::request('GET', 'index.php') ? self::get_content() : '');

self::$client->request(
'POST',
$payload['logEndpoint'],
array(),
array(),
array('CONTENT_TYPE' => 'application/json'),
json_encode(array(
'hash' => $payload['logHash'],
'version' => $payload['version'],
'categories' => array('analytics', 'analytics', 'unknown'),
))
);
$payload = $this->fetch_frontend_payload();
$response = $this->post_log_request($payload, array('analytics', 'analytics', 'unknown'));

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

public function test_log_endpoint_rejects_stale_version()
{
$payload = $this->extract_payload(self::request('GET', 'index.php') ? self::get_content() : '');
$payload = $this->fetch_frontend_payload();
$response = $this->post_log_request($payload, array('analytics'), $payload['version'] + 1);

$this->assertSame(409, self::$client->getResponse()->getStatus());
$this->assertSame('version_mismatch', $response['error']);
}

protected function fetch_frontend_payload()
{
return $this->extract_payload(self::request('GET', 'index.php') ? self::get_content() : '');
}

protected function post_log_request(array $payload, array $categories, $version = null)
{
self::$client->request(
'POST',
$payload['logEndpoint'],
Expand All @@ -140,14 +126,12 @@ public function test_log_endpoint_rejects_stale_version()
array('CONTENT_TYPE' => 'application/json'),
json_encode(array(
'hash' => $payload['logHash'],
'version' => $payload['version'] + 1,
'categories' => array('analytics'),
'version' => $version ?? $payload['version'],
'categories' => $categories,
))
);

$response = json_decode(self::$client->getResponse()->getContent(), true);
$this->assertSame(409, self::$client->getResponse()->getStatus());
$this->assertSame('version_mismatch', $response['error']);
return json_decode(self::$client->getResponse()->getContent(), true);
}

protected function extract_payload($content)
Expand Down
Loading
Loading