Skip to content

Commit

Permalink
feat: Allow to use Psr\Container\ContainerInterface in ->use call…
Browse files Browse the repository at this point in the history
…back (#129)
  • Loading branch information
norkunas committed Jul 13, 2023
1 parent 48bb602 commit 2e738a6
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 1 deletion.
2 changes: 1 addition & 1 deletion phpstan-baseline.neon
Expand Up @@ -56,7 +56,7 @@ parameters:
path: src/Browser/Assertion/SameUrlAssertion.php

-
message: "#^Cannot call method getToken\\(\\) on object\\|null\\.$#"
message: "#^Call to an undefined method object\\:\\:getToken\\(\\)\\.$#"
count: 1
path: src/Browser/KernelBrowser.php

Expand Down
2 changes: 2 additions & 0 deletions src/Browser.php
Expand Up @@ -12,6 +12,7 @@
namespace Zenstruck;

use Behat\Mink\Element\NodeElement;
use Psr\Container\ContainerInterface;
use Symfony\Component\BrowserKit\AbstractBrowser;
use Symfony\Component\BrowserKit\CookieJar;
use Symfony\Component\DomCrawler\Crawler;
Expand Down Expand Up @@ -494,6 +495,7 @@ protected function useParameters(): array
Parameter::typed(Crawler::class, Parameter::factory(fn() => $this->client()->getCrawler())),
Parameter::typed(CookieJar::class, Parameter::factory(fn() => $this->client()->getCookieJar())),
Parameter::typed(AbstractBrowser::class, Parameter::factory(fn() => $this->client())),
Parameter::typed(ContainerInterface::class, Parameter::factory(fn() => method_exists($this->client(), 'getContainer') ? $this->client()->getContainer() : null))->optional(),
];
}
}
16 changes: 16 additions & 0 deletions tests/KernelBrowserTests.php
Expand Up @@ -12,6 +12,7 @@
namespace Zenstruck\Browser\Tests;

use PHPUnit\Framework\AssertionFailedError;
use Psr\Container\ContainerInterface;
use Symfony\Component\HttpKernel\DataCollector\RequestDataCollector;
use Zenstruck\Assert;
use Zenstruck\Browser\HttpOptions;
Expand Down Expand Up @@ -39,6 +40,21 @@ public function can_use_kernel_browser_as_typehint(): void
;
}

/**
* @test
*/
public function can_use_container_as_typehint(): void
{
$browser = $this->browser();
$c=$browser->client()->getContainer();

$browser
->use(function(ContainerInterface $container) use ($c) {
$this->assertSame($c, $container);
})
;
}

/**
* @test
*/
Expand Down

0 comments on commit 2e738a6

Please sign in to comment.