Skip to content
Open
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
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