CI / Tests (PHP 8.1) (pull_request) Failing after 47s
CI / Coding Standards (pull_request) Successful in 3m10s
CI / No Debug Code (pull_request) Successful in 2s
CI / Tests (PHP 8.2) (pull_request) Failing after 52s
CI / PHPStan (pull_request) Successful in 2m59s
CI / Tests (PHP 8.3) (pull_request) Failing after 2m40s
CI / Build Plugin Zip (pull_request) Skipped
The block reports who is signed in and nothing more. Dropping the "Booking for …" line takes GuardianService with it — it was the only reason the page had a dependency at all, so AccountPage now constructs with no arguments. Co-Authored-By: Claude Opus 5 <[email protected]>
118 lines
3.8 KiB
PHP
118 lines
3.8 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace Unsupervised\Schedular\Tests\Unit\Auth;
|
|
|
|
use Brain\Monkey\Functions;
|
|
use Mockery;
|
|
use Unsupervised\Schedular\Auth\AccountPage;
|
|
use Unsupervised\Schedular\Tests\Unit\TestCase;
|
|
|
|
class AccountPageTest extends TestCase
|
|
{
|
|
private AccountPage $page;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->page = new AccountPage();
|
|
|
|
Functions\when('is_user_logged_in')->justReturn(true);
|
|
Functions\when('get_current_user_id')->justReturn(5);
|
|
Functions\when('wp_enqueue_style')->justReturn(null);
|
|
Functions\when('get_permalink')->alias(
|
|
static fn (int $id = 0): string => $id > 0
|
|
? 'https://studio.test/sign-in/'
|
|
: 'https://studio.test/current/'
|
|
);
|
|
Functions\when('wp_logout_url')->alias(
|
|
static fn (string $redirect): string => 'https://studio.test/wp-login.php?action=logout&redirect_to=' . rawurlencode($redirect)
|
|
);
|
|
Functions\when('wp_get_current_user')->justReturn($this->user('Grace', 'Hopper', '[email protected]'));
|
|
}
|
|
|
|
private function user(string $first, string $last, string $email): \WP_User
|
|
{
|
|
$user = Mockery::mock(\WP_User::class);
|
|
$user->ID = 5;
|
|
$user->first_name = $first;
|
|
$user->last_name = $last;
|
|
$user->nickname = '';
|
|
$user->user_email = $email;
|
|
|
|
return $user;
|
|
}
|
|
|
|
public function testShowsTheSignedInNameAndEmail(): void
|
|
{
|
|
$html = $this->page->render([]);
|
|
|
|
self::assertStringContainsString('Grace Hopper', $html);
|
|
self::assertStringContainsString('[email protected]', $html);
|
|
self::assertStringContainsString('Sign out', $html);
|
|
}
|
|
|
|
public function testSigningOutReturnsToTheConfiguredLoginPage(): void
|
|
{
|
|
self::assertStringContainsString(
|
|
rawurlencode('https://studio.test/sign-in/'),
|
|
$this->page->render(['loginPageId' => 9])
|
|
);
|
|
}
|
|
|
|
/**
|
|
* With no page chosen, signing out from a header link should leave the
|
|
* visitor where they were rather than navigating them somewhere.
|
|
*/
|
|
public function testSigningOutReturnsToTheCurrentPageWhenNoLoginPageIsSet(): void
|
|
{
|
|
self::assertStringContainsString(
|
|
rawurlencode('https://studio.test/current/'),
|
|
$this->page->render([])
|
|
);
|
|
}
|
|
|
|
public function testTheShortcodeAttributeNameIsAccepted(): void
|
|
{
|
|
self::assertStringContainsString(
|
|
rawurlencode('https://studio.test/sign-in/'),
|
|
$this->page->render(['login_page_id' => 9])
|
|
);
|
|
}
|
|
|
|
/**
|
|
* A block whose whole job is "you are signed in as X" has nothing to say to
|
|
* a stranger, and a bare notice in a site header cannot be acted on.
|
|
*/
|
|
public function testRendersNothingForASignedOutVisitorWithNoLoginPage(): void
|
|
{
|
|
Functions\when('is_user_logged_in')->justReturn(false);
|
|
|
|
self::assertSame('', $this->page->render([]));
|
|
}
|
|
|
|
public function testOffersASignInLinkToASignedOutVisitorWhenAPageIsChosen(): void
|
|
{
|
|
Functions\when('is_user_logged_in')->justReturn(false);
|
|
|
|
$html = $this->page->render(['loginPageId' => 9]);
|
|
|
|
self::assertStringContainsString('https://studio.test/sign-in/', $html);
|
|
self::assertStringContainsString('Sign in', $html);
|
|
self::assertStringNotContainsString('Sign out', $html);
|
|
}
|
|
|
|
/**
|
|
* A page can be deleted after it has been chosen in the block, which
|
|
* get_permalink() reports as false.
|
|
*/
|
|
public function testTreatsADeletedLoginPageAsNoneChosen(): void
|
|
{
|
|
Functions\when('is_user_logged_in')->justReturn(false);
|
|
Functions\when('get_permalink')->justReturn(false);
|
|
|
|
self::assertSame('', $this->page->render(['loginPageId' => 9]));
|
|
}
|
|
}
|