Skip to content
2 changes: 2 additions & 0 deletions src/Contracts/WindowManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,6 @@ public function current(): Window;
public function all(): array;

public function get(string $id): Window;

public function reload($id = null): void;
}
65 changes: 57 additions & 8 deletions src/Fakes/WindowManagerFake.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ class WindowManagerFake implements WindowManagerContract

public array $shown = [];

public array $reloaded = [];

public array $forcedWindowReturnValues = [];

public function __construct(
Expand Down Expand Up @@ -74,6 +76,11 @@ public function show($id = null)
$this->shown[] = $id;
}

public function reload($id = null): void
{
$this->reloaded[] = $id;
}

public function current(): Window
{
$this->ensureForceReturnWindowsProvided();
Expand Down Expand Up @@ -104,9 +111,9 @@ public function get(string $id): Window
}

/**
* @param string|Closure(string): bool $id
* @param null|string|Closure(string): bool $id
*/
public function assertOpened(string|Closure $id): void
public function assertOpened(null|string|Closure $id = null): void
{
if (is_callable($id) === false) {
PHPUnit::assertContains($id, $this->opened);
Expand All @@ -125,9 +132,9 @@ public function assertOpened(string|Closure $id): void
}

/**
* @param string|Closure(string): bool $id
* @param null|string|Closure(string): bool $id
*/
public function assertClosed(string|Closure $id): void
public function assertClosed(null|string|Closure $id = null): void
{
if (is_callable($id) === false) {
PHPUnit::assertContains($id, $this->closed);
Expand All @@ -146,9 +153,9 @@ public function assertClosed(string|Closure $id): void
}

/**
* @param string|Closure(string): bool $id
* @param null|string|Closure(string): bool $id
*/
public function assertHidden(string|Closure $id): void
public function assertHidden(null|string|Closure $id = null): void
{
if (is_callable($id) === false) {
PHPUnit::assertContains($id, $this->hidden);
Expand All @@ -167,9 +174,9 @@ public function assertHidden(string|Closure $id): void
}

/**
* @param string|Closure(string): bool $id
* @param null|string|Closure(string): bool $id
*/
public function assertShown(string|Closure $id): void
public function assertShown(null|string|Closure $id = null): void
{
if (is_callable($id) === false) {
PHPUnit::assertContains($id, $this->shown);
Expand All @@ -187,6 +194,48 @@ public function assertShown(string|Closure $id): void
PHPUnit::assertTrue($hit);
}

/**
* @param null|string|Closure(string): bool $id
*/
public function assertReloaded(null|string|Closure $id = null): void
{
if (is_callable($id) === false) {
PHPUnit::assertContains($id, $this->reloaded);

return;
}

$hit = empty(
array_filter(
$this->reloaded,
fn (mixed $reloadedId) => $id($reloadedId) === true
)
) === false;

PHPUnit::assertTrue($hit);
}

/**
* @param null|string|Closure(string): bool $id
*/
public function assertNotReloaded(null|string|Closure $id = null): void
{
if (is_callable($id) === false) {
PHPUnit::assertNotContains($id, $this->reloaded);

return;
}

$hit = empty(
array_filter(
$this->reloaded,
fn (mixed $reloadedId) => $id($reloadedId) === true
)
) === true;

PHPUnit::assertTrue($hit);
}

public function assertOpenedCount(int $expected): void
{
PHPUnit::assertCount($expected, $this->opened);
Expand Down
35 changes: 35 additions & 0 deletions tests/Fakes/FakeWindowManagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,41 @@
$this->fail('Expected assertion to fail');
});

it('asserts that a window was reloaded', function () {
swap(WindowManagerContract::class, $fake = app(WindowManagerFake::class));

app(WindowManagerContract::class)->reload('main');
app(WindowManagerContract::class)->reload('secondary');

$fake->assertReloaded('main');
$fake->assertReloaded('secondary');

try {
$fake->assertReloaded('tertiary');
} catch (AssertionFailedError) {
return;
}

$this->fail('Expected assertion to fail');
});

it('asserts that a window was\'t reloaded', function () {
swap(WindowManagerContract::class, $fake = app(WindowManagerFake::class));

app(WindowManagerContract::class)->reload('main');
app(WindowManagerContract::class)->reload('secondary');

$fake->assertNotReloaded('tertiary');

try {
$fake->assertNotReloaded('main');
} catch (AssertionFailedError) {
return;
}

$this->fail('Expected assertion to fail');
});

it('asserts opened count', function () {
Http::fake(['*' => Http::response(status: 200)]);

Expand Down
Loading