. */ declare(strict_types=1); namespace SP\Tests\Modules\Web\Controllers\Account; use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\MockObject\Exception; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; use SP\Domain\Account\Models\AccountView; use SP\Domain\Core\Exceptions\InvalidClassException; use SP\Domain\User\Models\ProfileData; use SP\Infrastructure\Database\QueryData; use SP\Infrastructure\Database\QueryResult; use SP\Infrastructure\File\FileException; use SP\Mvc\View\OutputHandlerInterface; use SP\Tests\Generators\AccountDataGenerator; use SP\Tests\IntegrationTestCase; use Symfony\Component\DomCrawler\Crawler; /** * Class DeleteControllerTest */ #[Group('integration')] class DeleteControllerTest extends IntegrationTestCase { /** * @throws NotFoundExceptionInterface * @throws Exception * @throws FileException * @throws InvalidClassException * @throws ContainerExceptionInterface */ public function testDeleteAction() { $definitions = $this->getModuleDefinitions(); $definitions[OutputHandlerInterface::class] = $this->setupOutputHandler( static function (string $output) { $crawler = new Crawler($output); $filter = $crawler->filterXPath( '//div[@class="data-container"]//form[@name="frmaccount" and @data-action-route="account/saveDelete"]|//div[@class="item-actions"]//button' )->extract(['id']); return !empty($output) && count($filter) === 2; } ); $container = $this->buildContainer( $definitions, $this->buildRequest('get', 'index.php', ['r' => 'account/delete']) ); $this->runApp($container); } protected function getUserProfile(): ProfileData { return new ProfileData(['accDelete' => true]); } protected function getDatabaseReturn(): callable { return function (QueryData $queryData): QueryResult { if ($queryData->getMapClassName() === AccountView::class) { return new QueryResult([AccountDataGenerator::factory()->buildAccountDataView()]); } return new QueryResult(); }; } }