mirror of
https://framagit.org/hubzilla/core.git
synced 2026-06-21 00:52:33 -04:00
To ensure tests don't step on each others toes, make sure we back up the static properties of the global App class before running tests that modify any of these properties.
179 lines
4.8 KiB
PHP
179 lines
4.8 KiB
PHP
<?php
|
|
/*
|
|
* SPDX-FileCopyrightText: 2024 Hubzilla Community
|
|
* SPDX-FileContributor: Harald Eilertsen
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
namespace Zotlabs\Tests\Unit\Module;
|
|
|
|
use App;
|
|
use PHPUnit\Framework\Attributes\BackupStaticProperties;
|
|
use PHPUnit\Framework\Attributes\Before;
|
|
|
|
class AdminAccountsTest extends TestCase {
|
|
|
|
protected $stub_check_security;
|
|
protected $stub_is_site_admin;
|
|
protected $stub_goaway;
|
|
protected $stub_notice;
|
|
|
|
protected array $notice;
|
|
|
|
/**
|
|
* Set up the stubs common for the tests.
|
|
*/
|
|
#[Before]
|
|
public function setup_stubs(): void {
|
|
$this->stub_check_form_security();
|
|
$this->stub_is_site_admin();
|
|
$this->stub_goaway();
|
|
$this->stub_notice();
|
|
}
|
|
|
|
public function test_blocking_accounts_marks_selected_accounts_as_blocked(): void {
|
|
$params = [
|
|
'user' => [ 42 ],
|
|
'blocked' => [ false ],
|
|
'page_accounts_block' => true,
|
|
];
|
|
|
|
try {
|
|
$this->post('admin/accounts', [], $params);
|
|
} catch (RedirectException $redirect) {
|
|
$this->assertEquals(z_root() . '/admin/accounts', $redirect->getMessage());
|
|
}
|
|
|
|
$account = get_account_by_id(42);
|
|
$this->assertEquals(ACCOUNT_BLOCKED, $account['account_flags'] & ACCOUNT_BLOCKED);
|
|
|
|
$this->assertEquals('1 account blocked/unblocked', $this->notice[0]);
|
|
}
|
|
|
|
public function test_unblocking_accounts_clears_the_blocked_flag(): void {
|
|
// Pass two users to the module, one that is not blocked,
|
|
// and one that is.
|
|
$params = [
|
|
'user' => [ 42, 44 ],
|
|
'blocked' => [ false, true ],
|
|
'page_accounts_block' => true,
|
|
];
|
|
|
|
try {
|
|
$this->post('admin/accounts', [], $params);
|
|
} catch (RedirectException $redirect) {
|
|
$this->assertEquals(z_root() . '/admin/accounts', $redirect->getMessage());
|
|
}
|
|
|
|
// We expect the previously unblocked account to be blocked.
|
|
$account = get_account_by_id(42);
|
|
$this->assertEquals(ACCOUNT_BLOCKED, $account['account_flags'] & ACCOUNT_BLOCKED);
|
|
|
|
// We expect the previously blocked account to be unblocked.
|
|
$blocked_account = get_account_by_id(44);
|
|
$this->assertEquals(0, $blocked_account['account_flags'] & ACCOUNT_BLOCKED);
|
|
|
|
$this->assertEquals('2 accounts blocked/unblocked', $this->notice[0]);
|
|
}
|
|
|
|
#[BackupStaticProperties(App::class)]
|
|
public function test_deleting_accounts_remove_them_from_db(): void {
|
|
$params = [
|
|
'user' => [ 42, 44 ],
|
|
'page_accounts_delete' => true,
|
|
];
|
|
|
|
App::$account = $this->fixtures['account'][0];
|
|
|
|
try {
|
|
$this->post('admin/accounts', [], $params);
|
|
} catch (RedirectException $redirect) {
|
|
$this->assertEquals(z_root() . '/admin/accounts', $redirect->getMessage());
|
|
}
|
|
|
|
$this->assertEquals(null, get_account_by_id(42));
|
|
$this->assertEquals(null, get_account_by_id(44));
|
|
}
|
|
|
|
public function test_approving_pending_accounts_clears_pending_flag(): void {
|
|
|
|
// Catch calls to the php mail function
|
|
//
|
|
// This is just to get it out of the way, we don't care about
|
|
// how many times it's called, or with what args here.
|
|
$this->getFunctionMock('Zotlabs\Lib', 'mail')
|
|
->expects($this->any())
|
|
->willReturn(true);
|
|
|
|
$params = [
|
|
'pending' => [
|
|
$this->fixtures['register'][0]['reg_hash'],
|
|
$this->fixtures['register'][1]['reg_hash']
|
|
],
|
|
'page_accounts_approve' => true,
|
|
];
|
|
|
|
try {
|
|
$this->post('admin/accounts', [], $params);
|
|
} catch (RedirectException $redirect) {
|
|
$this->assertEquals(z_root() . '/admin/accounts', $redirect->getMessage());
|
|
}
|
|
|
|
foreach ([45, 46] as $id) {
|
|
$account = get_account_by_id($id);
|
|
$this->assertEquals(0, $account['account_flags'] & ACCOUNT_PENDING);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Stub the check_form_security_token_ForbiddenOnErr.
|
|
*/
|
|
protected function stub_check_form_security(): void {
|
|
$this->stub_check_security =
|
|
$this->getFunctionMock('Zotlabs\Module\Admin', 'check_form_security_token_redirectOnErr')
|
|
->expects($this->once())
|
|
->with(
|
|
$this->identicalTo('/admin/accounts'),
|
|
$this->identicalTo('admin_accounts'))
|
|
->willReturn(true);
|
|
}
|
|
|
|
/**
|
|
* Stub the call to is_site_admin in the Admin main module.
|
|
*/
|
|
protected function stub_is_site_admin(): void {
|
|
$this->stub_is_site_admin =
|
|
$this->getFunctionMock('Zotlabs\Module', 'is_site_admin')
|
|
->expects($this->once())
|
|
->willReturn(true);
|
|
}
|
|
|
|
/**
|
|
* Stub the goaway function.
|
|
*
|
|
* Will throw an RedirectException with the URL being redirected to
|
|
* as the exception message.
|
|
*
|
|
* @throws RedirectException
|
|
*/
|
|
protected function stub_goaway(): void {
|
|
$this->stub_goaway =
|
|
$this->getFunctionMock('Zotlabs\Module\Admin', 'goaway')
|
|
->expects($this->once())
|
|
->willReturnCallback(function (string $uri) {
|
|
throw new RedirectException($uri);
|
|
});
|
|
}
|
|
|
|
protected function stub_notice(): void {
|
|
$this->notice = [];
|
|
$this->stub_notice =
|
|
$this->getFunctionMock('Zotlabs\Module\Admin', 'notice')
|
|
->expects($this->any())
|
|
->willReturnCallback(function (string $arg) {
|
|
$this->notice[] = $arg;
|
|
});
|
|
}
|
|
}
|